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