【问题标题】:Calculate Virtual Memory Page Faults Number计算虚拟内存页面错误数
【发布时间】:2023-03-31 12:13:02
【问题描述】:

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

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

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

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

非常感谢

【问题讨论】:

    标签: caching memory mips virtual-memory


    【解决方案1】:

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

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

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

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

    因此,每 2 行出现 1 个页面错误。由于您有 128 行,因此您将有 64 个页面错误。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2012-05-14
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 1970-01-01
      相关资源
      最近更新 更多