2

宿題:

2次元配列Aについて考えてみます。

      int A[][] = new int[200][200];

ここで、A [0] [0]は、サイズ500のページを持つページメモリシステムの500の位置にあります(少し非現実的です。512ではありません)。マトリックスを操作する小さなプロセスは、ページ0(位置0から499)にあります。したがって、すべての命令フェッチは、現在ページ0に格納されている命令から行われます。

ページ0を含むページフレームが5つしかない場合、LRU置換を使用し、ページフレーム0にプロセスが含まれ、他の4つは最初は空であると仮定して、次の配列初期化ループによって生成されるページフォールトはいくつですか。

A)for(int j = 0; j <200; j ++)for(int i = 0; i <200; i ++)A [i] [j] = 0;

B)for(int i = 0; i <200; i ++)for(int j = 0; j <200; j ++)A [i] [j] = 0;

質問:

どこでこれを理解し始めますか?私は自分のテキストを調べましたが、それの多くが有用であるとは思いませんでした。私はいくつかの数字を投げつけました、そして私は見つけました:

40,000=配列アイテムの総数

80(40k / 500)=総ページ数

A)20,000(80 * 250)は、他のすべてのループがページフォールトを引き起こすためですか?

B)80(各ページに1つ、40,000 / 500 = 80)?

私は正しい方向に進んでいますか?何かアドバイス?ヒント?

4

1 に答える 1

0

初期化がループAとループBで発生する順序、および多次元配列がメモリにどのように配置されるかを考えてください。それらの1つは順番にメモリアドレスにアクセスし、もう1つはジャンプします。200の割り当ての後、1つのケースではA [199] [0]を、もう1つのケースではA[0][199]を確認します。何ページに触れましたか?

于 2010-09-15T19:57:58.703 に答える