次のページテーブルは、16ビットの仮想アドレスと物理アドレス、および4,096バイトのページを持つシステム用です。参照ビットは、ページが参照されると1に設定されます。定期的に、スレッドは参照ビットのすべての値をゼロにします。すべての数値は10進数で提供されます。
次の仮想アドレス(16進数)を同等の物理アドレスに変換したい。また、ページテーブルの適切なエントリに参照ビットを設定したい。
•0xE12C
•0x3A9D
•0xA9D9
•0x7001
•0xACA1
私は答えは知っていますが、これらの答えをどのように達成できるか知りたいです:
0xE12C → 0x312C
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
これ を見つけて試しましたが、あまり役に立ちませんでした。
仮想アドレスは16ビット長であることが前提です。
したがって、仮想アドレス空間には2 ^ 16個のアドレスがあります。
ページサイズは4 KB(ページ内に4K(4 *(2 ^ 10))アドレスがある)であるため、ページ数は(2 ^ 16)/(2 ^ 12) = 2 ^ 4。
各ページをアドレス指定するには、4ビットが必要です。
仮想アドレスの最上位4ビットは参照されるページ番号を示し、残りの12ビットはページオフセットになります。
覚えておくべきことの1つは、(仮想アドレス空間内の)ページサイズが常にメインメモリのフレームサイズと同じであることです。したがって、物理アドレスでは、最後の12ビットは仮想アドレスと同じままです。
メインメモリのフレームアドレスを取得するには、最初の4ビットを使用します。
例:仮想アドレス0xACA1を考えます
Aの[〜#〜] a [〜#〜] CA1はページ番号(10)を表し、対応するフレーム番号は5(0101)であるため、結果の物理アドレスは→0x5CA1。
virtualアドレスをphysicalアドレスに変換するには(apply[〜#〜] only [〜#〜]この宿題の質問に)、知る必要があります2もの:
この例では、16ビットシステム、4KBページサイズおよび物理メモリサイズは64KBです。
まず、ページ内のオフセットとして機能するために必要なビット数を決定する必要があります。log2(Page-Size)
= log2(4096)
=12bits foroffset
仮想アドレスの16ビットのうち、12はオフセット用です。つまり、各プロセスには2^4 = 16
仮想ページ。ページテーブルの各エントリには、ページに対応する対応するフレームが格納されます。例えば:
さあ、翻訳しましょう!
まず、作業を簡単にするために、0xE12C
からbinary
へ。
0xE12C = (1110 0001 0010 1100) in base 2
1110 = 14 in decimal
Entry 14 in P.T => Page frame 3.
12オフセットビットに連結させます
Answer: (0011 0001 0010 1100) = 0x312C
もう一つの例: 0x3A9D
0x3A9D = 0011 1010 1001 1101
0011 = 3
PageTable[3] = 10
10 in decimal = 1010 in binary
1010 1010 1001 1101 in binary = 0xAA9D
この問題を解決するために、詳細を正しく把握する必要があります。
そのため、次のものがあります。
私たちはそこに着いています...我慢してください! :)
16進表記のメモリアドレス0xE12Cは、16ビットのアドレスを保持していることも知られています。 (質問に記載されているため。)
今すぐ住所を肉食しましょう...
最初に情報から「0x」を削除します。
E12Cを@Tony Tannousのようなバイナリ表記に変換できますが、少しショートカットを適用します。
私は単に比率を使用します。さて、アドレスは上記の4文字で表記され、16/4 = 4なので、最初の文字を仮想アドレスとして定義できますが、他の3文字はオフセットアドレスです。
16進形式の 'E'の情報を使用して、10進= 14に変換する必要があります。次に、提供されたテーブルを見て、ページフレーム '3'を見つけました。ページフレーム3は10進形式で記載されていますが、16進形式に戻す必要があります... Duh!... 3!
そのため、0xE12Cの仮想メモリロケーションの物理アドレスマッピングは、物理メモリの0x312Cにあります。
次にテーブルに戻り、参照ビット列を参照して、行14に「1」を入力します。
これらに同じ概念を適用します-
0x3A9D → 0xAA9D
0xA9D9 → 0x59D9
0x7001 → 0xF001
0xACA1 → 0x5CA1
気付いた場合、最後の3桁は同じです(オフセットを決定します)。そして、4桁の最初の数字は表に従ってマッピングされます:
table entry 3 -> page frame 10 -> hex notation A
table entry A (10) -> page frame 5 -> hex notation 5
table entry 7 -> page frame 15 -> hex notation F
table entry A (10) -> page frame 5 -> hex notation 5
この説明があなたや私のような人々の助けになることを願っています! :)