鱼C论坛

 找回密码
 立即注册
查看: 1861|回复: 2

[已解决]操作系统选择题

[复制链接]
发表于 2021-9-7 21:46:59 | 显示全部楼层 |阅读模式
10鱼币
有一个矩阵为100行×200列,即a[100][200]。在一个虚拟系统中,采用LRU算法。系统分给该进程5个页面来存储数据(不包含程序),设每页可存放200个整数,该程序要对整个数组初始化,数组存储时是按行存放的。试计算下列两个程序各自的缺页次数(假定所有页都以请求方式调入)______。

程序一:
  1. for(i=0;i<=99;i++)
  2. for(j=0;j<=199;j++)
  3. A[i][j]=i*j;
复制代码


程序二:
  1. for(i=0;j<=199;j++)
  2. for(i=0;i<=99;i++)
  3. A[i][j]=i*j;
复制代码


A.100,200
B.100,20000
C.200,100
D.20000,100
答案:B

来个大神讲讲好吗?
最佳答案
2021-9-7 21:47:00
本帖最后由 人造人 于 2021-9-7 23:50 编辑
  1. 先看这个数组 a[100][200] 在内存中的布局
  2. 这个数组中的每一个元素都有一个唯一的地址
  3. a[0][0] 的地址是 0
  4. a[0][1] 的地址是 1
  5. a[0][2] 的地址是 2
  6. ...
  7. a[0][197] 的地址是 197
  8. a[0][198] 的地址是 198
  9. a[0][199] 的地址是 199
  10. ...
  11. a[1][0] 的地址是 200
  12. a[1][1] 的地址是 201
  13. a[1][2] 的地址是 202
  14. ...
  15. a[1][197] 的地址是 397
  16. a[1][198] 的地址是 398
  17. a[1][199] 的地址是 399
  18. ...
  19. a[2][0] 的地址是 400
  20. a[2][1] 的地址是 401
  21. a[2][2] 的地址是 402
  22. ...
  23. a[2][197] 的地址是 597
  24. a[2][198] 的地址是 598
  25. a[2][199] 的地址是 599
  26. ...
  27. a[97][0] 的地址是 19400
  28. a[97][1] 的地址是 19401
  29. a[97][2] 的地址是 19402
  30. ...
  31. a[97][197] 的地址是 19597
  32. a[97][198] 的地址是 19598
  33. a[97][199] 的地址是 19599
  34. ...
  35. a[98][0] 的地址是 19600
  36. a[98][1] 的地址是 19601
  37. a[98][2] 的地址是 19602
  38. ...
  39. a[98][197] 的地址是 19797
  40. a[98][198] 的地址是 19798
  41. a[98][199] 的地址是 19799
  42. ...
  43. a[99][0] 的地址是 19800
  44. a[99][1] 的地址是 19801
  45. a[99][2] 的地址是 19802
  46. ...
  47. a[99][197] 的地址是 19997
  48. a[99][198] 的地址是 19998
  49. a[99][199] 的地址是 19999

  50. 就是先存放 a[0][0] ~ a[0][199],然后存放 a[1][0] ~ a[1][199],然后是 a[2][0] ~ a[2][199],。。。
  51. 有一个公式可以计算出某一个元素的地址
  52. a[x][y] 的地址是 x * 200 + y
  53. 例如 a[98][2] 的地址是 98 * 200 + 2 = 19602

  54. 按照题意,一页可以储存 200 个数
  55. 就是 a[x][0] ~ a[x][199]


  56. 程序1 是这样访问数组的
  57. a[0][0], a[0][1], a[0][2], ..., a[0][197], a[0][198], a[0][199],
  58. a[1][0], a[1][1], a[1][2], ..., a[1][197], a[1][198], a[1][199],
  59. a[2][0], a[2][1], a[2][2], ..., a[2][197], a[2][198], a[2][199],
  60. ...
  61. 就是先访问 a[0][0] ~ a[0][199],然后访问 a[1][0] ~ a[1][199],然后是 a[2][0] ~ a[2][199], ...

  62. 在访问 a[0][0] 的时候,数据不存在,发生 1 次缺页,系统把 a[0][0] ~ a[0][199] 这 200 个数调入内存
  63. 之后访问 a[0][1], a[0][2], a[0][3], ..., a[0][197], a[0][198], a[0][199], 到目前为止一切正常
  64. 当访问 a[1][0] 的时候,数据不存在, 又一次缺页,系统把 a[1][0] ~ a[1][199] 这 200 个数调入内存
  65. 访问 a[2][0] ~ a[2][199] 一次缺页
  66. 这样一共是 100 次缺页
  67. 访问 a[0][0] 1 次
  68. 访问 a[1][0] 1 次
  69. 访问 a[2][0] 1 次
  70. 。。。
  71. 访问 a[97][0] 1 次
  72. 访问 a[98][0] 1 次
  73. 访问 a[99][0] 1 次
  74. 一共 100 次




  75. 程序2
  76. 访问 a[0][0] 一次缺页
  77. 然后访问的不是 a[0][1]
  78. 访问的是 a[1][0],现在在内存中的是 a[0][0] ~ a[0][199]
  79. a[1][0] 不在内存中,又一次缺页,系统调入 a[1][0] ~ a[1][199]
  80. 然后访问的是 a[2][0], 又一次缺页
  81. 系统调入 a[2][0] ~ a[2][199]
  82. 其实每一次缺页异常后,只用到了一个数
  83. 然后是 a[3][0] 异常
  84. 然后是 a[4][0] 异常
  85. 。。。
  86. 然后是 a[97][0] 异常
  87. 然后是 a[98][0] 异常
  88. 然后是 a[99][0] 异常
  89. 然后是 a[0][1] 这里还是异常,因为上一次载入内存的是 a[99][0] ~ a[99][199]
  90. 这一次用的是 a[0][1],这个数据在 a[0][0] ~ a[0][199] 这一页上
  91. 第一次缺页异常的确载入了 a[0][0] ~ a[0][199],但是系统只有 5 个页,a[0][0] ~ a[0][199] 这一页的内容早就被之前的操作覆盖了
  92. 就是程序2 访问一个数就会发生一次缺页异常
  93. 程序2 访问了 100 * 200 = 20000 次内存,发生了 20000 次异常
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-7 21:47:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2021-9-7 23:50 编辑
  1. 先看这个数组 a[100][200] 在内存中的布局
  2. 这个数组中的每一个元素都有一个唯一的地址
  3. a[0][0] 的地址是 0
  4. a[0][1] 的地址是 1
  5. a[0][2] 的地址是 2
  6. ...
  7. a[0][197] 的地址是 197
  8. a[0][198] 的地址是 198
  9. a[0][199] 的地址是 199
  10. ...
  11. a[1][0] 的地址是 200
  12. a[1][1] 的地址是 201
  13. a[1][2] 的地址是 202
  14. ...
  15. a[1][197] 的地址是 397
  16. a[1][198] 的地址是 398
  17. a[1][199] 的地址是 399
  18. ...
  19. a[2][0] 的地址是 400
  20. a[2][1] 的地址是 401
  21. a[2][2] 的地址是 402
  22. ...
  23. a[2][197] 的地址是 597
  24. a[2][198] 的地址是 598
  25. a[2][199] 的地址是 599
  26. ...
  27. a[97][0] 的地址是 19400
  28. a[97][1] 的地址是 19401
  29. a[97][2] 的地址是 19402
  30. ...
  31. a[97][197] 的地址是 19597
  32. a[97][198] 的地址是 19598
  33. a[97][199] 的地址是 19599
  34. ...
  35. a[98][0] 的地址是 19600
  36. a[98][1] 的地址是 19601
  37. a[98][2] 的地址是 19602
  38. ...
  39. a[98][197] 的地址是 19797
  40. a[98][198] 的地址是 19798
  41. a[98][199] 的地址是 19799
  42. ...
  43. a[99][0] 的地址是 19800
  44. a[99][1] 的地址是 19801
  45. a[99][2] 的地址是 19802
  46. ...
  47. a[99][197] 的地址是 19997
  48. a[99][198] 的地址是 19998
  49. a[99][199] 的地址是 19999

  50. 就是先存放 a[0][0] ~ a[0][199],然后存放 a[1][0] ~ a[1][199],然后是 a[2][0] ~ a[2][199],。。。
  51. 有一个公式可以计算出某一个元素的地址
  52. a[x][y] 的地址是 x * 200 + y
  53. 例如 a[98][2] 的地址是 98 * 200 + 2 = 19602

  54. 按照题意,一页可以储存 200 个数
  55. 就是 a[x][0] ~ a[x][199]


  56. 程序1 是这样访问数组的
  57. a[0][0], a[0][1], a[0][2], ..., a[0][197], a[0][198], a[0][199],
  58. a[1][0], a[1][1], a[1][2], ..., a[1][197], a[1][198], a[1][199],
  59. a[2][0], a[2][1], a[2][2], ..., a[2][197], a[2][198], a[2][199],
  60. ...
  61. 就是先访问 a[0][0] ~ a[0][199],然后访问 a[1][0] ~ a[1][199],然后是 a[2][0] ~ a[2][199], ...

  62. 在访问 a[0][0] 的时候,数据不存在,发生 1 次缺页,系统把 a[0][0] ~ a[0][199] 这 200 个数调入内存
  63. 之后访问 a[0][1], a[0][2], a[0][3], ..., a[0][197], a[0][198], a[0][199], 到目前为止一切正常
  64. 当访问 a[1][0] 的时候,数据不存在, 又一次缺页,系统把 a[1][0] ~ a[1][199] 这 200 个数调入内存
  65. 访问 a[2][0] ~ a[2][199] 一次缺页
  66. 这样一共是 100 次缺页
  67. 访问 a[0][0] 1 次
  68. 访问 a[1][0] 1 次
  69. 访问 a[2][0] 1 次
  70. 。。。
  71. 访问 a[97][0] 1 次
  72. 访问 a[98][0] 1 次
  73. 访问 a[99][0] 1 次
  74. 一共 100 次




  75. 程序2
  76. 访问 a[0][0] 一次缺页
  77. 然后访问的不是 a[0][1]
  78. 访问的是 a[1][0],现在在内存中的是 a[0][0] ~ a[0][199]
  79. a[1][0] 不在内存中,又一次缺页,系统调入 a[1][0] ~ a[1][199]
  80. 然后访问的是 a[2][0], 又一次缺页
  81. 系统调入 a[2][0] ~ a[2][199]
  82. 其实每一次缺页异常后,只用到了一个数
  83. 然后是 a[3][0] 异常
  84. 然后是 a[4][0] 异常
  85. 。。。
  86. 然后是 a[97][0] 异常
  87. 然后是 a[98][0] 异常
  88. 然后是 a[99][0] 异常
  89. 然后是 a[0][1] 这里还是异常,因为上一次载入内存的是 a[99][0] ~ a[99][199]
  90. 这一次用的是 a[0][1],这个数据在 a[0][0] ~ a[0][199] 这一页上
  91. 第一次缺页异常的确载入了 a[0][0] ~ a[0][199],但是系统只有 5 个页,a[0][0] ~ a[0][199] 这一页的内容早就被之前的操作覆盖了
  92. 就是程序2 访问一个数就会发生一次缺页异常
  93. 程序2 访问了 100 * 200 = 20000 次内存,发生了 20000 次异常
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-8 00:00:12 | 显示全部楼层



在访问 a[0][0] 的时候,数据不存在,发生 1 次缺页,系统把 a[0][0] ~ a[0][199] 这 200 个数调入内存

之前看的都是一个数代表一页,比如,第一页,第二页,...
这题是 200 个数代表一页,我之前的想法是一页 200 个数需要调 200 次才能全部调入
但现在是 200 个数都是一页,调入此页就是调入了 200 个数

谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 15:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表