一个NotionNext搭建的博客
数据库系统概论
大数据原理与应用
javaWeb应用开发基础教程
python
毕业设计
大数据技术综合应用
实训-航空数据系统
java面向对象程序设计
数据结构
算法分析与设计
SPARK
Python爬虫大数据采集与挖掘
云计算
概率论与数理统计
数字逻辑
计算机网络
计算机组成原理
linux
操作系统
人工智能导论
数据仓库与数据挖掘
数据可视化
大数据安全与隐私保护
c语言
C++
[第六章]虚拟存储器
概述局部性原理核心思想原始的虚拟存储—覆盖技术虚拟页式存储管理概述基本思想页表缺页中断页面分配策略和算法最小物理块内存分配策略物理块分配算法页面调入算法调入时机调入位置调入过程页面淘汰算法⭐最佳页面算法(理想淘汰算法)(OPT)先进先出淘汰算法(FIFO)最近最久未使用页面淘汰算法(LRU)LRU近似算法:简单Clock算法改进型Clock页面置换算法最少使用淘汰算法(LFU)页面缓冲算法(PBA)影响缺页率的因素虚拟段式存储管理基本机制段表缺段中断淘汰算法分段共享共享段表共享段分配共享段回收环保护机构
概述
虚拟内存:把辅助存储器虚拟成内存使用
局部性原理
进程执行之初可能只需要一部分程序
- 时间局部性
- 指令执行后一段时间可能还会执行
- 空间局部性
- 程序访问存储单元,一段时间后可能还会访问
核心思想
- 大程序划分成多个小部分
- 使用局部空间,局部时间仍然保证程序正常运行
- 通过替换、覆盖、调度来进入下一个“局部”
原始的虚拟存储—覆盖技术
- 程序分为若干块,动态覆盖先前块
- 块划分、内存保护困难
虚拟页式存储管理
概述
基本思想
- 分页
- 不装入全部页面,动态装入需要页面
- 当需要装入新页面但内存已满,淘汰某个页面
页表

- 状态位:是否在内存
- 访问位:淘汰的依据
- 修改位:是否修改

缺页中断
页面不在内存时产生的中断
缺页进程挂起,根据外存地址调入内存,唤醒
- 与一般中断区别
- 一般:指令执行完中断
- 缺页:指令执行过程中断(缺页的指令无法执行完
页面分配策略和算法
最小物理块
与硬件设备有关,少于此值,程序将无法运行
内存分配策略
- 分配策略:固定分配、可变分配
- 置换策略:全局置换、局部置换
- 固定分配局部置换
- 每个进程分配一定数目的内存空间,运行期间不再改变
- 缺页时在内存中置换一项
- 可变分配全局置换
- 每个进程分配一定数目的物理块,系统设置一个空闲物理块队列
- 缺页时从物理块队列中去除物理块分配给进程,并将调入的缺页装入
- 空闲队列用完选一页调出
- 可变分配局部置换
- 每个进程分配一定数目的物理块
- 缺页时在内存中置换一项
- 若频繁中断则增加物理块,反之减少
物理块分配算法
给进程们分配的物理块大小
- 平均分配算法
- 按比例分配算法
进程大小的比例
- 考虑优先权的分配算法
页面调入算法
调入时机
- 预调页
- 预测,预先调入
- 首次调入程序员指明调入内容
- 缺点:准确率只有一半
- 请求调页
- 发现所需不在,立即请求调入
- 缺点:每次只调入一页,增加磁盘I/O的启动频率,系统开销大
调入位置
分页系统中,外存分为文件区和对换区
- 系统有足够对换区空间
- 执行前将所有有关文件拷贝到对换区,从对换区调入
- 缺少最够多对换区空间
- 不被修改的文件从文件区调入,换出不写回
- 对可能修改部分,换出到对换区,从对换区调入
- UNIX方式
- 未运行过的从文件区调入
- 曾经运行过的被放入对换区,再次调入从对换区调入
- 允许页面共享,某进程请求的页面有可能已被其它进程调入内存,不用再从对换区调入
调入过程
- 要访问的页面未在内存
- 发出缺页中断
- 中断处理程序保留CPU环境,分析中断原因
- 转入缺页处理程序
页面淘汰算法⭐
- 页面号引用串
- 页号串
- 评判指标
- 缺页率:缺页数/判断缺页的次数
- 预装载参与缺页率计算,参与装载,算不缺页
- 如果说“运行之初页面都不在内存”则预装载参与缺页率计算,且参与装载,算缺页
最佳页面算法(理想淘汰算法)(OPT)
选择永不使用或者后面最长时间内不再被访问的页面作为淘汰页面
- 最好的性能
- 固定分配页面方式中最低缺页率
- 难以实现
- 选择条件不可知
先进先出淘汰算法(FIFO)
淘汰最先调入内存的页面
- 性能差
- 实现
- 把已调入的页面按次序链接成队列(先进先出),设置一个替换指针,指向最老页面
- 物理块增多,缺页率不降反升Belady现象
最近最久未使用页面淘汰算法(LRU)
最后一次访问距离当前时间最久的淘汰
- 性能
- 实现
- 硬件
- 为每页设一个寄存器R
- 访问:该页对应的R最高位置1
- 每个时间间隔所有R右移一位
- 淘汰:R值最小的
- 软件
- 设置页号栈
- 访问:入栈,如果之前访问过,将原本位置改成栈顶
- 淘汰:栈底出栈,栈顶入栈
LRU近似算法:简单Clock算法
最近未被访问的淘汰,如果没有,按FIFO
- 循环队列
- R初值为0
- 访问,访问位置1
- 淘汰
- 第一个访问位为0,换出
- 遍历访问位为1的置0
改进型Clock页面置换算法
最近未被访问的未被修改的优先淘汰
- 循环队列
- R初值为0,M初值为0
- 访问,R置1;修改,M置1
- 淘汰
- 指针位置开始遍历(R=0,M=0),第一个淘汰。失败进下一步
- 指针位置开始遍历(R=0,M=1),第一个淘汰。失败进下一步
- 遍历访问位全置0,再运行1.2.
最少使用淘汰算法(LFU)
淘汰1最少的
页面缓冲算法(PBA)
- 被淘汰页面放在两个链表
- 未修改→放到空闲链表,可覆盖
- 所在物理块挂在空闲链表的末尾
- 已修改→放到已修改链表,统一回写
green
影响缺页率的因素
- 物理块数
- 页本身大小
- 页太小,经常缺页中断
- 程序编制方法
- 页淘汰算法
虚拟段式存储管理
基本机制
段表

- 存在位:是否已调入内存
- 增补位:是否进行过动态增长。
缺段中断
- if有足够内存空间 装入;
- if空闲区总和满足要求 {紧缩技术;转1.}
- 淘汰算法,转1
淘汰算法
同分页
分段共享
共享段表
所有共享段都在共享段表中占有一表项
- 存取控制字段:不同进程采用不同存取控制方式
- 段号:不同的进程可以使用不同的段号去共享该段
- 共享进程计数count:整型变量,记录共享该分段的进程数,为0回收共享段
共享段分配
- 首次请求,放入物理区,新增共享段表项,count=1
- 其他进程请求该段,调用者段表中只需填入共享表段的物理地址
- 共享段段表填上进程名、存取控制、count++
共享段回收
- 取消调用者进程在共享表中的记录,共享段表count- -
- if(0 == count) 取消共享段表表项;
环保护机构
- 低编号环具有高优先权
- 程序可以访问同环或低环
- 调用铜环或高环
green
Prev
[第五章]存储器管理
Next
[第八章]文件管理
Loading...