問題タブ [vmalloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - kmalloc() と vmalloc() は 32 ビット システムと 64 ビット システムでどのように使用されますか?
アーキテクチャ: X86、Linux
kmalloc()
とに関連するいくつかのスレッドを調べvmalloc()
ましたが、それらの基本的な違いは知っていますが、まだいくつか疑問があります。基本を理解するためにあなたの助けが必要です。
そのため、32 ビット システムでは、仮想アドレス空間がユーザーとカーネルに分割されていることがわかっています。上位の 1GB メモリ アドレスはカーネルに割り当てられ、下位の 3GB はユーザー空間に割り当てられます。
私がここで間違っていることを訂正してください:
したがって、1GB のうち 896MB はカーネル論理アドレスに 1:1 で (物理的に隣接して) マップされ、128MB は上位メモリ アドレスにアクセスするために使用されます
vmalloc()
。(2GBのRAMがあるとしましょう)ポイント 1 で物理 RAM が 1GB しかない場合はどうなるでしょうか。896MB は、カーネルの論理アドレスと kmalloc() によって達成される物理アドレスの間の 1:1 マッピングです。では、128MB は何に使用されるのでしょうか。なぜ
vmalloc()
これ以上必要なのですか? したがって、カーネル論理アドレスを介して完全にアクセスできる 1GB の RAM がある場合、それは、スレッド/プロセスによって要求されたメモリ量が物理的に連続したアドレスに割り当てられる場合にのみ可能であることを意味します。また、使用可能な物理連続メモリがない場合、割り当てられたメモリは物理的に連続していないためvmalloc()
、128MB のスペースにマップし、そこからアクセスするために使用する必要がありますか?64 ビット システムを使用するとどうなりますか?
kmalloc()
との両方vmalloc()
が膨大な量のアドレス空間を持つことができ、RAM 全体にアクセスできるというのは本当ですか?
memory-management - 「スラブ キャッシュ アロケータ (つまり、kmem_cache_create または kmem_cache_create_usercopy) を使用して、多数の同一オブジェクトを割り当てることができる」ことを理解する方法は?
ドキュメント(https://www.kernel.org/doc/html/latest/core-api/memory-allocation.html)によると、[私のものを強調]:
多くの同一のオブジェクトを割り当てる必要がある場合は、スラブ キャッシュ アロケータを使用できます。キャッシュは、使用する前に kmem_cache_create() または kmem_cache_create_usercopy() で設定する必要があります。2 番目の関数は、キャッシュの一部がユーザー空間にコピーされる可能性がある場合に使用する必要があります。キャッシュが作成された後、 kmem_cache_alloc() とその便利なラッパーがそのキャッシュからメモリを割り当てることができます。
「多数の同一オブジェクトを割り当てる」とはどういう意味ですか? kmalloc
このような状況で、kvmalloc
、vmalloc
などを使用できないのはなぜですか?