问答题 某虚拟存储系统中有一个进程共有6页(0~5),其中代码占3页(0~2),数据占1页(3),数据堆占1页(4),用户栈占1页(5)。它们依次存放在外存的22、23、25、26存储块。当前,代码页已经分配在物理内存的66、67、87页,数据页为31,并已经进行了修改。数据堆页还没有分配内存,用户栈分配在01页。请问:
(1)页表中应该包含哪些项目?请填写此页表(见下表)。
页表
逻辑页号 存在位 修改位 引用位 保护方式 引用时间 外存块号 内存页框号
0 1203
1 1178
2 1225
3 1020
4
5 1250
(2)若内存堆申请内存,因无分配物理内存而产生缺页中断,此时内存无空闲页面,则采用LRU页面淘汰算法选中内存的哪个页面?操作系统作何处理?页表又如何变化?设当前时刻为虚拟时间1256。
【正确答案】内存计算的变化很多,本题主要考查考生对内存管理的理解。根据题意,本系统采用的是虚拟存储系统,因此立即可以想到,进程一定是部分调入。从题目给出的条件可知,进程共有6页(0~5),其中代码占3页(0~2),数据占1页(3),数据堆占1页(4),用户栈占1页(5)。这个条件显然是虚拟存储管理的实际情况,进程的逻辑页有6页,因此分配的虚拟空间也是6页。按题意,页面依次存放在外存的22、23、25、26存储块。这个条件告诉我们,进程对应的外存是4块,显然,有2页是在进程运行过程中产生的,一般数据堆和栈是在运行过程中产生的,在虚拟存储管理中,数据堆和栈对应的外存应该在对换区上,而且只有在换出时才分配,所以在外存地址中一般是不包含堆和栈的。题目还提供了当前代码页已经分配在物理内存的66、67、87页,数据页为31,并已经进行了修改。此信息说明虚拟存储管理已经分配了物理内存页框,而且数据页还被修改了,那么应该在页表中表现出来。题目还告诉我们数据堆页还没有分配内存,显然还没有使用。用户栈分配在01页。表示栈也已经分配内存页框了。据此就可以填写表格了。
上面已经提到,数据堆还没有分配,当用到该页时,由于不在内存,故产生缺页中断,题目的意思是在本进程内进行页面置换。当采用LRU算法时,考虑LRU算法是最近最久未使用的页面淘汰掉,从给定的条件看,数据页3被引用的时间为1020,最久未使用,而且记录的时间为引用时间,所以该页还是最近未使用,故这页被选中淘汰,该页框被分配给数据堆页。解答如下:存在位表示是否在内存;修改位根据题意,只有数据页修改了,故为1;引用位表示该页的使用情况,在没有特别说明的情况下,只要该页面被调入内存,对虚拟存储管理来说,该页就一定被引用。保护方式代码页只能读和运行,数据页可以读写,栈可以读写,外存块号和内存页框号由题目给出,填写如下。
(1)页表填写见下表。
填写页表
逻辑页号 存在位 修改位 引用位 保护方式 引用时间 外存块号 内存页框号
0 1 0 1 可读、可运行 1203 22 66
1 1 0 1 可读、可运行 1178 23 67
2 1 0 1 可读、可运行 1225 25 87
3 1 1 1 可读、可写 1020 26 31
4 0 可读、可写
5 1 0 1 可读、可写 1250 01
(2)当内存堆申请内存时,产生缺页中断,采用LRU页面淘汰算法选中数据页,操作系统根据页表修改位发现该页已经被改写了,所以首先要将该页写回外存块中,修改该页表,然后将该页分配给数据堆页,重新修改数据堆页的页表,返回到缺页中断的那条指令,继续执行。修改的页表见下表。
修改的页表
逻辑页号 存在位 修改位 引用位 保护方式 引用时间 外存块号 内存页框号
0 1 0 1 可读、可运行 1203 22 66
1 1 0 1 可读、可运行 1178 23 67
2 1 0 1 可读、可运行 1225 25 87
3 1→0 l→— 1→— 可读、可写 1020→— 26 31→—
4 0→l —→0 —→1 可读、可写 —→1256 —→31
5 1 0 1 可读、可写 1250 01
逻辑4、5页只要从来没有被换出到交换区,就没有外存块号。
【答案解析】