虚拟存储器

news2024/11/16 21:32:37

虚拟存储器

文章目录

      • 虚拟存储器
        • 虚拟存储器概述
          • 常规存储器管理方式的特征
          • 局部性原理
          • 虚拟存储器的定义和特征
        • 请求分页存储管理方式
          • 请求分页中的硬件支持
          • 请求分页中的内存分配
          • 页面调入策略
        • 页面置换算法
          • 最佳(Optimal)置换算法
          • 先进先出(FIFO)页面置换算法
          • 最近最久未使用(LRU)置换算法
          • 最少使用(Least Frequently Used, LFU)置换算法
          • Clock 置换算法
          • 页面缓冲算法(PBA:Page Buffering Algorithm)
        • “抖动”与工作集
          • 多道程序度与“抖动”
          • 工作集
          • “抖动”的预防方法
        • 请求分段存储管理方式
          • 请求分段中的硬件支持
          • 分段的共享与保护

虚拟存储器概述

  1. 常规存储器管理方式的特征
    • 一次性:在前面所介绍的几种存储管理方式中,都要求将作业全部装入内存后方能运行
    • 驻留性:作业装入内存后,便一直驻留在内存中,直至作业运行结束。
  2. 局部性原理
    • 时间局限性:如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行; 如果某数据被访问过,则不久以后该数据可能再次被访问。(循环操作)
    • 空间局限性:一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也将 被访问。(顺序执行)
  3. 虚拟存储器的定义和特征
    • 定义:谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
    • 特征:
      • 多次性:多次性是指一个作业被分成多次调入内存运行
      • 对换性:对换性是指允许在作业的运行过程中进行换进、换出
      • 虚拟性:虚拟性是指能够从逻辑上扩充内存容量

请求分页存储管理方式

  1. 请求分页中的硬件支持
    1. 页表机制image-20221207214323183

      1. 状态位 P:用于指示该页是否已调入内存,供程序访问时参考。
      2. 访问字段 A:用于记录本页在一段时间内被访问的次数,或记录本页最近已有多长 时间未被访问,供选择换出页面时参考。
      3. 修改位 M:表示该页在调入内存后是否被修改过。M 位供置换页面时参考。
      4. 外存地址:用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。
    2. 缺页中断机构

      它与一般的中断相比,有着明显的区别

      • 在指令执行期间产生和处理中断信号
      • 一条指令在执行期间,可能产生多次缺页中断
    3. 地址变换机构image-20221207214715297

  2. 请求分页中的内存分配

    在为进程分配内存时,将涉及到三个问题:第一,最小物理块数的确定;第二,物理块的分配策略;第三,物理块的分配算法。

    1. 最小物理块数的确定

      取决于指令的格式、功能和寻址方式

    2. 内存分配策略

      在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换 时,也可采取两种策略,即全局置换和局部置换。

      • 固定分配局部置换(Fixed Allocation,Local Replacement)

      固定分配:为 每个进程分配固定数目的物理块

      局部置换:,如果进程 在运行中发现缺页,则只能从该进程在内存的 n 个页面中选出一个页换出,然后再调入一 页,以保证分配给该进程的内存空间不变。

      • 可变分配全局置换(Variable Allocation,Global Replacement) 大锅饭

        可变分配:先为进程分配一定数目的物理块,在进程运行期间根据情况适当的增加或减小

        全局置换:发现缺页从OS保留空闲块中取出一块分配,当OS无空闲块,则从一个选中进程块中抽取

      • 可变分配局部置换(Variable Allocation,Local Replacement) 会哭的孩子有糖吃

        如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干 附加的物理块,直至该进程的缺页率减少到适当程度为止;反之,若一个进程在运行过程 中的缺页率特别低,则此时可适当减少分配给该进程的物理块数

    3. 物理块分配算法

      • 平均分配算法
      • 按比例分配算法
      • 考虑优先权的分配算法
  3. 页面调入策略
    1. 预调页策略:如果进程的许多页是存放在外存的一个连续区域中,则一次调入若干个相邻的页,会 比一次调入一页更高效些
    2. 请求调页策略:但这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘 I/O 的启动频率。

页面置换算法

  1. 最佳(Optimal)置换算法

    其所选择的被淘汰页面, 将是以后永不使用的,或许是在最长(未来)时间内不再被访问的页面。

    image-20221207220657994

  2. 先进先出(FIFO)页面置换算法

    该算法总是淘汰最先进入内存的页面,即选择在内存中驻 留时间最久的页面予以淘汰

    image-20221207220752332

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

    LRU 置换算法是选择最近最久未 使用的页面予以淘汰。

    image-20221207220907107

    LRU置换算法的硬件支持

    1. 寄存器

      为了记录某进程在内存中各页的使用情况,须为每个在内存中的页面配置一个移位寄 存器,可表示为

      image-20221207221019379

      当进程访问某物理块时,要将相应寄存器的 Rn-1 位置成 1。此时,定时信号将每隔一 定时间(例如 100 ms)将寄存器右移一位。如果我们把 n 位寄存器的数看做是一个整数,那么, 具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。

      image-20221207221119150

      由图可以看出,第 3 个内存页面的 R 值最小,当发 生缺页时,首先将它置换出去。

    可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时, 便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编 号,而栈底则是最近最久未使用页面的页面号。

    image-20221207221225909

  4. 最少使用(Least Frequently Used, LFU)置换算法

    寄存器R中1位数最少淘汰

    对比LRU

    ​ 2 1 1 0 4

    LRU: 2 21 21 01 04

    LFU: 2 21 21 01 41

  5. Clock 置换算法

    Clock 算法就是用得较多的一种 LRU 近似算法。

    1. 简单的Clock置换算法(NRU)

      当采用简单 Clock 算法时,只需为每页设置一位访问位,再将内存中的所有页面都通过 链接指针链接成一个循环队列。当某页被访问时,其访问位被置 1。置换算法在选择一页淘 汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不 换出,而给该页第二次驻留内存的机会,再按照 FIFO 算法检查下一个页面。当检查到队列 中的最后一个页面时,若其访问位仍为 1,则再返回到队首去检查第一个页面。

      image-20221207221832636

    2. 改进型 Clock 置换算法

      由访问位 A 和修改位 M 可以组合成下面四种类型的页面:

      image-20221207221946116

      1. 从指针所指示的当前位置开始,扫描循环队列,寻找 A=0 且 M=0 的第一类页面, 将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位 A。
      2. 如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找 A=0 且 M=1 的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所 有扫描过的页面的访问位都置 0。
      3. 如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并将所 有的访问位复 0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到 被淘汰的页。
  6. 页面缓冲算法(PBA:Page Buffering Algorithm)

    该算法规定将一个被淘汰的页放入两个链表中的一个,即如果页面未被修改,就将 它直接放入空闲链表中;否则,便放入已修改页面的链表中。

“抖动”与工作集

  1. 多道程序度与“抖动”
    • 多道程序度:系统中能运行的进程数
    • 抖动:每个进程大部分时间都用于也免得换进/换出,而几乎不能再去做任何有效的工作,从而导致处理机急剧下降并趋于0的情况
    • 发生抖动的原因:同时在系统中运行的进程太多,由此分配给每个进程的物理块太少,不能满足进程正常运行的基本要求,知识每个进程运行时,频繁的缺页,必须请求系统将所缺之页调入内存。
  2. 工作集
    • 定义:在某段时间间隔 △ \triangle 里,进程实际所要访问页面的集合,在时间t的工作集 w ( t , △ ) w(t, \triangle) w(t,),其中 △ \triangle 称为工作集的窗口大小
    • 工作集 w ( t , △ ) w(t, \triangle) w(t,)是二元函数,即在不同时间t的工作集,所含页面不同,工作集与 △ \triangle 有关 w ( t , △ ) ⊆ w ( t , △ + 1 ) w(t, \triangle)\subseteq w(t, \triangle + 1) w(t,)w(t,+1)
  3. “抖动”的预防方法
    1. 局部置换策略

    2. 工作集算法

    3. 利用“L = S”准则调节缺页率:

      其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。
      如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。
      只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。

    4. 选择暂停进程

请求分段存储管理方式

  1. 请求分段中的硬件支持
    1. 段表机制

      image-20221207222457643

      • 存取方式:用于标识本分段的存取属性是只执行、只读,还是允许读/写。
      • 访问字段 A:其含义与请求分页的相应字段相同,用于记录该段被访问的频繁程度。
      • 修改位 M:用于表示该页在进入内存后是否已被修改过,供置换页面时参考。
      • 存在位 P:指示本段是否已调入内存,供程序访问时参考。
      • 增补位:这是请求分段式管理中所特有的字段,用于表示本段在运行过程中是否做 过动态增长。
      • 外存始址:指示本段在外存中的起始地址,即起始盘块号。
    2. 缺段中断机构

      image-20221207222654709

    3. 地址变换机构image-20221207222733610

  2. 分段的共享与保护
    1. 共享段表

      • 共享进程计数 count。非共享段仅为一个进程所需要。当进程不再需要该段时,可 立即释放该段,并由系统回收该段所占用的空间。
      • 存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。
      • ) 段号。对于一个共享段,不同的进程可以各用不同的段号去共享该段。image-20221207223009796
    2. 共享段的分配与回收

      1. 共享段的分配

        在为共享段分配内存时,对第一个请求使用该共享段的进程,由系 统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段 表的相应项中,还须在共享段表中增加一表项,填写有关数据,把 count 置为 1;之后,当 又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分 配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址;在共享段的 段表中,填上调用进程的进程名、存取控制等,再执行 count :=count+1 操作,以表明有两 个进程共享该段。

      2. 共享段的回收

        当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享 段所对应的表项,以及执行 count :=count-1 操作。若结果为 0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否 则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。

    3. 分段保护

      1. 越界检查
      2. 存取控制检查
      3. 环保护机构

此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享 段所对应的表项,以及执行 count :=count-1 操作。若结果为 0,则须由系统回收该共享段的物理内存,以及取消在共享段表中该段所对应的表项,表明此时已没有进程使用该段;否 则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。

  1. 分段保护

    1. 越界检查
    2. 存取控制检查
    3. 环保护机构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/73215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习下的脑机接口BCI究竟有多远?

BCI | ECoG | 脑机接口 LFP | CMRR | 生物计算 随着生命科学、医药研发、数据分析、数据挖掘、LFP、生物计算、靶点发现、基因测序等技术的快速发展,脑科学逐渐出现在人们的视野中,随之而来的脑机接口技术同时得到快速发展。 脑科学是人类社会面临的…

Word处理控件Aspose.Words功能演示:使用 Java 将 Word 文档转换为 HTML

为了将 Word 文档的内容嵌入到您的应用程序中,您可能需要执行转换。在这种情况下,最广泛选择的转换是 Word 到HTML或 Word 到图像。,Aspose API支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像…

Ubuntu20.04安装各种库----简洁版

目录Eigen3SophusPangolinCeresg2o建议先装anaconda再装ros, python,opencv啥该有的都有了下面仅仅安装ros没有的库Eigen3 作用:线性代数开源库, 提供了有关线性代数、矩阵和矢量运算、数值分析及相关的算法安裝方法: sudo apt-get install libeigen3-dev使用時注意添加頭文件…

性能测试:数据库性能问题实战分析

接口压测分析 现在我们来压测一个获取用户信息接口,这个接口会涉及到数据库的数据查询。我们的项目是部署正在应用服务器上面的,因此我们需要同时监控应用服务器和数据库服务器。 那么下面我们来看一下tomcat的这台服务器,cpu的使用率并不高&…

linux系统怎么安装宝塔面板

linux系统怎么安装宝塔面板 怎么安装宝塔面板?这个其实很简单接下来跟着我操作:以linux centos7.6 举例 Centos安装脚本: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh i…

JavaScript -- 10. 一文了解DOM对象及常用方法

文章目录1. DOM介绍1.1 什么是DOM1.2 概念1.3 关系1.4 HelloWorld1.5 document对象2. DOM节点2.1 元素节点2.1.1 获取已有的元素节点2.1.1 document.getElementById()2.1.2 document.getElementsByClassName()2.1.3 document.getElementsByTagName()2.1.4 document.getElements…

设计模式之简单工厂模式

simple factory design pattern 简单工厂模式的概念、简单工厂模式的结构、简单工厂模式优缺点、简单工厂模式的使用场景、简单工厂模式的实现示例 注:简单工厂模式没有被收录在 GoF 的二十三种设计模式中。 1、简单工厂的概念 简单工厂模式,与其说是设…

32位PCI转CPCI转接板

功能型号 32位PCI转CPCI转接板,调试卡 支持PICMG 2.0 D3.0规范; 支持33MHz速率; 支持32bit总线; 功能描述 1、沉金工艺,接触更好; 2、四层板设计,抗干扰更好; 3、信号线等长处理&…

【论文精读9】MVSNet系列论文详解-AA-RMVSNet

AA-RMVSNet,论文名为:AA-RMVSNet: Adaptive Aggregation Recurrent Multi-view Stereo Network,CVPR2021(CCF A) 本文是MVSNet系列的第9篇,建议看过【论文精读1】MVSNet系列论文详解-MVSNet之后再看便于理解…

【Java 快速复习】 Java 内存模型 并发问题本质

【Java 快速复习】 Java 内存模型 & 并发问题本质 在 Java 领域,我们经常会说两个名词大家要有所区分: JVM 内存模型:这个所说的是 JVM 内存的划分规则,如 堆、栈、元空间等Java 内存模型:这个所说的是线程和主内…

【计算机网络】应用层

应用层的许多协议都是基于客户服务器方式。 客户和服务器指通信中所涉及的两个应用进程。客户服务器方式描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。 P2P模式:整个网络中的传输内容不再被保存在中心服务器中&#xff…

怎么裁剪视频?手把手教你裁剪

这两年,随着网课的不断发展,我们可以很轻松的就在网上找到各种课程视频。可是有时候,一些视频里面的重点内容往往只有那几分钟,当我们回顾的时候,需要不断跳转,这就显得有些麻烦。其实我们可以将重点内容裁…

【代码随想录】二刷-回溯算法

回溯算法 《代码随想录》 什么是回溯算法? 回溯算法也可以叫做回溯搜索法,它是一种搜索方式。回溯是递归的副产品,只要有递归就会有回溯。 回溯法的效率: 回溯法的本质是穷举,穷举所有可能,然后选出我们想要的答案。(n…

如何使用virtualenv实现python环境的隔离?

有关更多的Python 开发内容,可访问:《 Python Flask开发指南》​​​​​​​ virtualenv可以帮助我们来创建一个Python的虚拟环境,虚拟环境可以独立并隔离外部的python环境,方便我们对于不同项目使用不同的python依赖,已经依赖版本的不同而导致的错误。本篇文章主要来了解…

2022全年度冰箱十大热门品牌销量榜单

自2022年年初以来,各地纷纷部署支持包括冰箱在内的家电大宗消费政策措施,其中家电补贴政策是刺激家电消费的主旋律。宏观经济政策环境改善,利好冰箱行业的长期发展。 根据鲸参谋数据统计,今年京东平台冰箱的年度累计销量达到1400多…

论文阅读笔记《Learning Combinatorial Solver for Graph Matching》

核心思想 本文提出一种基于学习的组合求解器来实现图匹配。之前基于学习的图匹配方法都是利用神经网络提取特征构建关联矩阵,然后再利用可微分的Sinkhorn算法求解匹配矩阵。但本文提出的方法没有显式的构建关联矩阵和求解匹配矩阵的过程,而是将其转化成关…

SpringBoot:核心模块盘点

spring-boot-project 是 spring-boot 核心技术包,其中包含了 spring-boot 所有基础源码,其中很多模块都是我们了解 spring-boot 的重点。 ~ 本篇内容包括:spring-boot-project 包介绍、Spring Boot 核心模块 文章目录一、spring-b…

SpringCloud-Geteway之限流,熔断(超详细篇)

目录 一,Sentinel--服务容错 1.1 高并发带来的问题 1. 使用压测工具,对请求进行压力测试 2.修改配置文件中tomcat的并发数 1.2 服务雪崩效应 1.3 常见容错方案 1.4 Sentinel入门 什么是Sentinel 微服务集成Sentinel 安装Sentinel控制台 实现一个接口的限…

QTextLine、QGlyphRun、QTextLayout

QGlyphRun 一、描述 此类提供对字体中内部字形的直接访问。在某些情况下,开发人员可以对特定字体中的字形绘制到屏幕上进行更低级的控制。 当Qt显示以Unicode编码的文本字符串时,它会将Unicode点转换为基于字体的字形索引列表和位置列表。QGlyphRun 提…

企业对于源代码加密需求分析

需求 随着企业信息化发展的日益增长,软件行业厂商之间的竞争也愈加白热化,加上国内对知识产权的不够重视、山寨模仿产品的横行。保护源代码、保证企业的核心竞争力,成为众多软件研发企业的第一要务。那么企业应该如何保证源代码的安全呢&…