- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
内存管理单元编程实例
一、MMU初步了解?? ?概念:内存管理单元(memory management unit),简称MMU?? ?主要作用:负责虚拟地址到物理地址之间的转换?? ??? ??? ? 提供硬件机制的内存访问权限检查?? ??? ?发展由来:由于程序的大小逐步发展到大于内存的大小这一问题的出现?? ?导致了虚拟存储器的产生,虚拟存储器的基本思想是:数据、堆栈的总?? ?大小可以超越物理存储器(大于内存的程序在执行的时候只将其中需要?? ?运行的一部分调入内存,其他部分在外部存储器中)。由于虚拟存储器?? ?的出现导致cpu发出的虚拟地址不能够直接送至地址总线,这是就需要?? ?一个将虚拟地址转换物理地址的设备,它就是内存管理单元(MMU)。?? ??? ?32位处理器最大可以虚拟出的地址范围是0~0xffffffff?? ?二、工作特点?? ?1、没有启用MMU时候,cpu发出的地址是物理地址?? ?2、启用MMU后,cpu发出的是虚拟地址?? ?注:另一说法其实是cpu总发出虚拟地址,只不过是在没有进行空间映射?? ?时候,虚拟地址到物理地址的转换是一种线性转换的机制。?? ??? ?虚拟地址到物理地址的转换方法一般有两种:?? ?其一、使用一个固定的函数式?? ?其二、建立一个表格进行映射。(页表由一个个条目组成)?? ??? ?ARM cpu使用页表进行地址转换的过程:?? ?1)根据给定的虚拟地址找到一级页表中的条目?? ?2)如果此条目是段描述符,直接返回物理地址,转换结束?? ?3)否则此条目是二级页表,继续在二级表中查找下一条目?? ?4)如果此条目是页描述符,则返回物理地址,转换结束?? ?5)其他的情况,则转换出错?? ??? ?注:有上述的过程不难知道一般的ARM处理器最多用到二级页表。?? ?三、TLB了解?? ?概念:转译查找缓存(translation lookaside buffer)?? ?作用:解决MMU每次转换都需查表,降低了cpu性能的问题?? ?工作过程:当cpu发出一个虚拟地址的时候,MMU会首先访问TLB,如果?? ?在TLB中有这一虚拟地址的描述符,则直接使用该描述符进行地址转换?? ?。否则MMU访问页表找到对应的描述符在进行地址转换和权限检查,同时?? ?使用一定的算法将这一描述填入TLB中。?? ?四、Cache了解?? ?概念:在主存和cpu的寄存器之间的告诉小容量存储器,简称高速缓冲存?? ?储器,也有的将其叫做快取?? ?作用:将正在执行的指令地址附近的一部分指令或者数据从主存调入这?? ?个存储器,供cpu在一段时间内使用,从而提高程序运行的速度。?? ??? ?一般离cpu越近的cache速度越高,但是其容量一般比较小(按一级、二级?? ?cache来说,一级更高速,二级容量更大一些)?? ??? ?cache有指令快取(ICache)和数据快取(DCache)?? ?五、mmu编程实例:(实验平台mini2440)?? ?下面的实验是将GPB的地址0射到0xA0000000,然后再对虚拟地址?? ?进行操作,点亮led的实例,实验目的在于学习mmu的页表建立,以及的段址映射?? ?的方法。?? ??? ?1、启动代码(start.S)?? ?.text?? ?.global _start?? ?_start:?? ??? ?ldr sp, =0x4096?? ??? ??? ?@以下是c程序,运行前需要设置栈指针?? ??? ?bl? disable_watch_dog?? ??? ?bl? memsetup?? ??? ?bl? copy_2th_to_sdram?? ??? ?bl? create_page_table?? ??? ?bl? mmu_init?? ??? ?ldr sp, =0xB4000000?? ??? ?ldr pc, =0xB0000000???? @这个地址很重要,他必须是第二阶段代码的重载地址(运行地址)?? ?halt:?? ??? ?bl? halt?? ??? ??? ?2、初始化事件(init.c)?? ?
/*
?*?init.c:?进行一些初始化,在Steppingstone中运行
?*?它和head.S同属第一部分程序,此时MMU未开启,使用物理地址
?*/?
/*?WATCHDOG寄存器?*/
#define WTCON?(*(volatile unsigned long?*)0
/*?存储控制器的寄存器起始地址?*/
#define
文档评论(0)