计算虚拟内存页面错误数

Calculate Virtual Memory Page Faults Number

我无法计算页面错误数。我有一个问题是:

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

假设OS只为D在物理(即主)内存中提供一个1024字节的页框。对于分页,使用LRU或FIFO作为替换策略。假设矩阵以行优先顺序存储。以下情况会产生多少页错误?

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

非常感谢

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

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

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

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

因此,每 2 行有 1 个页面错误。因为你有 128 行,你会有 64 个页面错误。

当您逐列求和时,它确实会发生变化。考虑到每页包含两行,因为当您阅读第一行的第一列时,OS 将在前两行中分页。因此访问的下一列(第二行的第一列)将已经在内存中,因此不会产生页面错误。但是第三列不会被分页,所以会产生新的页面错误。

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