SV39多级页表的硬件机制

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 【10月更文挑战第26天】SV39多级页表机制包括三级页表结构,每个页表项64位,通过SATP寄存器控制地址转换。地址转换过程涉及三级页表查找,最终生成物理地址。页表项包含有效位和访问权限位等标志,用于内存管理和访问控制。物理页帧的分配和回收确保内存的有效利用。

SV39 多级页表的硬件机制主要包括以下方面:


  1. 页表结构与地址划分1
  • 页表层级:SV39 采用三级页表结构。将 39 位的虚拟地址划分为多个部分,用于在不同层级的页表中进行索引。其中,虚拟页号共 27 位,第 26 - 18 位为一级页索引(vpn0),第 17 - 9 位为二级页索引(vpn1),第 8 - 0 位为三级页索引(vpn2)。每个页表都使用 9 位索引,这样每个页表有 个页表项。
  • 页表项大小与页表尺寸:每个页表项为 64 位(8 字节),所以每个页表的大小为 (因为每页的起始位置按 4KB 对齐),刚好可以被放到一个物理页框中。
  • 物理地址空间:物理地址通常具有更高的位数,比如 56 位,以便能够访问更大的内存范围,但在 SV39 机制下,主要关注与虚拟地址转换相关的部分物理地址信息。
  1. 寄存器的作用
  • SATP 寄存器:SATP(Supervisor Address Translation and Protection)寄存器是控制地址转换的关键寄存器。其结构中的 “mode” 字段用于控制 CPU 使用的页表模式,当 mode 设置为 8(b1000)时,分页机制被开启且选用 SV39 分页机制;“asid”(Address Space Identifier)目前暂不涉及进程概念可暂不关注;“ppn” 字段存放的是根页表所在的物理页号,CPU 以此为基础开始地址转换2
  1. 地址转换过程1
  • 一级页表查找:首先,根据 SATP 寄存器中记录的根页表的物理页号,CPU 将虚拟地址中的一级页索引(vpn0)作为偏移,在一级页表的物理页中查找对应的页表项。该页表项中包含了二级页表的物理页号信息。
  • 二级页表查找:接着,使用虚拟地址中的二级页索引(vpn1)作为偏移,在二级页表的物理页中找到对应的页表项,该页表项中包含了三级页表的物理页号信息。
  • 三级页表查找:然后,把虚拟地址中的三级页索引(vpn2)作为偏移,在三级页表的物理页中找到最终的页表项,这个页表项中包含了要访问的虚拟地址对应的物理页号以及相关的标志位(如访问权限、是否有效等)。
  • 物理地址生成:最后,将得到的物理页号左移 12 位(因为每页大小为 4KB,偏移量占 12 位),再加上虚拟地址中的偏移量(offset)部分,就得到了虚拟地址对应的物理地址,CPU 便可以通过该物理地址访问实际的物理内存。
  1. 页表项的标志位
  • 有效位(V 位):页表项中的有效位用于表示该页表项是否合法。只有当 V 位为 1 时,页表项才是有效的,CPU 才能根据该页表项进行地址转换;若 V 位为 0,则表示该页表项对应的虚拟地址范围是无效的,此时如果 CPU 访问该虚拟地址,会引发地址转换异常。
  • 访问权限位(R/W/X、U 位等):R/W/X 位分别控制索引到这个页表项的对应虚拟页面是否允许读、写、取指操作;U 位控制索引到这个页表项的对应虚拟页面是否在 CPU 处于用户特权级(U 特权级)的情况下被允许访问。A 位(accessed)记录自从该位被清零之后,页表项的对应虚拟页面是否被访问过;D 位(dirty)则记录自从该位被清零之后,页表项的对应虚拟页面是否被修改过。这些标志位对于内存的访问控制和管理非常重要。
  1. 物理页帧的管理
  • 物理页帧的分配:物理内存被划分为多个物理页帧,当需要建立新的页表或者存储应用程序的数据时,系统需要分配物理页帧。例如,在创建页表的过程中,如果某个级别的页表不存在,系统会申请一个物理页框,并在其中创建相应的页表。
  • 物理页帧的回收:当应用程序结束或出现错误时,系统需要回收该应用程序所占用的物理页帧,以便重新分配给其他应用程序或页表使用。这涉及到对物理页帧的跟踪和管理,确保内存的有效利用和资源的正确释放。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
程序员 人工智能 Serverless
通义灵码保姆级教程:官网、安装、使用指南、常见问题、线上活动、官方答疑
通义灵码保姆级教程:官网、安装、使用指南、常见问题、线上活动、官方答疑
21784 1
|
Linux C语言
RISC-V Linux汇编启动过程分析
RISC-V Linux汇编启动过程分析
|
10月前
|
机器学习/深度学习 自然语言处理 搜索推荐
自注意力机制全解析:从原理到计算细节,一文尽览!
自注意力机制(Self-Attention)最早可追溯至20世纪70年代的神经网络研究,但直到2017年Google Brain团队提出Transformer架构后才广泛应用于深度学习。它通过计算序列内部元素间的相关性,捕捉复杂依赖关系,并支持并行化训练,显著提升了处理长文本和序列数据的能力。相比传统的RNN、LSTM和GRU,自注意力机制在自然语言处理(NLP)、计算机视觉、语音识别及推荐系统等领域展现出卓越性能。其核心步骤包括生成查询(Q)、键(K)和值(V)向量,计算缩放点积注意力得分,应用Softmax归一化,以及加权求和生成输出。自注意力机制提高了模型的表达能力,带来了更精准的服务。
11281 46
|
存储 缓存 安全
深入理解内存映射:mmap映射的背后原理以及和共享内存的差异
深入理解内存映射:mmap映射的背后原理以及和共享内存的差异
4606 0
|
缓存 监控 算法
Linux内存碎片深度剖析:原理、处理与分析全指南
Linux内存碎片深度剖析:原理、处理与分析全指南
2697 0
Linux内存碎片深度剖析:原理、处理与分析全指南
|
Rust Shell 索引
使用阿里云镜像加速Rust与Cargo安装及更新
使用阿里云镜像加速Rust与Cargo安装及更新
9331 1
|
Ubuntu 安全 网络协议
vscode设置自动保存步骤
vscode设置自动保存就不用每次要运行时候去先保存一下才能加载新页面了
19143 0
vscode设置自动保存步骤
|
存储 前端开发 搜索推荐
使用session.setAttribute存储会话属性
使用session.setAttribute存储会话属性