3

GFP_ATOMIC (kzalloc 内) はどのように睡眠を妨げますか?

こちらも発見

#define GFP_ATOMIC (__GFP_HIGH)

しかし、さらに理解していませんでした..?

4

3 に答える 3

3

の代替GFP_ATOMICGFP_KERNEL:
#define GFP_KERNEL (__GFP_WAIT | __GFP_IO | __GFP_FS)です。

GFP_KERNELこれは、睡眠__GFP_WAITが考慮されるさまざまな状況でテストされています。このフラグがなければ、睡眠はありません。

于 2012-12-19T13:52:35.603 に答える
3

Linux カーネルでメモリを割り当てようとする場合は、kmalloc(size,flags) という名前の関数を使用して行うことができます。ただし、関数のフラグパラメーターは、基本的に、メモリの割り当て方法をカーネルに指示します。アクション修飾子、ゾーン修飾子、およびタイプとして、基本的にフラグの 3 つのゾーンがあります

フラグをGFP_ATOMIC として指定すると、割り当ては優先度が高くなり、スリープしません。これは、割り込みハンドラー、下半分、およびスリープできないその他の状況で使用するフラグです。

&基本的に、スラブにメモリがある場合は事前に割り当てられたスラブ メモリからメモリ チャンクを取得するようにカーネルに指示し、それ以外の場合は割り当てに失敗します

詳細についてはhttp://www.linuxjournal.com/article/6930

于 2012-12-20T10:34:29.257 に答える
2

GFP_ATOMICメモリ割り当てコードに、割り当てを満たすためにスリープすることは許可されていないことを伝えることにより、スリープを防ぎます-それだけです。メモリ割り当てコードがスリープする必要があり、GFP_ATOMIC渡された場合、代わりに呼び出し元にエラーが返されます。

于 2012-12-19T05:41:38.490 に答える