0

この質問に答えるには、16 進数のアドレスを物理アドレスに変換するにはどうすればよいですか? 私は完全に混乱しており、言葉の壁のために先生は助けてくれません。

論理アドレス空間が 1KB で、ページサイズが 16 バイトであるとします。最初はこのプロセスのメイン メモリにページがなく、純粋なデマンド ページングが使用されると仮定します。現在のフリーフレームリストは{2,5,8,1,...}です。フリー フレーム リストの最初のフレームは、必要に応じて使用されます。TLB に 2 つのエントリがあるとします。TLB とページ テーブルは両方とも、最初は空です。FIFO は TLB 置換アルゴリズムとして使用されます。次の論理アドレスが順番にアクセスされるとします: 0x3d0x300xe50x7d、。次の各アドレスへのアクセス:0x330xef

  1. マップされている物理アドレスを指定します。
  2. TLB へのアクセスに 10 ns、メモリへのアクセスに 100 ns、ページ フォールトの処理に 8 ミリ秒かかるとします。このアドレスにアクセスするのにどれくらい時間がかかりますか?
4

1 に答える 1

1

プロセスが開始されると、CPU はアドレスにアクセスする必要があります。そのため、cpu は TLB エントリ内のアドレスを探します。そのエントリが見つからない場合は TLB ミス、そうでない場合は TLB ヒットです。TLB ミスの場合は、メイン メモリ内のアドレスを探し、このアドレスの TLB エントリで TLB を更新します。オペレーティング システムの各仮想ページが物理メモリのどこに配置されているかを記録するために、オペレーティング システムは、ページ テーブルと呼ばれるプロセスごとのデータ構造を保持します。

メイン メモリは、サイズが 16 バイトのページに分割されます。メモリの合計サイズ = 1KB。したがって、ページ数は 1KB/16 = 2^10/2^4 = 2^6 = 64 ページです。論理アドレスを物理アドレスに変換するには、VPN (仮想ページ番号) とオフセットの 2 つのコンポーネントに分割する必要があります。アドレス空間が 1KB なので、仮想アドレスとして合計 10 ビットが必要です。ページ サイズが 16 バイトであるため、このように仮想アドレスをさらに分割できます。上位 6 ビットは VPN 用、下位 4 ビットはオフセット用です。

最初は、メイン メモリにページはありません。0x3d にアクセスするため。TLB を調べます。キャッシュは最初は空です。これは TLB ミスです。メイン メモリに移動します。0x3d のバイナリ形式は 0000111101 です。オフセット (4 ビット) = 1101 および VPN = 000011 です。したがって、オフセットはページ 3 の 13 バイトです。ページ テーブルは空です。そのため、ページ違反です。物理ページを空きフレーム 2 に移動し、このメモリに再度アクセスしてページ テーブルを更新します。次に、仮想アドレスを物理アドレスに変換します。物理アドレスは、ページ 2 の 13 番目のバイト (仮想ページ 3 が物理フレーム 2 にマップされるため)、つまり 0010 (フレーム番号) および 1101 (オフセット)、0x2d (16 進数) です。2 回目にアクセスを試みるときは、同じ手順に従います。できる限り 0x30 のページ フォールトは発生しません。

于 2013-07-08T06:55:36.693 に答える