1

これは宿題の質問ではありません。クラスで受けた質問でしたが、教授は最後の部分で私を失いました。ここにあります:

仮想メモリテーブルは、ページサイズが 1KB の 16GB の仮想メモリに対してどのくらいの大きさになりますか?

最初に、物理メモリ ページの数 = 64MB/1024 = (2^6 * 2^20)/2^10= 2^16 = 65,536 を決定しました *これは、65,536 の可能なアドレスがあり、アドレス ブロックが次の場所にある必要があることを意味します。少なくとも 16
ビットの長さ (さらに、有効なフラグの場合は 1 ビット、ダーティ フラグの場合は 1 ビット)

次に、仮想メモリ ページの数を特定しました = (2^34)/(2^10)= 2^24

VMT のサイズを実際に計算する次の部分は、彼が私を失った場合です!

(2^24 * 16 ビット) + (2^24 * 1 ビット) + (2^242 * 1 ビット) //私はこれを理解しています

(2^24 * 2) + (2^21) + (2^21) =//どうやってこれらの数値を取得したのかわかりません

2^25+ 2^21 + 2^21 = 32MB + 2MB + 2MB= 36MB //どうやってこれを手に入れたのかもわからない

したがって、VMTのサイズは明らかに36MBです

なので、基本的に最終パートの最後の2ステップまでは理解しています。「(2^24 * 16 ビット) + (2^24 * 1 ビット) + (2^242 * 1 ビット)」というのは、それぞれが 18 ビットの 2^24 個の VM ページがあるためです。彼がこれをさらに単純化した方法については、私はただ迷っています!

私が数字を間違って書き留めたのか (彼は非常にずさんな筆跡を持っています)、それとも何なのかわかりません!

だからどんな助けでも大歓迎です!

4

1 に答える 1

2

あなたの質問から:

(2 ^ 24 * 16ビット)+(2 ^ 24 * 1ビット)+(2 ^ 24 * 1ビット)//私はこれを理解しています

=(2 ^ 24 * 2)+(2 ^ 21)+(2 ^ 21)=//彼がこれらの数字をどのように取得したかわからない

彼はこのステップでビットをバイトに変換しています。したがって、16ビットは「2」になり、1ビットはバイトの1/8になります。これは、(1 /(2 ^ 3))バイトであり、2^24を掛けると2^21になります。

中間手順は次のとおりです。

= (2^24 * 2 bytes) + (2^24 * 1/8 bytes)     + (2^24 * 1/8 bytes)
= (2^24 * 2 bytes) + (2^24 * 1/(2^3) bytes) + (2^24 * 1/(2^3) bytes)
= 2^25             + 2^21                   + 2^21

次に、バイトをMBに変換すると、32MB + 2MB+2MBになります。

これは、このセットアップでのVMTのサイズに対する非常に理論的な限界です。18ビットエントリをページにパックすることは、ルックアップにはあまり効率的ではありません(実際、18ビットエントリは1kページに均等に収まらず、455エントリは1kの2ビットを除くすべてを取ります)。フラグビットは、パックされた16ビットページ番号とは別に格納して、配置と密度を維持することができます(または、問題を無視して、18ビットエントリを検索するための計算を行うだけです)。物理メモリからの仮想メモリの大きさを考えると、定義上、アドレス空間はまばらになります(同じページを複数の場所にマッピングしている場合を除く)。したがって、このパックされた線形表現は、必要以上に多くのスペースを浪費します。現実の世界では、VMTは階層的であり、エントリは密集しており、エントリは自然な境界に揃えられています。おそらく、クラスの後半でそれに到達するでしょう。

于 2012-11-07T14:56:50.117 に答える