计算机操作系统笔记(5)
第五章虚拟存储器
5.1虚拟存储器概述
解决问题:从逻辑上扩充内存容量
传统存储器管理特征(虚拟存储不必要):
- 一次性(全部装入)
- 驻留性(驻留在内存不换出)
局部性原理:
- 时间局部性
- 空间局部性
虚拟存储器:
- 概念:具有请求调入功能和置换功能,能从逻辑上对内存容量进行扩充的一种存储系统
- 实质:以时间换空间(但时间牺牲不大)
实现方式:
- 请求分页系统:以页为单位对换
需要硬件:
1)请求分页的页表机制
2)缺页中断
2)地址变换机构
需要软件:
实现请求分页机制 - 请求分段系统:以段位单位对换
需要硬件:
1)请求分段的段表结构
2)缺段中断
3)地址变换机构
需要软件:
实现请求分段机制
特征:
- 离散型(部分装入)
- 多次性(局部装入,多次装入)
- 对换性
- 虚拟性
虚拟存储器的调入需要动态重定位
5.2请求分页系统
硬件支持
页表机制:
- 中断位:也称状态位,表示该页是否已调入内存
- 访问位:记录本页在一段时间内被访问次数
- 修改位:表示该页调入内存后是否修改过
- 辅存地址(外存地址):指出该页在辅存上的地址
缺页中断机构:当所要页面不在内存时产生,缺页中断
- 可在指令执行期间产生,转入缺页中断处理程序
- 一条指令在执行期间可能产生多次缺页中断
地址变换机构:
(请求分页中的地址变换过程)
内存分配策略和分配算法
最小物理块数:能保证进程正常运行所需的最小物理块数
(不同的作业要求不同,比如间接寻址至少要三个物理块)
页面分配和置换策略:
- 固定分配局部置换
给每个进程分配一组固定数目的物理块,每次置换只能从这些页面(物理块)中置换
缺点:难以确定固定分配的页数 - 可变分配全局置换
- 可变分配局部置换
根据进程的缺页率进行页面数的调整,进程之间相互不会影响
物理块分配算法:
- 平均分配算法(不好)
将物理块平均分配给各个进程 - 按进程大小比例分配算法
- 考虑优先权分配算法
页面调入策略
- 调入时机
预调:根据空间局部性(成功率<=50%)
请求时调入:100%成功,但较费系统开销 - 从何处调页
对换区(系统有足够的对换区空间):全部从对换区调入所需页面(快)
文件区(系统缺少足够的对换区空间):修改过的页面换出到对换区(稍慢)
UNIX方式:未运行过的页面,都应从文件区调入。曾经运行过但又被换出的页面,从对换区调入。对共享页,应判断其是否在内存区。 - 页面调入过程
缺页率
缺页:要访问的页不在内存
,F为访问页面失败次数,A为进程总的页面访问次数
缺页率受影响因素
- 页面大小(操作系统可干预)
- 进程所分配物理块数目(操作系统可干预)
- 页面置换算法(操作系统可干预)
- 程序固有特性(操作系统不可干预)
5.3页面置换算法
最佳置换算法(OPT)
描述:调出的页面是以后永不使用的,或是在最长(未来)时间内不再访问的页面
特点:缺页率第,但不可实现
先进先出页面置换算法(FIFO)
描述:调出最先进入内存的页面(调出则在内存驻留时间久的页面)
最近最久未使用置换算法(LRU)
描述:选择最近最久未使用的页面调出(利用“最近的过去”作为“最近的将来”的近似)
特点:FIFO的改进
硬件支持:
- 寄存器:为每个在内存中的进程配置一个移位寄存器,记录每个进程在内存中各页的使用情况
过程:
每次被访问到的高位置1
定时将寄存器右移一位
把最小数值的寄存器所对应的页面当成最近最久未使用页面 - 栈:栈顶是最新被访问页面的编号,栈底是最近最久未使用页面的页面号
过程:进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶
Clock置换算法
描述:
特点:性能近似LRU
改进型Clock置换算法
描述
由访问为A和修改位M可以组合成四种类型的页面:
- 1类:A=0,M=0
该页最近即未被访问又未被修改,是最佳淘汰页 - 2类:A=0,M=1
该页最近未被访问,但被修改,是次好淘汰页 - 3类:A=1,M=0
该页最近被访问,未被修改,不需要重写 - 4类:A=1,M=1
该页最近即被访问又被修改,很可能再次被访问
特点:目前主流,性能接近LRU,开销比LRU小
*过程:
- 从指针指向位置为起始,进行一轮扫描,寻找1类,找到则淘汰结束
- 从起始开始,进行第二轮扫描,寻找2类,找到则淘汰结束,扫描过的访问位置0
- 所有访问位置0,回到步骤1、2
请求分页系统的性能分析
分页系统是目前最常用的一种存储方式,其性能受缺页率影响,缺页率与进程所占用的物理块数有关
缺页率与有效访问时间:
- 有效访问时间=(1-p)t+pf
(p为缺页率,t为内存访问时间,f为缺页中断时间) - 结论:
有效访问时间直接比例于缺页率,改善请求分页系统的性能,需要保持非常低的缺页率,同时提高I/O速度
抖动
概念:一种系统状态,系统花在页面替换上的时间远远大于执行进程的时间
原因:分配给进程的页面数少于进程所需要的最低页面数,导致不断的缺页中断
结论:可以利用CPU利用率与多道程序度检测消除抖动
5.4请求分段系统
段表机制:
- 存取方式:根据段中信息的属性实施的保护(只执行、只读、可读/写)
- 增补位:本段在运行过程中是否做过动态增长
缺段中断机构:
地址变换机构:
*分段的共享与保护
共享段表:多了一个共享段表项,记录进程计数count和共享进程清单
共享段的分配:进程段表增加表项记录共享段信息,共享段表项中count++、进程清单增加进程信息
共享段的回收:count--,回收进程段表中记录共享段的表项
分段保护:越界检查、存取控制检查、环保护机构
纯调入和请求调入
区别:
纯调入:只考虑内存分配问题,不考虑缺页情况(越界肯定就是越界)
请求调入:纯调入基础上还要考虑缺页情况,以及考虑缺页后的调度或置换问题(越界可能是作业在虚存上需要缺页中断请求调入)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律