ページがメイン メモリにない場合、CPU はスワップ ファイルからページを取得します。そのため、仮想アドレスに対応する物理アドレスが配置されていない場合、CPU はそれをディスクから取得します。したがって、仮想アドレスへのマッピングは、物理メモリまたはディスクの 2 つの場所のいずれかになります。私の質問は、仮想アドレス自体はどこにありますか? CPU は、マッピングを実行するためにこの仮想アドレスを必要とするためです。CPU はどこでこのアドレスを取得しますか? また、gdb を使用して仮想アドレス空間を調べる場合、gdb はこのすべての仮想アドレスをどこから取得するのでしょうか?
例:
仮想アドレス 0x420000
ページ テーブル 20
RAM 0x800000
ここで 20 (ページ テーブル エントリ) は RAM にあります。0x800000 (物理アドレス) は RAM に常駐します。0x420000 情報はどこにありますか? CPU はどこかからこの情報を必要とします。そうでなければ、アドレス変換をどのように実行しますか?
これで、仮想アドレス情報がどこから来たのかがわかったと思います。これは、アプリケーション プログラム自体から PC カウンターに送られ、その時点で CPU に渡され、CPU が変換を行います。