4

アーキテクチャ: X86、Linux

kmalloc()とに関連するいくつかのスレッドを調べvmalloc()ましたが、それらの基本的な違いは知っていますが、まだいくつか疑問があります。基本を理解するためにあなたの助けが必要です。

そのため、32 ビット システムでは、仮想アドレス空間がユーザーとカーネルに分割されていることがわかっています。上位の 1GB メモリ アドレスはカーネルに割り当てられ、下位の 3GB はユーザー空間に割り当てられます。

私がここで間違っていることを訂正してください:

  1. したがって、1GB のうち 896MB はカーネル論理アドレスに 1:1 で (物理的に隣接して) マップされ、128MB は上位メモリ アドレスにアクセスするために使用されますvmalloc()。(2GBのRAMがあるとしましょう)

  2. ポイント 1 で物理 RAM が 1GB しかない場合はどうなるでしょうか。896MB は、カーネルの論理アドレスと kmalloc() によって達成される物理アドレスの間の 1:1 マッピングです。では、128MB は何に使用されるのでしょうか。なぜvmalloc()これ以上必要なのですか? したがって、カーネル論理アドレスを介して完全にアクセスできる 1GB の RAM がある場合、それは、スレッド/プロセスによって要求されたメモリ量が物理的に連続したアドレスに割り当てられる場合にのみ可能であることを意味します。また、使用可能な物理連続メモリがない場合、割り当てられたメモリは物理的に連続していないためvmalloc()、128MB のスペースにマップし、そこからアクセスするために使用する必要がありますか?

  3. 64 ビット システムを使用するとどうなりますか? kmalloc()との両方vmalloc()が膨大な量のアドレス空間を持つことができ、RAM 全体にアクセスできるというのは本当ですか?

4

0 に答える 0