ハイメモリとは、コンピュータの物理メモリのうち、オペレーティングシステムカーネルのページテーブルによって直接マッピングされない部分のことです。この用語は、ハイメモリ領域(High Memory Area)の略称として使われることもありますが、これは全く異なる概念です。
Linuxなどの一部のオペレーティングシステムカーネルは、仮想アドレス空間を2 つの領域に分割し、大きい方をユーザー空間に、小さい方をカーネルに割り当てます。現在の32 ビットx86コンピュータでは、これは一般的に (設定可能なオプションであるため、必ずしもそうである必要はありません)、4 GB のアドレス空間を 3GB/1GB に分割する形式をとります 。そのため、カーネルの仮想アドレスは 0xC0000000 から 0xFFFFFFFF までになります。下位 896 MB (0xC0000000 から 0xF7FFFFFF) はカーネルの物理アドレス空間に直接マッピングされ、残りの 128 MB (0xF8000000 から 0xFFFFFFFF) はカーネルが要求に応じて上位メモリにマッピングするために使用されます。ユーザーモードでは、変換は最初の領域にのみ有効であり、カーネルをユーザープログラムから保護しますが、カーネルモードでは、変換は両方の領域に有効であり、カーネルがプロセスのバッファを参照する簡単な方法を提供します。カーネルはプロセス自身のマッピングを使用するだけです。[ 1 ]
しかし、カーネルがユーザー空間変換が提供されていない物理メモリを参照する必要がある場合、 使用できる仮想メモリは(例えば)1GBしかありません。物理メモリが多いコンピュータでは、カーネルが直接参照できないメモリが存在する可能性があります。これはハイメモリと呼ばれます。カーネルがハイメモリにアクセスしようとすると、実行時にマッピングを作成し、完了するとマッピングを破棄するため、パフォーマンスが低下します。