(理由)Linuxカーネルは仮想アドレス空間にIDマッピングを使用しますか?

(理由)Linuxカーネルは仮想アドレス空間にIDマッピングを使用しますか?

私は現在、Linuxカーネルの仮想アドレス空間の使用を研究しています。私はこれらの利点、x86でページテーブルナビゲーションがどのように機能するか、および仮想レイアウトを理解しています。アドレス空間

私が理解していない部分は次のとおりです。私の講演では、誰かがLinuxカーネルがカーネル空間で「IDマッピング」を使用していると説明しました。意味:カーネル空間では、定数を減算して仮想アドレスを物理アドレスに変換できます。

この番号はよく呼ばれます。ページオフセットそして、64ビットと32ビット、レイヤ4とレイヤ5アドレス変換に依存します。設定。セキュリティ対策として、kASLRは起動するたびにPAGE_OFFSETをランダムに増加させます。

私はこれがいくつかの場所で説明されているのを見ましたが、ほとんどは少し古いです。 https://stackoverflow.com/a/36640733/15113903
https://stackoverflow.com/questions/24632905/mapping-of-kernel-virtual-address-directly?rq=1
最近の暗黙の説明は、ボラティリティ3がボラティリティを計算するときにこれらのIDマッピングに依存しているようです。kASLRメモリダンプオフセット

今:(なぜ)カーネル仮想アドレス空間は(まだ)ですか?パフォーマンス上の利点はありますか?何らかの理由で必要ですか?これは初期の遺産ですか?近い将来に変わる可能性はどのくらいですか?

ありがとう

ベストアンサー1

定数を減算すると、仮想アドレスを物理アドレスに変換できます。

不完全です。アドレス空間のカーネルの末尾に仮想アドレスがあります。

x86 を含む一部のアーキテクチャでは、Linux カーネルには物理アドレス空間と仮想アドレス空間の線形マッピングがあります。多くの利点があります:

  • TLB圧力の低下(大きなページマッピングに役立ち、カーネルは可能であればこのマッピングにTLBを使用します)
  • 物理アドレスへの直接的なアクセス
  • マップされていないアドレスへのアクセス

これは難しい要件ではありません。一部の人は、ある時点で線形マップから抜け出したいが、積極的に作業している人がいるかどうかはわかりません。

おすすめ記事