問題タブ [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.

0 投票する
1 に答える
928 参照

c - Linux カーネル ページ テーブルで copy_to_user が失敗する

Linux カーネルで、仮想アドレスと符号なし long ポインターを指定して、対応するページ テーブル エントリを見つけ、その内容を符号なし long ポインターにコピーするシステム コールを作成しています。システムコールは次のとおりです。

システムコールを呼び出しているテストプログラムは次のとおりです。

現在、copy_to_user への呼び出しは、kernel_pte を pte にコピーしていないことを意味する 8 の戻り値で失敗しています。VERIFY_WRITE の access_ok で pte をチェックしたところ、1 が返されました。ただし、kernel_pte で VERIFY_READ を使用して acces_ok を呼び出したところ、0 が返されました。ユーザーポインターを再度チェックするだけのようです。そのため、通話が失敗する理由が少しわかりません。

0 投票する
1 に答える
72 参照

linux - 多くのページテーブルディレクトリを使用したLinuxページング

Linux 仮想メモリに関する Mel Gorman という本を読みました。Linux は 3 レベルのページ テーブルをサポートすることを読みました: PGD、PMD、および PTE。新しいバージョンのカーネルを間違えていなければ、4 つのページ テーブル レベル (PUD) がありますが、それは問題ではありません。合理的な質問があります。Linux 開発者が 1 つではなく 3 つ (または 4 つ) レベルのページ テーブルを選択するのはなぜですか? 1 つのグローバル ページ テーブル (つまり、プロセスごとのグローバル ページ テーブル) のみを使用すると、メモリ参照の量が減少します。

私の英語でごめんなさい。

0 投票する
0 に答える
1094 参照

memory-management - 3 レベルのページ テーブルのページ エントリ

この質問を見つけましたが、解決方法がわかりません。

新しいプロセッサのメモリ管理ユニット (MMU) を設計しています。プロセッサのワード サイズは 64 ビットで、ポインタのサイズも 64 ビットです。設計の次の部分はすでに決定されています
。 • MMU は 32kB のページ サイズをサポートします。
• 3 レベルの階層ページ テーブルを使用してアドレス変換を実行します。
• x86 マシンと同様に、ページ テーブルの任意のレベルにある個々のテーブルは、物理メモリの 1 ページを占有します。レベル 3 はルート テーブルで、レベル 2 テーブルの物理アドレスを保持するエントリが含まれます。同様に、レベル 2 テーブル エントリはレベル 1 テーブルを指し、レベル 1 テーブル エントリは物理ページまたはフレームを指します。
• すべてのページ テーブル エントリのサイズは 64 ビットになります。
• 物理アドレス空間のサイズは 52 ビット (4096 テラバイト) に制限されていますが、当面はこれで十分です。
この質問の残りの部分は、これらの設計上の決定の結果についてです。
質問:個々のページ テーブル ページにはいくつのエントリがありますか? あなたの働きを見せてください。

少し読んだ後、ページサイズP=2^pと仮想アドレスサイズが与えられると、ビットnの仮想ページオフセット(VPO)とpビットの仮想ページ数があることがわかりました(n-p)。これにより、1 レベルのページ テーブル内の PTE の数は次のようになります。

レベルのページ テーブルでは、VPN を異なる VPNkに分割する必要があります。私の理解では、それらはすべて同じ長さです。これは、個々のページ テーブルの PTE の量が であることを意味します。k(n-p)/k2^((n-p)/k)

さて、私の場合、私は持っていP = 32kB = 2^15ます。これにより、15 ビットの VPO が得られます。私が見逃しているのは、仮想アドレスのサイズnです。
ワードとポインタのサイズが 64 ビットであることはわかっています。
仮想アドレスが 64 ビット幅であると想定するのは正しいですか? その場合、49/3ビット VPN を取得しますが、49で割り切れません3

0 投票する
1 に答える
808 参照

memory - 3 レベルのページ テーブルのサイズ

質問があります:

ページ サイズが 4kB の 32 ビット マシンの単一の 3 レベル ページ テーブルの最大サイズと最小サイズを計算します。この 3 レベルのページ テーブルで仮想ページを表す 20 ビットの分割は、(7、7、残っているビットは何でも) です。

プロセスには少なくとも 1 つのフレームを割り当てる必要があるため、最小サイズは 4k+4k+4k=12k にする必要があることを理解しています。ただし、最大値を計算する方法については混乱しています。20 ビットを 10 と 10 にスライスできるため、2 レベルのページ テーブルでうまく機能します。これは、1024 エントリ * それぞれ 4 バイトで、4k の優れた係数です。しかし、2 ^ 7 全体では奇妙な数が得られます。解決方法についてのアイデアはありますか? ありがとう。

0 投票する
2 に答える
652 参照

memory-management - Extended Page Tables / Nested Paging : ゲスト PTE 更新時のトラップの防止

そこで、Intel の Virtualization Extensions で EPT について調べました。シャドウ ページ テーブルでは、ゲストが PT に書き込もうとするたびに VMM にトラップされるように、VMM はハードウェア アクセス可能なシャドウ PT を書き込み保護する必要があることを理解しています。このソフトウェア ベースのページ テーブル管理は、EPT / Nested Paging によって解決されるはずの巨大なオーバーヘッドです。

しかし、ネストされたページングは​​この問題をどのように解決するのでしょうか? この場合、ゲスト VA からゲスト PA (ホスト VA) とホスト VA からホスト (マシン) PA の 2 つの個別の変換があります。ゲストが管理するページテーブルへのゲストの更新は、トラップする必要はないと主張されています。これは一貫性がありません: ゲストが GVA->GPA マッピングを変更した場合、新しい GPA マッピングも HVA に反映されるべきではありませんか? つまり、ゲストが管理するページ テーブルのすべての変更は、VMM が管理するページ テーブルにも反映されるべきではありませんか? 同じ問題を抱えているようです。EPT の導入によってどのような問題が解決されますか?

ありがとう。

0 投票する
2 に答える
174 参照

memory - テーブル エントリ サイズの計算

このような質問があり、テーブル エントリのサイズを計算する必要があります。

Microsoft Windows 98 は 32 ビットのメモリ アドレス空間を使用していましたが、デフォルトのページ サイズは 4KB でした。物理メモリが 256MB の場合

i) ページ テーブルのエントリのサイズは?

これはページオフセットと同じですか?