《操作系统 - 清华大学》5 -5:缺页异常

文章目录

  • 1. 缺页异常的处理流程
  • 2.在何处保存未被映射的页?
  • 3. 虚拟内存性能

1. 缺页异常的处理流程

在这里插入图片描述

缺页中断的处理过程:

  1. CPU读内存单元,在TLB中根据其虚拟地址匹配物理地址,未命中,读页表;

  2. 由于页表项的存在位为0,CPU产生缺页异常

  3. OS 查找到保存在外存中对应的应用的页面内容;

  4. 如有空闲物理页帧,把外存中的页面内容换入到某空闲物理页帧中;

  5. 如无空闲物理页帧,通过置换算法释放/换出某物理页帧到外存,再把外存中的页面内容换入到某空闲物理页帧中;

    所谓清空需要注意,如果里面的数据被修改过,把这数据还写回硬盘中,如果没有被修改,直接给它释放了,因为和硬盘中对应的那个数据是一样的,没必要再写回,它已经是最新的,这时候把这个页从被使用状态变成空闲状态,再完成从硬盘把相应数据读进来,然后设置页表项,然后再重新执行这一过程。

  6. 修改页表项,建立虚拟页到物理页帧的映射,存在位置1;

  7. OS返回到应用程序,让处理器重新执行产生缺页异常的读内存单元指令。

2.在何处保存未被映射的页?

在这里面,大量内存中的数据是放在外存中,需要才读进来,硬盘存储这些数据的这些特征是什么?需要注意,这里面有好几种不同类型存储形式来放置内存中所对应的数据和代码。
在这里插入图片描述

  1. 数据,比如访问数组,数组是大的数据,可能是数据文件放在硬盘上,当需要访问到某个地方的时候,如果内存没有,那从数据文件中把数据读出来,它是后备存储 (Backing Store)。
  2. 代码,操作系统让程序在执行过程中,去执行某一条指令,指令其实也是一种数据,这种数据放在硬盘中,硬盘存了很多执行程序。执行程序中代码当作数据读到内存中去,然后让 CPU 去执行这条指令,当访问这条指令不存在的时候,会进一步从执行程序中把数据读到内存中,进一步执行。
  3. 动态链接库,软件在运行过程中需要库,库其实以库文件形式也是放在硬盘,需要的时候才会把库的代码数据从硬盘读进来。
  4. 不是以文件形式存在,而是分区形式存在。程序在运行过程中,它有可能产生很多数据,这些数据没有对应到具体的那些文件,无论是数据文件、执行文件,库文件,不是这三种。它就是动态产生的数据,那么这些数据也可能占了很大的空间,且需要被换出到硬盘上去。操作系统会专门在硬盘上开一个区域,叫做swap,换入换出分区。这个区域里面放置这些没有以文件形式直接对应的这些内容。

这四类形成了后备存储,或者二级存储,有二级存储的支持,使得虚存管理可以充分的保证空间的有效性。

3. 虚拟内存性能

通过分页机制和缺页中断处理,使应用程序可以感觉到更大的内存,更快、更便宜,更方便的内存访问空间。这个空间其实是通过缺页异常处理,它可能会涉及跟硬盘读写操作,可能会怀疑虚存管理技术性能怎么样?
在这里插入图片描述
上图是一个具体虚存管理性能的公式表达:

EAT = 内存访问时间 * (1-p) +  缺页异常处理时间 * p(1+q)

q = dirty page 几率

比如说内存访问时间可以认为是10 ns;硬盘访问时间是 5 ms;同时设定两个比例,一个是缺页百分比,就是这一段时间之内产生缺页的概率是多大,p 代表缺页的概率, q 代表页写操作概率。有了这几个参数之后,就可以建出一个公式来表达内存的平均访问时间的开销:

EAT = 10(1-p) + 5000000p(1+q)

1- p : 代表没有产生缺页的概率是多大,没有产生缺页的访问时间就是10(1-p);
~  
同时如果产生缺页,就是应该是5000000*p,代表产生缺页之后,读操作用时。
~  
q :代表对内存页写操作且写操作换出去概率,换出操作也会做一次写硬盘操作,那么这个开销也是5 ms,这里面正常的缺页异常换入操作和dirty page 页的换出操作加起来就是 1+ q。

公式右侧 5000000 >> 10 ,是不是意味着内存访问开销就很大呢,其实它取于另外一个参数 p, p 足够小,就可以使得平均访问时间接近于10 ns,如果 p 比较大,会导致整访问效率会很差。

其实有信心保证 p 足够小,因为程序有局部性特点,意味着它产生缺页的次数会很少。比如说程序在重复访问4K 页,可能访问了100万次才跳出,去访问另一个不在内存中存在的地址,才产生缺页,这时候它的效率就很高。大部分程序从效率来说也是这么设计,使得虚存管理的性能得到保障。

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

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

相关文章

Linux-NFS

文章目录 NASNFSNFS配置 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2024年11月27日12点50分 NAS 网络接入存储 共享存储文件存储 NAS设备包括 NAS引擎一个或多个网络接口一个操作系统…

OpenHarmony属性信息怎么修改?触觉智能RK3566鸿蒙开发板来演示

本文介绍在开源鸿蒙OpenHarmony系统下,修改产品属性信息的方法,触觉智能Purple Pi OH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新OpenHarmony5.0 Release系统,感兴趣…

杰发科技AC7803——不同晶振频率时钟的配置

计算公式 PLL_POSDIV [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62] PLL_PREDIV_1 1 2 4 USE_XTAL 24M SYSCLK_FREQ 64M SYSCLK_DIVIDER 1 VCO USE_XTAL*…

面向对象进阶-抽象类

抽象方法 将共性行为(方法)抽取到父类,由于每个子类执行内容不一样,在父类不能确定具体的方法体,该方法可以定义为抽象方法。 抽象类:如果一个类中存在抽象方法,那么该 类必须声明为抽象类。…

【数据结构专栏】二叉搜索树(Binary Search Tree)的剖析?

文章目录 🧨前言1、二叉搜索树的基本概念?2、二叉搜索树的节点结构组成?3、二叉搜索树的插入操作?4、二叉搜索树的删除操作?5、二叉搜索树的遍历?6、二叉搜索树的性能分析?🎉完整代码…

分布式调用 - 服务间的远程调用RPC

文章目录 导图PreRPC 概述RPC 调用过程RPC 动态代理1. 接口定义 (SeverProvider)2. 实现类 (ServerProviderImpl)3. 动态代理类 (DynamicProxy)4. 客户端 (Client)5. 代码工作流程6. 总结和注意点7. 结果输出8. 小结 RPC 序列化协议编码网络传输 导图 服务和应用的调用基于场景…

vue3项目搭建-4-正式启动项目,git管理

安装插件: npm install vue router npm install eslint 完成目录: 需要添置文件夹: apis -> api接口 composables -> 组合函数 directives -> 全局指令 styles -> 全局样式 utils -> 工具函数 git 管理: …

GPON原理

GPON网络架构 对于OLT来说,它就相当于一个指挥官,它指挥PON口下的ONU在指定的时间段内发送数据以及发起测距过程等 而ONU则是一个士兵,按照OLT的指挥做出相应 而ODN它主要就是提供一个传输通道,主要包括分光器和光纤组成 对于PO…

SJYP 24冬季系列 FROZEN CHARISMA发布

近日,女装品牌SJYP 2024年冬季系列——FROZEN CHARISMA已正式发布,展现了更加干练的法式风格。此次新品发布不仅延续了SJYP一贯的强烈设计风格和个性时尚,更融入了法式风情的干练元素,为消费者带来了一场视觉与穿着的双重盛宴。  …

【H2O2|全栈】JS进阶知识(十一)axios入门

目录 前言 开篇语 准备工作 获取 介绍 使用 结束语 前言 开篇语 本系列博客主要分享JavaScript的进阶语法知识,本期主要对axios进行基本的了解。 与基础部分的语法相比,ES6的语法进行了一些更加严谨的约束和优化,因此,在…

git使用文档手册

创建一个本地代码工作空间,比如这里使用test目录作为工作目录 针对仓库地址 http://192.168.31.125:9557/poxiaoai-crm/project-crm.git。 1. 安装 Git 确保您的系统已经安装了 Git。如果未安装,请根据操作系统访问 Git 官网 下载并安装。 验证安装 …

数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!

文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…

11.26深度学习_神经网络-数据处理

一、深度学习概述 1. 什么是深度学习 ​ 人工智能、机器学习和深度学习之间的关系: ​ 机器学习是实现人工智能的一种途径,深度学习是机器学习的子集,区别如下: ​ 传统机器学习算法依赖人工设计特征、提取特征,而深…

数据结构 (13)串的应用举例

前言 数据结构中的串(String),也称为字符串,是一种常见且重要的数据结构,在计算机科学中被广泛应用于各种场景。 一、文本处理 文本编辑器:在文本编辑器中,字符串被用来表示和存储用户输入的文本…

PointNet++论文复现

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

时间的礼物:如何珍视每一刻

《时间的礼物:如何珍视每一刻》 夫时间者,宇宙之精髓,生命之经纬,悄无声息而流转不息,如织锦之细线,串联古今,贯穿万物。 人生短暂,犹如白驹过隙,倏忽而逝,…

NVIDIA /CUDA 里面的clock rate详细介绍

本文主要介绍: cuda中的时钟频率具体有哪些?clock rate怎么调节? cuda中可以通过nvml 函数或者命令来调整时钟频率(clock rate) 介绍 命令行 nvdia-smi -q -i 0 可以查询device相关参数,可以用后面的命…

扫振牙刷设计思路以及技术解析

市面上目前常见的就两种:扫振牙刷和超声波牙刷 为了防水,表面还涂上了一层防水漆 一开始的电池管理芯片,可以让充电更加均衡。 如TP4056 第一阶段以恒流充电;当电压达到预定值时转入第二阶段进行恒压充电,此时电流逐…

电磁继电器

它的控制原理很简单,当我们给它的线圈接电,这个线圈就有了磁性,它上面的衔铁就会被吸引,这样小灯泡就会点亮 继电器于MOS管的差别在于,继电器可以很轻松的胜任高电压、大电流的场合 我们从外壳上可以看到 30VDC&#x…

【Jenkins】自动化部署 maven 项目笔记

文章目录 前言1. Jenkins 新增 Maven 项目2. Jenkins 配置 Github 信息3. Jenkins 清理 Workspace4. Jenkins 配置 后置Shell脚本后记 前言 目标:自动化部署自己的github项目 过程:jenkins 配置、 shell 脚本积累 相关连接 Jenkins 官方 docker 指导d…