操作系统课堂笔记七-交换技术
文章目录
- 交换技术
- 内存扩充技术
- 覆盖技术
- 虚拟存储
- 虚拟存储技术
- 虚拟页式存储管理
- 页表及页表项设计
- 地址转化过程及TLB引入
- 页错误
- 缺页异常
- 软件相关策略
- 页面置换算法
- 其他相关技术
- 参考
交换技术
- 为什么需要交换技术?
- 就是当我们内存不足以装载运行程序的时候, 或者剩余内存很小的时候, 怎么使得进程跑起来
内存扩充技术
- 内存紧缩技术
- 将碎片合并, 留出更多的空间给进程
覆盖技术
程序大小超过物理内存总和
过程很简单, 就是将不会冲突的部分共享一块内存, 运行一块覆盖一块(个人理解)
用户自己定义, 声明覆盖结构
没什么卵用, 还需要自己去定义顺序
交换技术
- 核心思想, 就是借助磁盘, 将内存中的一些不需要的东西暂时移动到外存(磁盘),以达到扩充的目的, 等需要的时候再从磁盘读回来
- 交换的内容: 运行时动态创建的(堆栈等)
- 交换区(swap): 可以理解为一块不需要经过文件系统管理的区域, 操作系统可以直接调用底层的读写操作使其更加高效的访问.
- 交换时机
- 长时间不用的进程
- 内存不够了
- 不能交换的进程: 等待I/O的进程
虚拟存储
- 先了解一下可以存储数据的位置: 寄存器, 高速缓存, 内存, 磁盘
虚拟存储技术
- 就是将程序分段调入内存(需要多少调多少), 调入工作由操作系统完成
- 虚拟地址空间: 分配进程的虚拟内存
- 虚拟地址: 虚拟内存中指令或数据的位置, 该数据可以被访问, 看上去是内存的一部分
- 虚存: 将内存和磁盘结合起来, 得到了一个很大的空间叫做虚存
- 虚存大小最大可以在n位计算机达到2^n的空间
- 地址保护
- 确保进程有独立地址空间
- 确保进程访问合法地址范围(防止越界)
- 确保进程访问的操作是合法的(权限管理)
虚拟页式存储管理
- 将虚拟技术和页存储方案结合
- 流程
- 进程运行前, 将页面装载进入内存, 装载(0/1)页
- 之后用多少装多少
- 如果内存空间满了,则使用一定的置换算法进行调整
- 调页方法
- 请求调页: 需要的时候再请求
- 预先调页: 预测需要哪一页 提前调好
- 总结
- 感觉就是本来你程序1M, 一页只有10K那么当你只有10K在内存的时候, 是给人的感觉就是全都在了, 产生虚拟的感觉。其实就是用CPU+磁盘换取昂贵的内存空间
页表及页表项设计
- 虚拟地址空间通过页表查到对应的物理地址, 其中页表由页表项组成
- 页表项的设计(具体可以找相关代码看下数据结构)
- 页框号: 内存块号, 物理页面号, 页帧号
- 有效位(驻留位, 中断位): 表示该页在内存还是在磁盘
- 修改位: 在页框中的内容是否被修改了(因为可能会写入磁盘)
- 访问位: 引用位(表示页面是否被访问过)
- 保护位: 读/写权限设置
- 页目录: 页表页由于在内存中不连续存放, 因此需要引入页表页的地址索引表, 这样的表叫做页目录
- 二级页表地址转化过程
- 进程上CPU, 从寄存器中取得页目录的指针
- 根据页目录找到对应的页表(页目录中的地址和页表中的偏移量决定)
- 也表中查询相关页面和页内偏移量结合最终找到物理地址
- 反转页表
- 主要解决进程内存地址空间占用过大问题, 所有进程共用一张表hash表
地址转化过程及TLB引入
- 实际上整个地址转化的过程简单来说就是CPU拿到进程的虚拟地址, 然后通过内存管理单元(MMU)去找到相对应的物理地址
- MMU的工作流程就是查目录->查页表->结合页面偏移量->物理地址这么一个过程
- 但是MMU会引发两次或以上的内存访问, CPU的访问和内存指令的速度差异很大,造成CPU资源浪费
- 程序局部性原理: 个人理解就是程序每次运行的时候都是部分在运行, 因此, 就引入了快表的概念, 个人理解就有点像加了一层缓存, 快表的命中率越高, 说明速度越快
- 快表
- 又叫高速缓存, 一种随机的存储型存储器, 除了连线寻址机制外, 还有接线逻辑,可以在一个周期内匹配所有数据
- 特点: 按内容并行查找
- 总结: 快表很容易理解, 就理解为一个小型的redis就行。
页错误
- 定义: 地址转化过程中硬件发生一些异常, 转入操作系统去处理
- 常见案例
- 所访问的虚拟页面不在内存, 需要从磁盘中读取, 因此叫做缺页异常
- 页面访问权限不对, 如读权限页面进行写操作, 用户去访问内核地址, 错误访问地址等
缺页异常
- 定义: 是页错误的一种, 又叫Page Fault
- 流程
- 操作系统执行缺页异常处理程序, 获取磁盘地址,将页面调入内存
- 如果内存中有足够的空间, 那么就分配一个页框, 将页表中响应页表项的有效位置为1,并且修改对应的页框号
- 内存中如果没有足够空闲页框, 则选择一个页框进行替换,被修改的页框需要写回磁盘, 并将相应的页表项的dirty位修改然后有效位修改为0
软件相关策略
- 驻留集
- 给每个进程分配多少页框, 个人理解就是页框的集合
- 分配策略
- 固定分配策略: 就是按照进程的类型,固定分配一定数量的页框号
- 可变分配策略: 按照缺页率进行调整, 缺页率大的话就多分配一些页框反之小。
- 置换策略
- 置换的页框一定是最不可能访问的那一批
- 页框锁定
- 如果没有锁定页框, 进程运行时间就不确定了
- 一些需要锁定的案例: 操作系统核心代码, 关键数据结构, I/O缓冲区
- 清楚策略
- 将进程的驻留集收回
- 目的就是始终保持一定数量的空闲页框
- 性能方面比置换会好很多, 想想也知道, 如果置换会
- 过程
- 分派一个进程定期去执行清除操作, 如果页面装入内存后被修改过需要保存到磁盘, 这样保证每个空闲页框是干净的
- 页缓冲技术(个人理解就是渐进式删除)
- 不丢弃置换出的页, 将其按照修改状态加入相关页链表中
- 被修改的页定期写入磁盘, 一次写多个而不是一次一个 减少I/O次数
- 如果页框没被覆盖, 则被置换的页仍然留在页框中, 一旦进程需要访问该页, 可以迅速将其加入驻留集(代价很小)
页面置换算法
又称页面淘汰算法
最佳页面置换算法
- 置换以后不太可能需要的页面
- 这个算法有点迷, 相当于需要知道进程的走向, 如果能把进程访问过的页面都记录下来找找规律还是有点可能的
- 该算法是一种衡量其他算法是否好的标准
先进先出算法
- 置换出在内存停留最久的页面,也就是最先进入内存的页面
第二次机会算法(SCR)
- 按照先进先出算法选择一个页框, 检查访问位, 如果没被访问, 就置换出去, 被访问了,则设置状态位为未被访问, 下一次周期如果还是未被访问就置换出去, 相当于给第二次机会
- 被修改状态位的页会被放在链表的末尾
时钟算法
- 将页框虚拟成一个环状, 每次指针下移找到状态为未被访问的页框进行置换,否则修改状态位
最近未使用页面置换算法
- 通过访问位R和修改位M 进行判断
- 启动一个进程 R M位修改为0
- R定期清0(复位)
- 选择优先级最小的页面置换出去
- 什么页面优先级最小? 访问位0, 修改位0< 访问位0, 修改位1< 访问位1, 修改位0<都是1的
- 时钟算法 也能结合该算法
最近最少使用算法(LRU)
- 按照时间来, 就是离当前访问时间隔的最久的那个页框被置换
- 该算法最接近OPT算法,效果是最好的
- 问题是开销大,需要给每个页框维护一个时间戳
最不经常使用算法(NRU)
- 访问次数最少的被置换, 其实就是维护了一个软件的计数器, 每次发生时钟中断的时计数器加R(访问位), 发生缺页异常的时候选择计数器最少的置换出去
老化算法
- 通过访问位的变化, 给每个页面维护了一套二进制表, 二进制表中每次会根据访问位右移, 最后替换的页面就是移动后最小的那个页面
BELADY现象
- 非常有意思的一个现象, 在FIFO算法中, 进程分配的页框越多, 缺页次数竟然更多了
工作集算法
- 抖动: 虚存中, 页面在内存与磁盘之间频繁的切换, 导致调度页面所需时间比进程实际运行时间还多, 导致系统效率急速下降, 这样的现象叫做抖动。
- 基本思想: 根据程序的局部性原理, 程序中总是会集中访问某一部分页面, 所以如果能够让系统提供的物理页面和频繁访问的页面数量一致, 那么将会大大减少缺页次数
- 工作集: 和驻留集差不多, 就是一个进程当前使用的页框集合, 但是工作集会实时调整。所以准确的说, 工作集就是在某个时间范围内的使用的页框集合。
- 具体做法
- 页表项中多一个字段去记录页面最后一次被访问的时间
- 设置一个时间值T
- 根据一个页面的访问时间是否落在"当前时间-T"的范围内去判断是否在工作集中, 个人理解就是一直保持一个时间窗口
- 具体实现
- 遍历所有页表项, 如果发现页表项的R位是1, 清零, 设置访问时间为当前时间
- 如果R位是0, 计算时间窗口(“当前时间-T”), 判断页表项是否在工作集之外
- 如果在之外: 则该页面被置换的页面
- 如果之内: 在时间窗口之内的话, 就记录所有被扫描页面的最后访问时间的最小值, 重复之前步骤
其他相关技术
内存映射文件
- 进程通过系统调用(mmap) 将文件映射到虚拟地址空间的一部分, 访问这个文件就像访问内从中的一个大数组, 而不是对文件进行读写.
- 其实就是和很多设计相似, 先把映射关系做好, 需要用的的时候再真正Load进入内存
- 等进程结束或者显示的接触关系时, 所有被修改的页面会写回文件
写时复制技术
- Linux里面使用fork创建子进程的时候, 其实和父进程是共享一块物理内存的, 当子进程需要对共享的物理内存进行修改时, 由于物理内存是只读的, 所以会和写时复制标志冲突引发缺页异常(Page Fault), 在物理内存中会创建一块私有的只能被子进程访问的内存块, 供子进程使用。
- 因为进程之间对内存数据修改的场景较少,而读的场景较多。所以这样也是能提升效率的(个人理解)
参考
[1] 操作系统原理
操作系统课堂笔记七-交换技术相关推荐
- 操作系统-课堂笔记-进程概述(南航)
文章目录 进程概述 1.引言 2.进程的概念 2.1进程的内存抽象 2.2分段保护 2.2.1例一 2.2.2例二 2.2.3小结 2.3进程的状态 版本1 版本2 提升思考(可跳过,涉及虚拟内存) ...
- 操作系统 课堂笔记 第二章 进程管理
第二章 进程管理 2.1 本章导学 基本内容: (1)进程的基本概念. (2)进程控制. (3)进程间互斥与同步. (4)进程通信. (5)进程调度. (6)进程死锁. (7)线程. 学习重点: (1 ...
- CCNA 学习笔记(七)--交换知识(VLAN VTP TRUNK)
前面认识到了路由的相关方面知道,现在我们又要开始交换机方面的学习,现在就从最基础的开始学习交换机的基本知识.路由主要是工作于OSI协议的三层(网络层),而交换机主要是工作于二层(数据链路层),但三层交 ...
- 操作系统-课堂笔记-内存管理(南航)
文章目录 内存管理 回顾 内存管理的作用是什么? 如何分配物理内存 物理内存分配方案 1.连续分配存储管理(可应用于嵌入式设备) 1.1单一连续分配 1.2固定分区分配 1.3可变分区分配 连续分配存 ...
- 【Linux操作系统课堂笔记1】小白入手——环境配置安装
文章目录: 界面展示: 扩展: 资源: 第一步:创建虚拟机 第二步:虚拟机设备配置 第三步:开始安装系统 界面展示: 扩展: 1.Windows 系统是宿主机,而 VMware 安装的 Linux ...
- 操作系统-课堂笔记-文件系统(南航)
文章目录 文件系统 引言 文件系统需要做什么工作? 1.关于文件名的限制: 2.文件扩展名有哪些 3.文件有哪些类型? 4.文件是怎么保存的以及文件的属性和操作 文件的实现 如何为文件分配磁盘空间? ...
- 【学习笔记】第三章——内存 I(交换技术、进程七状态模型、动态分区分配、动态分区算法)
文章目录 一. 交换状态.进程七状态模型 二. 内存的分配方式 三. 动态分配算法 一. 交换状态.进程七状态模型 交换技术:内存空间紧张,把某些进程暂时换出外存.(进程在内存与磁盘间动态调度) 进程 ...
- AI公开课:18.05.05 施尧耘(阿里云量子技术CS)—清华AI第四讲之《人工智能与量子计算》Quantum课堂笔记——带你了解量子计算
AI公开课:18.05.05 施尧耘(阿里云量子技术CS)-清华AI第四讲之<人工智能与量子计算>Quantum课堂笔记--带你了解量子计算 导读 清华大学"人工智能前沿与产业趋 ...
- 【操作系统/OS笔记06】虚拟内存、覆盖、交换
本次笔记内容: 5.1 虚拟内存的起因 5.2 覆盖技术 5.3 交换技术 5.4.1 虚存技术(上) 5.4.2 虚存技术(下) 文章目录 虚拟内存的起因 覆盖技术 产生 基本原理 存在问题 交换技 ...
- 清华操作系统笔记4——虚拟内存技术
CSDN话题挑战赛第2期 参赛话题:学习笔记 系列文章目录 文章目录 系列文章目录 前言 一. 虚拟内存的需求背景 起因 问题 二.覆盖技术 (1)目标 (2)原理 缺点 三.交换技术 (1)目标 ( ...
最新文章
- linux中使用CST时间
- easyui datagrid 表格 属性和方法
- c语言开发 .c .h,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件
- C#7.0之ref locals and returns (局部变量和引用返回)
- ubuntu下使用yocto制作龙芯文件系统
- Ogre:ManualObject
- LeetCode Rearrange String k Distance Apart
- 读过的设计模式的书小结
- 论文笔记_S2D.06-2018-BMVC-用于实时语义分割的轻量级精细网络RefineNet
- 著名线性代数教授 85岁麻省理工学院教授,给2020本科生教授《线性代数入门》
- vue 富文本编辑器wangeditor 上传图片
- 怎么看台式计算机内存条,内存条型号,详细教您怎么查看内存条型号
- Mongodb- paly中操作mongodb记录
- 快速查找参考文献影响因子——ScholarScope
- 十进制和二进制换算。vb版本
- 树莓派3通过网线连接电脑
- 【sketchup 2021】草图大师的辅助建模工具2【模型交错、照片匹配(重要)】
- ArcGIS中如何计算多个点到特定线的最短距离
- 计算机网络工程这专业都学什么,我是学计算机网络工程专业的,我想问一下我以后可以从事哪些方面的工作呀...
- 百度技术沙龙第33期回顾:推荐引擎实战(含资料下载)
热门文章
- 营销公众号该如何运营大纲
- Java笔记——Java 实现金额小写转大写
- 【计算机网络】数据链路层 : ALOHA 协议 ( 纯 ALOHA 协议 | 时隙 ALOHA 协议 )
- python3爬虫实战一: 爬取豆瓣最新上映电影及画出词云分布
- 要提高微信群人气,活跃用户,如何在微信群设置签到打卡?
- 使用 Elasticsearch ik分词实现同义词搜索
- HDR高动态范围图像处理算法
- linux技术发展方向,linux技术的发展方向有哪些?Linux运维入门
- 计算机组装物料清单,物料清单
- android局域网设备查看器,局域网查看工具(LanSee)