GFP_ATOMIC (kzalloc 内) はどのように睡眠を妨げますか?
こちらも発見
#define GFP_ATOMIC (__GFP_HIGH)
しかし、さらに理解していませんでした..?
GFP_ATOMIC (kzalloc 内) はどのように睡眠を妨げますか?
こちらも発見
#define GFP_ATOMIC (__GFP_HIGH)
しかし、さらに理解していませんでした..?
の代替GFP_ATOMIC
はGFP_KERNEL
:
#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)
です。
GFP_KERNEL
これは、睡眠__GFP_WAIT
が考慮されるさまざまな状況でテストされています。このフラグがなければ、睡眠はありません。
Linux カーネルでメモリを割り当てようとする場合は、kmalloc(size,flags) という名前の関数を使用して行うことができます。ただし、関数のフラグパラメーターは、基本的に、メモリの割り当て方法をカーネルに指示します。アクション修飾子、ゾーン修飾子、およびタイプとして、基本的にフラグの 3 つのゾーンがあります。
フラグをGFP_ATOMIC として指定すると、割り当ては優先度が高くなり、スリープしません。これは、割り込みハンドラー、下半分、およびスリープできないその他の状況で使用するフラグです。
&基本的に、スラブにメモリがある場合は事前に割り当てられたスラブ メモリからメモリ チャンクを取得するようにカーネルに指示し、それ以外の場合は割り当てに失敗します。
GFP_ATOMIC
メモリ割り当てコードに、割り当てを満たすためにスリープすることは許可されていないことを伝えることにより、スリープを防ぎます-それだけです。メモリ割り当てコードがスリープする必要があり、GFP_ATOMIC
渡された場合、代わりに呼び出し元にエラーが返されます。