计算虚拟内存页面错误数

时间:2015-04-23 20:14:23

标签: caching memory mips virtual-memory

我在计算页面错误数时遇到问题。我有一个问题是:

考虑如下定义的二维数组D:int D(128,128); #每个元素是一个单词(我认为它意味着32位)

假设OS仅在物理(即主要)存储器中为D提供一个1024字节的页面帧。对于寻呼,LRU或FIFO用作替换策略。假设矩阵以行主顺序存储。为以下情况生成多少页面错误?

使用LRU逐行对所有矩阵条目求和? 如果我们用LRU逐列对所有矩阵条目求和,这会改变吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

假设矩阵D从页面边界开始,那么您可以计算它所需的总内存量。 Matrix有128x128个条目,每个条目长4个字节。因此,每行消耗128x4字节= 512字节。 由于您有128行,矩阵占用128x512bytes = 64Kb。

如果逐行访问矩阵,则在访问第一个元素时会产生页面错误,操作系统将在一个1024字节的页面中进行分页,该页面包含两个连续的行。

因此,在该页面错误之后,您将能够访问接下来的255个单元格(直到完成两行)。然后,当您尝试访问第三行的第一个元素时,它将生成新的页面错误,驱逐先前加载的页面并在接下来的两行中进行分页。

我们再次重复相同的操作,直到我们访问了所有行。

因此,每2行有1页错误。由于您有128行,因此您有64页错误。

按列进行求和时,它会发生变化。考虑到每个页面都包含两行,因为当您读取第一行的第一列时,操作系统将在前两行中进行分页。因此,访问的下一列(第二行的第一列)将已经在内存中,因此不会生成页面错误。但是第三列不会被分页,因此会生成新的页面错误。

因此,对于每个奇数列(第1个,第3个,第5个等),您将生成页面错误。由于矩阵有128行,因此每列会产生64页错误。考虑到矩阵有128行,当逐列访问矩阵时,将发出总计64 * 128页错误。