各プロセスには、ユーザースペース(高メモリー)とカーネルスペース(低メモリー)の2つのメモリー領域があります。カーネル空間では、最初の896 MBはカーネルコードをマッピングするために使用されます(正確に1 GBではありません)。これは、ユーザー空間アプリケーションがシステムコールまたはカーネルに関連するすべてを実行すると、カーネルがシステムコールを実行するためにカーネルスペースを参照することを意味します。
カーネル空間(高度なメモリ(ユーザ空間)アクセスに使用される)に予約されている128 MBはすべてユーザ空間メモリ領域を参照しますか?それでは、カーネルプロセスがこの領域を参照してすべてのユーザースペースにアクセスできることは本当ですか?
それで、カーネル空間ではこの領域をhighmemと呼びますか?
ベストアンサー1
「高メモリ」および「低メモリ」は、プロセスの仮想アドレス空間ではなく物理メモリに適用される。
プロセスの仮想アドレス空間では、ユーザー空間はこの線形アドレス空間の最初の3GBを占め、カーネル空間はこの線形アドレス空間の4GBを占めます。
最初の896 MBのカーネルスペース(カーネルコードだけでなくそのデータも含む)は、最初の896 MBの物理メモリに「直接」マッピングされます。仮想カーネル空間の896MB部分の線形アドレスと物理メモリの対応するアドレスとの間に常に0xc0000000のオフセットがあるという点で、「直接」ですが、MMUが有効になり、ページテーブルエントリが実際に使用されることに注意してください。このため)。
仮想カーネル空間の最後の128 MB部分は、マッピングされた物理的な「上位メモリ」の一部(> 896 MB)です。したがって、一度に128 MB以下の「上位メモリ」のみをマッピングできます。
参照:「Linuxカーネルについて」、第3版 - 「8.1.3.メモリ領域」および「8.1.6.大容量メモリページフレームのカーネルマッピング」セクション。