题
在家工作:
考虑二维阵列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]。您触摸了几页?
不隶属于 StackOverflow