在家工作:

考虑二维阵列a:

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

其中一个[0] [0]位于第500页中的位置500,页面为500页(有点不现实 - 而不是512)。操纵矩阵的小过程位于第0页(位置0至499)中。因此,每个指令获取将来自当前存储在第0页中的指令。

假设只有五个页面框架,包括第0页,使用LRU替换,以下阵列初始化循环生成了多少页故障,并且假设页帧0包含该过程,而其他四个最初是空的?

a)对于(int j = 0; j <200; j ++)for(int i = 0; i <200; i ++)a [i] [j] = 0;

b)对于(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)?

我在正确的道路上吗?有建议吗?提示?

有帮助吗?

解决方案

考虑一下初始化在循环A VS循环B中发生的顺序,以及如何在内存中布置多维数组。其中一个将端访问内存地址,另一个将跳来跳去。在200个作业之后,您将在一种情况下查看[199] [0],另一个情况下则是[0] [199]。您触摸了几页?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top