操作系统——第五章 存储管理 第三节 覆盖与交换技术 第四节 页式管理
第五章 存储管理
第三节 覆盖与交换技术
覆盖与交换技术是在多道环境下用来扩充内存的两种方法。
- 覆盖技术
覆盖则主要在同一个作业或进程内进行
只能覆盖那些与覆盖程序段无关的程序段
- 交换技术
与覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构。
交换主要是在进程或作业之间进行
第四节 页式管理
一、静态分页管理(全部装入)
二、动态分页管理
动态页式管理分为请求页式管理和预调入页式管理。
基本思想:逻辑空间分页,物理空间分页面
页与页面同样大,页连续,页面可分散
用页号查页面号,用硬件做转换
页式管理采用请求调页或预调页技术实现了内外存储器的统一管理。
存储页面表也有两种构成方法:
1、位示图法
2、空闲页面链法
习题1、某计算机系统采用分页存储管理策略,拥有逻辑空间64页,每页4KB,拥有物理空间4MB。写出逻辑地址的格式,若不考虑访问权限等,(1)进程的页表有多少项?(2)每项至少有多少位?(3)如果物理空间减少一半,页表结构应相应进行怎样的改变?
答:逻辑地址包括页号和页内地址
题中逻辑空间64页,所以页号占了0~63, 2的6次方,需要占6个二进制位来表示;
页内地址每页4KB,需要占12个二进制位来表示
页号(17~12) |
页面号(11~0) |
页表项由程序的大小决定。
页表项是指:在分页系统中,为每个进程配置了一张页表,进程逻辑地址空间中的每一页,在页表中都对应有一个页表项。因为题中说逻辑空间64页,所以对应最多为64个页表项
页表结构=页号+页面号;页号需要6个二进制位表示,求出页面号的个数才能求出多少个位,
主存是4MB空间,每页大小4KB,所以4MB/4KB=2^10,总共16位
逻辑空间每页的大小和物理空间每页大小是相同的。所以物理块数=物理空间大小/页大小=4M/4K=2^10,故每个页表项至少有10位;
物理块跟页表项没有关系,如果物理空间减半,则页表中页表项数不变,但每项的长度可减少1位. 2MB/4KB=512, 9位
习题2、假定某分页管理系统,主存为64KB,分成16个页面,页面号为0,1,2,。。。15.假设某作业有5页,其页号为0,1,2,3,4,被分别装入主存的2,4,1,6,7页面。试问:该作业的总长度是多少字节(十进制),写出该作业每一页在主存中的起始地址。若给出逻辑地址[0,88],[1,150],请计算出相应的内存地址。
答:每页的大小为64KB/16=4KB;作业的页号为:
页号 |
页面号 |
0 |
2 |
1 |
4 |
2 |
1 |
3 |
6 |
4 |
7 |
作业的总长度:4KB*4+1B ~ 20KB
第0~4页的起始地址分别是:2*4KB、4*4KB、1*4KB、6*4KB、7*4KB
逻辑地址[0,88],0对应页号,页面号是2,则相应的内存地址为:2*4KB+88=2*4*1024+88;同理,逻辑地址[1,150],对应的内存地址为:4*4KB+150=4*4*1024*150
三、请求页式管理中的置换算法
1、随机淘汰算法 2、轮转法(RR) 3、***先进先出算法(FIFO)
4、***最近最久未使用页面置换算法(LRU) 5、最不经常使用页面淘汰算法(LFU)
6、最近没有使用页面淘汰算法(NUR) 7、理想型淘汰算法(OPT)[最佳]
例题:有一个虚拟存储系统。分配给某进程3页内存,开始时内存为空,页面访问序列如下:
6,5,4,3,2,1,5,4,3,6,5,4,3,2,1,6,5
(1)若采用先进先出页面置换算法(FIFO),缺页次数为多少?
(2)若采用最近最少使用页面置换算法(LRU),缺页次数为多少?
(3)若采用最佳页面置换算法算法呢?
答:
(1):17次 (2):17次 (3)11次
习题1、某采用页式虚拟存储管理的系统,接收了一个共7页的作业,作业执行时依次访问的页为1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。
若采用最近最少用(LRU)调度算法,作业在得到两块主存空间和四块主存空间时各会产生多少次缺页中断?
如果采用先进先出(FIFO)调度算法又会有怎样的结果?
答:(1)采用LRU算法,两块主存的情况:
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
|
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
注:标注下划线的为缺页的情况,共有缺页18次
采用LRU算法,四块主存的情况:
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
|
|
|
1 |
1 |
3 |
4 |
2 |
1 |
5 |
5 |
6 |
1 |
2 |
2 |
7 |
6 |
6 |
6 |
1 |
|
|
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
6 |
1 |
2 |
3 |
7 |
6 |
3 |
3 |
1 |
2 |
|
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
注:标注下划线的为缺页的情况,共有缺页10次
(如果访问的页在内存的时候,需要调整次序,则把需要执行的作业放到最后)
(2)采用先进先出(FIFO)调度算法,两块主存的情况:
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
1 |
*1 |
3 |
*3 |
2 |
*2 |
5 |
*5 |
2 |
*2 |
*2 |
3 |
*3 |
6 |
*6 |
2 |
*2 |
*2 |
3 |
*3 |
|
2 |
*2 |
4 |
*4 |
1 |
*1 |
6 |
*6 |
1 |
1 |
*1 |
7 |
*7 |
3 |
*3 |
1 |
1 |
*1 |
6 |
注:标注下划线的为缺页的情况,*号代表指针,共有缺页18次
采用先进先出(FIFO)调度算法,四块主存的情况:
1 |
2 |
3 |
4 |
2 |
1 |
5 |
6 |
2 |
1 |
2 |
3 |
7 |
6 |
3 |
2 |
1 |
2 |
3 |
6 |
1 |
1 |
1 |
*1 |
*1 |
*1 |
5 |
5 |
5 |
*5 |
*5 |
3 |
3 |
3 |
3 |
*3 |
1 |
1 |
1 |
1 |
|
2 |
2 |
2 |
2 |
2 |
*2 |
6 |
6 |
6 |
6 |
*6 |
7 |
7 |
7 |
7 |
*7 |
*7 |
3 |
3 |
|
|
3 |
3 |
3 |
3 |
3 |
*3 |
2 |
2 |
2 |
2 |
*2 |
6 |
6 |
6 |
6 |
6 |
*6 |
*6 |
|
|
|
4 |
4 |
4 |
4 |
4 |
*4 |
1 |
1 |
1 |
1 |
*1 |
*1 |
2 |
2 |
2 |
2 |
2 |
注:标注下划线的为缺页的情况,*号代表指针,共有缺页14次
(如果遇到指针指向的别的地址,但是不缺页,指针不需要变化)