【正确答案】内存计算的变化很多,本题主要考查考生对内存管理的理解。根据题意,本系统采用的是虚拟存储系统,因此立即可以想到,进程一定是部分调入。从题目给出的条件可知,进程共有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页只要从来没有被换出到交换区,就没有外存块号。