HighmemとLowmemの違いに興味があります:
- なぜそのような差別化があるのですか?
- そうすることで何が得られますか?
- それぞれにどのような機能がありますか?
承認された回答:
32ビットアーキテクチャでは、RAMをアドレス指定するためのアドレス空間の範囲は次のとおりです。
0x00000000 - 0xffffffff
または4'294'967'295
(4 GB)。
Linuxカーネルは、それを3/1(2/2または1/3の場合もあります)をユーザースペース(高メモリ)とカーネルスペース(低メモリ)にそれぞれ分割します。
ユーザースペースの範囲:
0x00000000 - 0xbfffffff
新しく生成されたすべてのユーザープロセスは、この領域内のアドレス(範囲)を取得します。ユーザープロセスは一般的に信頼されていないため、カーネルスペースへのアクセスは禁止されています。さらに、それらは緊急ではないと見なされます。原則として、カーネルはこれらのプロセスへのメモリの割り当てを延期しようとします。
カーネル空間の範囲:
0xc0000000 - 0xffffffff
カーネルプロセスはここでそのアドレス(範囲)を取得します。カーネルはこの1GBのアドレスに直接アクセスできます(1 GB全体ではなく、128MBが高メモリアクセス用に予約されています)。
カーネル空間で生成されたプロセスは信頼され、緊急であり、エラーがないと見なされ、メモリ要求は即座に処理されます。
すべてのカーネルプロセスは、必要に応じてユーザースペース範囲にアクセスすることもできます。これを実現するために、カーネルはアドレスをユーザースペース(高メモリ)からカーネルスペース(低メモリ)にマップします。上記の128MBは特にこのために予約されています。
分割が3/1、2 / 2、または1/3のいずれであるかは、CONFIG_VMSPLIT_...
によって制御されます。 オプション;おそらく/boot/config*
で確認できます カーネルに選択されたオプションを確認します。