Linux | 二级页表的虚拟地址是怎么转换的?

news2024/9/22 1:22:14

文章目录

    • 页的概念
    • 可执行文件的虚拟地址
    • 二级页表的转换
    • 二级页表的优点

页的概念

在聊文件系统时,我提到操作系统是以块为基本单位进行IO的,一个块的大小为4KB,在文件系统中它的名字叫做块,在内存系统中它的名字叫做页,page,假设内存系统大小为4GB,那么该系统中就有2的20次方(4GB/4KB)个页,Linux用struct page描述页的结构体,操作系统对内存系统的管理就变成了对一个大数组(假设数组是struct page mem[1024 * 1024])的管理,该数组含有2的20次方个元素,每个元素保存了页的相关消息。

可执行文件的虚拟地址

一份源代码被编译成为可执行文件时,编译器就已经对其中的数据进行了编址,所以可执行文件中的所有数据都有属于自己的地址,数据会被合理的分配到进程地址空间上。编译好可执行文件后,文件被存储在磁盘上,进入了文件系统,执行该文件时,操作系统将其从文件系统中以4KB为单位地加载到内存系统上,并为其分配对应的页,也就是说通过struct page mem数组 + 下标的方式,我们就可以访问该文件在内存系统中的数据。

现在的问题是,我们有了程序的虚拟地址,要怎么访问内存中的程序?也就是要怎么得到mem数组的下标?其中的转换就是通过页表+MMU共同实现的

二级页表的转换

一个32位的虚拟地址被划分成三份,高10位22-31为一份,我们称之为DIRECTORY;中间的10位12-22为一份,我们称之为TABLE;低12位0-11为一份,我们称之为OFFSET
在这里插入图片描述
一个进程始终拥有一级页表,一级页表被称为页目录,虚拟地址的高10位DIRECTORY可以表示1024个表项,所以页目录一共可以存储1K个表项,一级页表可以索引二级页表:DIRECTORY在一级页表中映射的数据是页表项,页表项是二级页表的地址。在这里插入图片描述
二级页表用来索引page的物理地址,也就是mem数组中的下标。二级页表也有1K个表项,因为TABLE有10位。系统由虚拟地址的TABLE在二级页表中查找page的物理地址。

找到page的物理地址后,就系统就能访问整块page,但page的大小为4K,系统要访问page的哪些数据?虚拟地址的低12位OFFSET覆盖了一个page的所有地址,所以用OFFSET就可以向系统表明要访问页的具体地址,OFFSET被称为页内偏移量,通过这个偏移量我们就能找到需要的地址。

二级页表的优点

假设页表不采用分级的方式设计,将进程地址空间上的虚拟page地址与物理空间的真实page地址直接进行映射,那么这个页表将占用非常大的内存,创建一个进程的代价也就随之升高,甚至会出现内存不够使用的情况。

采用分级的方式设计页表,此时每个进程只需要有一张一级页表,即页目录,页目录占用较少的内存(1K个表项,总大小也不会过大)。当需要访问内存上的数据时,系统先通过页目录索引到页表项,再通过页表项找到page页。

但是一个页目录映射了1K个页表项,操作系统根本没有必要将所有的页表项映射,如果将所有的页表项映射,那么这些页表占用的空间也是十分大的。一个页表项映射了1K个page页,操作系统也没有必要映射所有的页,当操作系统一开始加载程序时,就没有必要加载所有的页表,当需要使用页表时在建立页表,这样使得页表的创建与销毁的代价减少,提高了系统的性能。

比如现在有一个进程需要访问数据,操作系统通过虚拟地址的DIRECTORY知道了页表项的地址,但是页表项还没有被创建,此时操作系统才会访问磁盘中的数据,重新建立页表项。同理,对于page地址也是如此,操作系统不会把所有的page加载到内存中,只有在进程需要访问时才会进行加载

所以使用分级页表可以实现按需创建页表, 每个进程只有页目录,第二级页表与page没有必要全部加载,只需要加载一部分的页表,当需要访问的页表没有被创建时再创建,这样的做法有效的减少了进程的内存消耗

节省空间是分级页表的一大优点,除此之外分级页表还有一优点:将进程的虚拟地址管理与内存物理地址的管理进行解耦,怎么理解呢?操作系统只需要关心页表中的表项是否存在,是否需要加载,如果表项为NULL,即出现越界访问,MMU硬件异常,产生中断,操作系统接收中断后终止非法访问内存的进程。如果表项存在,操作系统只需要继续索引得到page地址,所以,虽然是虚拟地址与物理地址之间的转换,但操作系统只需要关心虚拟地址在页表中的映射关系,两个地址间的转换就这样被页表这个软件结构解耦了。

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

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

相关文章

并发编程十 定时任务定时线程池

一 ScheduledThreadPoolExecutor 定时线程池类的类结构图 它接收SchduledFutureTask类型的任务,是线程池调度任务的最小单位,有三种提交任务的方式: schedulescheduledAtFixedRatescheduledWithFixedDelay 它采用DelayQueue存储等待的任务…

带你玩转序列模型之Bleu得分注意力模型语音识别

目录 一.Bleu得分 二.注意力模型直观理解 三.注意力模型 四.语音识别 五.触发字检测 一.Bleu得分 先跳过,等回头用得到了再来补。 二.注意力模型直观理解 在本周大部分时间中,你都在使用这个编码解码的构架(a Encoder-Decoder archit…

MATLAB算法实战应用案例精讲-【图像处理】目标检测

前言 目标检测,也叫目标提取,是一种基于目标几何和统计特征的图像分割。它将目标的分割和识别合二为一,其准确性和实时性是整个系统的一项重要能力。尤其是在复杂场景中,需要对多个目标进行实时处理时,目标自动提取和识别就显得特别重要。 随着计算机技术的发展和计算机视…

AutoSAR基础:Port与Dio

AutoSAR基础:Port与Dio配置一.配置port1.Configurator1-1.进入Basic Editor->Port1-2.配置P00.0脚1-2-1.Port口1-2-2.Pin脚配置1-3.配置P00.11-3-1.Pin脚配置2.config导出生成代码3.代码部分3-1.config生成代码3-2.Write与Read3-2-1.Read函数3-2-2.Write函数二.配置Dio1.Con…

[附源码]计算机毕业设计基于SpringBoot的校园报修平台

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

qt使用http get和post

qt使用http get和post 本文目录qt使用http get和post准备get请求widge.hwidget.cpppost请求widge.hwidget.cpppost请求的数据格式参数写在url后面使用application/x-www-form-urlencoded使用application/json使用multipart/form-data传送文件准备 使用到网络编程,需…

Nginx配置实例-反向代理

1、实现效果 打开浏览器,在浏览器地址栏输入地址www.123.com,访问tomcat主页面。 2、准备工作 (1)在 liunx系统安装tomcat,使用默认端口8080 上传安装文件,并解压缩到/opt/tomcat。 进入tomcat的bin目录中…

[附源码]Python计算机毕业设计Django人员信息管理

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

ArrayList为什么线程不安全以及三种解决办法【详细】

目录不安全原因解决办法VectorCollectionsCopyOnWriteArrayList三种解决方式总结不安全原因 我们可以看一下ArrayList源码,找到add方法, public boolean add(E e) {ensureCapacityInternal(size 1); // Increments modCount!!elementData[size] e;r…

【java】Lambda表达式

文章目录体验Lambda表达式Lambda表达式的标准格式Lambda表达式的练习抽象方法无参无返回值抽象方法带参无返回值抽象方法带参带返回值Lambda表达式的省略模式Lambda表达式的注意事项Lambda表达式和匿名内部类的区别体验Lambda表达式 package heima.Lambda;import heima.多线程.…

HTML5期末大作业:旅游网页设计与实现——旅游风景区网站HTML+CSS+JavaScript 景点静态网页设计 学生DW静态网页设计

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

JMeter入门教程(9) --参数化

文章目录1.任务背景2.任务目标3.任务实操3.1 CSV数据文件1.任务背景 参数化是测试过程中很常用的一种技巧,可以将脚本中的某些输入用参数来代替,比如登陆时传递参数,在脚本运行时指定参数的取值范围和规则 2.任务目标 掌握基于JMeter性能测…

【浅学Java】SpringBoot创建和使用

SpringBoot创建和使用1. SpringBoot是什么2. SpringBoot的优点3. SpringBoot的创建3.1 使用idea创建3.2 测试项目_输出hello3.3 网页版创建SpringBoot4. 约定大于配置1. SpringBoot是什么 Spring的诞生是为了简化Java开发而创建的,而SpringBoot的诞生就是为了简化S…

一文带你理解【自然语言处理(NLP)】的基本概念及应用

觉得有帮助请点赞关注收藏~~~ 1.1 自然语言处理 1.1.1 自然语言处理主要研究对象 自然语言处理(Natural Language Processing:NLP)是以人类社会的语言信息(比如语音和文本)为主要研究对象,利用计算机技术来…

C++:深拷贝和浅拷贝——拷贝构造、赋值构造必须自定义

https://www.bilibili.com/video/BV1qT4y1X7cQ/?spm_id_from333.337.search-card.all.click&vd_sourced33b44674c517c8b7928e8d3ac316b37 1、赋值运算符重载 浅拷贝的错误代码: class Distance { public:int* dis NULL;Distance(int a){dis new int(a);}~…

轻量级xshell+manager远程监控jvisualvm

一、服务器端(Linux,最小安装模式,没有图形界面) 1.安装xauth 如果在Xshell中配置了X11转发后,出现如下提示: WARNING! The remote SSH server rejected X11 forwarding request. 则需要查看/etc/ssh/s…

esxi 6.7下安装openwrt(iStoreOS)网卡直通

esxi 6.7下安装openwrt(iStoreOS)网卡直通 esxi上创建一个iStoreOS系统的虚拟机,当主路由使用,网卡直通方式 1、工具 硬件: 工控机:装有esxi6.7系统(192.168.100.2),配…

图像仿射变换与双线性插值

图像变换 下面的所有变换假设都是针对一幅图像,即一个三维数组(HWC),这里为简单起见,假设图像都是单通道(C1)的。 (x,y)(x,y)(x,y): 原图像中某一点 A 的位置(x′,y′)(x′,y′)(x′,y′): 变换…

记一次系统重装后电脑的优化设置

总目录 文章目录总目录前言一、Windows设置1.系统2.应用3.隐私4.更新与安全二、系统使用偏好设置1.设置远程协助2.文件资源管理器偏好设置3.用户账户控制设置4.修改桌面文件的路径5.根据需求删除系统自带的无用的软件总结前言 由于之前总是电脑用着用着C盘不是满了&#xff0c…

Spring框架(九):Spring注解开发Annotation

Spring注解开发引子如何用注解替代xml基础配置Bean可以加一些注解来实现原有的xml文件的功能Component注解及其衍生注解依赖注入AutowireSpring非自定义的注解开发Spring其他注解注解的原理解析-xml方式注解的原理解析-注解方式注解整合MyBatis框架注解整合第三方框架引子 痛定…