当前位置: 首页 > news >正文

简单易懂,基本地址变换机构

详细解析这个至关重要的机制——基本地址变换机构。这是操作系统与硬件(CPU/MMU)紧密协作,将分页存储管理的“蓝图”变为现实的核心引擎。掌握它的工作流程是理解整个内存管理的关键。

我们继续使用那个用活页本记笔记的比喻。

  • 你(CPU):需要查找论文中的某个特定内容。
  • 论文的逻辑地址:你要找的内容在“论文的第P页,第W个字”的位置。
  • 活页本(内存):物理存储介质。
  • 页表(目录):存放在活页本的某个区域。
  • 基本地址变换机构 (硬件MMU):一个随身携带的、不知疲倦的智能秘书,他专门负责帮你完成从“论文页码”到“物理纸张页码”的快速转换。

1. “智能秘书”上岗前的准备工作

在你可以开始查阅论文之前,操作系统(大楼管理员)需要为这位智能秘书做好准备。

  • 页表寄存器 (PTBR/PTLR):这个智能秘书有两个最重要的“记忆槽”:
    1. 页表起始地址寄存器 (PTBR):记住“这篇论文的目录被放在了活页本的第几页开始”。
    2. 页表长度寄存器 (PTLR):记住“这篇论文的目录一共有多少行”(即论文总共有多少页)。
  • 进程切换时的交接
    • 当一个进程(论文)没有运行时,它的目录信息(页表起始地址和长度)被保存在它的**档案袋(PCB)**里。
    • 当这个进程被调度上CPU(轮到你查这篇论文)时,操作系统会立刻把这两个信息从档案袋里取出来,加载到智能秘书的这两个“记忆槽”里。这样,秘书就知道当前要为哪篇论文服务了。

2. “智能秘书”的四步工作法(地址转换流程)

现在,你(CPU)向智能秘书(地址变换机构)下达一个指令:“我要找逻辑地址 A 处的内容!”。秘书立刻开始了他标准化的四步工作流程:

第一步:拆分指令(解析逻辑地址)

秘书拿到逻辑地址 A,利用硬件电路,瞬间将其拆分成两部分:

  • 页号 P
  • 页内偏移量 W

(如上一节所述,如果页面大小是2的k次方,这一步就是简单的位拆分,快如闪电。)

第二步:安全检查(合法性判断)

秘书做的第一件事不是马上查目录,而是进行安全检查,防止你“无理取闹”。

  • 他会立刻检查你的页号 P 是否小于他记住的“目录总行数” PTLR
    • if (P >= PTLR):如果页号越界了(比如论文只有10页,你却要找第11页),秘书会立刻“拉响警报”,产生一个地址越界中断,并通知操作系统来处理这个错误(通常是终止你的进程)。
    • 如果 P < PTLR,检查通过,安全!
第三步:查目录,找物理页码(访问页表)

安全检查通过后,秘书开始查目录(页表)。

  1. 计算目录项的位置:他根据自己记住的“目录起始地址” PTBR,和你提供的页号 P,计算出你要找的那一行的物理地址。
    • 目标页表项地址 = PTBR + P * 每个目录项的长度
  2. 访问内存,取出内容:他根据计算出的地址,第一次访问内存,从活页本中找到目录的那一页,并读出第P行记录的内容。这个内容就是物理块号(页框号)b
第四步:拼接地址,找到最终目标(形成物理地址)

现在,秘书已经知道了你的内容在哪张物理纸上了(块号b),也知道在这张纸的哪个位置(偏移量W)。

  1. 计算最终物理地址
    • 最终物理地址 = b * 页面大小 + W
  2. 第二次访问内存:秘书把这个计算出的最终物理地址交给CPU,CPU第二次访问内存,从这个地址处取出你真正想要的数据。

整个过程对你(CPU的用户态)来说是透明的,你只管给出逻辑地址,剩下的转换工作全由这位“智能秘书”硬件完成。


3. 重要概念辨析(易混淆点)

  • 页表长度:指页表里有多少(页表项)。它等于进程的总页面数。
  • 页表项长度:指页表里每一占据多大的存储空间。它取决于物理块号需要多少位来表示。例如,内存有2^20个块,就需要20位来表示块号,那么页表项至少需要ceil(20/8) = 3个字节。为了对齐和方便,通常会扩展为4字节。
  • 页面大小:指逻辑空间里每一页或物理内存里每一块有多大。

4. 关键洞察:两次访存问题

通过上面的流程分析,我们发现一个问题:在没有额外优化的情况下,每访问一个逻辑地址,都需要两次访问物理内存

  1. 第一次访问:查页表,得到物理块号。
  2. 第二次访问:根据计算出的物理地址,访问真正的目标数据。

内存访问本身是比较慢的操作,两次访存会使CPU的有效执行速度降低一半!这是一个巨大的性能瓶颈。如何解决这个问题? 这就引出了下一节要讲的、带有“高速缓存”的地址变换机构——快表(TLB)


必会题与详解

题目一:在一个分页存储管理系统中,页表存放在内存中。假设逻辑地址到物理地址的变换过程需要100ns,其中访问一次内存需要50ns。请问这个变换过程中,地址变换机构(硬件)本身的处理时间是多少?

答案详解

  1. 根据基本地址变换机构的原理,一次完整的逻辑地址到物理地址的转换,需要进行两次内存访问

    • 第一次访存:根据页表寄存器和页号,访问内存中的页表,获取页表项(物理块号)。
    • 第二次访存:根据计算出的物理地址,访问内存中的目标数据单元。
  2. 总时间 = 第一次访存时间 + 第二次访存时间 + 硬件处理时间

    • 100ns = 50ns + 50ns + 硬件处理时间
  3. 计算可得:

    • 硬件处理时间 = 100ns - 100ns = 0ns

结论:这道题旨在说明,与缓慢的内存访问相比,地址变换机构(硬件电路)进行地址拆分、比较、计算等操作的速度是极快的,其耗时可以忽略不计。整个地址变换过程的瓶颈在于两次内存访问。

题目二:请详细描述基本地址变换机构的工作流程,并指出其中页表寄存器(PTBR和PTLR)的作用。

答案详解

工作流程

  1. 地址拆分:CPU将逻辑地址送入地址变换机构,硬件根据页面大小,自动将其拆分为页号P页内偏移量W
  2. 合法性检查:将页号P与页表长度寄存器PTLR中的值进行比较。若P >= PTLR,则判定为地址越界,产生中断;否则,继续执行。
  3. 查询页表:根据页表起始地址寄存器PTBR的值和页号P,计算出目标页表项在内存中的物理地址(PTBR + P * 页表项长度)。然后访问内存,取出该页表项的内容,即物理块号b
  4. 形成物理地址:将物理块号b与页内偏移量W拼接或计算(b * 页面大小 + W),形成最终的物理地址
  5. 访问数据:使用这个物理地址去访问内存,存取数据。

页表寄存器的作用

  • 页表起始地址寄存器 (PTBR):存放当前正在运行进程的页表在内存中的起始地址。它是地址变换机构定位页表的基准。
  • 页表长度寄存器 (PTLR):存放当前正在运行进程的页表的长度(即总页数)。它用于进行地址越界检查,防止进程访问不属于自己的、非法的逻辑页面,起到了内存保护的作用。

题目三:在一个32位地址的系统中,若页面大小为4KB,请问逻辑地址结构中,页号和页内偏移量各占多少位?一个进程最多可以有多少个页面?

答案详解

  1. 计算页内偏移量位数

    • 页面大小 = 4KB = 4 * 1024 B = 2^2 * 2^10 B = 2^12 B
    • 要表示 2^12 个不同的偏移量,需要 12 位二进制数。
    • 所以,页内偏移量占12位
  2. 计算页号位数

    • 总地址长度是32位。
    • 页号位数 = 总地址位数 - 页内偏移量位数
    • 页号位数 = 32 - 12 = 20 位。
    • 所以,页号占20位
  3. 计算最大页面数

    • 页号部分有20位,每一位可以是0或1。
    • 因此,总共可以表示 2^20 个不同的页号。
    • 这意味着一个进程最多可以拥有 2^20 个页面。(2^20 = 1M,所以是1M个页面)。
http://www.lryc.cn/news/592585.html

相关文章:

  • 高防IP能够防御CC攻击吗?它具备哪些显著优势?
  • 【easytokenizer】高性能文本 Tokenizer库 | 源码详解与编译安装
  • Java中类加载器及双亲委派机制原理
  • 2023 年 3 月青少年软编等考 C 语言八级真题解析
  • Windows8.1安装哪个版本的vscode?
  • 基于华为openEuler系统安装DailyNotes个人笔记管理工具
  • HTML常见标签
  • 关于Mysql开启慢查询日志报错:13 - Permission denied的解决方案
  • 爬虫小知识(二)网页进行交互
  • 前端流式渲染流式SSR详解
  • 模板初阶和C++内存管理
  • 【软件重构】如何避免意外冗余
  • 高速公路自动化安全监测主要内容
  • A33-vstar报错记录:ERROR: build kernel Failed
  • 深入理解Linux文件I/O:系统调用与标志位应用
  • 广东省省考备考(第四十九天7.18)——判断推理:位置规律(听课后强化训练)
  • *SFT深度实践指南:从数据构建到模型部署的全流程解析
  • Linux | Bash 子字符串提取
  • Redis原理之哨兵机制(Sentinel)
  • Android性能优化之网络优化
  • 【锂电池剩余寿命预测】TCN时间卷积神经网络锂电池剩余寿命预测(Pytorch完整源码和数据)
  • 如何用Python并发下载?深入解析concurrent.futures 与期物机制
  • 安卓Android项目 报错:系统找不到指定文件
  • python学智能算法(二十四)|SVM-最优化几何距离的理解
  • 【52】MFC入门到精通——MFC串口助手(二)---通信版(发送数据 、发送文件、数据转换、清空发送区、打开/关闭文件),附源码
  • 『 C++ 入门到放弃 』- set 和 map 容器
  • Java Web项目Dump文件分析指南
  • 开源Docmost知识库管理工具
  • spring-cloud微服务部署转单体部署-feign直连调用
  • Windows Server 版本之间有什么区别?