0

ページのサイズが に等しいと考えてみましょう1 KB。テーブルの 1 つのエントリには2B. ページの表は 1 ページしか取りません (そう<= 1KB)。

運用メモリのサイズは であると結論付けることができます<= 512 KBか?

正解はNoですが、よくわかりません。私にとっては、答えはイエスです。私の推論を見て、私が間違っている場所を教えてください。

<=1024B/2B=512=2^9テーブルには、ページのテーブルのエントリが含まれています。ページのサイズは1024B=2^10Bであるため、オフセットは<=10ビット以下で済みます。ページ数には<=9ビットが必要です -512=2^9エントリがあるためです。したがって、9+10=19. したがって<=2^19 bits、アドレス指定を可能にします<= 2^19 B=2^9KB=512KB

どこが間違っていますか?

4

1 に答える 1

0

ページ テーブル エントリは 2B であるため、テーブル エントリは 2^16 の物理ページの 1 つを指すことができます。これは 2*16 kiB です (ページは 1kB であるため)。したがって、カーネルは最大 65536 kiB (64MiB) の物理メモリを使用できます。

これは、ページ テーブル エントリ (PTE) 全体が物理ページ番号であることを前提としています。これは、ページ テーブル内の PTE の位置が仮想アドレスに関連付けられている場合に機能します。すなわち、仮想アドレスの 9 ビットは、PT へのインデックスとして使用され、PTE を選択します。

マシンこのように機能するとは仮定できませんが、同様に、より多くの情報が得られるまで、そうでないと仮定することもできません。

質問の情報だけを考えると、次のように結論付けることができます。

  • 使用可能な物理メモリは、最大 65536kiB です。
  • 一度に最大 512 個の仮想ページをマップできます (512kiB)。
  • 他にはあまりありません!多くの可能性が開かれています。

より可能性の高い設計では、各 PTE に有効/無効ビットがあります。

PTE の内容 (その場所ではなく) が、それがマップする仮想ページを示している場合、大規模な仮想アドレス空間を非常に少数の物理ページにマップすることが可能になります。このアドレス空間は必然的にまばらにマップされますが、カーネルは、マッピングがどうあるべきかを示す別のテーブルを保持することにより、プロセスに多くのアクティブなマッピングがあるように見せることができます。

そのため、ページ フォールトが発生すると、カーネルはページがマップされているかどうかを確認します。その場合は、マッピングを PTE に入れ、プロセスを再開します。(この種のことは実際の OS で発生し、マイナー ページ フォールトと呼ばれます。)

この設計では、実際のマッピングのサブセットを保持するためにカーネルがページ テーブルを使用することは、ソフトウェア管理の TLBに似ています。(もちろん、このアーキテクチャには、PTE を変更するたびに無効化を必要とする一貫性のない TLB が含まれる可能性があるため、パフォーマンスが大幅に低下する可能性があります)。

于 2016-09-09T19:52:53.063 に答える