自己学驱动14——内存管理单元MMU(二)

1.内存的访问权限检查

内存的访问权限检查是MMU的主要功能之一,简单地说,它就是决定一块内存是否允许读、是否允许写。这由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位等联合作用。

CP15寄存器C1中的A位表示是否对地址进行对齐检查,所谓对齐检查就是访问字时地址是否为4字节对齐,访问半字时地址是否2字节对齐,如果地址不对齐则产生"Alignment fault"异常。无论MMU是否被开启,都可以进行对齐检查。CPU读取指令时不进行对齐检查,以字节为单位访问时也不进行对齐检查。对齐检查在MMU的权限检查和地址映射前进行。

内存的访问权限检查可以概括为以下两点:

(1)"域"决定是否对某块内存进行权限检查。

(2)"AP"决定如何对某块内存进行权限检查。

2440中有16个域,CP15寄存器C3中每两位对应一个域,用来表示这个域是否进行权限检查,具体如表1所示。

表1 域访问控制寄存器中每两位数据的含义



含义


说明


00


无访问权限


任何访问都将导致“Domain Fault”错误


01


客户模式


使用段描述符、页描述符进行权限检查


10


保留


保留,相当于“无访问权限”


11


管理模式


不进行权限检查,允许任何访问

段描述符中的"Domain"占据4个bit,用来表示这块内存属于上面定义的16个域中的哪个。举例:

段描述符中的"Domain"为0b0000时,表示这1M内存属于域0,如果域访问控制寄存器(C3)的位[1:0](C3一共对应16个域,位[1:0]对应第0个域)等于0b00,则访问这1MB空间时都会产生"Domain fault"的异常,如果域访问控制寄存器的位[1:0]等于0b11,则使用描述符中的"AP"位进行权限检查。

二级页表描述符中的"ap0~ap3"与段描述符中的"AP"结合CP15寄存器C1的R/S位,决定如何进行访问权限检查。首先说明,段描述符中的"AP"控制整个段(1MB)的访问权限:大页描述符中的每个"apx"控制一个大页(64KB)中1/4内存的访问权限,即"ap3"对应大页高端的16KB,"ap0"对应大页低端的16KB;小页描述符与大页描述符相似,每个"apx"控制一个小页(4KB)的1/4内存的访问权限;极小页中的"ap"就控制着整个极小页的访问权限。AP位、S位和R位的组合,可以产生多种访问权限,具体如表2所示。

表2 AP位、S和R位的访问权限对照表


AP


S


R


特权模式


用户模式


说明


00


0


0


无访问权限


无访问权限


任何访问都产生“Permission fault”


00


1


0


只读


无访问权限


在超级权限下可以进行读操作


00


0


1


只读


只读


写操作产生“Permission fault”


00


1


1


保留


-


-


01


X


X


读/写


无访问权限


只允许在超级模式下访问


10


X


X


读/写


只读


在用户模式下进行写操作将产生“Permission fault”异常


11


X


X


读/写


读/写


在所有模式下允许任何访问


XX


1


1


保留


-


-

2.TLB的作用

从虚拟地址到物理地址的转换过程可知:使用一级页表进行地址转换时,每次读/写数据需要访问两次内存,第一次访问一级页表获得物理地址,第二次才是真正的读写数据;使用两级页表时需要3次访存。

利用程序执行时的局部性特性,通过使用一个高速、容量相对较小的存储器来存储近期用到的页表条目,这样可以大幅提高系统性能,这个存储器用来帮助快速地进行地址转换,称为"转译查找缓存"(TLB)。

使用TLB需要保证TLB中的内容与页表一致,在启动MMU之前、在页表中的内容发生变化后,尤其要注意。

时间: 2024-10-03 23:16:38

自己学驱动14——内存管理单元MMU(二)的相关文章

自己学驱动13——内存管理单元MMU(虚拟地址和物理地址)

1.MMU简介 MMU负责完成虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查.现代的多用户多进程操作系统通过MMU使得各个用户进程都拥有自己独立的地址空间:地址映射功能使得各个进程拥有"看起来"一样的地址空间,而内存访问权限的检查可以保护每个进程所使用的内存不会被其他进程所破坏.MMU增加了底层的复杂性,但是为上层程序开发提供了极大的方便. 2.虚拟地址与物理地址 虚拟地址最终需要转换为物理地址才能读写实际的数据,这通过将虚拟地址空间.物理地址空间划分为同样大小的一块块空间

内存管理单元MMU

一. .text .global _start _start: ldr sp, =4*1024 @调用C函数之前,要设置栈指针:栈的作用:保存上下文,传递参数,保存临时变量:因为堆栈向下生长,所以要将栈指针设置到地址空间的顶层:总共可用的只有4K,也就是4*1024 bl close_watchdog @关看门狗 bl mem_ctrl_set @设置存储控制器 bl copy_code_sdram @复制代码到sdram bl set_page @设置页表 bl start_mmu @启动mm

Mini2440内存管理单元MMU

一级页表: TTB base代表一级页表的地址,将它写入协处理器CP15的寄存器C2(称为页表基址寄存器)即可,一级页表的地址是16K对齐,使用[31:14]存储页表基址,[13:0]为0.一级页表使用4096个描述符来表示4GB空间,每个描述符对应1MB的虚拟地址,要么存储它对应的1MB物理空间的起始地址,要么存储下一级页表的地址.使用MVA[31:20]来索引一级页表(2^12=4096个描述符),得到一个描述符,每个描述符占4个字节. 一级描述符低两位: 00:无效(Fault) 01:粗

MMU内存管理单元

arm-linux学习-(MMU内存管理单元) 什么是MMU MMU(Memory Management Unit)主要用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权.多任务多进程操作系统.(来自百度百科,对其几个点不熟悉,因此可以只考虑加粗部分) 发展历史 注意:学习一个知识点,很重要的一步是了解其为什么而存在?它的存在是为了解决什么问题?然后,在学习的过程中带着这些问题去理解.去思考. 在许多年以前,还是使用DOS或一些古老的操作系

关于内存管理单元须要掌握的相关知识

1.怎样将虚拟地址转换为物理地址, 2.MMU的内存訪问权限机制, 3.TLB,Catch和write buffer原理. ---------- 内存管理单元MMU的功能:将虚拟地址映射到物理地址,并提供内存訪问权限. 没启动MMU时.cpu核.cache,MMU和外设等全部部件使用的都是物理地址. 启动MMU后,cpu核发出虚拟地址.由MVA转换成物理地址供cache和MMU使用. 最后使用物理地址訪问实际设备. 问题: 为什么是从虚拟地址到物理地址的转换. NAND Flash控制器须要掌握

关于内存管理单元需要掌握的相关知识

1.如何将虚拟地址转换为物理地址, 2.MMU的内存访问权限机制, 3.TLB,Catch和write buffer原理. ---------- 内存管理单元MMU的功能:将虚拟地址映射到物理地址,并提供内存访问权限. 没启动MMU时,cpu核,cache,MMU和外设等所有部件使用的都是物理地址. 启动MMU后,cpu核发出虚拟地址,由MVA转换成物理地址供cache和MMU使用. 最后使用物理地址访问实际设备. 问题: 为什么是从虚拟地址到物理地址的转换. NAND Flash控制器需要掌握

SoC软件架构设计之二:内存管理单元的硬件设计实现

程序的大部分代码都可以在必要的时候才加载到内存去执行,运行完后可以被直接丢弃或者被其他代码覆盖.我们PC上同时跑着很多的应用程序,每个应用程序使用的虚拟地址空间几乎可以整个线性地址空间(除了部分留给操作系统或者预留它用),可以认为每个应用程序都独占了整个虚拟地址空间(字长是32的CPU是4G的虚拟地址空间),但我们的物理内存只是1G或者2G.即多个应用程序在同时竞争使用这块物理内存,其必然会导致某个时刻只存在程序的某个片段在执行,也即是所有程序代码和数据分时复用物理内存空间-这就是内存管理单元(

ARM4412的MMU内存管理单元

由于在裸板驱动的时候要中断>>异常>>MMU MMU是一个内存管理单元,在CP15协处理器里面,而CP15处理器是嵌入在ARM芯片里.功能是将虚拟地址映射到物理地址里面. 在使用MMU寄存器机制之前首先要配置寄存器.将寄存器的功能打开 映射的机制支持段模式1M,小段模式,小页模式(更精细) 000000-------1000000  rom的地址 TLB虚拟地址与物理地址缓存的对应关系 页表的产生:假如将4个G的虚拟地址映射到1G的物理地址,假如有100个线程同时使用表,此时,建立

MMU内存管理单元相关知识点总结

1.MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系统. 2.虚拟内存由来:许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序.但随着图形界面的兴起还有用户需求的不断增大,应用程序