1

ねえ、私は質問と答えがありますが、答えの2番目の部分を理解することはできません!ここのany1は私を助けてくれませんか?

ここにあります:

質問;

コンピューターには、32ビットの仮想アドレスと4KBのページがあります。プログラムとデータは一緒に一番下のページ(0-4095)に収まりますスタックは一番上のページに収まります。従来の(1レベル)ページングを使用する場合、ページテーブルにはいくつのエントリが必要ですか?各部分に10ビットの2レベルのページングには、いくつのページテーブルエントリが必要ですか?

答え;

1レベルのページテーブルの場合、2 ^ 32/2^12または1Mページが必要です。したがって、ページテーブルには100万のエントリが必要です。2レベルのページングの場合、メインページテーブルには1Kのエントリがあり、各エントリは2番目のページテーブルを指します。これらのうち2つだけが使用されます。したがって、合計で3つのページテーブルエントリのみが必要です。1つはトップレベルテーブルに、もう1つは各下位レベルテーブルにあります。

太字がわかりません。たとえば、この1Kがどのように表示されるのか理解できません。

御時間ありがとうございます、

乾杯!

4

1 に答える 1

8

質問のコンテキストを使用していないため、質問の最初の部分に対する答えは間違っていると思いますThe program and data toget­her fit in the lowest page (0-4095) The stack fits in the highest page。したがって、ページテーブルエントリの総数は1048576ですが、使用するエントリは2つだけで、2つのページごとに1つずつです(エントリ0はコード/データページで、エントリ1048575はスタックページでポイントします)。

質問の2番目の部分では、非常に役立つヒントが提供されますtwo-level paging, with 10 bits in each part。しかし、最初に、上記のより単純なケースに戻りましょう...

1ページテーブルのケース1の場合、仮想アドレスは次のとおりです。

  1. 32ビット(として与えられるA computer has 32-bit virtual addresses
  2. それらの最下位12ビットは、ページ内の場所を示します(としてA computer has ... 4-K.B pagesも、としても指定されますfit in the lowest page (0-4095)

残りの最上位20ビットは、明らかにページテーブルのエントリを選択します。選択したページテーブルエントリには、ページの物理アドレスが含まれています。

したがって、仮想アドレスは次のようになります。

most significant bits                            least significant bits
| 20 bits = index into the page table | 12 bits = index into the page |

したがって、CPUは次の式を使用してメモリにアクセスします。

PhysicalAddress = PageTable[VirtualAddress / 4096] + VirtualAddress modulo 4096

それでは、ケース2に戻りましょう。

ページ内のバイトを選択するための12LSBビットがまだあります。

しかし、何が新しいのですか?ですtwo-level paging, with 10 bits in each part

これらの10ビットは、ページテーブルインデックスの長さであり、現在2つあります。

これにより、仮想アドレスの次の内訳に到達します。

most significant bits                       least significant bits
| 10 bits = PT index | 10 bits = PT index | 12 bits = page index |

そして、アドレス変換式は、当然、次のとおりです。

PhysAddr = PageTable[VirtAddr / (1024*4096)][(VirtAddr / 4096) modulo 1024] + VirtAddr modulo 4096

今でも、2ページを占める同じプログラムがあります。

コード/データページを指す仮想アドレスは(バイナリで)次のとおりです。

0000000000|0000000000|xxxxxxxxxxxx

また、スタックページを指す仮想アドレスは(バイナリでも)次のとおりです。

1111111111|1111111111|xxxxxxxxxxxx

これから、レベル1で2つの異なるページテーブルエントリ(インデックス0000000000と1111111111で選択)を使用しており、同様にレベル2で2つの異なるページテーブルエントリを使用していることがわかります。

したがって、ケース2の場合、プログラムの動作に必要な合計は2 + 2=4ページテーブルエントリです。

覚えていない場合のPS:2 10 = 1024、2 12 = 4096、2 20 =1048576。

于 2012-09-19T00:42:37.037 に答える