文章目录

  • 交换技术
    • 内存扩充技术
      • 覆盖技术
    • 虚拟存储
      • 虚拟存储技术
      • 虚拟页式存储管理
      • 页表及页表项设计
      • 地址转化过程及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. 操作系统-课堂笔记-进程概述(南航)

    文章目录 进程概述 1.引言 2.进程的概念 2.1进程的内存抽象 2.2分段保护 2.2.1例一 2.2.2例二 2.2.3小结 2.3进程的状态 版本1 版本2 提升思考(可跳过,涉及虚拟内存) ...

  2. 操作系统 课堂笔记 第二章 进程管理

    第二章 进程管理 2.1 本章导学 基本内容: (1)进程的基本概念. (2)进程控制. (3)进程间互斥与同步. (4)进程通信. (5)进程调度. (6)进程死锁. (7)线程. 学习重点: (1 ...

  3. CCNA 学习笔记(七)--交换知识(VLAN VTP TRUNK)

    前面认识到了路由的相关方面知道,现在我们又要开始交换机方面的学习,现在就从最基础的开始学习交换机的基本知识.路由主要是工作于OSI协议的三层(网络层),而交换机主要是工作于二层(数据链路层),但三层交 ...

  4. 操作系统-课堂笔记-内存管理(南航)

    文章目录 内存管理 回顾 内存管理的作用是什么? 如何分配物理内存 物理内存分配方案 1.连续分配存储管理(可应用于嵌入式设备) 1.1单一连续分配 1.2固定分区分配 1.3可变分区分配 连续分配存 ...

  5. 【Linux操作系统课堂笔记1】小白入手——环境配置安装

    文章目录: 界面展示: 扩展: 资源: 第一步:创建虚拟机 第二步:虚拟机设备配置 第三步:开始安装系统 界面展示:  扩展: 1.Windows 系统是宿主机,而 VMware 安装的 Linux ...

  6. 操作系统-课堂笔记-文件系统(南航)

    文章目录 文件系统 引言 文件系统需要做什么工作? 1.关于文件名的限制: 2.文件扩展名有哪些 3.文件有哪些类型? 4.文件是怎么保存的以及文件的属性和操作 文件的实现 如何为文件分配磁盘空间? ...

  7. 【学习笔记】第三章——内存 I(交换技术、进程七状态模型、动态分区分配、动态分区算法)

    文章目录 一. 交换状态.进程七状态模型 二. 内存的分配方式 三. 动态分配算法 一. 交换状态.进程七状态模型 交换技术:内存空间紧张,把某些进程暂时换出外存.(进程在内存与磁盘间动态调度) 进程 ...

  8. AI公开课:18.05.05 施尧耘(阿里云量子技术CS)—清华AI第四讲之《人工智能与量子计算》Quantum课堂笔记——带你了解量子计算

    AI公开课:18.05.05 施尧耘(阿里云量子技术CS)-清华AI第四讲之<人工智能与量子计算>Quantum课堂笔记--带你了解量子计算 导读 清华大学"人工智能前沿与产业趋 ...

  9. 【操作系统/OS笔记06】虚拟内存、覆盖、交换

    本次笔记内容: 5.1 虚拟内存的起因 5.2 覆盖技术 5.3 交换技术 5.4.1 虚存技术(上) 5.4.2 虚存技术(下) 文章目录 虚拟内存的起因 覆盖技术 产生 基本原理 存在问题 交换技 ...

  10. 清华操作系统笔记4——虚拟内存技术

    CSDN话题挑战赛第2期 参赛话题:学习笔记 系列文章目录 文章目录 系列文章目录 前言 一. 虚拟内存的需求背景 起因 问题 二.覆盖技术 (1)目标 (2)原理 缺点 三.交换技术 (1)目标 ( ...

最新文章

  1. linux中使用CST时间
  2. easyui datagrid 表格 属性和方法
  3. c语言开发 .c .h,求助C语言大佬 , 只会写到一个.c文件里 ,不会用.h头文件
  4. C#7.0之ref locals and returns (局部变量和引用返回)
  5. ubuntu下使用yocto制作龙芯文件系统
  6. Ogre:ManualObject
  7. LeetCode Rearrange String k Distance Apart
  8. 读过的设计模式的书小结
  9. 论文笔记_S2D.06-2018-BMVC-用于实时语义分割的轻量级精细网络RefineNet
  10. 著名线性代数教授 85岁麻省理工学院教授,给2020本科生教授《线性代数入门》
  11. vue 富文本编辑器wangeditor 上传图片
  12. 怎么看台式计算机内存条,内存条型号,详细教您怎么查看内存条型号
  13. Mongodb- paly中操作mongodb记录
  14. 快速查找参考文献影响因子——ScholarScope
  15. 十进制和二进制换算。vb版本
  16. 树莓派3通过网线连接电脑
  17. 【sketchup 2021】草图大师的辅助建模工具2【模型交错、照片匹配(重要)】
  18. ArcGIS中如何计算多个点到特定线的最短距离
  19. 计算机网络工程这专业都学什么,我是学计算机网络工程专业的,我想问一下我以后可以从事哪些方面的工作呀...
  20. 百度技术沙龙第33期回顾:推荐引擎实战(含资料下载)

热门文章

  1. 营销公众号该如何运营大纲
  2. Java笔记——Java 实现金额小写转大写
  3. 【计算机网络】数据链路层 : ALOHA 协议 ( 纯 ALOHA 协议 | 时隙 ALOHA 协议 )
  4. python3爬虫实战一: 爬取豆瓣最新上映电影及画出词云分布
  5. 要提高微信群人气,活跃用户,如何在微信群设置签到打卡?
  6. 使用 Elasticsearch ik分词实现同义词搜索
  7. HDR高动态范围图像处理算法
  8. linux技术发展方向,linux技术的发展方向有哪些?Linux运维入门
  9. 计算机组装物料清单,物料清单
  10. android局域网设备查看器,局域网查看工具(LanSee)