web-dev-qa-db-ja.com

ページテーブルサイズの計算方法

指定:64ビット仮想バイトアドレス、16 KBページ、32ビット物理バイトアドレス。

有効、保護、ダーティ、使用の各ビットが合計4ビットで、すべての仮想ページが使用中であると仮定した場合の、このマシンのページテーブルの合計サイズはどれくらいですか。

これまでのところ、ページテーブルエントリの総数:2 ^ 64/2 ^ 14 = 2 ^ 50はわかっていますが、各エントリのサイズを見つける方法を理解できません。

質問で述べたように、各エントリには4ビットが含まれていますが、エントリの残りのサイズは、物理バイトアドレスから見つけることができますか?私はこの部分で混乱しています。

ありがとう。

14
Jake

以下のページテーブルサイズを計算する1つの方法を参照してください。

  1. まず、log2(バイト単位のページサイズ)を計算して、ページオフセットを取得します。あなたの例では、ページサイズは16 Kバイトなので、log2(16 * 2 ^ 10)は14です。つまり、ページオフセットは14ビットです。

  2. 次に、物理アドレスに割り当てられたビットの総数からページオフセットを差し引いて、物理ページ番号(PPN)のサイズを計算します。この例では、物理アドレスは32ビットなので、PPN = 32-14、または18ビットです。

  3. これで、計算されたPPNに有効なビット、保護ビットなどを追加して、ページテーブルエントリ(PTE)のサイズを計算できます。この値は、ページエントリごとに必要なビットの総数になります。この例では、PTEは22ビットです。

  4. 最後に必要な情報は、ページテーブルのページエントリの数です。これは、仮想ページ番号のビットの総数からページオフセットを差し引くことで得られます。つまり、64-14 = 50です。つまり、仮想アドレスの全範囲を表すには、2 ^ 50のエントリが必要です。

したがって、ページテーブルの合計サイズは2 ^ 50 * 22ビットになり、2.75PBになります。これはメモリに保持する量が多く、おそらく高価で低速になるため、最近のプロセッサは最近使用されたページエントリのキャッシュとして Translation Lookaside Buffer(TLB) を使用します。

お役に立てれば!

28
Zorayr

16 KBのページサイズ= 2 ^ 14であるため、ページオフセットには14ビットが必要です。 64ビットの仮想アドレスのうち、このオフセットを削除すると、50ビットのままになります。これは、ページテーブルに2 ^ 50のエントリがあることを意味します。

さらに、物理アドレスは32ビットであり、オフセットはこの32ビットのうち14ビットを構成するため、ページテーブルから取得する必要がある18ビットが残ります。

これらの18ビットのうち、4ビットが有効、使用などです。

とにかく、エントリごとに、使用されるビット= 18

ページテーブルの合計メモリ(これはプロセスごとなので、指定されている場合は、プロセス数を掛ける必要があります)= 2 ^ 50 * 18ビット

8
Chaitra Suresh

CSAPPで明確な定義が見つからず、勉強しているときに混乱したので、不思議に思う人のために少し明確にする必要があります。 物理ページ番号(PPN)は、このPAがどのページにあるかを示します。PPN= 0の場合、このPAは0番目のページテーブルにあり、PPN = 11の場合、PAは3番目のテーブルにあります。 。 1つのトリックは、オフセットのビット数がそのlocationのサイズを決定することです。 ページオフセットが14ビットの場合、ページのサイズはその場所の2 ^ 14単位です(ここではPTEあたり)。私が間違っていたら訂正してください。

0
Ruizhen Mai