私が理解している限り、GFP_USER
( への呼び出しでkmalloc
) フラグでの使用は、ユーザー空間にメモリを割り当てるために使用されます。割り当てられたページは、ユーザーがアクセスできるカーネル空間にあるということですか? これらのページmmapp
をユーザー空間に配置する必要があるか、ユーザーがアドレスに直接アクセスできるか。必要がある場合、とmmapp
の違いは何ですか?GFP_USER
GFP_KERNEL
質問する
3759 次
1 に答える
5
簡単な説明は、カーネルソースにあります。
GFP_KERNEL
カーネル内部の割り当てでは一般的です。呼び出し元は、直接アクセスするために ZONE_NORMAL または下位のゾーンを必要としますが、直接再利用できます。
GFP_USER
カーネルまたはハードウェアから直接アクセスできる必要があるユーザー空間の割り当て用です。これは通常、ハードウェアがまだ DMA を使用する必要があるユーザー空間 (グラフィックスなど) にマップされるバッファー用にハードウェアによって使用されます。これらの割り当てには cpuset 制限が適用されます。
#define GFP_KERNEL (__GFP_RECLAIM | __GFP_IO | __GFP_FS)
#define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
ここから:
__GFP_HARDWALL は、cpusetメモリ割り当てポリシーを強制します。
于 2016-02-05T06:51:55.707 に答える