浅谈ARM MMU工作原理和过程
ARM中MMU地址转换理解(转)

ARM中MMU地址转换理解(转)⾸先,我们要分清ARM CPU上的三个地址:虚拟地址(VA,Virtual Address)、变换后的虚拟地址(MVA,Modified Virtual Address)、物理地址(PA,Physical Address)启动MMU后,CPU核对外发出虚拟地址VA,VA被转换为MVA供MMU使⽤,在这⾥MVA被转换为PA;最后通过PA读写实际设备MMU的作⽤就是负责虚拟地址(virtual address)转化成物理地址(physical address)。
32位的CPU的虚拟地址空间达到4GB,在⼀级页表中使⽤4096个描述符来表⽰这4GB的空间,每个描述符代表1M的虚拟地址,要么存储了它的对应物理地址的起始地址,要么存储了下⼀级页表的地址。
使⽤MVA[31:20]来索引⼀级页表(4096个描述符)(因为全⽤MVA的⾼12位来索引,因此⼤⼩为 2^12 = 4096)由协处理器CP15中的寄存器C2(⾼18位,即[31:14]为转换表基地址,低14位为0)为⼀级转换表基地址,指向2^14=16KB整除的存储器即16K对齐,这个存储区称为⼀级转换表;MVA的⾼12位,即位[31:20]作为⼀级转换表的地址索引,因此⼀级转换表具有2^12=4096项,每⼀项的地址为32位,最⾼的18位[31:14]为寄存器C2的⾼18位,中间12位为MVA的⾼12位[31:20],最低2位为0b00。
每⼀项的内容称为⼀个描述符,在段(Section)下,⼀级描述符的⾼12位为⼤⼩为1MB的段基地址,段内地址(偏移地址)为MVA的低20位,即段内每个存储器的地址是这样组成:⾼12位为⼀级描述符的⾼12位,低20位MVA的低20位。
这样,借助于寄存器C2和⼀级描述符,将⼀个MVA转换成⼀个PA。
(在这⾥⼀定要注意:MVA的⾼12位是⽤来索引4096个项的,然后使⽤项的内容(即描述符)的⾼12位为段的⾼12位,类似于指针⾥⾯存放地址,4096项类似指针,描述符类似指针⾥⾯的内容)虚拟地址(注意:是⼀个确定的地址,不是⼀个空间)被MMU分成2个部分,第⼀部分是4096页号索引(descriptor index)即⽤选择4096(2^12)个号中的某个页号,⽐喻description index为768,页号768中保存的是物理地址的某个页框的起始地址(0x300),第⼆部分则是相对于section base(0x300)为起始地址空间为1M的偏移量(offset)(如下图)例如:假设现在执⾏指令MOV REG, 0x30100013,虚拟地址的⼆进制码为00110000 00010000 00000000 00010011,前12位是Descriptor Index = 2^9+2^8+1 = 769,找到769项对应的内容0x301,偏移量为0000 00000000 00010011=13,那么段地址为0x3000000D。
ARM存储管理单元MMU和存储保护单元MPU

ARM存储管理单元MMU和存储保护单元MPU展开全文MMU提供的一个关键服务是,能使各个任务作为独立的程序在其自己的私有存储空间运行.地址转换过程允许运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置.区域可以是活跃的,也可以是睡眠的:活跃区域包含当前系统正在使用的代码或数据;睡眠区域包含当前不使用,但可能在短时间内变为活跃的代码或数据.睡眠区域是被保护的,因此当前正在运行的任务是不能访问的.MPU和MMU的主要区别是,MMU中增加了额外的硬件,以支持虚存.一个重定位寄存器只能转换一块存储空间.这块存储空间的大小由虚拟地址的偏移量部分所占的位数所决定.ARM的MMU中临时存放转换数据的一组重定位寄存器实际上是一个由64个重定位寄存器组成的全相联cache.这个cache就是转换旁路缓冲器--TLB.TLB缓存最近被访问的页的转换数据.MMU 还使用主存中的表来存放描述系统中用到的虚拟存储器映射数据,这些转换数据的表就是页表.页表中的每个项代表了将虚拟存储器的一个页转换到物理存储器的一个页帧所需要的所有信息.在MMU中,区域被定义为一组页表的集合,并作为虚存中的连续页完全由软件控制.除了L1一级页表外,所有其他的页表都代表虚存的1MB空间.如果一个区域的大小大于1MB或者它跨过页表的1MB边界地址,那么就必须使用一组页表来描述这个区域.页表可以驻留在存储器中,而不必映射到MMU硬件.当在2个应用程序任务间实现上下文切换时,处理器其实要发生多次上下文切换.它先从用户模式任务切换到内核模式任务,以处理准备运行下一个应用程序任务时的上下文数据的移动;然后,它从内核模式任务切换到下一个上下文的新的用户模式任务.MMU在转换一个地址时失败,就会产生一个中止异常.MMU只有在转换失败,权限错误和域错误时,才会中止.L1住页表包含2种类型的页表项:保存指向二级页表起始地址指针的页表项和保存用于转换1MB页的页表项.L1页表也称为段页表.当L1页表作为页目录时,其页表项包含的是1MB虚拟空间的L2粗页表或L2细页表指针;当L1页表用于转换一个1MB的段时,其页表项包含的是物理存储器中1MB页帧的首地址.目录页表项和1MB的段页表项可以共存于L1主页表.CP15:c2寄存器保存转换表基地址TTB--指向L1主页表在虚存中的位置.TLB只支持两种类型的命令:清除TLB和锁定TLB中的转换数据.存储器访问时,MMU将虚拟地址的一部分与TLB中的所有值进行比较.如果TLB中已有所要的转换数据,即为一次TLB命中,则由TLB提供物理地址的转换数据.如果TLB中不存在有效的转换数据,即为一次TLB失效,则MMU会由硬件自动处理TLB失效,通过主存中的页表搜索有效的转换数据,并将其装入TLB的64行的一行.如果TLB中的某一行是锁定的,则当TLB清除命令发出时,它仍然保留在TLB中.在受保护的系统中,主要有两类资源需要监视:存储器系统和外围设备.存储器中对区域的访问可以是读/写,只读或不可访问,基于当时的处理器模式--管理模式或用户模式,还有一些附加的权限.区域还有控制cache和写缓冲器属性的cache写策略.当处理器访问主存的一个区域时,MPU比较该区域的访问权限属性和当时的处理器模式.如果请求符合区域访问标准,则MPU允许内核读/写主存;如果存储器请求导致存储器访问违例,则MPU产生一个异常信号.区域与内核是冯.诺依曼结构还是哈佛结构无关.每个区域通过0~7的号码来标识和引用.区域的属性如下:(1)区域可以相互重叠;(2)每个区域都分配有一个优先级,该优先级与分配区域的权限无关;(3)当区域重叠时,具有最高优先级的区域的属性可以覆盖其他区域的属性,优先级仅作用于重叠部分的地址;(4)区域的起始地址必须是其大小的倍数;(5)区域的大小可以是4KB~4GB之间的任何2的乘幂;(6)访问所定义区域外的存储器将产生异常.如果是内核预取指令,则MPU产生预取指令中止异常;如果是存储器数据请求,则产生数据中止异常.在启用存储器保护单元之前,必须至少定义一个数据区域和一个指令区域,而且必须在启用cache和写缓冲器之前(或同时)启用存储器保护单元.控制器通过设置CP15的主寄存器c1~5来配置MPU.通过配置寄存器c2和c3来设置区域的cache和写缓冲器的属性,寄存器c5控制区域的访问权限,在寄存器c6里有8个或16个次寄存器用来定义每个区域的大小和位置.初始化MPU,cache和写缓冲器需要以下步骤:(1)使用CP15:c6来定义指令和数据区域的大小和位置(2)使用CP15:c5来设置每个区域的访问权限(3)分别使用CP15:c2和CP15:c3来设置每个区域的cache和写缓冲器属性(4)使用CP15:c1来使能cache和MPU每个内核有3个CP15寄存器用来控制区域的cache和写缓冲器属性.其中CP15:c2:c0:0和CP15:c2:c0:1两个寄存器保存D- cache和I-cache区域属性;第三个寄存器,CP15:c3:c0:0用于保存区域写缓冲器属性,并应用于存储器数据区域.当配置数据区域时,区域的cache位和写缓冲器位一起决定区域的策略.写缓冲器位有2个用途:使能和禁止区域的写缓冲器和设置区域的cache策略.区域的cache位控制写缓冲器位的作用.当cache位为0时,写缓冲器位为1,则使能写缓冲器;写缓冲器位为0,则禁用写缓冲器.当cache位为1时,cache和写缓冲器都被使能,此时写缓冲器位决定cache策略.若写缓冲器位为0,则区域使用直写策略;若写缓冲器位为1,则区域使用回写策略.。
嵌入式MMU

MMU简介嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如FLASH,SRAM,SDRAM,ROM等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使用虚拟地址对其进行读写;系统中,需引入存储保护机制,增强系统的安全性。
为适应如此复杂的存储体系要求,ARM处理器中引入了存储管理单元来管理存储系统。
在ARM存储系统中,使用MMU实现虚拟地址到实际物理地址的映射。
为何要实现这种映射?首先就要从一个嵌入式系统的基本构成和运行方式着手。
系统上电时,处理器的程序指针从0x0(或者是由0Xffff_00 00处高端启动)处启动,顺序执行程序,在程序指针(PC)启动地址,属于非易失性存储器空间范围,如ROM、FLASH等。
然而与上百兆的嵌入式处理器相比,FLASH、ROM等存储器响应速度慢,已成为提高系统性能的一个瓶颈。
而SDRAM具有很高的响应速度,为何不使用SDRAM来执行程序呢?为了提高系统整体速度,可以这样设想,利用FLASH、ROM对系统进行配置,把真正的应用程序下载到SDRAM中运行,这样就可以提高系统的性能。
然而这种想法又遇到了另外一个问题,当ARM处理器响应异常事件时,程序指针将要跳转到一个确定的位置,假设发生了IRQ中断,PC将指向0x18(如果为高端启动,则相应指向0 vxffff_0018处),而此时0x18处仍为非易失性存储器所占据的位置,则程序的执行还是有一部分要在FLA SH或者ROM中来执行的。
那么我们可不可以使程序完全都SDRAM中运行那?答案是肯定的,这就引入了MMU,利用MMU,可把SDRAM的地址完全映射到0x0起始的一片连续地址空间,而把原来占据这片空间的FLASH或者ROM映射到其它不相冲突的存储空间位置。
例如,FLASH的地址从0x0000_0000-0x 00ff_ffff,而SDRAM的地址范围是0x3000_0000-0x31ff_ffff,则可把SDRAM地址映射为0x0000_0000-0x1fff_ffff而FLASH的地址可以映射到0x9000_0000-0x90ff_ffff(此处地址空间为空闲,未被占用)。
简单介绍MMU的工作原理

简单介绍MMU的工作原理
MMU(Memory Management Unit,内存管理单元)是计算机系统中的一种硬件设备,负责将逻辑地址转换为物理地址,实现虚拟内存和物理内存之间的映射和管理。
MMU的工作原理如下:
1. 虚拟地址转换:当CPU访问一个地址时,MMU首先接收到这个地址(即虚拟地址),然后根据内部的地址映射表将其转换为物理地址。
2. 地址映射表:MMU内部有一个地址映射表,它记录了虚拟地址和物理地址之间的对应关系。
这个表中的每一项称为页表项。
通常,虚拟地址被划分为若干个页面,而物理地址也被划分为相同的大小的内存块。
每个页表项记录了虚拟页面和物理页面之间的对应关系。
3. 地址转换:MMU根据地址映射表中的对应关系,将虚拟地址中的页号(Page Number)转换为物理地址中的页号,以及虚拟地址中的页面内偏移(Page Offset)转换为物理地址中的页面内偏移。
4. 访问权限控制:MMU还会根据地址映射表中的附加信息,如权限位,来判断对于特定的虚拟地址,是否允许对其进行读、写、执行等操作。
如果权限不足,则会触发异常或终止进程。
通过MMU的工作,操作系统可以实现虚拟内存的概念。
虚拟内存可以将大于物理内存的程序部分存储在辅助存储设备上,而只将当前需要的部分调入物理内存中,从而实现更高效的内存管理和更大的可用内存空间。
BCM芯片MMU浅析

MMU浅析1.MMU是什么?MMU(Memory Management Unit)内存管理单元,位于bcm芯片的入口逻辑和出口逻辑中间,负责包的缓存和调度。
芯片接收到数据包之后先存储在缓存中,即CBP(cell buffer pool),然后再发送时加以调度。
一个芯片所拥有的cell个数是有限制的,每个cell大小是128byte,每个包进入芯片后占用一个或者多个cell,例如一个64byte到128byte大小的包就占用一个cell,一个1408byte到1536byte的包就占用12个cell,每个芯片cell总大小不一,如何把这些有限的cell分配和使用是提高BCM芯片转发能力和效率的关键。
2.MMU工作机制MMU在芯片中主要有两种分配方式,动态和静态,每个出端口有8个cos,每个cos有使用的静态阈值,当然也有公共部分的cell,同时每个端口也有公共cell 的动态阈值。
对于某个cos,在使用的cell超过静态阈值的时候就需要共享动态cell,如果使用的动态cell超过本端口cell的共享阈值或者整个动态区的cell使用超过阈值,那么这个端口就会进入hold状态,造成丢包。
每个入端口也有自己的cell限制阈值,当入端口的数据包计数超过该端口的阈值之后,端口就会进入阻塞态,就会发送pause帧。
芯片的buffer是有限的,一个包在入口被计数,在出口也被计数。
3.MMU寄存器PORT_MIN:针对入端口,每个端口所拥有cell的最小保证数量,静态PORT_SHARED_LIMIT:入端口,每个端口所能使用的共享区cell的数量,超过此阈值,端口就会发pause 帧TOTAL_SHARED_LIMIT:公共区的动态cell个数限制OP_BUFFER_SHARED_LIMIT:针对出端口,出口所能共享到的cell个数OP_QUEUE_CONFIG:配置出口cos的寄存器,其中Q_MIN是配置每个出口cos所拥有的最小保证数量,静态OP_SHARED_LIMIT:每个出口8个cos所能共享的cell阈值还有其他很多可配置寄存器,下面以56820芯片为例来说明具体使用。
ARM的MMU和CACHE

Cache在嵌入式系统中作用
通常ARM的主频为几十MHz,甚至上百MHz,而一般存 储器存储周期为100ns-200ns,这样指令和数据存放在主存 器中将会严重制约整个系统的性能,Cache在嵌入式系统的 作用是最大限度利用Cache的结构的优点缩短平均访存时间, 进而提高系统整体性能。Cache全部是通过硬件实现其功能, 则对于应用程序员是透明的,通常Cache配合写缓冲器一起 使用可以更有效提高访存效率。 虽然Cache和写缓冲器可以提高系统的整体性能,但是 也同时带来不确定的隐患,由于Cache和主存的不一致可能 带来执行结果差错,并且由于每次执行代码的命中率不同带 来代码执行时间的差异。
参考书籍: 《ARM嵌入式系统开发-软件设计与优化》 《ARM体系结构与编程》
Cache两个基本操作是清除(flush)和清理(clean)。 清除就是清除Cache中的数据,即清零相应Cache 行的有效位(valid bit)。 清除就是将被污染数据强行写到主存中,并把 Cache行中的脏位(dirty bit)清零。
MMU相关知识和使用
1. 2.
什么是MMU MMU结构
第二级描述是大小页的基地址: 1、位[1-0]代表访问类型 2、C、B表示可cache和可写缓冲 3、APx表示区域访问权限 4、高位表示访问的物理基地址 其中 大页定义64K的页帧属性,一共有16项 小页定义4K的页帧属性,一共有256项 微页定义1K页帧属性,一共有1024项
转换旁路缓冲器—page
Cache可分为逻辑Cache和物理Cache,逻辑 Cache使用虚拟地址进行索引,物理Cache使用 MMU转换后的物理地址进行索引。
ARM中的Cache行内包括:目录存储段(directory store)、状态信息 段(status information)和数据项段(data section)。 目录存储段记录Cache行在主存中的位置,也称为标签(tag) 数据项段存储从主存复制来的信息 状态信息段记录当前Cache状态信息
ARM存储系统MMU

编码 0b00 0b01
访问类型 没有访问权限 客户类型
0b10 保留 0b11 管理者权限
含义 这时访问域将产生访问失效
根据页表中地址变换条目的访问权限控制位决定是否 允许特定的存储访问。 将产生不可预知的结果 不会产生访问失效
23
关于快表的操作
1. 使无效快表的内容(由CP15中的C8控制)
指令 MCR p15,0,Rd,c8,c7,0 MCR p15,0,Rd,c8,c7,1 MCR p15,0,Rd,c8,c5,0 MCR p15,0,Rd,c8,c5,1 MCR p15,0,Rd,c8,c6,0 MCR p15,0,Rd,c8,c6,1
不能访问
0b00 0 1 只读
只读
0b00 1 1 不可预测 不可预测
0b01 X X 读/写 不能访问
0b10 X X 读/写 只读
0b11 X X 读/写 读/写
22
MMU中的域
域是段、大页和小页的集合。ARM 结构支持16 个域。
对域的访问由域访问控制寄存器( CP15的寄存器C3 )的两 个位字段控制。即,C3中的每2位控制一个域的访问控制特 性。其编码及含义如下表:
Rd 0 虚拟地址 0 虚拟地址 0 虚拟地址
含义 使无效指令和数据Cache 使无效整个Cache中的单个地址变换条目 使无效指令Cache 使无效指令Cache中的单个地址变换条目 使无效数据Cache 使无效数据Cache中的单个地址变换条目
2. 锁定快表的内容(由CP15中的C10控制)
24
CP15中的寄存器C1
F(bit[10]): 由生产商定义。 Z(bit[11]): 使能跳转预测, 0 = 禁止, 1 = 使能。 I(bit[12]): 当数据和指令cache分开时,使能指令cache。 0 = 禁
mmu 的工作原理

mmu 的工作原理介绍:在计算机科学中,存储器管理单元(Memory Management Unit, MMU)是一种硬件设备,它管理着计算机的物理内存并将虚拟内存地址转换成物理内存地址。
当应用程序请求访问某个虚拟内存地址时,MMU 就会根据内存页面表进行地址映射,并将相应的物理地址返回给 CPU。
工作原理:MMU 的工作原理可以分为以下几个步骤:1. 地址转换首先,当应用程序请求访问某个虚拟地址时,CPU 会将该地址传递给 MMU,然后 MMU 会将该地址与一个内存地址映射表进行比较。
这个内存映射表是由操作系统在启动时创建的。
2. 缺页错误处理如果 MMU 没有找到相关的物理地址,则会发生缺页错误。
此时,操作系统会寻找相应的虚拟地址的页面,并将其加载到物理内存中。
之后,MMU 会再次进行地址映射,这次应该就能找到相应的物理地址了。
3. 映射缓存为了加速地址转换的速度,MMU 通常会采用一个映射缓存。
这个缓存保存了最近使用过的页面映射,以便在下一次访问时能够更快地找到相应的物理地址。
4. 权限检查在地址转换时,MMU 会进行一些权限检查,以确保当前用户有权访问该地址。
如果用户没有该地址的访问权限,则 MMU 会触发一个内存访问异常。
总结:MMU 内存管理单元是计算机硬件中的一部分,它管理着计算机的物理内存并将虚拟内存地址转换成物理内存地址。
MMU 的工作原理可以分为地址转换、缺页错误处理、映射缓存、权限检查等多个方面,它通过这些步骤来完成地址转换工作。
MMU 的存在为应用程序提供了显式地址转换抽象,为大型操作系统提供了基础,并且是操作系统能够在统一地址空间下为多个应用程序提供有效内存管理的基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浅谈ARM MMU工作原理和过程
一、MMU的产生许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。
但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之膨胀起来,终于一个难题出现在程序员的面前,那就是应用程序太大以至于内存容纳不下该程序,通常解决的办法是把程序分割成许多称为覆盖块(overlay)的片段。
覆盖块0首先运行,结束时他将调用另一个覆盖块。
虽然覆盖块的交换是由OS完成的,但是必须先由程序员把程序先进行分割,这是一个费时费力的工作,而且相当枯燥。
人们必须找到更好的办法从根本上解决这个问题。
不久人们找到了一个办法,这就是虚拟存储器(virtual memory).虚拟存储器的基本思想是程序,数据,堆栈的总的大小可以超过物理存储器的大小,操作系统把当前使用的部分保留在内存中,而把其他未被使用的部分保存在磁盘上比如对一个16MB的程序和一个内存只有4MB 的机器,OS通过选择,可以决定各个时刻将哪4M的内容保留在内存中,并在需要时在内存和磁盘间交换程序片段,这样就可以把这个16M的程序运行在一个只具有4M内存机器上了。
而这个16M的程序在运行前不必由程序员进行分割。
任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。
这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G)而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (64T),这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。
与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集,这里举一个最简单的例子直观地说明这两者,对于一台内存为256MB的32bit x86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x000000000~0x0FFFFFFF(256MB)。
在没有使用虚拟存储器的机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物。