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应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
hi3531的pcie atu资源重映射
<p>1. 设置ATU 区域号寄存器为需要配置的地址转换区编号。<br> 2. 设置ATU Region Lower Base Address Register 和ATU Region Upper Base Address<br> Register。(在此区域内的目标地址将由区域号寄存器所在的ATU 转换)<br> 3. 设置ATU Region Limit Address Regi
2779 0
|
6月前
|
存储 算法 Linux
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
【Linux】线程的内核级理解&&详谈页表以及虚拟地址到物理地址之间的转化
|
6月前
|
安全 Linux Windows
深入理解操作系统内存管理:分页与分段的融合
【4月更文挑战第30天】 在现代操作系统中,内存管理是确保多任务环境稳定运行的关键。本文将深入探讨分页和分段两种内存管理技术,并分析它们如何相互融合以提供更为高效、安全的内存使用策略。通过对比这两种技术的优缺点,我们将探索现代操作系统中它们的综合应用,以及这种融合对操作系统设计和性能的影响。
|
6月前
|
存储 缓存 安全
深入理解内存映射:mmap映射的背后原理以及和共享内存的差异
深入理解内存映射:mmap映射的背后原理以及和共享内存的差异
2906 0
|
6月前
|
机器学习/深度学习 缓存 安全
基础了解:系统大页
基础了解:系统大页
61 0
|
算法
【操作系统】第三章:计算机体系结构及内存分层体系(Part2:连续物理内存分配)
【操作系统】第三章:计算机体系结构及内存分层体系(Part2:连续物理内存分配)
235 0
【操作系统】第三章:计算机体系结构及内存分层体系(Part2:连续物理内存分配)
|
存储
驱动开发:内核读写内存多级偏移
让我们继续在`《内核读写内存浮点数》`的基础之上做一个简单的延申,如何实现多级偏移读写,其实很简单,读写函数无需改变,只是在读写之前提前做好计算工作,以此来得到一个内存偏移值,并通过调用内存写入原函数实现写出数据的目的。以读取偏移内存为例,如下代码同样来源于本人的`LyMemory`读写驱动项目,其中核心函数为`WIN10_ReadDeviationIntMemory()`该函数的主要作用是通过用户传入的基地址与偏移值,动态计算出当前的动态地址。
126 0
|
算法
存储器管理-动态分区分配算法
存储器管理-动态分区分配算法
247 0
|
存储 程序员
存储器-分段存储管理方式
存储器-分段存储管理方式
470 0
|
数据库 数据安全/隐私保护 索引
【操作系统】第四章:非连续内存分配(Part1:基于分页-分段的物理/逻辑地址转换)
【操作系统】第四章:非连续内存分配(Part1:基于分页-分段的物理/逻辑地址转换)
174 0