注:参考哈工大李治军老师公开课。

对于用户而言,用户看到的是一个整体的内存入4G,而且用户可以随便访问4G内存空间的任意位置;但是对于真实的物理内存可能只有1G大小,当用户访问内存时,如果内存里面有需要的内容,就直接访问;如果没有,就去磁盘上查找,然后再把需要找到的数据,再将这些数据载入到内存中供用户使用。那么在这个过程中就需要把磁盘上的数据写到内存里面(换入),也需要把内存中的一些数据写回磁盘上(换出)。

图一:虚拟内存与物理内存

请求调页(换入)

当用户访问一个页时,MMU回去查询一个操作系统维护的页表,看看用户访问的页是否存在于内存当中,如果存在,就直接调用;如果没有,就需要开启中断,执行页错误处理程序,在磁盘中找到相应的数据页,并在内存中找到一块空闲,将其载入进来,然后中断返回,执行用户程序,在去访问内存中用户需要的页。

图二:页面调入过程

页面置换(换出)

当我们不断地将页面换入内存当中,内存肯定会不足的,我们需要选择一些页面进行换出,为新的数据腾出空间,但是我们应该选择那些页面换出呢?以下主要讨论一些常用的换出策略。

备注:下面的例子默认内存只能存放三个页。

FIFO:先进先出页面置换,可能出现频繁的替换,例如例子图三中的A刚被换出,马上就被换入。

图三:FIFO算法示例

MIN算法:淘汰最远将使用的页,这是最优方案,但是这种方式需要知道程序未来的走向,这是很难实现的,例如if(…){…}只有在运行的过程中,才能知道程序的走向。

图四:MIN算法示例

LRU算法:用过去的历史预测将来。下面是几种LRU算法的实现方法:

LRU时间戳算法:就是用一张表(两列:一列是页编号,一列是对应页最近使用的时间),每次调用页都更新这张表。每次换出就换出那个时间最小对应的页。

图五:LRU时间戳算法

这个算法看似简单,但是麻烦的是操作系统需要一直维护这张表

LRU页码栈算法:这是对LRU时间戳算法的一种变种,就是维护一个栈,当一个页面使用了,查询栈中的页码,如果栈中没有它的页码,就直接把它的页码放在栈底;如果有,就把栈中的那一项调整到栈顶,每次替换都替换栈底页码对应的页。这个算法一样有个问题,就是每次访问需要维护这张,需要消耗一定的代价。

图六:LRU页码栈算法

LRU—SCR算法:每页自动增加一个引用位,每次访问该页,就由硬件将该页的引用位设置位1,每次需要替换就由一根指针扫描每一页的引用位,如果引用位为1,就修改为0;如果为0,就将该页替换出去,并指向下一页。

图七:SCR算法

对于SCR算法,有一个问题,就是程序是具有局部性的,所以经常出现在替换间期内每一页都被访问过,当需要替换时,每一页的引用位都是1,这样每次被替换出去的就是指针所指的那一页,从而退化成了FIFO算法。

LRU—Clock算法: SCR算法中的问题原因就是替换期间比较长,在这个期间内每页都被访问了,那么解决方式就是引入一根更新指针,每隔一段时间,把所有页的引用位设置为0,通过这样的防止SCR算法的退化。打个比方:替换指针就是时钟上的分针,而更新指针就相当于时钟上的秒针。(系统常用)

图八:Clock算法

到此,页的换出算法就讨论完了。那么操作系统内存管理的整体轮廓也就出来了:

图九:操作系统内存管理的整体轮廓

4、操作系统内存管理——页面的换入换出相关推荐

  1. 操作系统内存管理_操作系统6内存管理基础

    引言 花了一段时间才把之前的笔记整理了一部分,平时太忙也没啥时间.今天开始整理内存管理部分的,内存管理部分大致分为三部分笔记,第一部分就是本篇内存管理基础,第二部分是虚拟内存,第三部分高速缓存. 一个 ...

  2. 操作系统 —— 内存管理

    目录 一.思维导图 二.内存的基础知识 2.1 什么是内存? 2.2 存储单元 2.3 逻辑地址和物理地址 2.4 编译.链接.装入 2.4.1 编译 2.4.2 链接 链接的三种方式 : 2.4.3 ...

  3. 操作系统--内存管理

    内存管理(二) 动态分区分配算法 动态分区分配算法:在动态分区分配方式中,当很多个空闲分区都能满足需求时,应该选择哪个分区进行分配? 首次适应算法 算法思想:每次都从低地址开始查找,找到第一个能满足大 ...

  4. 操作系统内存管理,你能回答这8个问题吗?

    # 干了这碗鸡汤 当我们是少数人时,我们要有勇气做自己:当我们是多数人时,我们要有胸襟容得下他人. -- 拉尔夫·W·索克曼 大家早上好,今天为大家总结整理了关于操作系统内存管理的知识点,更文不易,请 ...

  5. 六、操作系统——内存管理的概念(空间的分配与回收、空间的扩充、地址转换、存储保护)

    一.概述 二.操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢? 1. 内存空间的分配与回收 连续分配:指为用户进程分配的必须是一个连续的内存空间. 1. 单一连续分配 在单一连续 ...

  6. 操作系统--内存管理方式

    "碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出 ...

  7. 操作系统内存管理-Linux版

    引言 操作系统内存管理:总的来说,操作系统内存管理包括物理内存管理和虚拟内存管理. 物理内存管理: 包括程序装入等概念.交换技术.连续分配管理方式和非连续分配管理方式(分页.分段.段页式). 虚拟内存 ...

  8. 操作系统内存管理之 内部碎片vs外部碎片

    "碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出 ...

  9. 操作系统内存管理——分区、页式、段式管理

    操作系统内存管理--分区.页式.段式管理 标签: 内存管理操作系统数据结构算法 2010-07-05 11:26 20805人阅读 评论(5) 收藏 举报 分类: 操作系统(4) 版权声明:本文为博主 ...

最新文章

  1. 北科大计算机小学期,北京科技大学小学期计算机实践(C++源代码)
  2. 深度学习之循环神经网络(3)梯度传播
  3. python ide是什么意思_初学Python使用什么IDE会更好?
  4. android地图定位到海洋,GPS定位技术进行高精度海洋定位的应用
  5. [JavaScript]WebBrowser控件下IE版本的检测
  6. 使用.gitignore忽略编译自动生成的那些文件
  7. 测试用例-1-微信发红包功能
  8. 查看计算机温度指令,怎么查看电脑温度|查看电脑温度的三种方式
  9. 金融科技大数据产品推荐:恒丰银行实时智能决策引擎
  10. echarts折线图和双层柱状图结合绘制
  11. React中文文档之State and Lifecycle
  12. QOpenGLWidget运行时闪退
  13. 大学物理(英文版)笔记 chapter1 Measurement
  14. MATLAB中代尔塔的符号,这个符号代表什么意思?还有怎么打?~
  15. Hulu 圣诞剧集推荐
  16. adb基本操作之monkey基本操作入门准备-1
  17. matlab中yita怎么打,数学建模算法之模拟退火
  18. 下一代防火墙是什么 下一代防火墙产品有哪些
  19. 绘画基础学习之两点透视原理
  20. 思科交换机如何根据MAC地址查所在交换机的端口

热门文章

  1. 地图打印资源 ArcEngine
  2. C语言程序——变量及其应用
  3. 调度算法—SJF调度算法详解
  4. 什么是NFC技术?NFC和RFID、红外、蓝牙有什么区别?
  5. Python之函数、变量
  6. java 英文日期转数字_DatePickerDialog的月份为英文转成数字
  7. 抖音短视频数据抓取实战系列(二)——Fiddler安装配置以及模拟器监测环境配置
  8. PPT Resources
  9. Java写个简单的记事本()
  10. 【实战】电脑 开发板 虚拟机三者互ping通教程