软考系统架构设计师考这样的题,大家可能觉得有问题?
我对这个题的看法,
1. 首先作为一个架构师,需要了解操作系统的基础知识吧,这个绝对是没争议的,作为程序员必须要熟悉的基础,要了一定的层次,如果还不懂操作系统的知识,那还算是合格的架构师?
2. 这个题同样考察了一定的思维逻辑在里面,属于比较综合的题型,包括对一维数组、二维数组的理解,操作系统缺页中断的理解,高级语言嵌套循环的写法,等等,涉及到的知识比较广,又比较基础,所以是对一个人IT的基础知识的考察。
如果基础都不懂?架构师? 别闹了,后面还有排队的,你先靠后...
某虚拟存储系统采用最近最少使用(LRU)页面淘汰算法,假定系统为每个作业分配4个页面的主存空间,其中一个页面用来存放程序。现有某作业的
程序如下:
Var A: Array[1..100,1..100] OF integer;
i,j: integer;
FOR i:=1 to 100 DO
FOR j:=1 to 100 DO
A[i,j]:=0;
设每个页面可存放200个整数变量,变量i、j存放在程序页中。初始时,程序及i、j均已在内存,其余3页为空。若矩阵A按行序存放,那么当程序执行完后共产
生( )次缺页中断;若矩阵A按列序存放,那么当程序执行完后共产生( )次缺页中断。
A.50
B.100
C.5000
D.10000
A.50
B.100
C.5000
D.10000
若矩阵A按行序存放,什么意思呢?
什么是行序、什么是列序?由题意中描述的每个页面存放200个遍历,行序的意思就是,2行(100*100矩阵)的数据由一个页面存储,同理列序意思就是2列的数据由一个页面存储。
一图胜千言,我们看下绘解的过程吧!!!
矩阵为 100*100,我这里更喜欢叫它二维数组,那么存放了10000个数据,每200个数据可以存放到内存的一个页面中。
按行序存放的二维数组,每2行就可以占用一个内存页面,初始状态内存中的3个页面都是空的,那么访问第0和1行时,发生一次却也中断,访问2和3、4和5行的时候也会发生缺页中断。
因为内存中只有3个页面空闲了,那么访问6和7行的时候,会按一定的算法淘汰掉之前用过的页面,也会发生缺页中断。
总结:对于二维数组,每2行发生一次缺页中断,总共100行,也就是总共发生了50次缺页中断。
按列序存储就不一样了, 二维数组中的第0列和第1列,存放在内存中的一个页面,第2和3列存放在内存中的一个页面,以此类推...
题目中的嵌套循环,是按行为单位遍历二维数组,所以访问Array[0,0]、Array[0,1]发生一次缺页中断,访问Array[0,2]、Array[0,3]时候又发生一次缺页中断,那么二维数组的一行就需要发生50次缺页中断,这就是所谓的系统“抖动现象”。一共需要访问100行数据,每行50次缺页中断,因此列序存储的缺页中断次数为5000次。
如何想深入了解操作系统存储管理、缺页中断问题,可以参考以下文章: