問題タブ [page-tables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - Linuxページテーブルポインターの逆参照で正確に何が起こっていますか?
Linux カーネルでページ テーブル ウォークを調査しようとしています。ページテーブルをウォークスルーしてPFNを見つける標準的な方法を使用しました(実際のコードではなく、単なる例です):
システムは
CPU: Intel(R) Core(TM) i7-3770
CPU @ 3.40GHz
OS: Linux Fedora リリース 22 (Twenty Two) カーネル: 4.4.4-200.fc22.x86_64
pgd ポインターが pud ポインターに逆参照される方法を理解しようとしています。簡単なコードを getPud 関数に入れました。
そしてobjdumpで逆アセンブルしてみる
私のアセンブラーの知識は、次のような構造を理解するのに十分ではありませんcallq *0x0
誰かが getPud で何が起こっているのかを明らかにしてもらえますか?
ありがとうございました
セルゲイ
更新 1
objdump を使用して、ページ テーブルをウォークスルーするために作成した LKM (cpes.ko) モジュールを逆アセンブルしました。
memory-management - ページ テーブルの各エントリに検証ビットがあるのはなぜですか?
私はページングメモリ管理について勉強していましたが、ある時点で、ページテーブルの各エントリに関連するビットがあり、これに関連付けられているプロセスによってフレームが有効または無効なフレームにアクセスされるかどうかを示すことがわかりましたページテーブル。
私の質問は、プロセスに専用のページ テーブルがあり、その論理ページとメモリ内の物理フレームの間のマップに対応するエントリがある場合、フレームがエントリによって参照されているかどうかを示すために外部ビットを追加する必要があるのはなぜですか。プロセス自身のページテーブルにアクセスできるかどうか?
私自身の説明は、プロセスには、私にとっては未知の理由で、使用されないか、何らかの理由で無効になるエントリが独自のページテーブルにある可能性があるということです。
linux - ARM Linux、ヤングビット
Linux のダーティ ビットがどのようにエミュレートされるかは理解していますが、アクセス/ヤング ビットについては混乱しています。
MMU は、実際のページ フォールトとその後のアクセスから生成されたページ フォールトをどのように区別しますか。言い換えれば、Linux はハードウェア PTE の最後の 2 ビットを「00」にリセットしますか?
私はすでに読んだ 、しかし、Linux PTE とハードウェア PTE の正確などのビットがアクセス ビットをエミュレートするために操作されるかについて具体的に述べていませんか?
x86 - x86 ページ ディレクトリ マルチ プロセス
実行中のすべてのプロセスのページ ディレクトリがメイン メモリに保持されているかどうか、または常に 1 つのページ ディレクトリのみがメモリに保持されているかどうかを知りたいのですが、コンテキストの切り替え時に古いものはメモリからフラッシュされ、新しい1つは記憶にもたらされます。
Linux を OS と考えてください。
caching - プロセスごとの仮想ページ数を計算する
64 KB のページ、4 GB の物理メモリ、および 64 ビット マシンがあります。
64 ビット マシンでは 256 TB の仮想メモリが必要になることを知りました。プロセスごとの仮想ページ数を計算する必要がある場合、次のようになります。
仮想メモリの合計/ページ サイズ = 256TB/64KB = 4x10^9 ページ? ドキュメントをオンラインで読みましたが、完全にラップしていません。