驻留集
驻留集:指请求分页存储管理中给进程分配的内存块的集合。
在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。
驻留集,从某种角度可以看成是进程可以常驻内存的内存块的集合。
- 若驻留集太小,会导致缺页频繁,系统要花大量的时间来处理缺页,实际用于进程推进的时间很少;
- 驻留集太大,又会导致多道程序并发度下降,资源利用率降低。所以应该选择一个合适的驻留集大小。
分配和置换策略
分配策略
- 固定分配:操作系统为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。即,驻留集大小不变。
- 可变分配:先为每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。即,驻留集大小可变
置换策略
- 局部置换:发生缺页时只能选进程自己的物理块进行置换。
- 全局置换:可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。
对于局部置换,在缺页进程内部进行置换,易进行性能分析
对于全局置换,内存中所有未锁定页面均在置换范围。更为简单,容易实现,运行开销小
根据上述策略进行组合,如下表所示
局部置换 | 全局置换 | |
---|---|---|
固定分配 | √ | × |
可变分配 | √ | √ |
注意:全局置换意味着一个进程拥有的物理块数量必然会改变,因此不可能是固定分配
固定分配+局部置换
- 进程开始前要决定分配多少页框
- 分配过少会导致高缺页率
- 分配过多,内存进程少
可变分配+局部置换
- 新进程装入时,根据类型、请求等分配一定数目页框
- 缺页时从该进程驻留集选择页面置换
- 不时评估分配情况,以增加或减少页框数
可变分配+全局置换
- 适用于大多数OS,易于实施
- OS维持一定数目的空闲页框,以快速分配
- 缺页时,空闲页框添加到进程驻留集
- 无空闲页框,置换。较好的选择是页面缓冲算法。
注:
可变分配全局置换:只要缺页就给分配新物理块
可变分配局部置换:要根据发生缺页的频率来动态地增加或减少进程的物理块
调入策略
有两种常见的调入策略:请求调页和预调页
预调页
一般是在发生缺页需要调入某页时(或初始),一次调入该页以及相邻的几个页。
基于程序的局部性原理,读取磁盘上连续存放的多个页面更加有效。
优点:提高调页的I/O效率。
缺点:基于预测,若调入的页在以后很少被访问,则效率低
请求调页
之前在讲解虚拟存储的实现方式的时候提到过请求调页机制,核心是访问到某页的一个单元时才调页。
进程在运行期间发现缺页时才将所缺页面调入内存。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,而每次调页都要磁盘I/0操作,因此I/0开销较大。
实际上,现代OS都是结合预调页和请求调页,在进程运行前进行预调页,在进程运行期间进行请求调页。
调入地点
如图所示,这里磁盘中有一个连续分配的对换区,类似于Cache的设计理念,读写速度很快,可以高速调入调出页面。
当系统缺少足够的对换区空间的时候就需要从文件区调入,对于可能被修改的部分,换出时需要写回对换区,然后下次使用从对换区调入。
在Unix的OS中,通常进程运行之前数据都是在文件区,而使用过的页面需要换出时就需要写回对换区,下次从对换区调入。
抖动
刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动,或颠簸。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)
为进程分配的物理块太少,会使进程发生抖动现象。为进程分配的物理块太多,又会降低系统整体的并发度,降低某些资源的利用率
那么到底该如何分配呢?有著名学者提出了工作集的概念
工作集:指在某段时间间隔里,进程实际访问页面的集合,一般比驻留集的小。
这里的工作集类似于算法中的滑动窗口,一次处理一个区间,窗口根据不同时刻的条件动态调整窗口大小来分配合适的物理块数。