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

news2024/11/28 10:11:33

文章目录

  • 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.coloradmin.cn/o/2248978.html

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

相关文章

C++:多态的原理

目录 一、多态的原理 1.虚函数表 2.多态的原理 二、单继承和多继承的虚函数表 1、单继承中的虚函数表 2、多继承中的虚函数表 一、多态的原理 1.虚函数表 首先我们创建一个使用了多态的类&#xff0c;创建一个对象来看其内部的内容&#xff1a; #include<iostre…

Ubuntu 硬盘分区并挂载

一、什么是挂载 1.挂载的定义 在 Ubuntu&#xff08;或其他 Linux 系统&#xff09;中&#xff0c;挂载&#xff08;Mount&#xff09; 是将一个存储设备或分区连接到系统的文件系统层次结构中的过程。挂载后&#xff0c;你可以通过某个目录&#xff08;挂载点&#xff09;访问…

python-docx -- 读取word页眉、页脚

文章目录 sections介绍访问section添加section页眉、页脚综合案例:sections介绍 word支持section的概念,即一个文档的划分部分,不同的部分均包含相同的页面布局设置,如相同的边距、页面方向等;在每个section中可以定义页眉、页脚来应用于该section下的所有页面;大部分wor…

开源加密库mbedtls及其Windows编译库

目录 1 项目简介 2 功能特性 3 性能优势 4 平台兼容性 5 应用场景 6 特点 7 Windows编译 8 编译静态库及其测试示例下载 1 项目简介 Mbed TLS是一个由ARM Maintained的开源项目&#xff0c;它提供了一个轻量级的加密库&#xff0c;适用于嵌入式系统和物联网设备。这个项…

《生成式 AI》课程 第7講:大型語言模型修練史 — 第二階段: 名師指點,發揮潛力 (兼談對 ChatGPT 做逆向工程與 LLaMA 時代的開始)

资料来自李宏毅老师《生成式 AI》课程&#xff0c;如有侵权请通知下线 Introduction to Generative AI 2024 Springhttps://speech.ee.ntu.edu.tw/~hylee/genai/2024-spring.php 摘要 这一系列的作业是为 2024 年春季的《生成式 AI》课程设计的&#xff0c;共包含十个作业。…

公司金融期末考试题目

公司金融期末考试题 选择题 1.现金折扣和信用条件&#xff08;教材P253&#xff09; 题目类似&#xff1a; 下列不属于信用条件的是&#xff08;&#xff09;。 现金折扣 数量折扣信用期限 折扣期限 给定的信用条件为"1/10&#xff0c;n/40"&#xff0c;则其含义…

【前端】JavaScript中的字面量概念与应用详解

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 &#x1f4af;前言&#x1f4af;字面量1. 数字字面量2. 字符串字面量3. 布尔字面量4. 空值字面量&#xff08;null&#xff09;5. 对象字面量6. 数组字面量7. 正则表达式字面量8. 特殊值字面量9. 函数字…

Kotlin DSL Gradle 指南

本文是关于 Kotlin DSL Gradle 的指南&#xff08;上篇&#xff09;&#xff0c;介绍了 Gradle 作为 Android 开发构建工具的作用及优势&#xff0c;包括初始配置、生命周期、依赖管理、Task 相关内容。如 Task 的创建、自定义、各种方法和属性&#xff0c;以及文件操作等&…

Web开发:使用stackexchange.redis库对redis进行增删改查

一、安装第三方库 二、官网 StackExchange.Redis |通用型 redis 客户端 三、连接示例 private static string redisConnectionString "localhost:6379,passwordyourpassword,defaultDatabase0,allowAdmintrue,asyncTimeout10000";private static string redisConn…

2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现

目录 第一题握手&#xff0c;这个直接从49累加到7即可&#xff0c;没啥难度&#xff0c;后面7个不握手就好了&#xff0c;没啥讲的&#xff0c;(然后第二个题填空好难&#xff0c;嘻嘻不会&#xff09; 第三题.好数​编辑 第四题0R格式 宝石组合 数字接龙 最后一题:拔河 第…

Django基础之路由

一.前言 前面我们说了django的安装于基础配置&#xff0c;基础知识点我就细分下来&#xff0c;每天和大家讲一点&#xff0c;今天就要和大家说django的基础知识点了&#xff0c;我们今天先来讲路由&#xff0c;内容不多&#xff0c;希望大家记住 二.传统路由 路由就是前面一个…

gitlab ssh-key 绑定

windows环境下配置 gitlab的ssh key&#xff1a; 1.打开本地git bash,使用如下命令生成ssh公钥和私钥对: ssh-keygen -t rsa -C xxxxxx.com 2.一直回车&#xff1b; 3.然后打开公钥文件&#xff1a;C:/Users/Administrator/.ssh/id_rsa.pub文件&#xff0c;复制其中的内容; 4…

26.100ASK_T113-PRO 测试摄像头 输出信息

1.测试代码 读到摄象头参数 输出 video_test.c #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <unistd.h> #include <stdio.h> #include <string.h> #include <linux/type…

【人工智能】深入解析GPT、BERT与Transformer模型|从原理到应用的完整教程

在当今人工智能迅猛发展的时代&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域涌现出许多强大的模型&#xff0c;其中GPT、BERT与Transformer无疑是最受关注的三大巨头。这些模型不仅在学术界引起了广泛讨论&#xff0c;也在工业界得到了广泛应用。那么&#xff0c;G…

【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序

DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 1. 窗口的划分 1.1 窗口分为&#xff1a;基于时间的窗口 和 基于数量的窗口 基于时间的窗口&#xff1a;基于起始时间戳 和终止时间戳来决定窗口的大小 基于数量的窗口&#xff1a;根据固定的数量定义窗口 的大小 这…

虚拟地址空间与物理内存(Linux系统)

个人主页&#xff1a;敲上瘾-CSDN博客 个人专栏&#xff1a;Linux学习、游戏、数据结构、c语言基础、c学习、算法 目录 问题引入 一、什么是虚拟内存 二、虚拟内存的描述与组织 三、页表的优势 四、虚拟内存区域划分 问题引入 为引入今天的话题&#xff0c;我们先来看下面…

docker-compose搭建xxl-job、mysql

docker-compose搭建xxl-job、mysql 1、搭建docker以及docker-compose2、下载xxl-job需要数据库脚本3、创建文件夹以及docker-compose文件4、坑来了5、正确配置6、验证-运行成功 1、搭建docker以及docker-compose 略 2、下载xxl-job需要数据库脚本 下载地址&#xff1a;https…

【ArcGIS Pro实操第11期】经纬度数据转化成平面坐标数据

经纬度数据转化成平面坐标数据 数据准备ArcGIS操作步骤-投影转换为 Sinusoidal1 投影2 计算几何Python 示例 另&#xff1a;Sinusoidal (World) 和 Sinusoidal (Sphere) 的主要区别参考 数据准备 数据投影&#xff1a; 目标投影&#xff1a;与MODIS数据相同&#xff08;Sinu…

【模型学习之路】PyG的使用+基于点的任务

这一篇是关于PyG的基本使用 目录 前言 PyG的数据结构 演示 图的可视化 基于点的任务 任务分析 MLP GCN 前言 对图结构感兴趣的朋友可以学一下常用的有关图结构的库&#xff1a;networkx详细介绍 networkx 库&#xff0c;探讨它的基本功能、如何创建图、操作图以及其常…

如何监控Elasticsearch集群状态?

大家好&#xff0c;我是锋哥。今天分享关于【如何监控Elasticsearch集群状态&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何监控Elasticsearch集群状态&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…