4

私が理解している限り、GFP_USER( への呼び出しでkmalloc) フラグでの使用は、ユーザー空間にメモリを割り当てるために使用されます。割り当てられたページは、ユーザーがアクセスできるカーネル空間にあるということですか? これらのページmmappをユーザー空間に配置する必要があるか、ユーザーがアドレスに直接アクセスできるか。必要がある場合、とmmappの違いは何ですか?GFP_USERGFP_KERNEL

4

1 に答える 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 に答える