Linuxでは、高メモリと低メモリとは何ですか?

Linuxでは、高メモリと低メモリとは何ですか?

HighmemとLowmemの違いに興味があります。

  1. なぜそのような違いがありますか?
  2. このようにして、私たちは何を得ますか?
  3. それぞれの特徴は何ですか?

ベストアンサー1

32ビットアーキテクチャでは、RAMアドレス指定のためのアドレス空間の範囲は次のとおりです。

0x00000000 - 0xffffffff

または4'294'967'295(4GB)。

Linuxカーネルは3/1(おそらく2/2または1/3 1)をユーザースペース(高メモリ)とカーネルスペース(低メモリ)に分割します。

ユーザースペースの範囲:

0x00000000 - 0xbfffffff

新しく作成された各ユーザープロセスには、この領域内のアドレス(範囲)が提供されます。ユーザープロセスは通常信頼できないため、カーネル空間にアクセスすることは禁止されています。また、これは緊急ではないと見なされ、通常、カーネルはこれらのプロセスのメモリ割り当てを延期しようとします。

カーネル空間範囲:

0xc0000000 - 0xffffffff

これはカーネルプロセスがアドレス(範囲)を取得する場所です。カーネルはこの1GBアドレスに直接アクセスできます(もちろん、フル1GBではなく高度なメモリアクセス用に128MBが予約されています)。

カーネル空間で生成されたプロセスは信頼性が高く緊急であり、エラーがないと仮定すると、メモリ要求はすぐに処理されます。

必要に応じて、各カーネルプロセスはユーザースペースの範囲にアクセスすることもできます。これを達成するために、カーネルはユーザー空間(高メモリ)のアドレスをカーネル空間(低メモリ)にマッピングし、上記の128 MBはそのために特別に予約されています。


1分割が3/1、2/2、または1/3であるかどうかはオプションで制御されます。カーネルにどのオプションが選択されているかを確認CONFIG_VMSPLIT_...できます。/boot/config*

おすすめ記事