カーネル論理アドレス

カーネル論理アドレス

ロード/ストアコマンドに使用される場合、コア論理アドレスはMMUを通過しますか? MMUはカーネル仮想アドレスとは異なる方法でカーネル論理アドレスを処理しますか?同じ理由を提示してください。

MMUが両方のアドレスを同様の方法で処理する場合、コア論理アドレスの利点は何ですか?

メモリをHighメモリとLowメモリに分割すると、どのような利点がありますか?

ベストアンサー1

ロード/ストア命令は仮想メモリにのみアドレスを指定できます。彼らはすべてMMUを通過します。 MMUは常に現在のページテーブルを使用してアドレスを変換します。

Linuxは、32ビットCPUでのみメモリを「低」と「高」に区別します。 32ビット仮想アドレスは、4 GB内のさまざまな場所の1つを識別します。 4 GBを超えるさまざまな物理メモリの場所にアクセスするには、一時的な仮想マッピングを使用する必要があります。

公式ドキュメントをご覧ください。linux-5.0/documentation/vm/highmem.rst

一般的なアドバイスは、32ビットシステムで8GiB以上を使用しないでください。より多くの容量があなたとあなたの仕事に適していても、ほとんど自分で解決する必要があります。カーネル開発者が問題が発生しても気になるとは思わないでください。 。

ナレーター:「カーネル論理アドレス」は、メモリ不足の永続マップの内部を指す仮想アドレスを表します。この用語は特定のLinuxブックで使用されます。その本の文脈以外では使用されません。

質問:非常に広い物理メモリ領域を恒久的にマッピングすること(たとえば、「低メモリ」)の「利点」とは何ですか?

回答:これは、ほとんどのLinuxカーネルコードが「大容量メモリ」を処理する際の追加の複雑さとパフォーマンスのオーバーヘッドを回避できることを意味します。つまり、一時マッピングを作成する必要があります。これは、高メモリが古い32ビットCPUにのみ関連していることを考慮すると特に重要です。

ほとんどのカーネルコードは低メモリに割り当てることができます。ほとんどのカーネルコードは多くのRAMを必要としません。例外として、Linuxではページキャッシュを高メモリに割り当てることができます。したがって、ページキャッシュに関連するカーネルコードはそれを認識する必要があります。

ソケット(ネットワーク)バッファもhighmemをサポートしていません。例:https://www.airship.com/blog/linux-kernel-tuning-for-c500k/

おすすめ記事