ユーザー空間プログラムがmalloc()を維持すると、最終的にOOMキラーが発生する可能性があることを知っています。しかし、カーネル空間はどうですか?カーネル空間にメモリが足りなくなった場合、OOM Killerが起動してメモリを解放しますか?ありがとう
答え1
デフォルトでは、Linuxではカーネル割り当てとユーザー空間割り当ての間に大きな違いがあります(OOMキラーが要因であるたびに適用されます)。カーネルメモリ割り当て機能はアドレス空間を割り当てる。そして割り当て関数が返されると、呼び出し側は物理ページを使用して返された有効なポインタがすぐに利用可能であることを知ることができます。メモリ割り当てはユーザー空間からアドレス空間を割り当て、デフォルトで必要な場合にのみページを割り当てます(この時点ではOOMキラーが機能します)。
つまり、カーネルメモリの割り当ては絶対オーバーコミットを許可されません。
カーネルメモリ割り当ては、最終的にOOMキラーをトリガーして、ユーザースペースに割り当てられたページを解放できます。これに関する条件はさまざまです。 I / Oが不可能な場合やファイルシステムを再入力できない場合などに割り当てることができます。よりGFPフラグ文書もっと学ぶ。カーネル割り当て、キャッシュなどに使用できる他のリサイクルメカニズムがあります。カーネルにメモリが不足している場合は、一部のメモリを回復するためにそのメモリを空にすることができます。