爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      第五章 虚拟存储器【操作系统】

      首页 知识中心 存储 文章详情页

      第五章 虚拟存储器【操作系统】

      2023-08-03 07:23:05 阅读次数:420

      操作系统

       

      前言

      以下内容源自计算机操作系统(第四版)
      关于操作系统,
      CSDN有很多的优秀博客。
      在这里,
      本文摘取其他博客内容,
      并附上相关链接,
      如有侵权,
      联系删除,
      仅供学习交流使用

      请您阅读文章声明,默认同意该声明

      推荐

      计算机操作系统(第四版)之虚拟存储器要点梳理

      第五章 虚拟存储器

      5.1 虚拟存储器概述

      虚拟存储器实现了内存扩充功能。但该功能并非是从物理上实际地扩大内存的容量,而是从逻辑上实现对内存容量的扩充。
      第四章所介绍的各种存储器管理方式有一个共同的特点,即它们都要求将一个作业全部装入内存后方能运行。于是,出现了下面这样两种情况:
      1)有的作业很大,其所要求的内存空间超过了内存总容量。
      2)有大量作业要求运行,但由于内存容量不足以容纳所有这些作业。
      都是由于内存容量不够大导致的,一种解决方法是从逻辑上扩充内存容量,这正是虚拟存储技术所要解决的主要问题。

      5.1.1 常规存储管理方式的特征和局部性原理

      1.常规存储器管理方式的特征
      1)一次性。指作业必须一次性地全部装入内存后方能开始运行。
      2)驻留性。作业装入内存后,整个作业会一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。
      一次性及驻留性特征,使许多在程序运行中不用或暂不用的程序(数据)占据了大量的内存空间,使得一些需要运行的作业无法装入运行。
      2.局部性原理
      程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也局限于某个区域。 论点如下:
      1)程序执行时,除了少部分的转移和过程调用指令外,在大多数情况下是顺序执行的。
      2)过程调用将会使程序的执行轨迹由一部分区域转至另一部分区域。
      3)程序中存在许多循环结构,这些虽然只由少数指令构成,但是它们将多次执行。
      4)程序中还包括许多对数据结构的处理,如对数组进行操作,它们往往都局限于很小的范围内。
      局限性还表现在下述两个方面:
      1)时间局限性。如果程序中的某条指令(或数据)一旦被执行(或被访问),则不久以后该指令(或数据)可能再次被执行(或被访问)。产生时间局限性的典型原因是由于在程序中存在着大量的循环操作。
      2)空间局限性。程序在一段时间内所访问的地址,可能集中在一定的范围之内,其典型情况便是程序的顺序执行。
      3.虚拟存储器的基本工作情况
      基于局部性原理可知,应用程序在运行之前,没有必要全部装入内存,仅须将那些当前要运行的少数页面或段先装入内存便可运行,其余部分暂留在盘上。程序在运行时,如果它所要访问的页(段)已调入内存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入
      内存(称为缺页或缺段),此时程序应利用 OS 所提供的请求调页(段)功能,将它们调入内存,以使进程能继续执行下去。如果此时内存已满,无法再装入新的页(段),则还须再利用页(段)的置换功能,将内存中暂时不用的页(段)调至盘上,腾出足够的内存空间后,再将要访问的页(段)调入内存,使程序继续执行下去。这样,便可使一个大的用户程序能在较小的内存空间中运行;也可在内存中同时装入更多的进程使它们并发执行。

      5.1.2虚拟存储器的定义和特征

      1.虚拟存储器的定义
      所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。其逻辑容量由内存容量和外存容量之和所决定,其运行速度接近于内存速度,而每位的成本却又接近于外存。
      2.虚拟存储器的特征
      1)多次性。是指一个作业中的程序和数据无需在作业运行时一次性地全部装入内存,而是允许被分成多次调入内存运行,即只需将当前要运行的那部分程序和数据装入内存即可开始运行。
      2)对换性。是指一个作业中的程序和数据,无须在运行时一直常驻内存,而是允许在作业的运行过程中进行换进、换出。
      3)虚拟性。是指能够从逻辑上扩充内存容量,使用户所看到的内存容量远大于实际内存容量。就可以在小的内存中运行大的作业,或者能提高多道程序度。
      虚拟性是以多次性和对换性为基础的,而多次性和对换性是必须建立在离散分配的基础上。

      5.1.3虚拟存储器的实现方法

      1.分页请求系统
      这是在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。置换时以页面为单位。
      1)硬件支持。
      ①请求分页的页表机制。
      ②缺页中断机构。
      ③地址变换机构。
      2)实现请求分页的软件。
      包括有用于实现请求调页的软件和实现页面置换的软件。
      2.分段请求系统
      这是在分段系统的基础上,增加了请求调段及分段置换功能后所形成的段式虚拟存储系统。置换时以段为单位。
      1)硬件支持。
      ①请求分段的段表机制。
      ②缺段中断机构。
      ③地址变换机构。
      2)实现请求分段的软件。
      包括有用于实现请求调段的软件和实现段置换的软件。
      因为请求分页系统换进和换出的基本单位都是固定大小的页面,所以在实现上要容易些。而请求分段系统换进换出的基本单位是段,其长度是可变的,分段的分配类似于动态分区方式,它在内存分配和回收上都比较复杂。

      段页式虚拟存储器系统。
      在段页式系统基础上,增加请求调页和页面置换功能形成段页式虚拟存储器系统。

      5.2 请求分页存储管理方式

      5.2.1 请求分页中的硬件支持

      1.请求页表机制
      在请求页表中增加了四个字段:
      第五章 虚拟存储器【操作系统】

      1)状态位(存在位) P:指示该页是否已调入内存。
      2)访问字段A:记录该页在一段时间内的访问次数,或者最近多久未被访问,为置换算法选择置换页提供参考;
      3)修改位M:指示该页在调入内存后是否被修改过。
      4)外存地址:指示该页在外存的地址,通常是物理块号。
      2.缺页中断机构
      在请求分页系统中,每当所要访问的页面不在内存时,便产生一缺页中断,请求 OS 将所缺之页调入内存。缺页中断作为中断,它们同样需要经历诸如保护 CPU 环境、分析中断原因、转入缺页中断处理程序进行处理、恢复 CPU 环境等几个步骤。但缺页中断又是一种特殊的中断,它与一般的中断相比,有着明显的区别,主要表现在下面两个方面:
      1)在指令执行期间产生和处理中断信号。即在指令执行期间,发现所要访问的指令或数据不在内存时所产生和处理的。
      2)一条指令在执行期间,可能产生多次缺页中断。并保证最后能返回到中断前产生缺页中断的指令处继续执行。
      3.地址变换机构
      第五章 虚拟存储器【操作系统】

      在检索块表和页表时,对于写指令,还须将修改位置成“1”。

      5.2.2 请求分页中的内存分配

      1.最小物理块数的确定
      这里所说的最小物理块数,是指能保证进程正常运行所需的最小物理块数。进程应获得的最少物理块数与计算机的硬件结构有关,取决于指令的格式、功能和寻址方式。
      2.内存分配策略
      在请求分页系统中,可采取两种内存分配策略,即固定和可变分配策略。在进行置换时,也可采取两种策略,即全局置换和局部置换。于是可组合出以下三种适用的策略。
      1)固定分配局部置换。
      所谓固定分配,是指为每个进程分配一定数目的物理块,在整个运行期间都不再改变。所谓局部置换,是指如果进程在运行中发现缺页,则只能从分配给该进程的 n 个页面中选出一个页换出,然后再调入一页,以保证分配给该进程的内存空间不变。实现这种策略的困难在于:应为每个进程分配多少个物理块难以确定。
      2)可变分配全局置换。
      所谓可变分配,是指先为系统中的每个进程分配一定数目的物理块,在进程运行期间,可根据情况做适当的增加或减少。所谓全局置换,是指当进程发现缺页时,则将 OS 所保留的空闲物理块(一般组织为一个空闲物理块队列)取出一块分配给该进程,或者以所有物理块为标的,选择一块换出,然后将所缺之页调入。
      在采用这种策略时,凡产生缺页(中断)的进程,都将获得新的物理块,仅当空闲物理队列中的物理块用完时,OS 才能从内存中选择一页调出,而被选择调出的页所属的进程拥有的物理块就会减少,导致其缺页率增加。
      3)可变分配局部置换。
      该策略为每个进程分配一定数目的物理块,但当某进程发现缺页时,只允许从该进程在内存的页面中选出一页换出,这样就不会影响其它进程的运行。如果进程在运行中频繁地发生缺页中断,则系统须再为该进程分配若干附加的物理块,直至该进程的缺页率减少到适当程度为止;反之,若一个进程在运行过程中的缺页率特别低,则此时可适当减少分配给该进程的物理块数,但不应引起其缺页率的明显增加。
      3.物理块分配算法
      在采用固定分配策略时,如何分配物理块采用以下算法:
      1)平均分配算法。
      2)按比例分配算法,即根据进程的大小按比例分配物理块的算法。
      3)考虑优先权的分配算法。通常采取的方法是把内存中可供分配的所有物理块分成两部分:一部分按比例地分配给各进程;另一部分则根据各进程的优先权进行分配。

      5.2.3 页面调入策略

      1.何时调入页面
      1)预调页策略。一次调入若干个相邻的页。
      ①可用于进程的首次调入时。②在采用工作集的系统中使用。
      2)请求调页策略。
      进程在运行中提出缺页请求时调入。这种策略每次仅调入一页,故须花费较大的系统开销,增加了磁盘 I/O 的启动频率。
      2.从何处调入页面
      通常,由于对换区是采用连续分配方式,而文件区是采用离散分配方式,故对换区的磁盘 I/O 速度比文件区的高。
      1)系统拥有足够的对换区空间,这时可以全部从对换区调入所需页面,以提高调页速度。为此,在进程运行前,便须将与该进程有关的文件从文件区拷贝到对换区。
      2)系统缺少足够的对换区空间,这时凡是不会被修改的文件都直接从文件区调入;但对于那些可能被修改的部分,在将它们换出时,便须调到对换区,以后需要时,再从对换区调入。
      3)UNIX 方式。凡是未运行过的页面,都应从文件区调入。而对于曾经运行过但又被换出的页面,由于是被放在对换区,因此在下次调入时,应从对换区调入。
      3.页面调入过程
      每当程序所要访问的页面未在内存时(存在位为“0”),便向 CPU 发出一缺页中断,中断处理程序首先保留 CPU 环境,分析中断原因后转入缺页中断处理程序。该程序通过查找页表,得到该页在外存的物理块后,如果此时内存能容纳新页,则启动磁盘 I/O 将所缺之页调入内存,然后修改页表。如果内存已满,则须先按照某种置换算法从内存中选出一页准备换出;如果该页未被修改过(修改位为“0”),可不必将该页写回磁盘;但如果此页已被修改(修改位为“1”),则必须将它写回磁盘,然后再把所缺的页调入内存,并修改页表中的相应表项,置其存在位为“1”,并将此页表项写入快表中。在缺页调入内存后,利用修改后的页表,去形成所要访问数据的物理地址,再去访问内存数据。整个页面的调入过程对用户是透明的。
      4.缺页率
      如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A = S + F,那么该进程在其运行过程中的缺页率即为
      f=F/A
      缺页率受以下因素的影响:
      1)页面大小。
      2)进程所分配物理块的数目。
      3)页面置换算法。因此缺页率是衡量页面置换算法的重要指标。
      4)程序固有特性。
      事实上,在缺页处理时,选择被置换页面还需要考虑置换的代价,如页面是否被修改过。

      5.3 页面置换算法

      把内存已无空闲空间时选择换出页面的算法称为页面置换算法(Page-Replacement Algorithms)。

      不适当的算法可能会导致进程发现“抖动”,即刚被换出的页很快又要被访问,需要将它重新调入,可能会出现频繁地更换页面,以致一个进程在运行中把大部分时间都花费在页面置换工作上。

      一个好的页面置换算法,应具有较低的页面更换频率。

      5.3.1 最佳置换算法和先进先出置换算法

      最佳置换算法是一种理想化的算法,通常使用最佳置换算法作为标准,来评价其它算法的优劣。先进先出置换算法是最直观的算法,由于与通常页面的使用规律不服,可能是性能最差的算法,故实际应用极少。

      1.最佳(Optimal)置换算法
      其所选择的被淘汰页面,将是以后永不使用的,或许是在最长(未来)时间内不再被访问(即下一次访问时间最晚)的页面。采用最佳置换算法,通常可保证获得最低的缺页率。

      假定系统为某进程分配了三个物理块,并考虑有以下的页面好引用串:

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
      

      置换图如下:
      每次把最长(未来)时间内不在访问的页面置换出

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
      7 7 7 2 2 2 2 2 2 2 2 2 2 2 2 2 2 7 7 7
        0 0 0 0 0 0 4 4 4 0 0 0 0 0 0 0 0 0 0
          1 1 1 3 3 3 3 3 3 3 3 1 1 1 1 1 1 1
      + + + +       +     +     +       +
      

      置换次数是6次,前三次不是置换,只是缺页
      缺页中断次数9,缺页率9/20
      2.先进先出(FIFO)页面置换算法
      总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
      FIFO 置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。

      假定系统为某进程分配了三个物理块,并考虑有以下的页面好引用串:

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
      

      置换图如下:
      置换出最先进入内存的页面,置入放在最底了,这样最顶就是最先进入内存
      当不需要置换时,保持不变。

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
      7 7 7 0 0 1 2 3 0 4 2 2 2 3 0 0 0 1 2 7
        0 0 1 1 2 3 0 4 2 3 3 3 0 1 1 1 2 7 0
          1 2 2 3 0 4 2 3 0 0 0 1 2 2 2 7 0 1
      + + + +   + + + + + +     + +     + + +
      

      置换次数是12次,前三次不是置换,只是缺页
      缺页中断次数15,缺页率15/20

      5.3.2 最近最久未使用和最少使用置换算法

      1.LRU(Least Recently Used) 置换算法的描述
      最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。即选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间 t,当须淘汰一个页面时,选择现有页面中其 t 值最大的,即最近最久未使用的页面予以淘汰。
      最佳置换算法是从“向后看”的观点出发的,即它是依据以后各页的使用情况;而 LRU 算法则是“向前看”的,即根据各页以前的使用情况来判断,而页面过去和未来的走向之间并无必然的联系。

      2.LRU 置换算法的硬件支持
      1)寄存器。
      为每个在内存中的页面配置一个移位寄存器,可表示为
      R=Rn-1Rn-2Rn-3…R2R1R0
      当进程访问某物理块时,要将相应寄存器的 Rn-1 位置成 1。此时,定时信号将每隔一定时间(例如 100 ms)将寄存器右移一位。如果我们把 n 位寄存器的数看做是一个整数,那么,具有最小数值的寄存器所对应的页面,就是最近最久未使用的页面。
      2)栈。
      可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将该页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号,而栈底则是最近最久未使用页面的页面号。

      假定系统为某进程分配了三个物理块,并考虑有以下的页面好引用串:

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
      

      置换图如下:
      置换出最进未使用入的页面,置入放在最底了,这样最顶就是最近最久未使用的页面
      当不需要置换是,也需把新页面放在最底,保证了最底层是最近最久使用的页面。

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
      7 7 7 0 1 2 2 3 0 4 2 2 0 3 3 1 2 0 1 7
        0 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0
          1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
      + + + +   +   + + + +     +   +   +
      

      置换次数是9次,前三次不是置换,只是缺页
      缺页中断次数12,缺页率12/20

      3.最少使用 LFU 置换算法
      该算法用移位寄存器方式。每次访问某页时,便将该移位寄存器的最高位置 1,再每隔一定时间(例如 100 ms)右移一次。LFU 置换算法的页面访问图与 LRU 置换算法的访问图完全相同;或者说,利用这样一套硬件既可实现 LRU 算法,又可实现 LFU 算法。但 LRU 算法是根据将 n 位看作一个整数找到最近最久未使用的页面,而 LFU 算法的在最近一段时间使用最少的页面将是∑Ri 最小的页。
      应该指出,LFU 算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用寄存器的一位来记录页的使用情况,因此,在该时间间隔内,对某页访问一次和访问 1000 次是完全等效的。

      5.3.3 Clock 置换算法

      虽然 LRU 算法是较好的一种算法,但由于它要求有较多的硬件支持,故在实际应用中,大多采用 LRU 的近似算法。Clock 算法就是用得较多的一种 LRU 近似算法。

      1.简单的 Clock 置换算法。
      只需为每页设置一位访问位,再将内存中的所有页面都通过链接指针链接成一个循环队列。当某页被访问时,其访问位被置 1。置换算法在选择一页淘汰时,只需检查页的访问位。如果是 0,就选择该页换出;若为 1,则重新将它置 0,暂不换出,而给该页第二次驻留内存的机会,再按照 FIFO 算法检查下一个页面。该算法是循环地检查各页面的使用情况的。又把该算法称为最近未用算法 NRU。
      2.改进型 Clock 置换算法
      在改进型 Clock 算法中,除须考虑页面的使用情况外,还须再增加一个因素,即置换代价,这样,选择页面换出时,既要是未使用过的页面,又要是未被修改过的页面。把同时满足这两个条件的页面作为首选淘汰的页面。由访问位 A 和修改位 M 可以组合成下面四种类型的页面:
      1 类(A=0,M=0):表示该页最近既未被访问,又未被修改,是最佳淘汰页。
      2 类(A=0,M=1):表示该页最近未被访问,但已被修改,并不是很好的淘汰页。
      3 类(A=1,M=0):表示该页最近已被访问,但未被修改,该页有可能再被访问。
      4 类(A=1,M=1):表示该页最近已被访问且被修改,该页可能再被访问。
      在内存中的每个页必定是这四类页面之一,在进行页面置换时,与简单 Clock 算法差别在于该算法须同时检查访问位与修改位,以确定该页是四类页面中的哪一种。其执行过程可分成以下三步:
      1)从指针所指示的当前位置开始,扫描循环队列,寻找 A=0 且 M=0 的第一类页面,将所遇到的第一个页面作为所选中的淘汰页。在第一次扫描期间不改变访问位 A。
      2)如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找 A=0 且 M=1 的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有扫描过的页面的访问位都置 0。
      3)如果第二步也失败,亦即未找到第二类页面,则将指针返回到开始的位置,并已将所有的访问位复 0。然后重复第一步,如果仍失败,必要时再重复第二步,此时就一定能找到被淘汰的页。
      该算法与简单 Clock 算法比较,可减少磁盘的 I/O 操作次数。但为了找到一个可置换的页,可能须经过几轮扫描。换言之,实现该算法本身的开销将有所增加。

      5.3.4 页面缓冲算法 PBA

      1.影响页面换进换出效率的若干因素
      1)页面置换算法。
      2)写回磁盘的频率。对于已经被修改过的页面,在将其换出时,应当写回磁盘。
      但如果在系统中已建立了一个已修改换出页面的链表,则对每一个要被换出的页面(已修改),系统可暂不把它们写回磁盘,而是将它们挂在已修改换出页面的链表上,仅当被换出页面数目达到一定值时,例如64个页面,再将它们一起写回到磁盘上,这样就显著减少了磁盘 I/O的操作次数。或者说,减少已修改页面换出的开销。
      3)读入内存的频率。在设置了已修改换出页面链表后,在该链表上就暂时有一批装有数据的页面,如果有进程在这批数据还未写回磁盘时需要再次访问这些页面时,就不需从外存上调入,而直接从已修改换出页面链表中获取,这样也可以减少将页面从磁盘读入内存的频率,减少页面换出的开销。
      2.页面缓冲算法 PBA
      PBA 算法特点:① 显著地降低了页面换进、换出的频率。② 正是由于换入换出的开销大幅度减小,才能使其可采用一种较简单的置换策略,如先进先出(FIFO)算法。
      介绍VAX/VMS操作系统所使用的页面缓冲算法。在该系统中内存分配策略上采用了可变分配和局部置换方式,同时在内存中设置了两个链表:
      1)空闲页面链表。
      实际上是一个空闲物理块链表。当进程需要读入一个页面时,便可利用空闲物理块链表中的第一个物理块来装入该页。当有一个未被修改的页要换出时,而是把它们所在的物理块挂在空闲链表表尾。
      2)修改页面链表。
      是由已修改的页面所形成的链表。当进程需要将一个已修改的页面换出时,系统并不立即把它换出到外存上,而是将它所在的物理块挂在修改页面链表的末尾。当达到一定数量时,再将它们一起写回磁盘。

      5.3.5 访问内存的有效时间

      在请求分页管理方式中,内存有效访问时间不仅要考虑访问页表和访问实际物理地址数据的时间,还必须考虑缺页中断的处理时间。
      1)被访问页在内存中,且其对应的页表项在快表中。
      2)被访问页在内存中,且其对应的页表项不在快表中。
      3)被访问页不在内存中,即需要进行缺页中断处理。
      事实计算时还要考虑快表命中率和页面缺页率的因素。

      5.4 “抖动”与工作集

      5.4.1 多道程序度与“抖动”

      1.多道程序度与处理机的利用率
      随着多道程序度的增大,处理机的利用率先上升后下降。当多道程序度过高时,会发生“抖动”。
      2.产生“抖动”的原因
      根本原因是,同时在系统中运行的进程太多,由此分配配给每一个进程的物理块太少,不能满足进程正常运行的基本要求,致使每个进程在运行时,频繁地出现缺页,必须请求系统将所缺之页调入内存。造成每个进程的大部分时间都用于页面的换进/换出,而几乎不能再去做任何有效的工作,从而导致发生处理机的利用率急剧下降并趋于0的情况。

      5.4.2 工作集

      1.工作集的基本概念
      进程发生缺页率的时间间隔与进程所获得的物理块数有关(即成反比)。
      基于程序运行时的局部性原理得知,程序在运行期间,对页面的访问时不均匀的,在一段时间内仅局限于较少的页面。这些页面被称为活跃页面。
      2.工作集的定义
      所谓工作集,是指在某段时间间隔Δ里,进程实际所要访问页面的集合。具体地说,把某进程在时间 t 的工作集记作 w(t, Δ),其中的变量 Δ 称为工作集的“窗口尺寸”。可将工作集的定义为,进程在时间间隔 (t-Δ, t) 中引用页面的集合。
      工作集是窗口尺寸 Δ 的非降函数。即 w(t, Δ) ⊆ w(t, Δ+1)。

      5.4.3 “抖动”的预防方法

      这些方法几乎都是采用调节多道程序度来控制“抖动”发生的。

      1.采取局部置换策略。
      即使该进程发生了“抖动”,也不会对其它进程产生影响,于是可把该进程“抖动”所造成的影响限制在较小的范围内。但在某进程发生“抖动”后,它还会长期处在磁盘 I/O 的等待队列中,使队列的长度增加,这会延长其它进程缺页中断的处理时间。
      2.把工作集算法融入到处理机调度中
      当调度程序发现处理机利用率低下时,它将试图从外存调入一个新作业进入内存,在从外存调入作业之前,必须检查每个进程在内存的驻留页面是否足够多。如果都足够多,此时便可以从外存调入新的作业,不会因新作业的调入而导致缺页率的增加;反之,如果有些进程的内存页面不足,则应首先为那些缺页率居高的作业增加新的物理块,此时将不再调入新的作业。
      3.利用“L=S”准则调节缺页率
      其中L是缺页之间的平均时间,S是平均缺页服务时间,即用于置换一个页面所需的时间。如果是L远比S大,说明很少发生缺页,磁盘的能力尚未得到充分的利用;反之,如果是L比S小,则说明频繁发生缺页,缺页的速度已超过磁盘的处理能力。只有当L与S接近时,磁盘和处理机都可达到它们的最大利用率。理论和实践都已证明,利用“L=S”准则,对于调节缺页率是十分有效的。
      4.选择暂停进程
      基于某种原则选择暂停某些进程。将它们调出到磁盘上,以便腾出内存空间分配给缺页率发生偏高的进程。

      5.5 请求分段存储管理方式

      5.5.1 请求分段中的硬件支持

      1.请求段表机制
      除了段名(号)、段长、段在内存中的起始地址外,还增加了以下诸项:
      1)存取方式:根据信息的属性对分段实施保护。如果该字段为两位,则存取属性是只执行、只读和允许读/写。
      2)访问字段 A:记录该段被访问的频繁程度。
      3)修改位 M:表示该段在进入内存后是否已被修改过。
      4)存在位 P:指示本段是否已调入内存。
      5)增补位:表示本段在运行过程中是否做过动态增长。
      6)外存始址:指示本段在外存中的起始地址,即起始盘块号。
      2.缺段中断机构
      每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入 OS 后由缺段中断处理程序将所需的段调入内存。缺段中断机构与缺页中断机构类似,它同样需要在一条指令的执行期间,产生和处理中断,以及在一条指令执行期间,可能产生多次缺段中断。但由于分段是信息的逻辑单位,因而不可能出现一条指令被分割在两个分段中和一组信息被分割在两个分段中的情况。由于段不是定长的,这使对缺段中断的处理要比对缺页中断的处理复杂。
      第五章 虚拟存储器【操作系统】

      3.地址变换机构
      第五章 虚拟存储器【操作系统】

      上图中的段表的的起始编号是从 1 开始的。

      5.5.2 分段的共享与保护

      1.共享段表
      为了实现分段共享,可在系统中配置一张共享段表,所有各共享段都在共享段表中占有一表项。记录了共享段的信息和共享
      此分段的某个进程的情况。
      第五章 虚拟存储器【操作系统】

      1)共享进程计数 count。非共享段仅为一个进程所需要。而共享段是为多个进程所需要的,当某进程不再需要而释放它时,系统并不立即回收该段所占内存区,而是检查 count 是否为 0,若不是 0,则表示还有进程需要它,仅当所有共享该段的进程全不再需要它使,此时 count 为 0,才由系统回收该段所占的内存区。
      2)存取控制字段。对于一个共享段,应给不同的进程以不同的存取权限。
      3) 段号。对于一个共享段,在不同的进程中可以具有不同的短号,每个进程可用自己进程的段号去访问该共享段。
      2.共享段的分配与回收
      1)共享段的分配。
      在为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为该共享段分配一物理区,再把共享段调入该区,同时将该区的始址填入请求进程的段表的相应项中,还须在共享段表中增加一表项,填写有关数据,把 count 置为 1。之后,当
      又有其它进程需要调用该共享段时,由于该共享段已被调入内存,故此时无须再为该段分配内存,而只需在调用进程的段表中增加一表项,填写该共享段的物理地址;以及在共享段的段表中,填上调用进程的进程名、存取控制等,再执行 count = count+1 操作。
      2)共享段的回收。
      当共享此段的某进程不再需要该段时,应将该段释放,包括撤消在该进程段表中共享
      段所对应的表项,以及执行 count = count-1 操作。若结果为 0,表明此时已没有进程在使用该段,则须由系统回收该共享段的物理内存,以及取消在共享段表中当前调用进程所对应的表项。否则(减 1 结果不为 0),只是取消调用者进程在共享段表中的有关记录。
      3.分段保护
      1)越界检查。
      越界检查时利用地址变换机构来完成的。①短号和段表长度的比较。②段内地址和段长的比较。
      2)存取控制检查。
      存取控制检查是以段为基本单位进行的。在段表的每个表项中都设置了一个“存取控制”字段,用于规定对该段的访问方式。对于共享段而言,存取控制就显得尤为重要。
      3)环保护机构。
      这是一种功能较完善的保护机制。在该机制中规定:低编号的环具有高优先权。OS 核心处于 0 环内;某些重要的实用程序和操作系统服务占居中间环;而一般的应用程序则被安排在外环上。在环系统中,程序的访问和调用应遵循以下规则:
      1)一个程序可以访问驻留在相同环或较低特权环中(较之编号高的环)的数据。类似于读。
      2)一个程序可以调用驻留在相同环或较高特权环中(较之编号低的环)的服务。类似于执行。

      第五章 虚拟存储器【操作系统】

      ————————————————

      最后

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://jsss-1.blog.csdn.net/article/details/125302963,作者:日星月云,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:sourcetree打开就闪退

      下一篇:缓存流

      相关文章

      2025-05-14 10:03:13

      超级好用的C++实用库之线程基类

      在C++中,线程是操作系统能够进行运算调度的最小单位。一个进程可以包含多个线程,这些线程共享进程的资源,比如:内存空间和系统资源,但它们有自己的指令指针、堆栈和局部变量等。

      2025-05-14 10:03:13
      Linux , void , Windows , 函数 , 操作系统 , 线程
      2025-04-15 09:25:57

      软件设计师教程(第5版)第4章 操作系统知识(更新中)

      计算机软件通常分为【系统】软件和【应用】软件两大类。

      2025-04-15 09:25:57
      操作系统 , 文件 , 算法 , 调度 , 进程
      2025-03-10 09:50:08

      【后端开发】JavaEE初阶——计算机是如何工作的???

      【后端开发】JavaEE初阶——计算机是如何工作的???

      2025-03-10 09:50:08
      CPU , gt , 内存 , 操作系统 , 进程
      2025-03-06 09:14:22

      开发环境搭建

      开发环境搭建

      2025-03-06 09:14:22
      gcc , Linux , 使用 , 操作系统 , 编译器
      2025-02-12 09:25:49

      初始操作系统篇(2)—— 操作系统的运行环境与体系结构

      初始操作系统篇(2)—— 操作系统的运行环境与体系结构

      2025-02-12 09:25:49
      CPU , 中断 , 内核 , 指令 , 操作系统
      2025-02-12 09:12:00

      初始操作系统篇(1)—— 操作系统的概念与分类

      初始操作系统篇(1)—— 操作系统的概念与分类

      2025-02-12 09:12:00
      CPU , 批处理 , 操作系统 , 用户 , 系统
      2025-01-08 08:40:58

      一起学docker系列之一为什么要学习docker--从混乱到协调:Docker在开发和运维中的崭露头角

      在软件开发中,开发人员和运维人员之间的合作是至关重要的。然而,常常会出现一种场景:开发人员完成了某个功能,将代码上传到版本管理服务器(如Git或SVN),打包成JAR或WAR文件供运维人员使用。然而,运维人员在部署后却没有得到预期的结果。这种情况通常导致双方陷入争论和漫长的排错过程。

      2025-01-08 08:40:58
      Docker , 容器 , 应用程序 , 操作系统 , 环境 , 虚拟化 , 虚拟机
      2024-12-27 07:59:04

      进程解析(JavaEE初阶)

      进程是计算机科学中非常重要的概念,它是操作系统中的一个基本单位,负责执行程序并管理资源。在JavaEE开发中,进程的概念同样非常重要,因为JavaEE应用程序通常是多线程的,每个线程都是一个进程的一部分。

      2024-12-27 07:59:04
      cpu , 信息 , 内存 , 操作系统 , 运行 , 进程
      2024-12-27 07:57:46

      如何区分进程、线程和协程?看这篇就够了!

      如何区分进程、线程和协程?看这篇就够了!

      2024-12-27 07:57:46
      创建 , 协程 , 执行 , 操作系统 , 等待 , 线程 , 进程
      2024-12-24 10:17:31

      操作系统之进程管理

      进程(Process)是计算机中正在运行的程序的实例。每个进程都有自己的内存空间、数据栈以及其他系统资源,如打开的文件和网络连接。进程是操作系统进行资源分配和调度的基本单位。

      2024-12-24 10:17:31
      中断 , 互斥 , 执行 , 操作系统 , 程序 , 线程 , 进程
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5248166

      查看更多

      最新文章

      操作系统之内存管理概念(中)

      2024-04-16 08:57:13

      46个常见的操作系统问题,你知道多少?

      2023-07-05 06:07:23

      查看更多

      热门文章

      46个常见的操作系统问题,你知道多少?

      2023-07-05 06:07:23

      操作系统之内存管理概念(中)

      2024-04-16 08:57:13

      查看更多

      热门标签

      存储 缓存 内存 数据库 数据 redis mysql 服务器 数据恢复 Redis linux java 链表 MySQL sql
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      操作系统之内存管理概念(中)

      46个常见的操作系统问题,你知道多少?

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号