操作系统笔记(三)虚拟内存管理
虚拟内存的基本概念
引入虚拟内存的原因
-
分段或分页的存储管理方法存在一次性和驻留性,使其很难满足较大作业或较多作业装入内存
-
虚拟内存管理技术是一种能够让作业部分装入就可以运行的存储管理技术
局部性原理
-
时间局部性
一条指令的一次执行和下次执行,一个数据的一次访问和下次访问,都集中在一个较短的时期内
-
空间局部性
当前指令和临近几条指令,当前访问的数据和临近的数据,都集中在一个较小的区域内
虚拟内存的定义及特征
- 虚拟存储器是不存在的,系统只是提供了部分装入,请求调入和置换功能。
- 虚拟内存让程序存在的地址空间与运行的存储空间分开
虚拟内存的特性
- 离散性:程序在内存中离散存储
- 多次性:一个作业可以分多次调入内存
- 对换性:作业在运行过程中可以调人、换出
- 虚拟性:从逻辑上扩充内存容量
虚拟内存的硬件和软件支持
相当数量的外村,一定容量的内存,中断机构,地址变换机构,相关数据结构;
请求分页存储管理方式
请求分页原理
- 是在分页存储管理系统的基础上,通过增加请求调页功能、页面置换功能所形成的一种虚拟存储系统
- 请求分页 = 基本分页 + 请求调页功能 + 页面置换功能
页表结构
- 在分页请求系统中使用的主要数据结构仍然是页表,其基本作用是将程序地址空间中的逻辑地址转换成内存空间中的物理地址
- 请求分页系统需要在页表中怎加若干项
- 页表各字段如下:页号、物理块号、状态位、访问字段、修改位、外存地址;
缺页中断与地址变换
-
在请求分页管理系统中,若所要访问的页面在内存中,其地址变换过程与分页存储管理相同;若访问的页面不在内存,则应先将该页面调入内存,在按基本分页存储管理相同的方式进行地址变换;
-
在调页过程中,若内存中有空闲空间则只需要将缺页调入到任意一个空闲的存储区中,再对页表中的相应表项进行修改
-
若无空闲空间,则需要向淘汰内存中的某些页面,若被淘汰页面被修改过,则要将其写回外存
-
缺页中断与一般中断的区别
- 缺页中断在指令的执行期间产生和处理缺页中断,一般中断是在指令执行完毕后检查是否有中断请求到达
- 一条指令可以产生多个缺页中断
请求分页管理方式的优缺点
- 优点:可以离散存储程序,降低了碎片数量;提供虚拟存储器,提高了主存利用率,有利于多道程序运行,方便用户
- 缺点:必须有硬件支持;有些情况下系统会产生抖动“现象”;程序最后一页仍存在未被利用的部分空间
页面置换算法
最佳置换 (OPT)算法
算法思想:在预知一个进程的页面号引用串的情况下,每次淘汰以后不再使用的或以后最迟在被使用的页面
- 最佳置换算法是最优的,具有最低的缺页率
- 最佳算法是无法实现的,只能作为一个标准来衡量其他置换算法的优劣
先进先出(FIFO)算法
算法思想:每次总是淘汰最先进入内存的页面(在内存驻留时间最长的页面)
- 算法实现结构简单,用一个队列的数据结构就可以实现
- 算法与进程实际运行规律不符,会产生Belady异常
最近最少使用(LRU)算法
算法思想:选择最近最长时间没有被使用的页面予以淘汰
- 该算法可以用寄存器和栈来实现,性能较好
- LRU算法性能最接近最佳置换算法
时钟置换(CLOCK)算法
时钟置换算法也称为最近为使用(NRU)算法,是LRU和FIFO的这种;
- 时钟置换算法比LRU算法少了很多硬件的支持,实现比较简单,但所需的硬件比FIFO要多
改进型时钟置换(CLOCK)算法
该算法比时钟置换算法多考虑了页面载入内存后是否被修改的问题,增加了修改位
其他页面置换算法
- 最不常用置换(LFU)算法
- 页面缓冲(PBA)算法
工作集与页面分配策略
工作集理论
- 工作集是基于局部性原理假设的
- 工作集合是最近n次内存访问的页面集合,数字n称为工作窗口
- 当一个进程寻址一个不在工作集内的页面时,会产生一个缺页中断,在处理缺页中断时更新工作集。
- 工作集模型的原理是:让操作系统监视各个进程的工作集,主要是监视各个工作集的大小;
- 若有空闲的物理块,则可以再调一个进程到内存以增加多道的程度
- 若工作集的大小总和超过了所有可用物理块数量的总和,则可以选择一个内存中的进程对换到磁盘,减少内存中进程数量以防止抖动的发生
页面分配策略
-
固定分配局部置换
为每一个进程分配一定数目的物理块,在进程运行期间都不会改变。
-
可变分配全局置换
操作系统维护一个空闲物理块队列,每次进程有缺页时都从空闲物理块队列上取下一个分配给它,若系统中没有空闲物理块,系统可能调出任何进程中的任何一页
-
可变分配局部置换
为每一个进程分配一定数量的物理块后,每次发生缺页中断且内存中没有空闲物理块时。只让进程换出自己的某个内存页,当一个进程频繁发生缺页中断,操作系统会为它分配额外的物理块,直到缺页率降到适当程度为止。当一个程序缺页率特别低时,系统会适当减少分配给它的物理块;
页面调入策略
-
请求调页策略
一个页面只有在被用到时才调入到内存中,否则就放在外存中
-
预调页策略
将预计不久之后将会用到的页面调入到内存(一种基于局部性原理的预测)
从何处调入页面
请求分页系统的外存分为两部分:文件区、对换区
-
系统拥有足够的对换空间
在进程运行前,将与该进程有关的文件从文件区复制到对换区
-
系统缺少足够的对换空间
凡是不会被修改的文件,都直接从文件区调入,置换这些页面时,由于未被修改,不必将它们换出,再调入时,仍从文件区直接调入;对于可能被修改的部分,在换出时,应调到对换区当需要时再从对换区调入。
-
UNIX方式:
- 由于与进程有关的文件都放在文件区,凡是未运行过的页面都应从文件区调入;
- 对于曾经运行过但又被换出的页面,应从对换区调入;
抖动现象与缺页率
Belady异常
现象:缺页率会随着所分配的物理块的增加而增加;
抖动现象
现象:刚被淘汰的页面,过后不久又要访问,并且调入不久后又要调出,如此反复
缺页率
- 缺页率是衡量页面置换算法的重要指标
- 定义:如果作业在运行中共需要访问A次页面,其中所访问的页面不在内存中,需要将所需页调入内存的次数为F,则缺页率的定义为 f = F/A ;