练习与思考题
1. 试说明缺页与一般中段的主要区别。
答 :缺页中断与一般中断一样,需要经历保护CPU香肠、分析中断原因、转中断处理程序进行及恢复中断现场等步骤。但缺页中断是一种特殊的中断,他与一般中断的区别:
(1)在指令执行期间产生和处理中断,。通常cpu是在一条至六年个执行之后去检查是否有中断发生,若有边去处理中断;否则继续执行下一跳指令。而缺页中断是在指令执行期间发现所要访问的指令或数据不再内存时产生和处理中断。
(2)一条指令执行期间可能产生多次中断。对于一跳要求读取多个字节数据的指令,指令中的数据可能跨越两个页面。该指令执行时可能要发生3次中断,一次是访问指令,另外两次访问数据。
2. 局布置换和全局置换有何区别?在多道程序系统中建议使用哪一种? 答 :局部置换是指当前进程在执行过程中发生缺页时,旨在分配给该进程的物理块中选择一页换出。全局置换是指在所有用户使用的整个存储空间中选择一个页面换出。
在多道程序系统中建议使用局部置换策略。这样即使某个进程出现了抖动现象,也不致引起其他程序产生抖动,从而将抖动局限在较小的范围内
3. 虚拟存储的特征是什么?虚拟存储器的容量受到哪两个方面的限制? 答:虚拟存储器的特征有以下几个方面:
(1)离散性:指进程不必装入连续的内存空间,二十“见缝插针”。
(2)多次性:只一个进程的程序和数据要分多次调入内存。
(3)对换性:指进程在运行过程中,允许将部分程序和数据换进、换出。
(4)虚拟性:指能从逻辑上扩充内存容量。
虚拟存储器的容量主要是受计算机的地址长度和外存容量的限制。
4.已知页面走向是1、2、1、3、1、2、4、2、1、3、4,且进程开始执行时,内存中没有页面,若给该进程分配2个物理块,当采用以下算法时的缺页率是多少?
(1)先进先出置换算法。
(2)假如有一种页面置换算法,它总是淘汰刚使用过的页面。
答:页面引用11次,缺页8次,缺页率为8/11=72.7%。
4. 在请求页式存储管理系统中,使用先进先出(FIFO)页面置换算法,会产生一
种奇怪的现象:分配给进程的页数越多,进程执行时的却也次数反而越高。试举例说明这一现象。
答 :如果一个进程的页面走向为4、3、2、1、4、3、5、4、3、2、1、5,若给该进程非配3个物理块,其
引用12次,缺页9次
5. 某请求页式系统中,页的大小为100字,一个程序的大小为1200字,可能的
访问序列如下:10、205、110、40、314、432、320、225、80、130、272、420、128,若系统采用LRU置换算法,当分配给该进程的物理块数为3时,给出进程驻留的各个页面的变化情况、页面淘汰情况及缺页次数。
答 :由于页的代谢奥为100字,因此访问序列10、205、110、40、314、432、320、225、80、130、272、420、128对应的页号是0、2、1、0、3、4、3、2、0、1、2、4、1。给该进程分配3个物理块,采用LRU置 被淘汰的页号分别是2、1、0、4、3、0,共9次。
7.在一个采用局部置换策略的请求页式系统中,分配中给进程的物理块数为4,
其中存放的4个页面的情况如表。
进程6-1 进程四个页面的情况
页号存储块号加载时间访问时间访问位修改位
1
2
32103301601022016015716216500111001
当发生缺页时,分别采用下列页面置换算法时,讲置换哪一页?并解释原因。 OPT(最佳)置换算法;
答:OPT(最佳)置换算法是选择永久不用的也活长时间不用的也,将其患处,题目中没有给出页面的将
来走向,所以无法判断将置换哪一页。
FIFO(先进先出)置换算法;
答:FIFO(先进先出)置换算法是选择最先装入内存的页面,将其换出。从表中可知,应考察的是页面
的加载时间,加载时间最小的是10,因此最先装入内存的是第2页。
LRU(最近最少使用)置换算法;
答:LRU(最近最少使用)算法时选择最近最久没有被访问的页面,将其换出。应考察的是页面的访问时
间,访问时间最小的是157,因此最近最久没有被访问的是第1页。
Clock置换算法。
答:CLOCK置换算法时LRU算法的变种,他首先选择访问位和修改位均为0的一页,将其换出。满足该条件的是第1页
8.某虚拟存储器的用户空间有32个页面,每页1KB,内存大小为16KB,假设某时刻系统为用户的第0、1、2、3页分配得物理块号是5、10、4、7,而该用户进程的长度是6页。试将以下16进制的虚拟地址转换成物理地址。
(1)0X0A5C
答:物理地址是0001001001011100
(2)0X103C
答:产生缺页中断
(3)0X257B
答:产生越界中断
(4)0X8A4C
答:地址过大,错误
9.在请求页式存储管理系统中,页面大小是100字节,有一个50X50的数组按行连续存放,每个整数占2字节。将数组初始化的程序如下
程序A: 程序B:
int i,j; int i,j;
int a[50][50]; int i,j;
for (i=0;i<50;i++) for (j=0;j<50;j++)
for (j=0;j<50;j++) for (i=0;i<50;i++) a[i][j]=0; a[i][j]=0; 若在程序执行过程中,内存中只有一个页面用来存放数组的信息,试问程序A和程序B执行时产生的中断次数分别是多少
答:由题知,数组a中有50X50=2500个整数,每个整数占2个字节,数组共需要2X2500=5000字节。儿页面的大小是100字节,则数组占用的空间为5000/100=50页。
对于程序A:由于数组是按行存放的,而初始化数组的程序也是按行进行初始化的。因此当缺页后调入的一页,位于该页的所有数组元素全部进行初始化,然后再调入另一页。 所以缺页的次数为50次。 对于程序B由于数组是按行存放的,而初始化数组的程序却是案例额进行初始化的。因此当缺页后调入的一页中,位于该页撒谎能够的数组元素只有一个,所以程序B每访问一个元素长生一次缺页中断,则整个数组将长生2500次缺页。