linux内存管理 (二) [硬件1] MMU及其运行过程 关键过程二 translation table walk

前言

===========================================
虚拟地址和物理地址的转换 关键过程2 TableWalkUnit从主存中的转换表(页表)中获取pa
	1.转换表地址 (CP15 的 c2 寄存器中,存放的是页表基址的物理地址) // Translation table base (TTB) register
	2.转换表条目
		转换表通过将虚拟地址空间划分为相等大小的块,将物理地址空间划分为相等大小的块,并在转换表中提供一个条目来表示其映射关系。条目0提供了块0的映射,条目1提供了块1的映射,依此类推。
		
		每个条目的地址
			对应相应物理内存块的地址
		每个条目均包含	
			相应物理内存块的地址
			访问物理地址时要使用的属性

转换过程总述

	3.一级转换表
		虚拟地址
			which entry + offset in block
		一级页表
			一级页表条目组成
				PA base + Attributes
		一级页表索引过程 // Walk Table
			IN  : 虚拟地址
			OUT : 物理地址
			过程: 
				1. 根据 虚拟地址的 which entry  和 页表基址(物理地址) 索引到 一级页表项A,得到 PA base + Attributes(标记了PA base 块的访问属性)
					转换表基址寄存器的位[31:14]与修改后的虚拟地址(VMA)的位[31:20]和两个零位串联,以产生32位物理地址
					此地址选择一个四字节的转换表条目,该条目是节的第一级描述符或指向第二级页表的指针。
				2. 校验 Attributes ,通过则开始3,否则 MMU 异常
					这一块 在 DDI0100I_armv4v5v6_architecture_reference_manual.pdf 阅读笔记 中 详述
				3. 算出 物理地址 = PA base + offset in block
			反思:
				其实根据虚拟地址中的 PA base 做了两件事情
					1. 块的映射,根据 which entry 找到了 PA base
					2. 属性校验,根据 which entry 找到了 Attributes,并根据 Attributes 校验

		Attributes 校验方法:
			一个 PA base 块 有一个属性 Attributes ,肯定是要做比较的.// 一般考虑的是比较,但arm定义的不是比较,是联合定义(一起确定一种行为)
			属性中 有 Domain[8:5] , 在第一阶段 和 Register 3: Domain access control 定义四种行为
			属性中 有   AP[11:10] , 在第二阶段 和 当前执行指令时的特权级  定义四种行为
			
	4.多级表
		一级表的问题:
			不能描述不同大小的块
		多级表
			这种多级别  方法可以描述较大的块和较小的块。
			处理器在开始表查找时不知道转换的大小。处理器通过执行表遍历计算出要转换的块的大小。
			
			大块与小块特征
				大块比小块需要更少级别的读取来翻译。另外,大块更有效地缓存在TLB中。
				小块可让软件对内存分配进行细粒度控制。但是,小的块在TLB中缓存的效率较低。缓存效率较低,因为小块需要多次读取各个级别才能转换。
			为了管理这种折衷,操作系统必须在使用大型映射的效率与使用较小映射以获得最佳性能的灵活性之间取得平衡。
			
			在Armv8-A中,最大级别数为4,级别编号为03

转换过程中使用到的页表项的内容

  • IHI0062D_c_system_mmu_architecture_specification.pdf 阅读笔记
AArch32翻译方案使用4KB的翻译粒度,这意味着翻译表可以以4KB的粒度定义内存区域的属性。
  • DDI0100I_armv4v5v6_architecture_reference_manual.pdf 阅读笔记
Page 715 Figure B4-2 Sequence for checking faults 描述了 tablewalk 的过程


页目录表项内容
	Table B4-1 First-level descriptor format (VMSAv6, subpages enabled) 中的 Section 中描述了 level0-页表项(描述了一个block,而不是二级页表) 的值
	一个页表项/页目录项 为 4个 字节.
	[31:20] : Section base address(PA base)
	[19:0]  : Attributes
		[19:15] : SBZ // should be zero
		[14:12] : TEX
		[11:10] : AP  // Access permissions
		[9]     : IMP
		[8:5]   : Domain
		[4]     : SBZ // should be zero
		[3]		: C
		[2]     : B
		[1:0]   : 10 // 表示这个页表项是 Section,指向block,而不是二级页表


	关注点:
		Attributes 包括  AP[11:10] 和 Domain[8:5]

转换过程中Attributes的校验

  • 页目录表中Attributes中的关键bit解析

Memory access control	
	对内存区域的访问由TLB项中的访问权限和域位控制。Domain的优先级比Access permissions要高.(先对域检查,再对)
	在VMSAv6中添加了APX和XN(意思为execute never)位。


	Domains
		域是内存区域的集合。ARM体系结构支持16个域
		每个页表条目和TLB条目都包含一个字段,指定条目所在的域。// [8:5]
		对每个域的访问由域访问控制寄存器中的一个两位字段控制。 // Register 3: Domain access control
		每个字段都允许快速启用和禁用对整个域的访问
			这样整个内存区域就可以非常高效地交换虚拟内存。

		支持两种域访问
			客户
				域的用户(执行程序和访问数据),由该域的TLB项的访问权限保护。
			管理者
				控制域的行为(域中的当前节和页以及域访问),并且不受该域中TLB项的访问权限的保护。

		一个程序可以是某些域的客户,同时是某些域的管理器,同时不能访问其余的域。
		这允许对访问不同内存资源的程序进行非常灵活的内存保护。


		理解
			Register 3: Domain access control 和 页表项中的 Domain[8:5]  定义了 四种情况

			一个程序在访问前, Register 3: Domain access control 已经是 填好的,里面有 对 16个域 的不同访问权限
			一个页目录项对应的块属于一个域(16个域中的一个)
			如果程序在访问前, Register 3 对域0 的内容是 00 , 且页目录项属于域0(Domain[8:5]0b0000),(0b00 No access Any access generates a domain fault)
			如果程序在访问前, Register 3 对域0 的内容是 01 , 且页目录项属于域0,(0b01 Client Accesses are checked against the access permission bits in the TLB entry)
			如果程序在访问前, Register 3 对域0 的内容是 10 , 且页目录项属于域0,(0b10 Reserved Using this value has UNPREDICTABLE results)
			如果程序在访问前, Register 3 对域0 的内容是 11 , 且页目录项属于域0,(0b11 Manager Accesses are not checked against the access permission bits in the TLB entry, so a permission fault cannot be generated)



	Access permissions

		在Domain之后,Access permissions 对 其页表项对应的block进行 访问控制.
		如果在没有(需要的)权限的情况下访问内存区域,则会引发Permission Fault(此时访问不到)

		访问权限由以下组合确定.
			页表中的AP及APX位 // 对于不支持APX位的页表格式,APX=0。
			CP15寄存器Cr1中的S和R位
				VMSAv6不赞成使用S和R位。
				因为对S和R位的更改不会影响TLB中已有项的访问权限。
				必须刷新TLB才能使更新的S和R位值生效。

		理解:
			当前执行指令时的特权级 和 页表项中的AP[11:10] 定义了四种情况




综上:
	Page 715 Figure B4-2 Sequence for checking faults 描述了 tablewalk 的过程 : 先对 Domain 进行检查,然后再对 Access permissions 检查

	Domain的检查
		Register 3: Domain access control 和 页表项中的 Domain[8:5]  定义了 四种情况,其中一种情况要 继续进行 Access permissions 的 检查
	Access permissions 的 检查
		当前执行指令时的特权级 和 页表项中的AP[11:10] 定义了四种情况

根据 Attributes 和 当前状态 确定权限
  • Attributes 中的 Domain[8:5] , 在第一阶段 和 Register 3: Domain access control 定义四种行为
Domain[8:5] 确定是 16个域中的哪一个(0开始),如果为N,则Register 3中的[2*N-1:2*N-2]的值可以作为 Table B4-2 中的 Value,来 索引 Access types

在这里插入图片描述

  • Attributes 中的 AP[11:10] , 在第二阶段 和 当前执行指令时的特权级 定义四种行为
VMSAv6不赞成使用S和R位。
对于不支持APX位的页表格式,APX=0。
	First-level descriptor format (VMSAv6, subpages enabled) 中的 Section 不支持 APX 
特权级 
	请参考 [处理器架构 () armv4v5v6 架构参考手册(1) 总介及cpu架构](https://blog.csdn.net/u011011827/article/details/103110736),在其中搜索关键字 特权

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章