3.3 内存管理:虚拟内存管理
虚拟内存管理思维导图:
有关虚拟内存管理的考研知识点会用两篇文章更新完哦,欢迎订阅专栏。
虚拟内存基本概念思维导图:
虚拟内存基本概念
传统存储管理的缺点
- 一次性:作业数据一次性全部调入内存, 若进程过大则无法运行
- 驻留性:进程数据在运行期间常驻内存, 阻碍进程并发
局部性原理
- 时间局部性:现在访问的指令、数据最近一段时间会再次访问
- 空间局部性:现在访问的内存单元不久之后还会再次访问
- 高速缓存技术:使用频繁的数据放到更高速的存储器中
虚拟内存的定义和特征
定义:程序不需全部装入即可运行,运行时需要动态调入数据,若内存不够,换出一些数据
特征
- 多次性:作业数据允许多次调入内存,而不是一次性调入
- 对换性:作业无需常驻内存,允许在运行过程中换入、换出
- 虚拟性:从逻辑上扩充了内存的容量,使大于内存容量的进程得以运行
如何实现虚拟内存
- 访问的信息不在内存时,由OS将所需信息从外存调入内存(请求调页功能)
- 内存空间不够时,将内存中暂时用不到的信息换出到外存(页面置换功能)
虚拟内存的实现
- 请求分页存储管理
- 请求分段存储管理
- 请求段页式存储管理
虚拟存储器是一种从逻辑上扩充内存的方法,具有请求调入功能和置换功能
请求页式管理思维导图:
请求页式管理
在分页管理的基础上,增加请求调入和页面置换功能
页表机制
比基础页表多出的部分:
- 状态位:标志当前页是否在内存中
- 访问字段:记录当前页面被访问过几次或上次访问的时间,供页面置换算法参考换出内存的页面
- 修改位:标志页面调入内存后是否被修改过,只有修改过才需要写入外存,以提高效率
- 外存地址:存放页面在外存中存放的位置
缺页中断机制
- 若检查页面后发现页面不在内存则产生缺页中断
- 缺页中断处理需要将目标页面调入内存,内存不足时需要换出页面
- 缺页中断属于内中断(异常)的故障类型,即系统可尝试修复的异常
- 一条指令在执行的过程中可能产生多次缺页中断
- 指令周期:指的是CPU对一条指令的取出和执行的过程;可细分为取指周期、间址周期、执行周期、中断周期
- 一般中断过程会被延迟到最后的中断周期执行,但缺页中断需要立即处理
地址变换机制
- 检索页表后判断页面是否已调入内存
- 若页面不在内存,需要请求调页
- 若内存空间不够,需要换出页面
- 页面调入内存后,需要修改相应页表项的内容
页框分配思维导图:
页框分配
驻留集
指请求分页存储管理中给进程分配的内存块的集合
驻留集的大小:
- 过大整个进程数据都可装入内存,降低系统并发度
- 过小页面置换频繁,系统开销大
页面分配
- 固定分配 VS. 可变分配:区别在于运行期间驻留集的大小是否可变
- 局部置换 VS. 全局置换:区别在于发生缺页时是否只能从进程自己的页面选择一个换出
置换策略
- 固定分配局部置换:程序运行前就分配一定数量的物理块,缺页时只能从自己进程的页面中选择一个换出
- 可变分配全局置换:可要缺页就为进程分配新物理块,可能来自空闲物理块或其他进程
- 可变分配局部置换:频繁缺页的进程可多分配一些物理块,缺页率低的可回收一些
何时调入页面
- 预调页策略:一般用于进程启动前,将一段即将访问的指令一同调入
- 请求调页策略:程序运行时,发生缺页再调页
从何处调页
- 对换区:采用连续存储方式,速度更快
- 文件区:采用离散存储方式,速度更慢
- 对换区足够大:运行时将数据复制到对换区,之后页面的调入调出都在对换区进行
- 对换区不够大:不会修改的数据从文件区调入,会修改的数据调出到对换区,再次使用时从对换区调入
- UNIX方式:第一次使用的页从文件区调入,调出的页面都写回对换区,再次调入从对换区调入
抖动(颠簸)现象
页面频繁换入换出的现象,导致缺页率急剧上升
主要原因是给进程分配的物理块不够
抖动的预防方法:
- 采用局部置换策略
- 利用工作集动态分配驻留集
- 选择暂停进程
工作集
- 在某“窗口尺寸”里,进程实际访问的页面的集合
- 驻留集大小一般不能小于工作集大小