虚拟存储器
由操作系统提供一个比实际内存大的,假想的特大存储器,实现用小的内存在大的虚空间中进行程序运行
基本概念: 程序运行具有局部性
☞时间局部性:被引用过一次的存储器位置可能在不远的将来被再次引用
☞空间局部性:如果一个存储器被引用了一次,程序可能在不远的将来引用其附近位置的一个存储器
定义
具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的存储器系统
- 运行
(1)逻辑容量由内外存容量之和决定
(2)运行速度接近于内存速度
(3)每位的成本接近于外存
特征
(1)离散分配方式
(2)多次行:作业被分成多次调入内存
(3)对换性:运行作业运行时换行换进换出(进程整体对换不算)
(4)虚拟性:逻辑上扩容,使用户所看到的内存容量远大于实际内存
请求分页存储管理方式
基本结构
- 页表项信息
- 缺页中断机构
当被访问页面不在内存中时产生缺页中断通知OS,由OS将所缺页调入内存
(1)保护CPU环境
(2)分析中断原因
(3)转入缺页中断处理程序
(4)恢复CPU环境
- 地址变换机构
☞产生和处理缺页中断(请求调入)
☞从内存中换出一页的功能(置换)
内存分配
☞ 最小物理块数确定:少于此数量则进程无法运行
☞物理块的分配策略
-
固定分配,局部置换
物理块分好后整个运行期间不再改变,缺页时从该进程n个页面中选一个换出,然后再调入一页
难点:难以把握分配到合适的物理块数 -
可变分配,全局置换(最易实现)
(1)为每个进程分配一定数目的物理块
(2)OS管理一个空闲物理块队列,发生缺页时取出一块分配给进程,装入欲调入页
(3)空闲空间不足时可与其他任何进程页面置换(会使其他进程缺页率提高,影响运行)
☞物理块的分配算法
- 平均分配算法
将所有可供分配物理块平均分配
不足:未考虑进程本身大小,利用率不均 - 按比例分配算法
设共有n个进程,则每个进程分到的物理块
b应取整且大于最小物理块数 - 考虑优先权的分配算法
物理块分为两部分。一份按比例分给各进程,另一部分根据优先权适当分给各进程
调页策略
☞何时调入页面
-
欲调页策略
通过预测,将不久后可能被访问的页面预先调入内存(主要用于首次调入,由程序员指出)
优点:一次性调入若干页,效率较好
缺点:无法保证准确性 -
请求调页策略
运行需要的页面不在内存中,提出请求让OS将其调入内存
优点:容易实现;确定调入的页一定会被访问
缺点:每次仅调入一页,需花费较大系统开销,增加磁盘I/O的启动频率
☞从何处调入页面
- 有足够对换区空间:对换区->内存
- 缺少足够对换区空间
文件区:操作不会被修改的部分(无需进行写入操作的部分)
对换区:操作可能被修改的部分 - UNIX方式:
首次请求(未运行过):文件区->内存
再次请求调用:对换区->内存
☞调入过程
(1)开始运行:先预调入一部分页面
(2)运行中:需要的页面不存在时
页面置换算法
进程运行时请求的页面不在内存中,且进行调入时内存无空闲空间,须将内存中的页面调入外存
算法应具有较低缺页率
※缺页率=页面调入次数(缺页次数)/页面使用总次数
最佳置换算法OPT:
页面换出后永不再用,或未来不会再访问
- 优点:保证获得最低缺页率
- 不足:无法实现
- 作用:作为评价其他算法的标准
先进先出置换算法FIFIO
已调入页面按先后次序组成队列,设置指针指向队首最老页面,内存中驻留最久的页面先被置换
- 优点:实现简单
- 不足:与进程实际运行规律不相适应,出现Belady现象
最近最久未使用置换算法LRU
- 不足:
(1)有时页面过去和未来走向无必然联系
(2)需较多硬件支持:记录每个页面距上次访问所过时间t,淘汰是选择页面t值最大的。需要利用寄存器或栈快速得出哪页最久未使用 - 寄存器记录时间的原理
每个页面设置位数与进程页面总数相同的移位寄存器R
页面被访问后将对应寄存器的Rn-1置为1,被用到的标志1逐渐由低位向高位积累
(1)系统发送定时信号,每隔一段时间所有寄存器右移一位
(2)计较寄存器的值,最小的即为最久未用的 - 栈记录时间的原理
页面被访问后将页号从栈中移出再压入栈顶。栈底页号即为最久未使用页面
轮转算法clock(最近未使用算法)
(1)每页设置使用标志位use bit,页面被访问后将其置为1
(2)设置指针在需要置换时从当前指针位置按地址向后检索,寻找use bit=0的页面作为被置换页,若指针则再返回队首检查
(3)将经过的use bit =1的页面bit值置为0(暂不调出)
- 改进
(1)进一步将未访问过的页面细分为是否修改过,减少因修改造成的频繁I/O操作
(2)除使用标志a,增加是否修改标志m
(3)置换优先级:先a=0,m=0,没有时选择a=0,m-1
特殊现象
- Belady现象:可分配的页面数增多,缺页率反而提高
产生原因:FIFO算法的置换特征与进程访问内存的动态特征矛盾 - 系统抖动:处理器的大部分时间用于来回的页面调度
☞产生原因:页面淘汰算法不合理;分配给进程的物理页面数过少
☞后果:
(1)缺页率急剧增加
(2)内存有效存取时间变长
(4)系统吞吐量骤减,CPU效率降低
☞预防方法
(1)局部置换策略
(2)页面调入内存前检查各进程工作集,为缺页率高的作业增加有限物理块
(3)缺页平均时间(S)=置换一个页面所需时间(L)时,磁盘和cpu达到最大利用率
(4)在抖动发生时选择暂停部分进程,调节多道程序度
请求分段存储管理方式
程序在运行前只需调动若干分段便可成功启动,当所需段不在内存中时,请求OS将所缺段调入
硬件支持
- 段表机制
- 缺段中断机制
(1)由缺段中断机构产生缺段中断信号
(2)进入OS,由缺段中断处理程序将所需段调入内存
- 地址变换机构
段调入内存->修改段表->利用段表进行地址变换
增加缺段中断的请求及处理功能
分段的共享
- 实现方式:共享段表
段表记录内容:
(1)共享计数count:记录共享该段的进程数目
(2)存取控制字段:记录分给不同进程的存取权限
(3)段号:不同的进程使用不同的段号 - 分享过程
- 共享段的回收
(1)撤销在进程段表中对应的表项,执行count:=count-1
(2)count=0时,系统回收共享段表的物理内存,并撤销共享段表中对应的表项
分段保护
- 越界检查
比较:(1)段号和段表长度(2)段内地址和段长 - 存取控制检查
检查不同进程对共享段的使用。设置存取控制字段,规定:只读,只执行,读/写 - 环保护机制
访问相同/低特权环的数据;调用相同/高特权环的服务
低编号的环具有高优先权