综合应用题对下面列出的内存管理方案,简要地描述操作系统软件执行的功能。1. 单一重定位分区。
单一重定位分区:系统启动时,操作系统在重定位寄存器中装入用户程序可以访问的最低内存地址。
2. 多重固定分区。
多重固定分区:当操作系统启动时,在界限寄存器中装入分区大小。操作系统记录哪些分区已用和哪些分区空闲。当创建进程或进程终止时,操作系统必须更新分区使用数据。在将进程分配给内存时,操作系统必须检查进程是否小于分区大小。当进程获得CPU控制权时,操作系统必须在重定位寄存器中装入进程起始地址。
3. 简单分段。
简单分段:操作系统必须记录哪些内存已使用和哪些内存空闲。当创建进程时,操作系统必须把段装入内存并为进程创建段表。当进程终止时,操作系统必须释放它所占用的内存空间。当进程获得CPU控制权时,操作系统必须在内存管理寄存器中装入进程的段表。如果出现分段错误,操作系统必须处理错误。
对下面列出的内存管理方案,简要地描述存储器管理硬件的功能。4. 单一重定位分区。
单一重定位分区:每次访问内存时用该位置的地址加上重定位寄存器中的地址形成物理地址。
5. 多重固定分区。
多重固定分区:每次访问内存时将逻辑地址和界限寄存器中的地址进行比较。大于界限寄存器中地址的地址将产生内存出错陷阱。同时,逻辑地址加上重定位寄存器中的地址形成物理地址。
6. 简单分段。
简单分段:每次访问内存时,分段硬件把逻辑地址转换成物理地址。逻辑地址中的段号位被用做段表的索引。逻辑地址的段偏移位加上从相应段表项中得到的段起始地址形成物理地址。
7. 建立了一个包含可重定位代码的程序,假定它装在地址100处。在代码中,程序访问了地址:135,160,220,224。如果程序被装入内存起始位置500,那么这些地址应该如何变化?
8. 某系统有2
32B的内存,采用固定分区,大小为2
20B,进程表项中最少需要多少位来记录被分配了进程的分区。
在多重可变分区方案中:9. 如果标记分区未地址的寄存器包含分区大小,那么硬件是如何使用这个寄存器的?
程序产生的每个逻辑地址和界限寄存器比较。任何大于界限寄存器的地址将造成内存出错陷阱。
10. 如果标记分区未地址的寄存器包含分区的物理未地址,那么硬件是如何使用这个寄存器的?
每个逻辑地址加上重定位寄存器产生物理地址,然后将物理地址和最大物理地址比较。任何大于最大物理地址的地址将造成内存出错陷阱。
11. 寄存器中存放分区大小与存分区的最大地址相比,主要的优点是什么?
在重定位寄存器加上逻辑地址的同时,将逻辑地址和界限寄存器比较。之后将物理地址和最大物理地址比较。通过同时比较,能较快完成虚实地址转换。
12. 某系统使用大小分别为2
8B,2
24B,2
64B的固定分区,问界限寄存器必须有多少位?
13. 某系统使用的固定分区大小为2
PB,问界限寄存器必须有多少位?
14. 在某页式系统中,有2
32B的物理内存,2
12页的虚地址空间,且页的大小为512B,问虚地址有多少位?一个页帧有多少字节?物理地址中用多少位表示页帧?页表中有多少项(页表有多长)?页表需要多少位来存入一个页表项(假定每个页表项除了页帧号外还包含一个有效/无效位)?
15. 在某页式系统中,页表包含512项,每个页表项有16位(包含有效/无效位),每页大小为1024B,问逻辑地址中有多少位用来表示页号?逻辑地址中有多少位用来表示页内偏移量?逻辑地址共有多少位?物理地址中有多少位用来指定页帧号?物理地址中有多少位用来表示页帧内偏移量?物理地址共有多少位?物理地址空间的大小?
某使用二级页表的系统的虚地址是32位。地址的前8位是一级页表的索引,后10位指定二级页表项。试问:20. 某计算机有64位虚地址空间,且页大小是2048B。每个页表项长为4B。因为所有页表都必须包含在一页中,所以使用多级页表。问一共需要多少级?
21. 在某页式系统中,相联寄存器存放了最活跃的页表项,并且将全部的页表都存储在主存中。查询相联寄存器要花60ns,查询主存中页表要花200ns。当相联寄存器的命中率为40%时,问有效访问时间是多长?
22. 在某页式系统中,联想存储器存放了最活跃的页表项,并且将全部的页表都存储在主存中。查询联想存储器要花90ns,查询主存中页表要花190ns。问命中率为多少时,有效访问时间是120ns?
23. 用C语言函数模拟简单分段系统的存储器管理硬件,编写一个函数Trans,把分段的虚地址转换成物理地址,并返回一个int类型的物理地址。假设已经编写了一个处理分段错误的函数Fault。segTable变量包含了段表。
Struct SegTableType {
int loc; /*段起始地址*/
int len; /*段的字节数即长度*/
};
Struct VirtualAddressType {
int seg; /*段地址*/
int off; /*偏移量*/
};
Struct SegTableType segTable[NUMBER_SEGMENTS];
Void Fault(); /*处理分段错误*/
函数代码如下:
int Trans(struct VirtualAddressType virtAddr) {
int physAddr=-1;
if(virtAddr.off>=segTable(virtAddr.seg).len)
fault();
else
physAddr=segTable(virtAddr.seg).loc+virtAddr.off;
return physAddr;
}
在某简单分段系统中,给定下列段表(下表),试计算每个逻辑地址对应的物理地址。如果地址产生了分段错误,请指明。 段 | 基址 | 长度 |
0 | 1100 | 500 |
1 | 2500 | 1000 |
2 | 200 | 600 |
3 | 4000 | 1200 |
本题中使用十进制数,页大小为5000B,并使用如表所示页表。 存在位 | 页框号 |
0 | 333 |
1 | 300 |
1 | 1000 |
0 | 100 |
0 | 500 |
1 | 120 |
0 | 412 |
1 | 740 |
问下面的哪些虚地址产生缺页?对于不关系到缺页的虚地址求转换后的物理地址。本题中使用二进制,页大小为26B,并使用如表所示页表。 存在位 | 页框号 |
1 | 00101 |
1 | 01011 |
0 | 00001 |
1 | 11010 |
0 | 00011 |
0 | 10101 |
0 | 11111 |
1 | 10101 |
... | ... |
下列哪些虚地址将产生缺页?对于那些不产生缺页的虚地址求转换后的物理地址。37. 某系统使用请求分页存储管理,如果页在内存中,满足一个内存请求需要250ns。如果页不在内存,如有空闲的页帧或换出的页没有被修改则需要5ms。如果换出的页已被修改则需12ms。如果缺页率是2%,并有40%的要换出的页被修改,问有效访问时间是多长?假设系统只运行一个进程且页交换时CPU空闲。
38. 某系统使用请求分页存储管理,如果页在内存中,满足一个内存请求需要150ns。缺页率为10%。为了使有效访问时间达到500μs,求不在内存的页面的平均访问时间。
39. 假设系统的内存总量和缺页率成反比。每次内存加倍,缺页率就减少1/3,当前系统有32Mb内存。缺页率为2%。当不发生缺页时,访问时间是500ns,整体的有效访问时间是300μs。问如果内存被增加到128Mb,整体的访问时间是多少?
给定一个系统的各种资源的利用率如下:
CPU 低
交换设备 低
其他I/O设备 高
对于如下情况,说明是明显改进、明显降低了CPU利用率,还是对CPU利用率影响很小。已知某程序访问以下页面:
0,1,4,2,0,2,6,5,1,2,3,2,1,2,6,2,1,3,6,2
如果程序有3个页帧可用且使用下列替换算法,求出现缺页的次数。51. 某系统使用段页式的存储管理,通过查找联想存储器访问已换入的内存区域需要花费150ns。如果必须使用主存页表,访问要花费400ns。如果要替换的页已经修改则导致中断的访问要花8ms,否则只要3ms。如果缺页率为2%,相联表命中率为70%,且50%的替换页都是修改过的,求有效访问时间。(假设系统只运行一个进程,而且交换时CPU空闲)
已知某系统有4个页帧,下表表示各个页、装入时间、最后访问时间、页面重写标志位、访问位。 页号 | 装入时间 | 最后访问时间 | 页面重写标志位 | 访问位 |
0 | 227 | 327 | 1 | 0 |
1 | 345 | 367 | 1 | 1 |
2 | 101 | 331 | 1 | 1 |
3 | 234 | 382 | 0 | 1 |
某系统使用请求段页式管理,有16位的虚地址空间,每个进程有2个段,页的大小为212B。段页表的内容说明如下表所示(均为二进制)。段长是页大小的增量。对于以下二进制虚地址,求它们转换后的物理地址,或说明它们是否产生缺页或段故障。
在虚拟页式存储系统中引入了缺页中断:58. 试说明为什么引入缺页中断?
虚拟页式存储系统是在页式存储系统的基础上实现虚拟存储器的,即作业在执行时并不是所有的页面均放入主存,那么当访问的页面不在主存时,则产生中断并由系统响应中断将该缺页由辅存调至主存,然后恢复中断并继续执行。所以,对于虚拟页式存储系统,系统必须引入相应的缺页中断。
59. 缺页中断的实现由哪几部分组成?分别给出其实现方法。
缺页中断的实现是由硬件和软件两部分共同完成:
①硬件方面。CPU在执行一条指令时首先形成操作数的有效地址,然后计算页号。检查页表,看该页是否在主存中。如果该页在主存则进行地址变换,按变换后的地址取出操作数并完成该指令的功能,然后继续执行下一条指令;如果该页不在主存,则引起缺页中断并进入缺页中断处理程序。
②软件方面。在中断处理程序中,首先利用存储器分块表(MBT)检查主存是否有空闲块,如果没有则选择主存中的一页淘汰(该页被修改过还需写入辅存),并修改页表(PMT)和存储器分块表,此时便出现了空闲块。在有空闲块的情况下,系统根据页表中提供的该页磁盘地址将该页调入主存的空闲块中,然后修改PMT和MBT,最后再重新执行刚才被中断的指令。