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:粗页表(Coarse page table)

  [31:10]为粗页表基址,此描述符低10位填充0后就是一个二级页表的物理地址,二级页表含256个条目([9:2]),

  每个条目表示4KB大小的物理地址,一个粗页表表示1MB物理地址。

10:段(Section)

  [31:20]为段基址,此描述符低20位填充0后就是一块1MB物理地址空间的起始地址。MVA[19:0]用来在这1MB空间中寻址。

  以段的方式进行映射时,虚拟地址MVA到物理地址PA的转换过程如下:

  ①页表基址寄存器位[31:14]和MVA[31:20]组成一个低两位为0的32位地址,MMU利用这个地址找到段描述符

  ②取出段描述符的位[31:20](段基址),它和MVA[19:0]组成一个32位的物理地址(这就是MVA对应的PA)

11:细页表(Fine page table)

  [31:12]为细页表基址(Fine page table base address),此描述符的低12位填充0后,就是一个二级页表的物理地址。

  此二级页表含1024个条目([11:2]),其中每个条目表示大小1kb的物理地址空间,一个细页表表示1MB物理地址空间。

二级页表:

以大页(64KB),小页(4KB)或极小页(1KB)进行地址映射时,需要用到二级页表,二级页表有粗页表、细页表两种,二级页表描述符格式如下:

由于本次程序只使用一级页表,以段的方式进行地址映射。所以二级页表的4种情况就不总结了,看书。

内存的访问权限检查:

它决定一块内存是否允许读、是否允许写。这由CP15寄存器C3(域访问控制)、描述符的域(Domain)、CP15寄存器C1的R/S/A位、描述符的AP位共同决定。

“域”决定是否对某块内存进行权限检查,“AP”决定如何对某块内容进行权限检查。

S3C2440有16个域,CP15寄存器C3中每两位对应一个域(一共32位)。

00:无访问权限(任何访问都将导致“Domain fault”异常)

01:客户模式(使用段描述符、页描述符进行权限检查)

10:保留(保留,目前相当于“无访问权限”)

11:管理模式(不进行权限检查,允许任何访问)

Domain占用4位,用来表示内存属于0-15,哪一个域,例如:

粗页表中的“Domain”为0b1010,表示1MB内存属于域10,如果域访问控制寄存器的[21:20]等于0b01,则使用描述符中的"AP"位进行权限检查,如果等于0b11,则不进行权限检查,允许任何访问。

AP、ap3、ap2、ap1、ap0结合CP15寄存器C1的R/S位,决定如何进行访问检查。

下表为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 保留 - -

转译查找缓存(Translation Lookaside Buffers, TLB)

Cache:

S2C2440内置了指令Cache(ICaches)、数据Cache(DCaches)、写缓存(Write buffer),需要用到描述符中的C位(Ctt)和B位(Btt)。

S3C2440 MMU、TLB、Cache的控制指令:

S3C2440除了ARM920T的CPU核心外,还有若干个协处理器,用来帮助主CPU完成一些特殊功能。对MMU、TLB、Cache等的操作涉及到协处理器。

<MCR|MRC> {cond} p#,<expression1>,Rd,cn,cm{,<expression2>}

MRC            //从协处理器获得数据,传给ARM920T CPU核心寄存器

MCR            //数据从ARM920T CPU核心寄存器传给协处理器

{cond}           //执行条件,省略时表示无条件执行

p#              //协处理器序号

<expression1>    //一个常数

Rd             //ARM920T CPU核心的寄存器

cn和cm               //协处理器中的寄存器

<expression2>   //一个常数

其中,<expression1>、cn、cm、<expression2>仅供协处理器使用,它们的作用如何取决于具体的协处理器。

时间: 2024-08-07 00:17:51

Mini2440内存管理单元MMU的相关文章

内存管理单元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

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

1.内存的访问权限检查 内存的访问权限检查是MMU的主要功能之一,简单地说,它就是决定一块内存是否允许读.是否允许写.这由CP15寄存器C3(域访问控制).描述符的域(Domain).CP15寄存器C1的R/S/A位.描述符的AP位等联合作用. CP15寄存器C1中的A位表示是否对地址进行对齐检查,所谓对齐检查就是访问字时地址是否为4字节对齐,访问半字时地址是否2字节对齐,如果地址不对齐则产生"Alignment fault"异常.无论MMU是否被开启,都可以进行对齐检查.CPU读取指

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

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

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.即多个应用程序在同时竞争使用这块物理内存,其必然会导致某个时刻只存在程序的某个片段在执行,也即是所有程序代码和数据分时复用物理内存空间-这就是内存管理单元(

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

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

02-JZ2440裸机学习之MMU内存管理单元【转】

本文转载自:http://blog.csdn.net/fengyuwuzu0519/article/details/66479248 版权声明:本文为博主原创文章,转载请注明http://blog.csdn.net/fengyuwuzu0519. 1.MMU定义: MMU是Memory Management Unit的缩写,中文名是内存管理单元,它是中央处理器(CPU)中用来管理虚拟存储器.物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权,多用户多进程操作系