4

反転ページテーブルを使用して仮想アドレスを物理アドレスにマップする場合、なぜメモリを節約するのですか?たとえば、両方に4ページある2つのプロセスがある場合、仮想アドレスから物理アドレスを指す2つの異なるテーブルに8つのエントリがあります。

Process 1:
[0] = 1
[1] = 5
[2] = 63
[3] = 0

Process 2:
[20] = 14
[21] = 55
[22] = 11
[25] = 9

反転ページテーブルを使用する場合、反対方向を指す大きなテーブルが1つだけあります。しかし、サイズは同じです。

2) Inverted page table

[0] = <p1 | 3>
[1] = <p1 | 0>
[5] = <p1 | 1>
[9] = <p2 | 25>
[11]= <p2 | 22>
[14]= <p2 | 20>
[55]= <p2 | 21>
[63]= <p1 | 2>
4

3 に答える 3

10

最初のケースのページ テーブルは、プロセスごとのデータ構造です。すべてのプロセスには、独自のページ テーブルへのポインターがあり、このポインターは、プロセスがスケジュールされたときに %CR3 レジスターにロードされます。また、コンテキストが切り替えられたときに保存されます。他のレジスターと。

しかし、逆ハッシュ テーブルはグローバル データ構造です。この手法を使用する OS は、ロック メカニズムを使用して、特定の時点で 1 つのプロセスのみにアクセスできるようにします (グローバル データに同時にアクセスする 2 つのコア上の 2 つのプロセスを想像してください)。

プロセスあたり 4GB の RAM と 4096 のページ サイズを想定すると、最初のケースでは、各プロセスには 4GB/4096 (ページ テーブル内のエントリ数 * 各ページ テーブル エントリのサイズ) があり、これはすべて、プロセスごとにスペースを消費します。仮想から物理へのマッピングに使用される合計メモリは、すべてのプロセスのページテーブルサイズの合計です。これは、すべてのコンテキストスイッチでポインターを変更するだけで複雑なことは何もないため、より単純なアプローチです。

2 番目のケースでは、4GB/4096 エントリのみの単一のテーブルが作成されるため、スペースは節約されますが、メモリ管理が複雑になります。これはグローバル データであるため、現在の所有者が(あなたが示したように)などです。MMU / OSは同期を処理する必要があります。

しかし、あなたが与えた例は正確ではありません.プロセスページテーブルごとにアドレス全体にアクセスできる実際のシステムでは、プロセスp1には4ページがあり、p2には異なるページセットがあります. 実際には、両方のプロセスが同じ仮想アドレスにアクセスでき、異なる物理フレームにマップされます。そのため、各テーブルにはそれぞれ 8 つのエントリが必要です。

于 2012-07-21T22:04:59.950 に答える
1

ページテーブルは1つのブロックにある必要があります(配列のようにページを取得します)。反転テーブルから2つのものを取得します。

dirテーブルは小さくなっています。たとえば、2^20テーブルサイズと2^12のオフセットの代わりに、2 ^10dirテーブルサイズになります。

次に、ページテーブル用に(2 ^ 20)*(2 ^ 2)バイトのメモリを取得する代わりに、ほとんどのページがディスクにマップされ、プロセスがそれらを必要とする場合にのみ割り当てられます。

あなたの場合、すべてのプロセスが2 ^ 20 * 2 ^ 2バイトのサイズのページテーブルを持つ代わりに、dirテーブル用に2 ^ 10 * 2 ^ 2バイト、もう1つは2 ^10*になります。ページテーブルの場合は2^2バイト。これは大きな違いです。2^22バイトではなく、2^13になります。

はっきりしているといいのですが。

于 2012-05-27T07:07:03.627 に答える