0

たとえば、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_0x400000page_pid_0_0x400000.

プロセス1が現在スケジュールされている場合、私(OS)はどのようにしてpage_pid_1_0x400000from仮想アドレスを識別できますか0x400000(メモリアクセス命令は仮想アドレスしか認識せ0x400000ず、プロセスIDを認識しないため)?

4

1 に答える 1

0

オペレーティング システムは、あらゆる種類の関連データ構造を持つことができます。たとえば、各プロセスは、そのアドレス空間を表す独自のデータ構造 (およびページ テーブル) を持つことができ、オペレーティング システムは、プロセスを再開するときに、CPU がページ テーブルの正しいセットを指すようにするだけで済みます。

同様に、スワップ処理は仮想アドレスを使用するだけに制約されず(address space, virtual address)、スワップの場所を明らかにするために使用できます。これは、必要に応じて柔軟または固定にすることができます。たとえば、仮想アドレスは、ページがファイルまたはスワップに格納されている場所との間でいくつかの共通点を持つ連続した仮想アドレスのコレクションの一部であると見なされる場合があります。

ページ テーブルと仮想アドレスの概念は、CPU+MMUアドレス変換へのインターフェイスです。オペレーティング システムは、必要な関連データ構造を維持できます。

古いシステムでは、各ページ記述子 (場合によってはページ テーブル エントリまたは pte) に、ページが有効かどうかを判断するビットがありました。CPU/MMU は、有効と見なされなかったページを無視します。したがって、ページがディスクにスワップされた場合、ページ テーブル エントリの他のビットは、ディスク スワップ アドレスを格納するのに便利な場所です。

最新のシステムは、ページの一時的な共有とロックに対応するために、より複雑なデータ構造を持つ傾向があるため、多くの場合、補助構造が使用されます。

于 2020-12-11T04:13:17.760 に答える