分页操作系统

操作系统将空间分割为固定长度的分片,称为页,每一页有固定的地址空间,分页将进程的地址空间分割成固定大小的单元,每个单元称为一页,也叫做页帧(页并不会完全用完,页内参与有一些碎片)。

操作系统利用分页为进程分配内存时,内存不必是连续的,只要为进程分配足够的页就可以。进程使用的页都是虚拟页,他被放置在物理页帧里。虚拟页0放在物理页帧3(前两个页帧为操作系统所用,用户级线程不能使用,操作系统正好用虚拟地址让前两个页帧对用户来说不可见,更为安全)。

但需要有一个数据结构记录每个虚拟也在物理内存中的位置。操作系统给每个进程保存一个数据结构,称为页表(之所以是页表,也是由于每个进程会分到多个页)页表为进程地址空间的每个虚拟页面提供地址转换。

虚拟地址转换为物理地址

虚拟地址被分为页地址和偏移地址,操作系统将存储页地址部分,操作系统将存储所有的页地址,在具体寻址时,将物理页地址偏移地址合并,得到真正的地址。即像CPU一样,也有一个地址的合并器。而进程的页表,则是一个哈希表,进程内部的每一个虚拟页会对以一个真实的物理页,这样造成一种错觉,

所以寻址过程是:

汇编语言的地址->转换为第X页偏移量为Y的地址(X页位虚拟页)->查询进程页表获取进程X页的物理地址Z->Z左移12位与Y相加得到真正的物理地址;整个过程中偏移量不变;

以movl <vidtual address>,%eax为例;mov 21 ,%eax这里的21是进程内的虚拟地址21,不是物理地址21.

页表存在哪里

对于32位的地址来说,每一页4kb,需要存储20位的页地址,即2^20次方的页地址,在内存中存储这些地址需要耗费巨大的内存空间,造成浪费。

页表在哪里:如果在内存里,这意味着每一次读写命令都要额外访问一次内存获取真实地址,这样会降低程序执行的速度。在获取真实的地址前,系统需要获取进程的页表项,这里需要一个页表基址寄存器,来记录每个继承页表的位置。

页表里有什么

页表由页表项组成,页表项里不仅有物理页帧,还包括对该页的描述,如该页是否允许读,写,执行,该页是否被分配,该页是否被访问过(注意到每一个描述都为是或否,因此正好使用一位来记录),这些描述被称为位:如有效位,保护位,存在位,参考位,脏位

从页表中获取:

movl 21,%eax;的过程为:

首先移除地址的偏移部分,留下页值,

假设页表是数组结构的,那么页就是数组的索引,通过页表基址寄存器+sizeof(PTE)获取该页在数组里的地址,使用AccessMemory(PTEAddr)获取该页表项(注意还不是地址),

根据页表项的位(如参考位,脏位,保护位等)判断此次操作是否合法,非法则抛出异常;

获取偏移地址(第一个地址去除页地址)之后与PTE.PFN<<PFN_SHIFT相加即得到PhysAddr,真实的物理地址,

调用函数AccessMemory(PhysAddr)完成取值;

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

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

相关文章

2.1、如何在FlinkSQL中读取写出到Kafka

目录 1、环境设置 方式1&#xff1a;在Maven工程中添加pom依赖 方式2&#xff1a;在 sql-client.sh 中添加 jar包依赖 2、读取Kafka 2.1 创建 kafka表 2.2 读取 kafka消息体&#xff08;Value&#xff09; 使用 format json 解析json格式的消息 使用 format csv 解析…

【Xml Tool】 裁剪某个区域重新生成xml

该代码功能&#xff1a; 对已经标注好的xml文件进行操作 比如&#xff0c;label A 区域中&#xff0c;有多个label B。 现在我希望我能截取label A区域的图片&#xff0c;并根据原始xml生成lable B 的标注文件 注&#xff1a;label B部分区域在label A 外面的话&#xff0c;则…

【ArcGIS Pro二次开发】(70):杂七杂八的记录

本文用于记录一些使用频率较高但归类繁杂&#xff0c;非系统性的一些代码。 主要方便自己使用和查阅&#xff0c;随时更新。 1、从GDB数据库中打开【FeatureDataset\FeatureClass\Table】 using Geodatabase gdb new Geodatabase(new FileGeodatabaseConnectionPath(new Uri…

快速学习微服务保护框架--Sentinel

学习一个框架最好的方式就是查看官方地址,sentinel是国内阿里巴巴公司的,官网更方便官网 官网 微服务保护框架 Sentinel 1.初识Sentinel 1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微…

全力以赴,火山引擎边缘云代表团出战亚运会

END 未来&#xff0c;火山引擎边缘云赛事阵容将继续全力以赴&#xff0c;通过领先、可信赖的云和智能技术&#xff0c;助力游戏行业呈现更加精彩的竞技赛事。

光耦合器继电器与传统继电器:哪种最适合您的项目?

在电子和电气工程领域&#xff0c;继电器的选择可以显着影响项目的性能和安全性。两种常见类型的继电器是光耦合器继电器和传统机电继电器。每个都有其优点和缺点&#xff0c;因此选择过程对于项目的成功结果至关重要。 光耦合器继电器&#xff1a;基础知识 光耦合器继电器&…

linux环境下使用lighthouse与selenium

一、安装谷歌浏览器、谷歌浏览器驱动、lighthouse shell脚本 apt update && apt -y upgrade apt install -y curl curl -fsSL https://deb.nodesource.com/setup_18.x | bash apt install -y nodejs apt install -y npm npm install -g lighthouse apt-get install -y …

AutoRunner自动化测试工具

AutoRunner自动化测试工具(简称AR&#xff09;是泽众软件自主研发的自动化测试工具&#xff0c;也是一个自动测试框架&#xff0c;加载不同的测试组件&#xff0c;能够实现面向不同应用的测试。通过录制和编写测试脚本&#xff0c;实现功能测试、回归测试的自动化&#xff0c;自…

系统架构设计:10 论数据湖技术及其应用

目录 一 数据湖技术 1 数据库 2 数据仓库 3 数据库与数据仓库的对比 4 数据湖

MySQL数据库基本操作和完整性约束类型详解

目录 一、增删改查的sql语句二、表完整性约束1、表完整性约束的介绍2、常见的完整性约束类型3、表完整性约束实战操作3.1.主键primary key3.2.自增键auto_increment3.3.唯一键UNIQUE3.4.null与not null3.5.默认约束 一、增删改查的sql语句 SQL&#xff08;Structured Query Lan…

记录一个@Transaction注解引发的bug

记录一个Transactional(readOnly true)注解引发的bug 一、问题代码和报错 1-1 问题代码模拟 引发这个问题的三大要素分别是&#xff1a; 事务注解任意数据库操作数据库操作后执行耗时业务&#xff08;耗时超过数据库配置的超时时间&#xff09; //1.这里是问题的核心之一…

“过度炒作”的大模型巨亏,Copilot每月收10刀,倒赔20刀

大模型无论是训练还是使用&#xff0c;都比较“烧钱”&#xff0c;只是其背后的成本究竟高到何处&#xff1f;已经推出大模型商用产品的公司到底有没有赚到钱&#xff1f;事实上&#xff0c;即使微软、亚马逊、Adobe 这些大厂&#xff0c;距离盈利之路还有很远&#xff01;同时…

Python装饰器dome

import time from functools import wrapsdef statistical_time(time_type):print(time_type)def gel(fun):wraps(fun) # 不改变使用装饰器原有函数的结构(如__name__, __doc__)def fool(*args, **kwargs):start_time time.time()res fun(*args, **kwargs)end_time time.ti…

微信自动批量添加好友的方法

在现在的营销中微信已成为一种重要的沟通方式。微信目前是没有自动批量添加好友的功能&#xff0c;需要运营者一个一个手动去添加&#xff0c;这样太过于浪费时间&#xff0c;并且加频繁了还容易被封号&#xff0c;今天给大家介绍几种手动批量加好友的方式以及怎么借助第三方软…

国窖1573持续演绎共生魅力,携手马岩松个展感知建筑艺术之美

执笔 | 洪大大 编辑 | 萧 萧 从艺术到文化、从需求到场景、从体验到消费&#xff0c;国窖1573正通过一次次尝试与探索实现与多元文化的共创与共生。 10月12日&#xff0c;国窖1573品牌挚友马岩松举办的“流动的大地”展览在深圳当代艺术与城市规划馆正式开幕。泸州老窖股份…

什么是MTU(Maximum Transmission Unit)?

最大传输单元MTU&#xff08;Maximum Transmission Unit&#xff0c;MTU&#xff09;&#xff0c;是指网络能够传输的最大数据包大小&#xff0c;以字节为单位。MTU的大小决定了发送端一次能够发送报文的最大字节数。如果MTU超过了接收端所能够承受的最大值&#xff0c;或者是超…

2023年09月 C/C++(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 Python编程(1~6级)全部真题・点这里 第1题:红与黑 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 时间限…

[paddle]paddleseg中eiseg加载模型参数的模型下载地址

图片标注 以下内容为2D图片标注模型下载及EISeg2D图片标注流程&#xff0c;具体如下&#xff1a; 模型准备 在使用EISeg前&#xff0c;请先下载模型参数。EISeg开放了在COCOLVIS、大规模人像数据、mapping_challenge&#xff0c;Chest X-Ray&#xff0c;MRSpineSeg&#xff…

[42000][923] ORA-00923: 未找到要求的 FROM 关键字

在oracle数据库写分页查询&#xff0c;使用 rownum时候出错&#xff0c; 代码&#xff1a; SELECT *FROM (SELECT *, ROWNUM AS rnumFROM test t ) WHERE rnum BETWEEN 1 AND 5; 报错&#xff1a; [42000][923] ORA-00923: 未找到要求的 FROM 关键字 Position: 31 问题原因…

【微服务部署】十、使用Docker Compose搭建高可用Redis集群

现如今&#xff0c;业务系统对于缓存Redis的依赖似乎是必不可少的&#xff0c;我们可以在各种各样的系统中看到Redis的身影。考虑到系统运行的稳定性&#xff0c;Redis的应用和MySQL数据库一样需要做到高可用部署。 一、Redis 的多种高可用方案 常见的Redis的高可用方案有以下…