3.1_6 基本地址变换机构

文章目录

  • 3.1_6 基本地址变换机构
    • (一)基本地址变换机构
    • (二)对页表项大小的进一步探讨
  • 总结

3.1_6 基本地址变换机构

image-20240314105452906

提示:

  重点理解、记忆**基本地址变换机构(即用于实现逻辑地址到物理地址转换的一组硬件机构)**的原理和流程。

(一)基本地址变换机构

  基本地址变换机构可以借助进程的页表将逻辑地址转换为物理地址。

  通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F页表长度M

  进程未执行时,页表的始址 和 页表长度 **放在进程控制块(PCB)**中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

  注意:页面大小是2的整数幂


  设页面大小为L,逻辑地址A到物理地址E的变换过程如下:

  我们知道,操作系统会把内存分为系统区、用户区。在系统区当中,会存放着一些操作系统对整个计算机软硬件进行管理的一些相关的数据结构(包括进程控制块PCB,也是在系统区当中的)。

  如果一个进程被调度、需要上处理机运行的话,进程切换相关的内核程序就会把这个进程的运行环境给恢复(这个进程运行环境的相关信息本来是保存在PCB当中的)。内核程序会把进程相关信息放到一系列寄存器当中(包括页表寄存器)。页表寄存器当中存放着这个进程的页表起始地址,和页表的长度。程序计数器PC也是需要恢复的,它指向下一条指令的逻辑地址A。

image-20240314114801244

  采用分页存储管理方式的系统当中,逻辑地址的结构肯定是固定不变的。(比如总长度是32位,前xx位是页号,后xx位是页内偏移量)在一个逻辑地址里,页号占多少位、页内偏移量占多少位,这些都是操作系统知道的。

  所以,获得逻辑地址A之后,就能很快地切分出页号P、页内偏移量W。

image-20240314121226004

  接下来,会对页号的合法性进行检查。

  一个进程的“页表长度M”表示在这个进程的页表中,有M个页表项,也就意味着这个进程的页面总共有M页。

  那么,此时逻辑地址所表示的“页号P”,如果已经超过了页面长度M,即进程总共页面的数量,那么,我们就认为,此时要访问的这个逻辑地址是非法的。

  如果页号P是合法的,那么接下来会拿着页号,和页表始址F结合起来,计算这个页号在页表中所对应的页表项到底是多少。

image-20240314122311375

  通过之前的讲解,我们知道,页表当中的每一个页表项的长度其实是相同的。所以只要我们知道了页号,还有页表起始地址,再知道每一个页表项的长度,我们就可以算出我们想要访问的页号对应的页表项所存放的位置,就知道了它对应的块号。

  既然知道它的内存块号,那么,再结合页内偏移量W,就能得到最终的物理地址E了。

image-20240314122902264

  最终,就成功访问到了“逻辑地址A”所对应的物理地址了。

image-20240314123236169

  在考试当中,经常会:给出一个逻辑地址,还有页表。之后让我们算出它的物理地址。

  所以,需要对上面所说的过程(主要是图中的5个步骤)非常的熟悉。


文字性概括

  设页面大小为L,逻辑地址A到物理地址E的变换过程如下:

  1.计算页号P和页内偏移量W。

  如果用十进制手算,则P = A / LW = A % L

  但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量。

  2.比较页号P和页表长度M,若P ≥ M,则产生越界中断,否则继续执行。

  注意:页号是从0开始的,而页表长度至少是1。因此P = M时也会越界

  3.页表中页号P对应的页表项地址 = 页表起始地址F + 页号P * 页表项长度,取出该页表项内容b,即为内存块号。

  注意区分:页表项长度、页表长度、页面大小的区别

  页表长度指的是这个页表中总共有几个页表项,即总共有几个页;

  页表项长度指的是每个页表项占多大的存储空间;

  页面大小指的是一个页面占多大的存储空间。

  4.计算E = b * L + W,用得到的物理地址E去访存。(如果内存块号、页面偏移量是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)

  动手验证:假设页面大小L=1KB,最终要访问的内存块号b=2,页内偏移量W=1023

  ①尝试用E = b * L + W计算目标物理地址。

  ②尝试把内存块号、页内偏移量用二进制表示,并把它们拼接起来得到物理地址。

  对比①②的结果是否一致。


例题

  若页面大小L为1K字节,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E。

  等价描述:某系统按字节寻址,逻辑地址中,页内偏移量占10位,页号2对应的内存块号b=8,将逻辑地址A=2500转换为物理地址E。

  “按字节寻址”就意味着,在这个系统中,每个地址对应的是1个字节大小的存储单元。

  “页内偏移量占10位”的信息也很重要,因为页内偏移量的位数直接决定了一个页面的大小是多少。此处,说明一个页面的大小为 2 10 B = 1 K B 2^{10}B=1KB 210B=1KB

  读完题目之后,对于“逻辑地址到物理地址的转换”这样的题目,我们就根据上文所总结的思路来做即可。

答:

  1.计算页号、页内偏移量。

  题中给的数据也都是十进制的,我们正常使用除法、取余进行计算即可。、

  页号P = A / L = 2500 / 1024 = 2;

  页内偏移量W = A % L = 2500 % 1024 = 452。

  2.根据题中条件可知,页号2对应的内存块号b=8。

  同时页号P=2也是没有越界的。

  3.物理地址E = B × L + W = 8 × 1024 + 425 = 8644。

  我们知道了内存块号、页内偏移量,也知道每个内存块的大小(与进程的页面大小一样),就可以计算物理地址了。

  注意,内存块号是通过查询页表,根据页号对应得知的。此外,不要忘了内存当中的内存块大小与进程的页面大小是一样的。

  在分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了。因此,页式管理中地址是一维的。即,只要给出一个逻辑地址,系统就可以自动地算出页号、页内偏移量两个部分,并不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位。

(二)对页表项大小的进一步探讨

  每个页表项的长度是相同的,页号是“隐含”的

例子

  假设某系统物理内存大小为4GB,页面大小为4KB,它的内存总共会被分为 2 32 / 2 12 = 2 20 2^{32} / 2^{12}=2^{20} 232/212=220个内存块,因此内存块号的范围应该是0 ~ 2 20 − 1 2^{20}-1 2201

  因此,至少要20个二进制位才能表示这么多的内存块号,因此至少要3个字节才足够。(每个字节是8个二进制位)

image-20240314143252087

  则页表中的“块号”就需要3个字节来存储。此外,页号并不需要存储,页号是“隐含”的。因此,即每个页表项的大小为3字节。

  各页表项会按顺序连续地存放在内存中。如果该页表在内存中存放的起始地址是X,则M号页对应的页表项是存放在内存地址为X + 3 * M

  但是,进一步思考一个问题。回到本例的第一句话上,它说一个页面为4KB,则每个页面可以存放4096 / 3 = 1365个页表项,但是(除不尽,有余数)这个页面会剩余4096 % 3 = 1B页内碎片。

image-20240314143643030

  我们从起始地址X开始存放页表项。由于每个页面可以存放1365个页表项,则如图所示,第一个页面存放了0 ~ 1364号,这1365个页表项,且页面中剩余1B的页内碎片。而继续存下一个页表项,即1365号页表项时,由于不能跨页存储,其只能从下一个页框(内存块)开始存放,因此那1B的碎片空间只能放在那。

  同时,对于1365号页表项的起始地址的计算,也会有变化,不能再按照X + 3 * M了,而是要额外再加上1B。因此,1365号页表项存放的地址为X + 3 * 1365 + 1

  由此可见,如果页表项大小的设置不合理,导致页表项不能恰好装满一个页框的话,就会对我们计算页表项地址带来麻烦。

  为了解决这个问题,我们可以适当的把每个页表项的长度拓展一下。如果每个页表项占4字节,则每个页框刚好可存放1024个页表项,不会有任何的页内碎片。

image-20240314144155073

  此外,1024号页表项虽然是存放在下一个页框中的,但是它的地址依然可以直接用X + 4 * 1024得出。

结论

  理论上,页表项长度为3B即可表示内存块号的范围。但是,为了方便页表的查询,常常会让一个页表项占更多的字节,使得每个页面恰好可以装得下整数个页表项

  注意:题目中如果让我们计算“页表项的长度最少是几?”——当然虽少是3字节,不能再比3字节少了,再少就存不下了,而不能说“长度最少是4字节”,因为3字节也可以存的下,4字节当然不是“最少”。之所以设置成4字节大小,目的是为了在实际应用当中方便而采用的一种策略。4字节当然不是“最少”的长度。

  此外,一个页表的页表项数目较多的话,需要放在多个页框中,我们通常会让它们装在连续的页框中。这也是为了方便我们计算页表项的存储地址。

总结

image-20240314144807133

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络层:地址解析协议ARP、网际控制报文协议ICMP、虚拟专用网络VPN、网络地址转换NAT

文章目录 地址解析协议ARP解决的问题ARP解析流程ARP高速缓存 网际控制报文协议ICMPICMP报文的种类ICMP差错报告报文ICMP询问报文 ICMP应用举例分组网间探测PING(Packet InterNet Groper)traceroute(tracert)确定路径的MTU 虚拟专用网络专用地址虚拟专用网络远程接入VPN(remote …

2024年文学、历史与艺术设计国际会议(ICLHAD2024)

2024年文学、历史与艺术设计国际会议(ICLHAD2024) 一、【会议简介】 2024国际文学、历史和艺术设计会议(IACLHAD 2024)将在中国杭州举行。本次大会将继续遵循学术性和国际性原则,邀请国内外高校、科研院所、企事业单位的文史美术设计领域的…

力扣每日一题 最大二进制奇数 模拟 贪心

Problem: 2864. 最大二进制奇数 由于奇数的二进制末尾一定是 111,我们可以把一个 111 放在末尾,其余的 111 全部放在开头,这样构造出的奇数尽量大。 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( 1 ) O(1) O(1) Code class…

自动化运维工具Ansible

目录 一.Ansible基本内容 1.定义 2.特点与优势 优势: (1)轻便性:无需在被控制服务器上安装客户端,Ansible基于ssh协议 (2)幂等性:大部分模块有幂等性,即如果输入sys…

react 综合题-旧版

一、组件基础 1. React 事件机制 javascript 复制代码<div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&a…

一文搞懂多模态:BeiT-3之前的14个多模态+4个周边原理解读

在人工智能的世界里&#xff0c;多模态学习不断地展现出其重要性。这个领域的迅速发展不仅促进了不同类型数据之间的深度融合&#xff0c;还为机器理解世界提供了更加丰富和细腻的视角。随着科技的不断演进&#xff0c;人工智能模型已经开始渐渐具备处理和理解从文本、图像&…

数组和指针

一、数组不可以被赋值 数组一旦声明之后&#xff0c;是不可以修改的&#xff0c;只有数组中的元素是可以被修改的 #include<stdio.h> int main() {int arr1[]{1,2,3};int arr2[]{7,8,9};arr1arr2;return 0; } 二、指针可以被赋值 指针可以通过赋值指向其他内存空间 #…

flutter 开发app可以做的事情

热更新文件/图片 预览组件/文件上传分片/动态多语言/兼容web缓存管理页面动画封装公用组件库日志系统/日志规范/错误定位低代码实现/探索/落地网络延迟脚本字体包优化web 页面浏览器刷新没有历史路径&#xff0c;导致报错选择多语言之后&#xff0c;退出再次进入&#xff0c;没…

Excel生成 chart 混合图表

在开发中有这样一个需求&#xff0c;邮件预警的时候&#xff0c;要求邮件主体内容是一个Chart 图表&#xff08;生成后的img&#xff09;&#xff0c;邮件需要有附件&#xff0c;且附件是Excel列表加图表&#xff0c;图表类型是混合图。 回顾&#xff1a;在之前一篇讲到如何使用…

云数据库Redis配置用户名密码连接

一般情况&#xff0c;生产环境6379端口是禁止对外开放的&#xff0c; 所有用户名密码可以不设置。 但是如果有格鲁需求&#xff0c;需要开放redis公网访问&#xff0c;建议端口限制IP&#xff0c;并设置用户密码 spring中配置 阿里云数据库 云数据库 Redis_缓存数据库_高并…

数据分析可视化神器---streamlit框架,各种图表绘制,布局以及生产综合案例剖析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

如何应用TRIZ点亮产品新概念设计的火花?

在创新设计的领域里&#xff0c;TRIZ&#xff08;发明问题解决理论&#xff09;被誉为一把开启创新之门的金钥匙。它能够帮助设计师和工程师突破思维定式&#xff0c;找到前所未有的解决方案。那么&#xff0c;如何在产品的新概念设计阶段&#xff0c;利用TRIZ点亮创新的火花呢…

玩转 Spring 状态机:更优雅的实现订单状态流转

说起 Spring 状态机&#xff0c;大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢&#xff1f;没错&#xff0c;Spring 状态机就是状态模式的一种实现&#xff0c;在介绍 Spring 状态机之前&#xff0c;让我们来看看设计模式中的状态模式。 1. 状态模式 状态模式…

探秘知乎的排名算法:知乎撰写高质量内容的秘诀

知乎作为一个知识问答社区&#xff0c;用户众多、内容繁杂&#xff0c;那么究竟是什么样的原则决定了知乎上的排名呢&#xff1f;腾轩科技传媒探讨知乎排名的规则&#xff0c;并分享如何撰写高质量的文章。 知乎排名的算法 在知乎这个巨大的社交平台上&#xff0c;任何一个用户…

torch.backends.cudnn.benchmark 作用

相关参数 torch.backends.cudnn.enabled torch.backends.cudnn.benchmark torch.backends.cudnn.deterministictorch.backends.cudnn.benchmark True&#xff1a;将会让程序在开始时花费一点额外时间&#xff0c;为整个网络的每个卷积层搜索最适合它的卷积实现算法&#xff0c…

【SysBench】Linux 安装 sysbench-1.20

安装目的是为了对 MySQL 8.0.x 、PostgreSQL 进行基准测试。 1、二进制包安装 在 Linux 上下载和安装 sysbench 最简单的方法是使用 托管的二进制包存储库 packagecloud 。存储库是在每个 sysbench 版本上自动更新。目前为 x86_64、i386 和 aarch64 二进制文件可用。 RHEL/C…

深入理解指针——C语言

目录 1. 内存和地址 2. 指针变量和地址 3. 指针变量类型的意义 4. const修饰指针 5. 指针运算 6. 野指针 7. assert断言 8. 指针的使用和传址调用 9. 数组名的理解 10. 使用指针访问数组 11. 一维数组传参的本质 12. 冒泡排序 13. 二级指针 14. 指针数组 15. 指…

公司Logo设计可以打造独特品牌标识,彰显企业价值!

公司Logo作为企业品牌的核心标识&#xff0c;对于品牌形象和企业价值的传达起着至关重要的作用。然而&#xff0c;许多人在设计公司Logo时&#xff0c;往往忽略了设计背后的含义&#xff0c;导致Logo缺乏独特性和深度。本文将为你揭秘公司Logo设计及含义的重要性&#xff0c;并…

Android 学习之追踪应用的安装情况

先上结论&#xff0c;急用的话直接看结论 结论一、借助 API 读取安装信息&#xff0c;然后上报二、借助手动埋点&#xff0c;然后上报三、对比 前提过程 结论 一、借助 API 读取安装信息&#xff0c;然后上报 通过 PackageManager 的 API&#xff0c;我们可以得知自身应用安装…

CSS中position的属性有哪些,区别是什么

position有以下属性值&#xff1a; 属性值概述absolute生成绝对定位的元素&#xff0c;相对于static定位以外的一个父元素进行定位。元素的位置通过left、top、right、bottom属性进行规定。relative生成相对定位的元素&#xff0c;相对于其原来的位置进行定位。元素的位置通过…
最新文章