2

家庭作业:

考虑二维数组 A:

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

其中 A[0][0] 位于页面大小为 500 的分页内存系统中的位置 500(有点不切实际——不是 512)。一个操作矩阵的小进程位于页面 0(位置 0 到 499)中。因此,每条指令都将来自当前存储在第 0 页中的一条指令。

假设只有五个页框,包括第 0 页,以下数组初始化循环产生了多少页错误,使用 LRU 替换并假设页框 0 包含进程,而其他四个最初为空?

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(每页一个,40,000/500 = 80)?

我在正确的轨道上吗?有什么建议吗?提示?

4

1 回答 1

0

想想循环 A 和循环 B 中初始化发生的顺序,以及多维数组在内存中的布局。其中一个将按顺序访问内存地址,另一个将跳转。完成 200 次分配后,您将在一种情况下查看 A[199][0],在另一种情况下查看 A[0][199]。你摸了多少页?

于 2010-09-15T19:57:58.703 回答