HighmemとLowmemの違いに興味があります。
- なぜそのような違いがありますか?
- このようにして、私たちは何を得ますか?
- それぞれの特徴は何ですか?
ベストアンサー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*