计算二维数组的页面错误数

2024-01-05

我正在努力学习考试……我找到了这个例子,但不明白他们是如何得到答案的。有人可以解释一下吗?

问题:

考虑二维数组 A: int A[][] = 新 int[100][100]; 其中 A[0][0] 位于页大小为 200 的分页内存系统中的位置 200。操作矩阵的小进程驻留在页 0(位置 0 到 199)中。因此,每条指令都将从页 0 获取。 对于两个页框,使用 LRU 替换并假设第一个页框包含进程而另一个最初为空,以下数组初始化循环会生成多少个页面错误?

A:

for (int j=0;j<100;j++)
   for (int i=0; i<100; i++)
     A[i][j] = 0;

B:

for(int i=0; i<100; i++)
  for (int j=0; j<100; j++)
      A[i][j] = 0;

给出的正确答案是: a: 100 x 50 = 5000 乙:50

我有点理解第一部分。共有 50 页。 (10000/200=50)并且每次j改变时,就会发生页面错误..所以总共有100个页面错误..但是为什么要乘以50呢?为什么第二个是50?

谢谢!!


假设您的系统为您的进程分配了两个帧,以便200 * sizeof(int)矩阵一次可以保存在内存中。矩阵的分配发生在行主要顺序 http://en.wikipedia.org/wiki/Row-major_order#Row-major_order.

在第一个循环中A:

for (int j=0;j<100;j++)
   for (int i=0; i<100; i++)
     A[i][j] = 0;

循环访问矩阵列的存储单元,例如:

A[0][0], A[2][0], A[3][0], ...A[0][2], A[0][3], A[0][4], ......
  ^        ^        ^   
      row changes               

在每次迭代时行更改分配以行为主,每行占一页。所以代码A将导致每个替代方案出现页面错误A[i][j]访问,因此页面错误总数 = 100 * 100 / 2) = 5000。

第二个代码在哪里B:

for(int i=0; i<100; i++)
  for (int j=0; j<100; j++)
      A[i][j] = 0;

每次迭代时按行循环访问矩阵的内存单元,例如:

A[0][0], A[0][5], A[0][6],...,A[1][0], A[1][7], A[1][8],...,A[2][0], A[2][9],
     ^        ^        ^  
  column changes, row are same 

按行访问(读取时列发生变化仅在读取 100 次后才更改行),一次加载一行,因此当行更改(对于外循环)时会发生页错误,并且对于每个替代行访问都会发生页错误,因此页错误数 = 100/2 = 50。

我们可以用另一种方式来理解它,比如:
在行主要中,行索引更改的次数我们需要新页面来访问,因为页面数量很小,第一个 A 循环中的每个替代索引更改上的页错误行索引更改了 100*100 次,而在 B 循环中行索引更改了 100次,因此 A/B 中的页错误率 = 100*100/100 = 100,如果 A 中发生页错误数 = 50,00,则 B 中的页错误数 = 50,00/100 = 50。

同样,您可以计算页面错误的数量列主序 http://en.wikipedia.org/wiki/Row-major_order#Column-major_order并且因为矩阵的行数和列数相同,结果将相同。

我的书中给出了类似的例子:
下载 pdf:阅读第 9 章:虚拟内存部分:9.9.5 程序结构。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算二维数组的页面错误数 的相关文章

  • 过滤(搜索和替换)InputStream 中的字节数组

    我有一个 InputStream 它将 html 文件作为输入参数 我必须从输入流中获取字节 我有一个字符串 XYZ 我想将此字符串转换为字节格式 并检查从 InputStream 获得的字节序列中是否存在与该字符串匹配的字符串 如果有的话
  • 如何对 int[] 数组求和[重复]

    这个问题在这里已经有答案了 给定一个数组A of 10 ints 初始化一个名为的局部变量sum并使用循环查找数组中所有数字的总和A 这是我提交的答案 sum 0 while A lt 10 sum sum A 我在这个问题上没有得到任何分
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 我如何在 C++ 中将数组存储到队列

    queue lt int gt qq for int i 0 i lt N i int cc 2 i i 1 qq push cc N很大但不精确 所以我想使用队列 我想存储很多数组来排队 但是 qq 存储的数组是同一个 我该怎么做 你的代
  • JS:按每个类别的最大值过滤对象数组

    什么是最有效 优雅的方式来实现类似sql的过滤效果 我想过滤它们并只获取某个组中最大值的对象 这是我的代码 它可以工作 但可能不是最好的方法 uniqueValues arr gt new Set arr getMaxTimeOf arr
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝
  • 如何在 Bash 中为数组赋值?

    我正在尝试从文本文件中读取值列表 你好 txt 并将它们存储在一个数组中 counter 0 cat hello txt while read line do Unix Array counter line let counter coun
  • 如何过滤javascript对象数组

    我有两个数组 我正在使用 PubSidebar 过滤基于 groupKey 的内容 let groupKey oaDeal Journals Deposit This array of object will be filtering wi
  • C++:创建一个由用户输入大小的数组

    我想知道我们是否可以创建一个具有用户指定大小的数组 Ex int a cout lt lt Enter desired size of the array cin gt gt a int array a 上面的程序将不起作用 因为数组大小必
  • Swit 中的函数式编程将数组元素分配到正确的“桶”

    我是函数式编程的新手 我的问题是我有一个主数组和固定数量的 目标 数组 我想根据每个元素的特定值将主数组中的元素分配到正确的结果数组中 我猜测一种方法是使用一个映射函数来遍历主数组元素 确定正确的 目标数组 值 基于某种逻辑 然后将元素添加
  • Tensorflow:获取为零的数组行索引

    对于张量 1 2 3 1 0 0 0 0 1 3 5 7 0 0 0 0 3 5 7 8 如何获取 0 行的索引 IE 列表 1 3 在 Tensorflow 中 据我所知 您无法像使用 NumPy 等更高级的库那样在一个命令中真正做到这一
  • 为什么使用Python的os模块方法而不是直接执行shell命令?

    我试图了解使用Python的库函数执行特定于操作系统的任务 例如创建文件 目录 更改文件属性等 背后的动机是什么 而不是仅仅通过执行这些命令os system or subprocess call 例如 我为什么要使用os chmod而不是
  • Angular 2循环遍历列表有一些延迟

    如何使用 Angular 2 和 TypeScript 以一定延迟循环遍历数组 我有一个数组 students Array
  • 在什么情况下C++会在编译时进行数组边界检查?

    受到 使用编译时 HTML 解析的 C HTML 模板引擎 https github com rep movsd see phit 我正在尝试编写一个示例类来检查字符串中的第一个字符是否是a int dummy 0 class Test p
  • 如何在 Ruby 中将一个数组添加到另一个数组而不最终得到多维结果?

    I tried somearray some thing anotherarray another thing somearray push anotherarray flatten 我期望 some thing another thing
  • 使用另一个数组中的值转换所有数组键

    我有很多数组 是从 csv 文件生成的 在所有数组中 第一个数组对象是 csv 标题 请参阅下面的示例 总之 第一个数组的值 即 key 0 和 value report date 应替换所有后续数组的所有键 因此 对除第一个数组之外的所有
  • 如何读取数组中int的随机数

    我想将空格分隔的整数读取到数组中 当我按 Enter 时 它应该在任何时间点停止读取 如何实现该程序的循环 请帮助我解决这个问题 我已经尝试过下面的代码 但它不起作用 以及如何再次读回 include
  • 如何从对应的数组值中获取数组键?

    您可以轻松地通过其键获取数组值 如下所示 value array key 但如果我有该值并且想要它的密钥怎么办 获得它的最佳方式是什么 你可以使用array search https www php net manual en functi
  • 比较和删除列表和数组java中不存在的元素

    我有一个String数组和一List
  • JavaScript 数组中的负索引是否会影响数组长度?

    在javascript中我定义了一个像这样的数组 var arr 1 2 3 我也可以做 arr 1 4 现在如果我这样做 arr undefined 我也失去了对值的引用arr 1 所以对我来说 从逻辑上来说 arr 1 也是arr 但是

随机推荐

  • CMD For 循环不保存 set /a 值

    不知道如何很好地解释这一点 所以这是代码 echo off set test 0 for f a in textfile txt do rem loops five times 5 lines in textfile txt set a t
  • 发送电子邮件时更改文本(字符串)的颜色

    当我将文本 字符串 输出到电子邮件时 我试图更改它的颜色 我的代码是 String appdata txtFromSpinner location getText date getText start getText finish getT
  • 在 TOpenDialog 中右键单击文件时,使用自定义样式会显示无效字符

    请参阅以下步骤进行重现 在 XE2 中运行良好 但在 XE8 中运行不佳 创建新的 VCL 表单应用程序 Delphi Place a TButton and a TOpenDialog在表格上 在按钮中OnClick事件调用OpenDia
  • Matlab中值滤波器代码

    我需要在 MATLAB 中对图像实现中值滤波 然而 我是不允许使用medfilt2 or ordfilt2MATLAB 中的函数 我们最近也开始学习MATLAB 是否有任何代码可用于中值滤波器或高斯滤波器 NB 这假设已安装图像处理工具箱
  • 如何将 Comet 与 Spring MVC 一起使用?

    我想添加一些彗星 服务器推送 http en wikipedia org wiki Comet programming 简单 Web 应用程序的功能 我无法找到有关如何执行此操作的最新信息 任何人都可以向我指出一些示例 教程 博客或任何最近
  • Android ACR122U NFC 集成

    See NFC 读取器 SELECT 通过 AID APDU 未路由到 Android 设备 https stackoverflow com q 50316799 2425802关于调试和最终结果 TL DR 读者可能已经不复存在了 我的
  • 验证 Knuth 洗牌算法尽可能无偏

    我正在实施一个高德纳洗牌 http en wikipedia org wiki Fisher E2 80 93Yates shuffle对于我正在从事的 C 项目 我试图从我的洗牌中获得最公正的结果 而且我不是 伪 随机数生成方面的专家 我
  • 创建一个 firemonkey 组件

    我正在 Delphi XE4 中使用 Firemonkey 但无法使用菜单项 Component gt New Component 创建新组件 无论该组件是 VCL 还是 Firemonkey 组件 或者我是否先创建一个包 结果都是相同的
  • 如何从命令行执行 SOAP wsdl Web 服务调用

    我需要进行 SOAP Web 服务调用https sandbox mediamind com Eyeblaster MediaMind API V2 AuthenticationService svc wsdl https sandbox
  • 事件处理程序性能

    我有性能问题 我创建了 100 个新按钮 并且想要分配一个单击事件处理程序 我执行这段代码大约 100 次 Buttons i Button Click new System EventHandler Button Click 大约需要2秒
  • 发送参数到before_save

    我正在尝试以 rails 方式 构建一个应用程序 所以这次我不是回顾性地处理数据库中的记录 而是尝试使用 before save 方法来完成它们 即这个 def make percentage from score percent scor
  • 如何在 Dart 中合并两个列表?

    我想知道是否有一种简单的方法可以在 dart 中连接两个列表来创建一个全新的列表对象 我找不到任何东西和类似的东西 My list list1 1 2 3 list2 4 5 6 I tried var newList list1 list
  • 在python中通过ftp更改权限

    我正在使用 pythonftplib将图像上传到我的 raspberryPi 上位于 var www 的文件夹中 一切工作正常 除了上传的文件有600权限和我需要644对于他们来说 哪种方法最好 我正在寻找类似的东西 def ftp sto
  • PhpStorm - 导航后退键盘快捷键不起作用

    When I Ctrl click on method it will jump to declaration of that method 问题 如何跳回到该方法的使用 I tried Ctrl Alt Left combination
  • 用于随机森林分类的​​ ROC 曲线

    我在用randomForestR平台中用于分类任务的包 rf object lt randomForest data matrix label factor cutoff c k 1 k 其中 k 的范围为 0 1 到 0 9 pred l
  • 如何在 Ruby on Rails 中分析请求?

    如何分析控制器操作 我的一个观点是渲染需要相当长的时间 我想把它分解一下 我懂了script performance profiler 但这似乎只能访问全局范围 红宝石教授 http ruby prof rubyforge org 是要走的
  • 如何轻松获取 Scala 案例类的名称?

    Given case class FirstCC def name String something that will give FirstCC case class SecondCC extends FirstCC val one Fi
  • pyspark approxQuantile 函数

    我有包含这些列的数据框id price timestamp 我想找到按以下分组的中值id 我正在使用此代码来查找它 但它给了我这个错误 from pyspark sql import DataFrameStatFunctions as st
  • 如何使用angularjs动态显示表中的对象数组?

    我使用 angular js 作为我的字体端 使用 node js 作为服务器端 使用 PostgreSQL 作为数据库 现在 我在数据库中有一些值列表 数据库 控制器代码 我得到以下输出console console log scope
  • 计算二维数组的页面错误数

    我正在努力学习考试 我找到了这个例子 但不明白他们是如何得到答案的 有人可以解释一下吗 问题 考虑二维数组 A int A 新 int 100 100 其中 A 0 0 位于页大小为 200 的分页内存系统中的位置 200 操作矩阵的小进程