たとえば、3 つのプロセスがあり、それぞれ0x400000
がテキスト セクションの仮想アドレスを使用している場合。4KB
また、ユーザー プロセス用の物理ページは 1 つだけです。
プロセス 0 が物理ページ (仮想アドレス0x400000
) を使用しているとします。物理ページ データが であると仮定しますpage_pid_0_0x400000
。
プロセス 1 が OS によってスケジュールされ、page_pid_1_0x400000
プロセス 1 が実行可能ファイルから物理ページにロードされる場合。次に、page_pid_0_0x400000
データをディスクにスワップアウトする必要があります。
プロセス 2 も読み込まれると、page_pid_2_0x400000
物理ページのデータもディスクにスワップ アウトされます。
これで、ディスク上に、同じ仮想アドレス空間の 2 つのコピー、つまり0x400000
:page_pid_1_0x400000
とpage_pid_0_0x400000
.
プロセス1が現在スケジュールされている場合、私(OS)はどのようにしてpage_pid_1_0x400000
from仮想アドレスを識別できますか0x400000
(メモリアクセス命令は仮想アドレスしか認識せ0x400000
ず、プロセスIDを認識しないため)?