私はこの質問について考えました。
Linuxプロセスの仮想メモリ空間のカーネル部分を持つ用途は何ですか?
そして答えに対する答えと意見に基づいて:
カーネルメモリマップにはすべての物理メモリの直接マッピングが含まれているため、メモリ内のすべてのエントリがここに表示され、カーネル、モジュールなどの別々のマッピングも含まれるため、カーネルを含む物理アドレスは少なくとも2つの異なるマップに表示されます。
これは本当ですか?ソースまたは参照が見つかりません。物理メモリ全体へのマッピングと別々のカーネルモジュールマッピングが含まれているのはなぜですか?これは重複しませんか?
64ビットLinuxでプロセス仮想メモリのカーネル部分が何であるかを簡単に説明できる人はいますか?そして回答のソースを教えてください!どんな本や論文でもこれに関連する内容が見つからないからです。
ベストアンサー1
x86-64のカーネルメモリマップは次のとおりです。カーネル自体に文書化されている。カーネルマップ
- ユーザースペース(現在のプロセス)
- PTIデータ構造
- すべての物理メモリ
- さまざまなブロックにあるカーネルのデータ構造には、ASLRの脆弱性があります。
- カーネル自体
- モジュール
物理メモリを完全にマッピングするのは便利ですが、これによって発生するセキュリティリスクとアドレス空間の負担(物理メモリは事実上アドレス空間の半分に制限されるため、最近の拡張が引き起こされます)と比較して関連性は議論の余地があります。 56ビットアドレスを持つレベルページテーブル)。