操作系统【六】虚拟内存

2023-11-17

传统存储管理方式的不足

  • 一次性:作业必须一次性全部装入内存后才能开始运行。这会造成:当作也很大时不能全部装入内存;当大量作业要求运行时,由于内存无法容纳所有作业,因此只有少量作业能够运行,导致多道程序并发度下降
  • 驻留性:一旦作业被装入内存,就会一直留驻在内存中,直至作业运行结束。导致内存中驻留大量的、暂时用不到的数据,浪费了宝贵的内存资源。

局部性原理

  • 时间局部性:如果执行了程序中的某条指令,那么不久后这条指令很可能再次执行;如果某个数据被访问过,那么这个数据很可能再次被访问
  • 空间局部性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问。

高速缓冲技术的思想:将近期会频繁访问到的数据放到更告诉的存储器中,暂时用不到的数据放在更低速存储器中。
在这里插入图片描述
快表机构就是将近期长访问的页表项副本放到更高速的联想寄存器中。

虚拟内存

由于局部性原理,在程序装入时,可以将程序中很快用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行。在程序执行过程中,当访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出外存。

在操作系统的管理下,在用户看来似乎有一个比实际内存大得多的内存,这就是虚拟内存。(操作系统虚拟性的体现)

虚拟内存的最大容量是由计算机的地址结构(CPU寻址范围)确定的
虚拟内存的实际容量=min(内存和外存容量之和,CPU寻址范围)

主要特征:

  • 多次性:允许多次装入
  • 对换性:允许作业运行过程中将作业换入换出
  • 虚拟性:使得用户看到的内存容量大于实际容量

在这里插入图片描述

主要区别:如果访问的信息不再内存时,有操作系统将所需信息从外存调入内存(请求调页/段
如果内存空间不够,由操作系统负责将内存中暂时用不到的信息换到外存(页面/段置换

请求分页管理方式

请求调页:操作系统需要知道每个页面是否已经调入内存;如果没有调入,需要知道该页面在外存存放的位置
页面置换:根据某些指标来决定换出哪些页面,有的页面没有被修改过,就不用再浪费时间写回外存。有的页面修改过,就需要将外存中就数据覆盖,因此操作系统需要记录各个页面是否被修改的信息。
在这里插入图片描述

缺页中断机构

在请求分页系统中,每当要访问的页面不再内存时,便产生一个缺页中断,然后由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。

如果内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
如果内存中没有空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。

缺页中断是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断。
一条指令在执行期间可能产生多次缺页中断
在这里插入图片描述

地址变换

请求分页存储管理与基本分页存储管理的区别:
新增步骤1:请求调页(查到页表项时进行判断)
新增步骤2:页面置换(需要调入页面,但没有空闲内存块时)
新增步骤3:需要修改请求页表中新增的表项

在这里插入图片描述在这里插入图片描述

  • 只有写指令才需要修改修改位。并且,一般来说只需要修改快表中的数据,只有要将快表想删除时才需要写回内存中的慢表,这样就可以减少访存次数。
  • 和普通的中断处理一样,却也中断处理依然需要保留CPU现场
  • 页面换入/换出都要启动慢速的I/O操作
  • 页面调入内存后,需要修改慢表,同时也需要将表项复制到快表中

页面置换算法

最佳置换算法(OPT)

每次选择淘汰的页面将时以后永不使用或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
注意:缺页时未必发生页面置换,若还有可用的空闲内存块,就不用进行页面置换
缺页率=缺页中断次数/页面访问次数
只有没有空闲内存块的缺页中断才需要页面置换
理想化算法,实际无法实现

先进先出置换算法(FIFO)

每次选择淘汰的页面是最早进入内存的页面
把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头,将新页面放入队尾
Belady异常:当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。
只有FIFO算法会产生Belady异常

最近最久未使用置换算法(LRU)

每次淘汰的页面是最近最久未使用的页面
实现方法:在每个页面对应的页表项中,用访问字段记录该页面自从上次被访问以来经历的时间t,当需要 淘汰一个页面时,选择现有页面中t中最大的,即最近最久未使用的页面

算法性能好,实现困难,开销大
性能最接近OPT

时钟置换算法(CLOCK)

是一种性能和开销较均衡的算法,又称作CLOCK算法,或最近未使用算法(NRU not recently used)

简单CLOCK算法实现:为每个页面设置一个访问位(1,表示最近访问,0,表示最近没有访问),再讲内存中的页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需要检查页的访问位,如果时0,就将该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面。若第一轮扫面中所有页面都是1,则将这些页面的访问位依次置为0后再进行第二次扫描。

简单CLOCK算法选择一个淘汰页面最多会经过两次扫描。

改进型的时钟置换算法:简单时钟置换算法仅仅考虑一个页面最近是否被访问,事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。只有被淘汰的页面被修改过时才需要写回外存。
因此考虑一个页面最近有没有被访问过之外,操作系统还应该考虑页面有没有被修改过。在其他条件都相同时,应优先淘汰没有修改过的页面,避免I/O操作。
实现:设置修改位,0表示没有被修改,1表示被修改。
(访问位,修改位)
算法规则:
将所有可能被置换的页面排成一个循环队列

  1. 从当前位置开始扫描第一个(0,0)的帧用于替换,不修改任何标志位
  2. 如果第一轮扫描失败,则重新扫描。查找第一个(0,1)的帧用于替换,本轮将所有扫描过的帧访问位设为0
  3. 如果第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于替换,本轮扫描不修改任何标志位
  4. 若第三轮扫描失败,则重新扫描,找到第一个(0,1)的帧用于替换。

由于第二轮已经将所有帧的访问位设置为0,因此经过第三轮第四轮扫描一定会有一个帧被选中,因此改进型CLOCK置换算法选择一个淘汰页面最多会进行四次扫描

在这里插入图片描述
在这里插入图片描述

页面分配置换策略

驻留集:请求分页管理中给进程分配的物理块的集合
在采用了虚拟存储的系统中,驻留集大小一般小于进程的总大小
如果驻留集太小,则会频繁缺页,系统要花大量的时间处理缺页,实际用于进程推进的时间很少
驻留集太大,会导致多道程序并发度下降,资源利用率降低。

  • 固定分配:操作系统为每个进程分配一组固定数目的物理块,在进程运行期间不再改变。

  • 可变分配:纤维每个进程分配一定数目的物理块,在进程运行期间可根据情况做适当的增加或者减少,即,驻留集大小可变

  • 局部置换:发生缺页时只能选进程自己的物理块进行置换

  • 全局置换:可以将操作系统保留的空闲物理块分配给却也进程,也可以将别的进程持有的物理块置换到外存,再分缺页进程。
    在这里插入图片描述

  • 固定分配局部置换:缺点:很难在刚开始就确定为每个进程分配多少个物理块才算合适。采用这种策略的系统一般会根据一定的参数确定内存块

  • 可变分配全局置换:只要某进程发生缺页,都能获得新的物理块,仅当空闲物理块用完时,系统才选择一个未锁定的页面调出。被选择调出的页面可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加。
    系统会锁定一些页面,这些页面中的内容不能置换出去。

  • 可变分配局部置换:如果进程在运行中频繁地换页,系统回味该进程多分配几个物理块,直至该进程缺页率趋势适当程度。反之,如果进程在运行时缺页率特别低,可适当减少分配给该进程的内存块。

可变分配全局置换:只要就分配新物理块
可变分配局部置换:根据缺页率动态增加或者减少物理块

调入页面

时间

  • 预调页策略:根据局部性原理,一次调入若干个相邻的页面可能比一次调入一个页面更加高效。预测不久之后可能要访问的页面,将他们预先调入内存。预测成功率只有50%。这种策略主要用于进程的首次进入
  • 请求调页策略:进程在运行期间发现缺页才将所缺页面调入内存。这种策略调入的页面一定会被访问到。但是每次都只能调入一页,而每次调页都要磁盘I/O操作,因此I/O开销较大

地点

在这里插入图片描述

  • 如果系统拥有足够的调换去空间,页面的调入调出都是内存与对换区之间进行的,这样可以保证页面的调入调出速度很快。在进程运行前,需要讲进程相关的数据从内存区复制到对换区。
  • 如果系统缺少足够的对换区空间:凡是不会被修改的数据都直接从文件区调入,由于这些页面不会被修改,因此换出时不需要写回磁盘,下次需要时再从文件区调入即可。对于可能被修改的部分,换出时需要写回磁盘对换区,下次需要时再从对换区调入。
  • UNIX:运行之前进程有关的数据全部放在文件区,故未使用过的页面都可以从文件区调入。若被使用过的页面需要换出,则写回对换区,下次需要时再从对换区调入。

抖动(颠簸)现象

抖动现象是指在更换页面时,如果被更换的页面是一个很快再次访问的页面,则会频繁地发生页面调度,以至于调度页面所需时间过长,系统效率急剧下降的现象。

解决策略:

  • 有针对性地选择更优秀的页面置换算法以减少页面替换策略失误
  • 挂起低优先级的进程,减少多道程序数量使得能够增大驻留集,让进程拥有更多的内存块
  • 给进程分配合适大小的内存块。为了解决给进程分配多少个内存块比较合适,可以使用Denning提出的 “工作集”的概念进行解决。首先操作系统根据窗口尺寸统计工作集的大小,然后让驻留集的大小大于等于工作集的大小即可。与之相关的我们可以每次选择一个不再工作集中的页面进行淘汰。
  • 使用L=S准则调节缺页率,让程序最大可能地并发处理,提高磁盘和处理机的利用率。

工作集

工作集:在某段时间间隔内,进程实际访问页面的集合
驻留集:请求分页存储管理中给进程分配的内存块的集合

在这里插入图片描述
一般来说驻留集的大小不能小于工作集的大小,否则进程运行过程中将会频繁缺页

拓展:基于局部性原理可知,进程在一段时间内访问的页面与不久之后访问的页面是有相关性的。因此可以根据近期访问的页面集合来设计页面置换算法:选择一个不再工作集中的页面进行淘汰

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统【六】虚拟内存 的相关文章

  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • Tomcat7安装及配置教程

    Apache Tomcat7 0安装及配置教程 Apache Tomcat7 0官方网站链接 http tomcat apache org apache tomcat 7 0 73 windows x64 先解压下载的压缩包 然后在bin目
  • Minikube 架构及启动流程剖析

    原文作者 wzqnls 编辑 夏天 对于要学习 Kubernetes 或者需要本地开发的开发人员来说 Minikube 是一个不错的选择 通过使用 Minikube 这个工具 我们可以非常快捷地在本地部署一套单节点的 Kubernetes
  • 线程和进程的区别(面试必备)

    参考文章 https www jianshu com p 2dc01727be45 线程与进程的区别通俗的解释 https www jianshu com p 8ad441510860 附加可参考文章 https baijiahao bai
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • redis主从同步,总是显示master_link_status:down的解决方法

    前几天 在修改一台从节点的redis的监听端口后 重启了下redis 发现master link status 很长时间一直都是down状态 查看了redis日志 发现日志里出现很多的 I O error trying to sync wi
  • pycharm内存不足时如何修改设置?

    Help gt Find Action gt type VM Options gt Click Edit Custom VM Options Pycharm 2016 2 will open the appropriate vmoption
  • 设备管理过程

    复杂度2 5 机密度2 5 最后更新2021 04 19 AIX中对设备会有如下五个操作 define aix下能看到设备的定义 但驱动程序并没有加载或初始化 该设备不可用 lsdev看到设备时defined 很多逻辑设备 vg lv等 只
  • Linux 磁盘与文件系统管理(鸟哥私房菜)

    本文来自 http vbird dic ksu edu tw linux basic 0230filesystem php 第八章 Linux 磁盘与文件系统管理 系统管理员很重要的任务之一就是管理好自己的磁盘文件系统 每个分割槽不可太大也
  • office2013 excel 打开时提示excel词典xllex.dll文件丢失或损坏

    今天打开Excel时 发现报错 xllex dll文件丢失或损坏 我用的是office2013 网上找了好多都是2007的dll文件 导入不了 于是乎重装office 问题解决 但还是把xllex dll烤出来做个备份吧 参考下面步骤即可
  • Windows 添加永久静态路由

    route add p 10 10 0 0 mask 255 255 0 0 10 10 6 1 p 参数 p 即 persistent 的意思 p 表示将路由表项永久加入系统注册表
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • Linux,Network manager 导致节点异常重启

    推断是Network manager 导致的 原因待查今天在VmWare的虚拟机上装了个测试RAC 又遇到了一个摸不到头绪的问题CRS装好后 一旦登陆图形界面 节点就重启 事情就有这么巧不登陆图形界面 观察了1个小时没问题 一旦登陆后 立刻
  • 《一个操作系统的实现》读书笔记-- 第一章--最小的“操作系统”

    一 最简单的 操作系统 最最简单的 操作系统 就是一个最最简单的引导扇区 Boot Sector 虽然它不具有任何功能 但是它却能够直接在裸机上运行 不依赖其他软件 一个引导扇区是512个字节 并且以0xAA55为结束标识的扇区 下面就是那
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • 由于回车符引起的shell错误

    今天弟弟写shell时出现一个错误 源代码如下 zip r 1 2 执行时出现错误 我也写了相同的语句 发现是可以执行的 把两个文件对比一看 差别在于 出错shell 正确shell 在linux下的回车是 n 在win下面的回车是 r n
  • linux 使用systemctl 启动服务报错: Error: No space left on device

    By default Linux only allocates 8192 watches for inotify which is ridiculously low And when it runs out the error is als
  • C#实现FTP文件夹下载功能【转载】

    网上有很多FTP单个文件下载的方法 前段时间需要用到一个FTP文件夹下载的功能 于是找了下网上的相关资料结合MSDN实现了一段FTP文件夹下载的代码 实现的思路主要是通过遍历获得文件夹下的所有文件 当然 文件夹下可能仍然存在文件夹 这样就需
  • Common块和Bss段的区别

    昨天看 程序员的自我修养 链接 装载与库 发现不是很理解为什么要用common块 然后仔细看了一番 有了自己的理解 common块 用来存放弱符号 而全局未初始化变量是弱符号 但是难道不是应该存放在 bss段吗 为什么要有common块呢

随机推荐

  • 6种JavaScript判断数组是否包含某个值的方法

    我们在项目开发过程中 经常会要检查一个数组 无序 是否包含一个特定的值 这是一个在JavaScript中经常用到的并且非常有用的操作 下面给出几种实现方式 方式一 利用循环 这种方式是比较老的实现方案 但不可否认的是在浏览器中效率较高 fu
  • 标识符与关键字,常量和变量

    标识符 标识符是有效字符序列 是一个对象的名字 用于标识用户自己定义大的变量 符号常量 函数名 数组名 类型名等 前面学习大的例子中的整型变量num 浮点型变量fnum 字符变量ch等等 均为用户定义的标识符 命名规则 不能是关键字 只能由
  • 使用HTTPS模式建立高效爬虫IP服务器详细步骤

    嘿 各位爬虫小伙伴们 想要自己建立一个高效的爬虫IP服务器吗 今天我就来分享一个简单而强大的解决方案 使用HTTPS模式建立工具 本文将为你提供详细的操作步骤和代码示例 让你快速上手 轻松建立自己的爬虫IP服务器 1 准备工作 在开始之前
  • 漏洞复现----ThinkCMF框架任意内容包含漏洞分析复现

    0x00 简介 ThinkCMF是一款基于ThinkPHP MySQL开发的中文内容管理框架 ThinkCMF提出灵活的应用机制 框架自身提供基础的管理功能 而开发者可以根据自身的需求以应用的形式进行扩展 每个应用都能独立的完成自己的任务
  • Error - Found cycle in the ListNode

    这是我在刷力扣206题时遇到的问题 报错的原因很简单 在我反转链表的时候 先定义了一个新的头结点first 把原来的头结点head放在了新的链表的第一个 然后以此遍历原有链表 把每个链表加到新链表头结点first的后面 形成了链表的反转 但
  • 迷惑度/困惑度/混乱度(preplexity)

    语言模型构造完成后 如何确定好坏呢 目前主要有两种评价方法 实用方法 通过查看该模型在实际应用 如拼写检查 机器翻译 中的表现来评价 优点是直观 实用 缺点是缺乏针对性 不够客观 理论方法 迷惑度 困惑度 混乱度 preplexity 其基
  • 【VS安装记录】Visual Studio 2022安装教程(超详细)

    大家好 我是雷工 由于更换了电脑 很多软件需要重新安装 为了方便学习C 今天有时间安装下Visual Studio 2022 顺便记录安装过程 1 从官网下载并解压软件压缩包 然后打开文件夹 2 双击 visual studio 2022
  • 搭建微服务下统一认证授权服务,鉴权客户端大致流程(基于无状态)

    1 简介 基于无状态令牌 jwt 的认证方案 服务端无需保存用户登陆状态 基于spring security框架 oauth2协议 搭建 基于spring cloud nacos 服务调用使用RestTemplate 前置知识 jwt 也就
  • VUE 常用指令

    目录 Vue概念 同类产品 官网 特点 渐进式框架 入门案例 html 改造入门案例 html MVVM框架 基础语法 运算符 operator 方法 methods Vue解析数据 三种data值的写法 高级用法 v 命令 指令集 双向绑
  • Java中GET请求与POST请求,前端传参与后端接收实例

    此示例以代码方式展现 可直接结合controller层每个接口上方注释与其接口传递参数方式理解 前端传参直接就以apiPost工具来代替 apiPost调用后端接口几种方式 代码 controller层 package com chensi
  • 读写ini配置文件(C++)

    文章目录 1 为什么要使用ini或者其它 例如xml json 配置文件 2 ini文件基本介绍 3 ini配置文件的格式 4 C 读写ini配置文件 5 代码示例 6 配置文件的解析库 文章转载于 https blog csdn net
  • Proteus中继电器详解

    目录 一 引言 二 继电器实物 三 Proteus继电器选择 四 继电器工作原理及Proteus中继电器引脚 五 Proteus中继电器正确接法举例及仿真视频记录 一 引言 我们都知道继电器可以利用小信号控制大功率 有四两拨千斤功效 同时还
  • 一些关于TV的概念

    文章目录 TTX FVP BML MTS BTSC 一些关于TV的属于解释 TTX TTX是一种电视机上的文字广播系统 可以在电视屏幕上显示文字信息 如新闻 天气预报 股票行情 电视剧剧情介绍等 它是通过电视信号的一部分传输的 不需要额外的
  • springboot 2.0.4 关闭程序————我走过的那些坑

    首次接触springboot项目 在本地测试的时候 发现不知道怎么关闭程序 虽然后来不得不用杀死进程的方式解决 但总觉得这种方式太简单粗暴 就准备问问度娘别人都是怎么做的 结果普遍答案是 步骤 第一步 引入依赖
  • 中央和省级产业政策匹配数据(含完整stata代码)

    1 数据来源 国泰安数据库 2 时间跨度 中央产业政策 2001 2020年 和省份产业政策 2006 2020年 3 区域范围 全国 4 指标说明 具体匹配代码详见分享文件中的do文件 匹配流程 1 整理证监会2001年分类标准和证监会2
  • Python 进阶(七): Word 基本操作

    1 概述 Word 是一个十分常用的文字处理工具 通常我们都是手动来操作它 本节我们来看一下如何通过 Python 来操作 Python 提供了 python docx 库 该库就是为 Word 文档量身定制的 安装使用 pip insta
  • openwrt 格式化_如何在路由器上格式化 U 盘、硬盘

    本教程适用于梅林 padavan LEDE openwrt 等固件 以下具体方法都基于 ext4 NTFS 相关错误不做回答 使用ssh连接路由器 把U盘插到路由器上 我们需要在命令行进行以下4步操作 安装fdisk 一般梅林 Padava
  • Keil(MDK-ARM-STM32)系列教程(六)Configuration(Ⅱ)

    写在前面 本文接着上一篇文章 Configuration 进行讲述Configuration后面三项Shortcut Keys快捷键 Text Completion代码完形 Other其他的内容 Shortcut Keys快捷键 Keil软
  • 精学JS:宏任务 & 微任务的运行机制

    首先分析宏任务和微任务的运行机制 并针对日常开发中遇到的各种宏任务 微任务的方法 结合一些例子来看看代码运行的顺序逻辑 把这部分知识点重新归纳和梳理 在日常开发中 例如 setTimeout和 promise都是经常会使用到的 JS方法 当
  • 操作系统【六】虚拟内存

    传统存储管理方式的不足 一次性 作业必须一次性全部装入内存后才能开始运行 这会造成 当作也很大时不能全部装入内存 当大量作业要求运行时 由于内存无法容纳所有作业 因此只有少量作业能够运行 导致多道程序并发度下降 驻留性 一旦作业被装入内存