美文网首页硬件
段页式访存——线性地址到物理地址的转换

段页式访存——线性地址到物理地址的转换

作者: madao756 | 来源:发表于2019-05-20 00:17 被阅读30次

前言:段页式的访存的内容还没有结束。。。还有一部分知识,线性地址到物理地址的转换。话不多说,让我们开始吧。

假设页的大小是 4KB,每个页表项占 4B,则理论上一个页表有多大?(虚拟空间大小是 4GB)

页表项数目 = 4 GB / 4 KB = 1 MB

所以,

页表大小 = 1 MB × 4 B = 4 MB

注意!

页的大小是 4KB。也就是说,一个页是放不下的。所以我们要采用多级页表的方式

整体过程

(在这里说的是 IA-32 架构,也就是只有两层页表)

线性地址 ------> 物理地址的整体过程如下:

用文字叙述:

  • 由逻辑地址得到的线性地址一共 32 位。前 10 位是页目录索引,中间 10 位是页表索引,最后 12 位是业内偏移量
  • 由 CR3 寄存器得到「页目录基地址」,再得到「页目录项」
  • 由「页目录项」得到「页表基地址」
  • 由「页表基地址」得到「页表项」,最后得到物理地址

什么是 CR3 寄存器

在这里一共要介绍 3 种「控制寄存器」

  • CR0:控制寄存器(转自维基百科)

    Bit Name Full Name Description
    0 PE Protected Mode Enable 如果为 1,则系统处于保护模式,否则系统处于实模式
    1 MP Monitor co-processor 控制 WAIT / FWAIT 指令与 CR0 中 TS 标志的交互
    2 EM Emulation 如果设置,则不存在 x87 浮点单元,如果清除,则存在 x87 浮点单元
    3 TS Task switched 仅在使用 x87 指令后才允许在任务切换时保存 x87 任务上下文
    4 ET Extension type 在 386 上,它允许指定外部数学协处理器是 80287 还是 80387
    5 NE Numeric error 设置时启用内部 x87 浮点错误报告,否则启用 PC 样式 x87 错误检测
    16 WP Write protect 设置后,当权限级别为 0 时,CPU 无法写入只读页面
    18 AM Alignment mask 如果 AM 设置,AC 标志(在 EFLAGS 寄存器中)设置,并且权限级别为 3,则启用对齐检查
    29 NW Not-write through 全局启用/禁用直写式缓存
    30 CD Cache disable 全局启用/禁用内存缓存
    31 PG Paging 如果为 1,则启用分页并使用 CR3 寄存器,否则禁用分页。

    在本例子中,CR0 寄存器主要用来标明使不使用分页。

  • CR2:页故障(page fault)线性地址寄存器

    存放引起页故障的线性地址。只有在 CR0 中的 PG=1 时,CR2 才有效。

  • CR3:页目录基址寄存器

    保存页目录表的起始地址。只有当 CR0 中的 PG=1 时,CR3 才有效。

这样就完成了访存的所有内容。我们来回顾一下

举个栗子

IA-32中,执行“movl 8(%ebp), %eax” 中取数操作的大致过程如下:

  • 由 ds 寄存器得到 16 位段选择符,其中有 2 位记录了 CPL。
  • 由段选择符,查表(第一次)或者查 Cache。找到段描述符。其中有 2 位记录了 DPL。以及 32 位的段基址。
  • 如果 CPL >= DPL 则越级,否则计算线性地址 LA = 段基址 + R[ebp] + 0 * 0 + 8
  • 若 LA > 段限,则越界,否则将 LA 转换为主存地址 A
    • 若访问 TLB 命中则地址转换得到 A;否则处理 TLB 缺失(硬件/OS)
    • 若缺页或越权(R/W不符)则调出 OS 内核;否则地址转换得到 A
    • 根据 A 先到 Cache 中找,若命中则取出 A 在 Cache 中的副本
    • 若 Cache 不命中,则再到主存取 A 所在主存块送对应 Cache 行

相关文章

  • 段页式访存——线性地址到物理地址的转换

    前言:段页式的访存的内容还没有结束。。。还有一部分知识,线性地址到物理地址的转换。话不多说,让我们开始吧。 假设页...

  • 段页式访存——逻辑地址到线性地址的转换

    继续底层知识,想要看懂 PWN 题和理解汇编代码,必须要搞懂这些底层知识啊。搞懂 movl 8(%ebp), %e...

  • Linux kernel之一内存寻址之分页

    1.硬件中的分页 1.1 页实现原理 MMU的分页管理单元将线性地址转换成物理地址 page 将线性地址空间划分成...

  • 虚拟内存和内存保护(40讲)

    内存需要被分成固定大小的页(Page),通过虚拟地址到物理地址的转换、才能找到实际物理地址、程序看到的地址都是虚拟...

  • 内核地址空间及高端内存映射的总结

    内核地址空间 逻辑地址->线性地址->物理地址 8086 物理地址 = 段地址左移4位 + 段内偏移量这种方式的寻...

  • Essay

    内存控制单元(MMU)通过分段单元硬件电路将逻辑地址转换为线性地址。通过分页单元硬件电路将线性地址转换为物理地址。...

  • 关于内存管理和地址转换的小小小小小总结

    关键词:32bit分页,物理地址扩展分页,四级页表,ARM的地址转换,CR3寄存器,虚拟地址到物理地址的映射 因为...

  • Linux内存管理--地址映射

    在Linux系统内内存是通过分页机制进行管理的。CPU的页式内存管理单元负责把一个线性地址最终翻译为一个物理地址。...

  • 虚拟地址到物理地址的转换

    对于一个虚拟地址,我们如何能够实现到物理地址的转换呢? 我们知道,虚拟地址 = 高10位在页目录表中的偏移量(页目...

  • 内存分页

    内存分页 在未开启分页机制时,段基址 + 段内偏移计算出的线性地址就是物理地址,对于一个程序,由于线性地址是由编译...

网友评论

    本文标题:段页式访存——线性地址到物理地址的转换

    本文链接:https://www.haomeiwen.com/subject/uexczqtx.html