2

ページがメイン メモリにない場合、CPU はスワップ ファイルからページを取得します。そのため、仮想アドレスに対応する物理アドレスが配置されていない場合、CPU はそれをディスクから取得します。したがって、仮想アドレスへのマッピングは、物理メモリまたはディスクの 2 つの場所のいずれかになります。私の質問は、仮想アドレス自体はどこにありますか? CPU は、マッピングを実行するためにこの仮想アドレスを必要とするためです。CPU はどこでこのアドレスを取得しますか? また、gdb を使用して仮想アドレス空間を調べる場合、gdb はこのすべての仮想アドレスをどこから取得するのでしょうか?

例:

仮想アドレス 0x420000
ページ テーブル 20
RAM 0x800000

ここで 20 (ページ テーブル エントリ) は RAM にあります。0x800000 (物理アドレス) は RAM に常駐します。0x420000 情報はどこにありますか? CPU はどこかからこの情報を必要とします。そうでなければ、アドレス変換をどのように実行しますか?

これで、仮想アドレス情報がどこから来たのかがわかったと思います。これは、アプリケーション プログラム自体から PC カウンターに送られ、その時点で CPU に渡され、CPU が変換を行います。

4

1 に答える 1

1

仮想ページに関する情報 (ステータス、物理的な場所など) は、ページ テーブルに格納されます。ページ テーブル自体がどのように実装され、どこに格納されるかは、OS の詳細と基盤となるハードウェア サポートに大きく依存します。最初はややこしく聞こえるかもしれませんが、ページ テーブル自体を仮想メモリに格納することもできます。

于 2013-10-30T16:03:09.787 に答える