虚拟内存主要是为了完成内存扩充的功能
3.2.1 虚拟内存的基本概念
传统存储管理方式的特征
缺点:
1.一次性,作业必须一次性装入内存后才能运行(比如LOL的20g空间必须全部装入大小为4g的内存中)
1)作业很大时,不能全部装入内存,导致大作业无法运行
2)作业很多时,由于内存无法容纳所有作业,导致多个作业运行的并发度下降
2.驻留性,作业一旦被装入内存,就会一直驻留在内存中(例如LOL游戏运行到一个界面时,起始只需要这个界面的资源,但是传统的方式就必须让所有可能的界面都存在于内存之中,大大消耗了内存空间)
总而言之,传统方式需要一些没用的信息占据内存,从而导致内存的利用率下降。
提出虚拟内存的概念
时间局部性原理:刚刚访问的资源在接下来的时间很容易被再次访问
空间局部性原理:刚刚访问的资源的位置在接下来的时间很容易再次访问其周边的位置
基于上述原理,提出了高速缓存技术
性质:多次性,对换性,虚拟性
3.2.2 请求分页管理方式
页表机制
页表产生的一些变换:
状态位:记录页面是否在内存中
访问字段:记录最近访问了几次,或者记录上次访问的时间
修改位:页面调入内存后是否被修改过,只有修改过的页面才需要置换出外存
外存地址:页面在外存中存放位置
缺页中断机构
两种情况:
1.内存中如果有空闲块
应该为进程分配一个空闲块,将所缺的页面填入该项
上图中,假设内存中a空闲,就将a块分配给0号页上,修改相应的标志位,就有了如下的情况:
2.内存中没有空闲块时
使用页面置换算法,淘汰一个页面,假设将c块分配给0号页
缺页中断属于内中断,是可以修复的
请求分页存储管理和基本分页存储管理的区别
1)所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存
2)内存空间不够,由操作系统将内存中暂时用不到的信息换出外存(使用页面置换的功能)
3)请求分页存储后需要修改表项
4)当请求调入或调出慢表中的页面时,快表中的页表也要随慢表的变化而变化
5)由于请求分页管理是由缺页中断导致的,所以和普通的中断一样,都需要保留程序断点,保护现场
6)页面的换入换出需要等待慢速的IO设备,如果换入换出太频繁,会有很大开销
3.2.3 页面置换算法
最佳置换算法(OPT)
每次淘汰的页面是以后永久不使用,或者最长时间不会访问的页面
缺页率=缺页次数/访问次数
先进先出置换算法(FIFO)
每次选择淘汰的页面是最早进入内存的页面
特征:算法性能差
最近最久未使用置换算法LRU(least recently used)
每次淘汰的页面是最近最久未使用的页面
实现方法:用访问字段记录该页面自上次以来,所经历的时间t
评价:算法开销比较大
时钟置换算法
是所有算法中性能和开销比较均衡的算法
实现方法:为每个页面设置一个访问位,再将内存中的页面都通过链接指针链接成一个循环队列,当某位被访问时,访问位为1,则访问位为1,表示最近访问过,访问位为0,表示表示最近没有访问过
具体访问过程:
1)由于系统为进程分配了5个内存块,所以先把前5个页面号的内存块链接成一个循环队列,并将状态位置为1
2)扫描第一次,将被扫描的页面的状态位从1置为0
3)第二轮,开始淘汰页面,下图是最后淘汰下来的结果
改进版时钟置换算法
采用(访问位,修改位)的形式来描述页面
最多进行4轮扫描
第一轮扫描:淘汰最近没访问,且没修改的页面,淘汰(0,0)
第二轮扫描:淘汰最近没访问,但修改过的页面,淘汰(0,1)本轮将所有访问位都置为0
第三轮扫描:淘汰最近访问过,但没修改的页面,淘汰(0,0)
第四轮扫描:淘汰最近访问过,且修改过的页面,淘汰(0,1)
优点:算法开销小,性能也不错
3.2.4页面分配策略
驻留集:请求分页存储管理中,给进程分配的物理块的集合
驻留集的大小一般小于进程的总大小,但是不能太小,太小的话进程会出现大量缺页的情况,而选择的驻留集太大,又会导致多道程序的并发度下降,资源利用率降低,所以应给一个进程选择一个合适大小的驻留集
固定分配:操作系统为每次进程分配一组固定数目的物理块,在进程运行期间不再改变,即驻留集大小不变
可变分配:与固定分配相对,驻留集大小可变
局部置换:发生缺页时只能选择进程自己的物理块进行置换
全局置换:可以将别的进程的物理块置换到外存,再分配给缺页的进程
局部置换 | 全局置换 | |
---|---|---|
固定分配 | ✓ | × |
可变分配 | ✓ | ✓ |
说明:全局置换必定要求物理块数发生改变,所以不可能是有固定分配的方式
固定分配局部置换:进程运行前就分配一定数量的物理块,缺页时只能换出自己的某一页
可变分配全局置换:只要缺页就分配新的物理块
可变分配局部置换:要根据缺页的频率动态的增加或减少进程的物理块
何时调入页面
1.预调页策略
常用于进程的首次调入(运行前调入)
2.请求调页策略
进程在运行期间发生缺页才将缺页面调入内存(运行时调入)
何处调入页面
外存分为文件区和对换区,对换区的读写速度更快,采用连续存储方式文件区的读写速度慢,采用离散分配的方式。
- 当系统有足够的对换区空间时,调入调出页面是内存和对换区之间进行的
- 系统中缺少足够的对换区空间时:凡事不会被修改的数据是从文件区调入,而修改过的数据,调出到对换区,下次需要时再调入
- UNIX系统:第一次调入是从文件区调入内存,若被使用过的页面需要调出到对换区,下次需要时再从对换区调入
颠簸现象
刚刚换出的页面马上又要换入内存,这种频繁的页面调入调出行为称为颠簸或抖动现象,产生抖动的主要原因是进程频繁访问的页面数量高于可用的物理块==(即分配给进程的物理块不够)==
工作集
与驻留集对比记忆
驻留集:请求分页储存管理中给进程分配的物理块集合(比较大,针对整个进程)
系统为某个进程分配了n个物理块==(等价于)某个进程的驻留集大小为n
工作集:某段时间内进程实际访问的页面的集合(比较小,针对一段时间)