已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
厦门大学本科毕业论文本科毕业论文(科研训练、毕业设计)题 目:基于ARM体系的虚拟机的构架实现姓 名:学 院:软件学院系:专 业:软件工程年 级:学 号:指导教师(校内): 职称: 年 月摘 要所谓虚拟机,实际上就是一种应用软件,他通过软件的模拟使得一些应用得以跨平台进行。ARM架构则是面向低预算市场设计的第一款RISC微处理器。ARM提供一系列内核、体系扩展、微处理器和系统芯片方案。而本文正是通过基于目前应用十分广泛的ARM CPU的虚拟机阐述如何实现一个基本的虚拟机。本文通过阐述虚拟机的基本原理和基本构架,和详细讨论每一个部件的具体实现来说明如何实现一个基于ARM CPU的虚拟机。虚拟机的实现是硬件模拟的软件实现。本文所讨论的问题是如何在PC平台上软件模拟ARM平台,而核心部分则是CPU、内存系统的模拟以及总线结构的程序接口。关键词:虚拟机 ARM CPU AbstractVirtual Machine(VM) in fact is the software that emulates another hardware platform different from current platform. The ARM is faces the low budget market designthe first section RISC microprocessor. ARM provides a series ofessences, the system expands, the microprocessor and the system chipplanThis article precisely through applies extremely widespreadARM CPU based on at present the hypothesized machine elaboration torealize basically hypothesized machine.This article through the elaboration hypothesized machine basicprinciple and the basic skeleton, with in detail discusses each partspecifically to realize showed how realizes hypothesized based on ARMCPU machine.The VM realization is the software realization whichthe hardware simulates. This article discusses how does the questionsoftware simulate the ARM platform in the PC platform, but the coreare partial is CPU, the memory system simulation as well as the mainline structure procedure connection.Key words: Virtual machine, ARM CPU 目录1引言52总体设计73详细设计83.1.ARM体系概述83.1.1.关于ARM83.2.ARM处理器93.2.1.什么是ARM?什么是ARM7?93.2.2.ARM的CPU寄存器103.3.内存与IO映射113.4.具体的模拟实现113.4.1.CPU、内存与IO的具体信息113.4.2.软件结构113.4.3.接口123.4.4.简单的界面143.4.5.模拟线程153.4.6.图形显示163.4.7.HEX文件格式174实现结果205 致谢语246 参考文献25Directory1Introduction62Overall design73Detailed design83.1.ARM System83.1.1.About ARM83.2.ARM CPU93.2.1.What is ARM?What is ARM7?93.2.2.ARM CPU Register103.3.Memory And IO113.4.About EMU113.4.1.CPU、Memory And IO113.4.2.Structure113.4.3.Connection123.4.4.Contact surface143.4.5.Line regulation153.4.6.Graph163.4.7.About HEX174System realization205 Acknowledgement246 References25基于ARM体系的虚拟机的构架实现-ARM虚拟机的具体应用实例1 引言虚拟机是一种在一种硬件平台上模拟另一种硬件平台的软件。它能够提供与真实硬件相似的的行为。虚拟机的用途十分广泛,在硬件开发、操作系统开发、嵌入式开发、防病毒、娱乐等许多领域都发挥了重要的作用。虚拟机是一个软件系统。它的结构相似与真实硬件结构,但又不完全相同。虚拟机旨在模拟真实硬件的行为。设计和完成虚拟机需要同时拥有对软件和硬件的深入了解。虚拟机的开发和测试是十分复杂的工作。为了保证虚拟机行为的正确,通常要深入的确保每一个细节模拟的正确性。同时进行大量的测试确保软件质量。例如,在虚拟机中,CPU通常有数百句指令,每个指令都有对应的处理过程,。这些大量的处理过程需要足够的测试来保证其行为的正确。ARM体系的CPU是基于RISC构架的,并广泛用于嵌入式领域的。现有的ARM模拟软件有Skyeye,这是一款中国人开发的开源软件,目前已经十分成熟。由于虚拟机开发工作的庞大,我们的目的是开发出一个只具备少量核心成分的虚拟机。也不追求模拟的尽可能精确,但力图将虚拟机开发的要点体现出来。 由于技术水平、设计时间和开发兴趣等原因我们选择了在PC机上模拟运行SimpleArmulator。本人主要负责的部分就是如何将“ARM体系的虚拟机”具体化为“在PC平台上通过软件模拟”。2 总体设计整个虚拟机的结构看起来是这个样子的:图2.1虚拟机有一个CPU,一个MMU,若干个协处理器CP,及若干个外设IO。总体上看,这个结构不复杂。实际上,每个模块都包含大量的硬件行为模拟内容。CPU模块即模拟CPU行为的软件模块,主要的工作在于指令、异常和中断的模拟。也是整个结构的中心。CP接口及协处理模块接口,主要有供CPU调用的协处理器访问接口。CPU有15个协处理器接口,可以和15个协处理器合作。MMU是协处理器的一种,主要的工作是管理CPU对内存的访问。一般有一个MMU。CPU可以像对一般的协处理器那样对其进行访问来改变它的行为。CPU访问内存的操作由MMU提供,达到对CPU内存访问加以控制的目的。MMU也能访问CPU,比如对CPU触发一个内存故障异常。IO接口是MMU访问外设时,提供给MMU访问其寄存器的统一接口。主要提供依据地址访问其寄存器的接口。外设也需要访问CPU,比如对CPU触发一个硬件中断。各种不同的外设有不同的功能。有些外设的模拟复杂度不亚于模拟CPU,模拟的工作量十分大。完整的虚拟机,拥有各种外设。这里主要倾向于模拟ARM CPU,并以此构造出虚拟机。3 详细设计3.1. ARM体系概述在接下来的一段里,我们将了解一下ARM体系。3.1.1. 关于ARMARM是英国ARM开发的32位CPU核,全球厂商都可以获得授权生产ARM芯片。而且价格出乎意料得便宜,比如做网络应用的4510只需45元人民币,这样低端产品可以采用8051等8位单片机,而中高端产品采用ARM是非常明智的选择。 3.2. ARM处理器ARM是一个比较庞大的家族,在涉及到不同带的ARM处理器时,本文只着重讨论与我们具体化相关的ARM7 CPU,而对当前流行的ARM9的一些特点,由于篇幅和知识所限,暂不做介绍。3.2.1. 什么是ARM?什么是ARM7?ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软件。技术具有性能高、成本低和能耗省的特点。适用于多种领域,比如嵌入控制、消费/教育类多媒体、DSP和移动式应用等。 ARM将其技术授权给世界上许多著名的半导体、软件和OEM厂商,每个厂商得到的都是一套独一无二的ARM相关技术及服务。利用这种合伙关系,ARM很快成为许多全球性RISC标准的缔造者。 目前,总共有30家半导体公司与ARM签订了硬件技术使用许可协议,其中包括Intel、IBM、LG半导体、NEC、SONY、菲利浦和国民半导体这样的大公司。至于软件系统的合伙人,则包括微软、升阳和MRI等一系列知名公司。 ARM架构是面向低预算市场设计的第一款RISC微处理器。 ARM提供一系列内核、体系扩展、微处理器和系统芯片方案。由于所有产品均采用一个通用的软件体系,所以相同的软件可在所有产品中运行(理论上如此)。典型的产品如下。 CPU内核 -ARM7:小型、快速、低能耗、集成式RISC内核,用于移动通信。 - ARM7TDMI(Thumb):这是公司授权用户最多的一项产品,将ARM7指令集同Thumb扩展组合在一起,以减少内存容量和系统成本。同时,它还利用嵌入式ICE调试技术来简化系统设计,并用一个DSP增强扩展来改进性能。该产品的典型用途是数字蜂窝电话和硬盘驱动器。 -ARM9TDMI:采用5阶段管道化ARM9内核,同时配备Thumb扩展、调试和Harvard总线。在生产工艺相同的情况下,性能可达ARM7TDMI的两倍之多。常用于连网和顶置盒。 体系扩展 - Thumb:以16位系统的成本,提供32位RISC性能,特别注意的是它所需的内存容量非常小。 嵌入式ICE调试 由于集成了类似于ICE的CPU内核调试技术,所以原型设计和系统芯片的调试得到了极大的简化。 微处理器 -ARM710系列,包括ARM710、ARM710T、ARM720T和ARM740T:低价、低能耗、封装式常规系统微型处理器,配有高速缓存(Cache)、内存管理、写缓冲和JTAG。广泛应用于手持式计算、数据通信和消费类多媒体。 -ARM940T、920T系列:低价、低能耗、高性能系统微处理器,配有Cache、内存管理和写缓冲。应用于高级引擎管理、保安系统、顶置盒、便携计算机和高档打印机。 -StrongARM:性能很高、同时满足常规应用需要的一种微处理器技术,与DEC联合研制,后来授权给Intel。SA110处理器、SA1100 PDA系统芯片和SA1500多媒体处理器芯片均采用了这一技术。 -ARM7500和ARM7500FE:高度集成的单芯片RISC计算机,基于一个缓存式ARM7 32位内核,拥有内存和I/O控制器、3个DMA通道、片上视频控制器和调色板以及立体声端口;ARM7500FE则增加了一个浮点运算单元以及对EDO DRAM的支持。特别适合电视顶置盒和网络计算机(NC)。 Windows CE的Pocket PC只支持ARMWindows CE可支持多种嵌入式处理器,但基于Windows CE的Pocket PC则只支持ARM一种。微软在对SH3、MIPS、ARM等嵌入式处理器做了评估后认为,ARM是一种性价比较好的选择。由于目前ARM在手持设备市场占有90%以上的份额,只支持ARM,可以有效地缩短应用程序开发与测试的时间,也降低了研发费用。由于ARM开放其处理器授权,因此,用户在市场上可以在多家整机厂商中进行选择,从而保证了这一市场的竞争性。3.2.2. ARM的CPU寄存器ARM 处理器共有 37 个寄存器,被分为若干个组( BANK ),这些寄存器包括: 131 个通用寄存器,包括程序计数器( PC 指针),均为 32 位的寄存器。2 6 个状态寄存器,用以标识 CPU 的工作状态及程序的运行状态,均为 32 位,目前只使用了其中的一部分。 同时, ARM 处理器又有 7 种不同的处理器模式,在每一种处理器模式下均有一组相应的寄存器与之对应。即在任意一种处理器模式下,可访问的寄存器包括 15 个通用寄存器( R0 R14 )、一至二个状态寄存器和程序计数器。在所有的寄存器中,有些是在 7 种处理器模式下共用的同一个物理寄存器,而有些寄存器则是在不同的处理器模式下有不同的物理寄存器。3.3. 内存与IO映射 ARM体系中,内存和IO是统一编址的。与x86不同,不需要使用In、Out指令,读写IO想读写内存一样方便。虚拟机需要在模拟ARM体系中管理内存的MMU。在虚拟机中MMU也被实现成一个软件模块。 由于MMU主要在ARM9系列上应用,与我所负责的具体化工作关系较小,只带过提及,不做讨论。3.4. 具体的模拟实现本节着重描述SimpleArmulator的具体实现。3.4.1. CPU、内存与IO的具体信息 CPU : ARM7/tdmi 内存: 2MB映射在32位选址空间的低2MB地址,掩码为0x2FFFFF。其中,0x100000以上地址为视频缓存地址,0x180000地址为控制缓存地址。 输入输出: SimpleArmulator提供了图形,按钮控制的输入输出。3.4.2. 软件结构SimpleArmulaotr有3个部件,CPU,MMU,和SimpleArmulator。分别负责CPU的模拟、MMU模拟、界面和IO的模拟。本机重点在与界面的IO的模拟。3.4.3. 接口接口方面我们选择的是总线形的接口,主要代码如图3.1、3.2、3.3:struct _YH_CPU32_SI_V1STATUS_CODE (*Init)();STATUS_CODE (*Excecute)(int/*out*/ *cycles);STATUS_CODE (*SetMMU)(const _YH_MMU32_SI_V1 * /*int*/ mmui);STATUS_CODE (*Reset)();STATUS_CODE (*GetRegister)(int/*in*/ index,u32/*out*/ *value);STATUS_CODE (*SetRegister)(int/*in*/ index,u32/*in*/ value);STATUS_CODE (*RaiseException)(int/*in*/ index);STATUS_CODE (*SaveStatus_Func)();STATUS_CODE (*SetCoprocessor_Func)(int index,);图3.1struct _YH_MMU32_SI_V1STATUS_CODE (*Init)();STATUS_CODE (*Delete)();STATUS_CODE (*MapIO)(u32/*in*/ dst_addr,u32/*in*/ size,u8 * /*out*/ *src_addr,u32/*out*/* src_size );STATUS_CODE (*UnMapIO)(u32/*in*/ dst_addr,u32/*in*/ size);STATUS_CODE (*Read8)(u32/*in*/ addr,u8/*out*/ *value);STATUS_CODE (*Write8)(u32/*in*/ addr,u8/*in*/ value);STATUS_CODE (*Read16)(u32/*in*/ addr,u16/*out*/ *value);STATUS_CODE (*Write16)(u32/*in*/ addr,u16/*in*/ value);STATUS_CODE (*Read32)(u32/*in*/ addr,u32/*out*/ *value);STATUS_CODE (*Write32)(u32/*in*/ addr,u32/*in*/ value);图3.2struct _YH_IO32_SI_V1STATUS_CODE (*Init)();STATUS_CODE (*Delete)();STATUS_CODE (*Read8)(u32/*in*/ addr,u8/*out*/ *value);STATUS_CODE (*Write8)(u32/*in*/ addr,u8/*in*/ value);STATUS_CODE (*Read16)(u32/*in*/ addr,u16/*out*/ *value);STATUS_CODE (*Write16)(u32/*in*/ addr,u16/*in*/ value);STATUS_CODE (*Read32)(u32/*in*/ addr,u32/*out*/ *value);STATUS_CODE (*Write32)(u32/*in*/ addr,u32/*in*/ value);图3 .3 我们采用了总线接口的方式来连接各个部件,主要是CPU、MMU和其他各种外设之间的连接。这样不仅比较接近真实的硬件,而且可以降低软件模块的耦合性,可以方便的替换各个模块来构造新的虚拟机。不过也会带来效率下降这样的缺点。3.4.4. 简单的界面在Windows下,使用MFC对话框作为界面。图3.4目前程序的界面和功能都比较简单,该窗口大小为:320*240像素。目前的Demo中,有File和Debug两个菜单,File中有Load选项,可以读取ARM下的文件。而Debug中有一系列的Debug命令。随着功能的完善和外观的修改,还将会出现更多的选项、提供更多的功能,届时,用MFC制作的界面也将会有一些变化。3.4.5. 模拟线程模拟CPU使用了一个工作线程。这样可以使CPU的工作过程独立于界面。Windows下使用CreateThread函数来构造一个线程,CPU的工作线程如下:线程程序见图3.5:void SimpleEmulator:Run()int cycles;_cpui.Reset();Excecute_Func cpu_e=_cpui.Excecute;while(!_stop)while(i+2000)cpu_e(&cycles);图. 图形显示通过创建设备无关位图进行图像显示。这里需要用到的是windows下的GDI。GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。要想在屏幕或者其它输出设备上输出图形或者文字,那么我们就必须先获得一个称为设备描述表( DC:Device Context)的对象的句柄,以它为参数,调用各种GDI函数实现各种文字或图形的输出。设备描述表是GDI内部保存数据的一种数据结构,此结构中的属性内容与特定的输出设备(显示器,打印机等)相关,属性定义了GDI函数的工作细节,在这里属性确定了文字的颜色,x坐标和y坐标映射到窗口显示区域的方式等。设备描述表句柄一旦获得,那么系统将使用默认的属性值填充设备描述表结构。3.4.7. HEX文件格式嵌入式ARM编译器编译出来的输出文件为文件,HEX文件是由一行行符合HEX文件格式的文本所构成的ASCII文本文件。在HEX文件中,每一行包含一个HEX记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。大多数EPROM编程器或模拟器使用HEX文件。记录格式Intel HEX由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列::llaaaattdd.cc 每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:: 每个Intel HEX记录都由冒号开头.ll 是数据长度域,它代表记录当中数据字节(dd)的数量.aaaa 是地址域,它代表记录当中数据的起始地址.tt 是代表HEX记录类型的域,它可能是以下数据当中的一个:00 数据记录01 文件结束记录02 扩展段地址记录04 扩展线性地址记录dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.数据记录Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下:10246200464C5549442050524F46494C4500464C33其中:10 是这个记录当中数据字节的数量.2462 是数据将被下载到存储器当中的地址.00 是记录类型(数据记录)464C464C是数据.33 是这个记录的校验和.扩展线性地址记录(HEX386)扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16位.扩展线性地址记录总是有两个数据字节,外观如下:02000004FFFFFC其中:02 是这个记录当中数据字节的数量.0000 是地址域,对于扩展线性地址记录,这个域总是0000.04 是记录类型 04(扩展线性地址记录)FFFF 是地址的高16位.FC 是这个记录的校验和,计算方法如下:01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变.通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址.以下的例子演示了这个过程.来自数据记录地址域的地址 2462扩展线性地址记录的数据域 + FFFF -绝对存储器地址 FFFF2462扩展段地址记录(HEX86)扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下:020000021200EA其中:02 是记录当中数据字节的数量.0000 是地址域.对于扩展段地址记录,这个域总是0000.02 是记录类型 02(扩展段地址记录)1200 是地址段.EA 是这个记录的校验和,计算方法如下:01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变.通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址.以下的例子演示了这个过程.来自数据记录地址域的地址 2462扩展段地址记录数据域 + 1200 -绝对存储器地址 00014462文件结束(EOF)记录Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下:00000001FF其中:00 是记录当中数据字节的数量.0000 是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址.01 是记录类型 01(文件结束记录)FF 是这个记录的校验和,计算方法如下:01h + NOT(00h + 00h + 00h + 01h).Intel HEX文件例子:下面是一个完整的Intel HEX文件的例子:10001300AC12AD13AE10AF1112002F8E0E8F0F2244:10000300E50B250DF509E50A350CF5081200132259:03000000020023D8:0C002300787FE4F6D8FD7581130200031D:10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016:04003F00A42EFE22CB:00000001FF4 实现结果SimpleArmulator是我们开发的一个简单而完整的基于ARM体系的虚拟机。它由,一个ARM7T的CPU,一个MMU,内存为2MB,及一个320X240 32位色的视频。界面很简单。这个虚拟机已经可以良好地工作,能够配合主流编译器一起工作。现可以使用Keil uVision3编译一个简单的例子,如下:图 4.1编译ARM程序生成HEX文件后,使用SimpleArmulator导入它。可以看到如下的运行结果:图 4.2 SimpleArmulator的一个演示这个小程序反汇编如下:图 4.3 反汇编Demo程序当程序运行到STR R0,R1,R0,LSL #2,即写视频缓存的指令。调试SimpleArmulator观察到:表 4.4 调试虚拟机这就是我们所写的ARM指令所用到的译码过程。致谢语本论文是在我的导师老师的亲切关怀和悉心指导下完成的。他严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。在此谨向曾老师致以诚挚的谢意和崇高的敬意。我还要感谢在一起愉快的度过毕业论文小组的同学们,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。 在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们! 最后,再次对关心、帮助我的老师和同学表示衷心地感谢!参考文献1. ARM Limited. ARM Architecture Reference Manual2. ARM Limited. ARM920T (Rev1) Technical Reference Manual3. Skyeye 源代码厦门大学软件学院毕业设计(论文)开题报告学生姓名班级1班学号校内指导教师姓名职称教授所在单位厦门大学软件学院校外指导教师姓名职称毕业设计(论文)题 目基于ARM体系的虚拟机的构架实现毕业设计(论文)的目标:在晋通PC平台上实现ARMv4体系的虚拟机。随着时代的发展,嵌入式开发应用已经深入各个领域,前景十分看好。目前,嵌入式开发方式都以实际硬件为主,由于代价较高,不利于学习和开发调试,使得嵌入式开发门槛较高,难以普及。虚拟机是一项应用广泛的技术,它也早已在嵌入式开发中得到大量的应用。在嵌入式开发中,很多时候,我们只需要在虚拟机中调试我们的程序,就可以让程序很好地移植到实际硬件平台上执行。ARM系列CPU是目前最成功和最广泛地应用于嵌入式的CPU系列。我们的目标是实现一个基础的ARM体系的虚拟机。实现方法:我们的实现方式遵循从内部到外围逐渐完善的方式迭代完成整个虚拟机的开发。我们以虚拟ARMv4体系,ARM920T核心的系统为目标。内存体系架构:MMU是Memory Management Unit的缩写. 针对各种CPU, MMU是个可选的配件. MMU负责的是虚拟地址 &O1663;&O1664; 物理地址的转换. 提供硬件机制的内存访问授权。MMU的作用:虚拟地址到物理地址的映射内存访问权限提供Cache和Buffer现代的多用户多进程操作系统, 需要MMU, 才能达到每个用户进程都拥有自己的独立的地址空间的目标. 使用MMU, OS划分出一段地址区域, 在这块地址区域中, 每个进程看到的内容都不一定一样. 例如MICROSOFT WINDOWS操作系统, 地址4M-2G处划分为用户地址空间. 进程A在地址 0X400000映射了可执行文件. 进程B同样在地址 0X400000映射了可执行文件。如果A进程读地址0X400000, 读到的是A的可执行文件映射到RAM的内容。而进程B读取地址0X400000时则读到的是B的可执行文件映射到RAM的内容。这就是MMU在当中进行地址转换所起的作用。需要模拟下列几种资源:MMU,PU,Caches和写缓存,快速上下文切换。ARM出品的CPU, MMU作为一个协处理器存在. 根据不同的系列有不同搭配. 需要查询DATASHEET才可知道是否有MMU. 如果有的话, 一定是编号为15的协处理器. 可以提供32BIT共4G的地址空间。ARM启动MMU后的寻址模式1.ARM MMU提供的分页模式有1K/4K/64K 3种模式. 本文介绍的是目前OS通常使用的4K模式. 并且不提供ACCESS CHECK的部分. (毕竟不是完整的CPU手册)。MMU转换表有两个等级一级表 如下二级表2.涉及的寄存器, 全部位于协处理器15。3.ARM没有SEGMENT的寄存器, 是真正的FLAT模式的CPU. 给定一个ADDRESS. 该地址可以被理解为如下数据结构:typedef struct UINT32 offset :12; UINT32 page_index :8; UINT32 pdbr_index :12; VA,*LPVA;4. 从MMU寄存器2中取出BIT14-31. pdbr_index就是这个表的索引. 每个入口为4BYTE大小. 结构为typedef struct UINT32 type :2; /always set to 01b UINT32 writebackcacheable:1; UINT32 writethroughcacheable:1; UINT32 ignore :1; /set to 1b always UINT32 domain :4; UINT32 reserved :1; /set 0 UINT32 base_addr:22; PDE,*LPPDE;5. 获得的PDE地址, 获得如下结构的ARRAY, 用page_index作为索引,取出内容。typedef struct UINT32 type :2; /always set to 11b UINT32 ignore :3; /set to 100b always UINT32 domain :4; UINT32 reserved :3; /set 0 UINT32 base_addr:20; PTE,*LPPTE;6.从PTE中获得的基地址和上offset,组成了物理地址.7. PDE/PTE中其他的BIT, 用于访问控制. 这边讲述的是一切正常, 物理地址被正常组合出来的状况.ARM/X
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 亲子读书心得体会15篇
- 中学生物教研组工作总结
- 中队委竞选演讲稿模板集锦9篇
- 中国医师节致辞范文(6篇)
- 中医院经济管理经验汇报材料-学习材料范文
- 应急值守课件教学课件
- 影像科紧急抢救预案及流程(修)
- 影响-“小组合作学习”实效性的因素及对策
- 机动车安全技术检测仪器设备计算机控制与通信技术条件 编制说明
- wipo-文本和图像作品的集体管理
- DB34∕T 4010-2021 水利工程外观质量评定规程
- 五笔编码字典
- 抽油机的日常、维护ppt课件
- 拼音本模板下载直接打印
- 土方量测量报告材料实用模板
- 如何帮助学生学会准确评价自己(面试稿)
- 钳工实训手册
- (完整版)7s推进工作具体计划安排
- 垃圾分类日常检查细则(附垃圾分类检查记录表)
- 水果罐头haccp修改版
- SNCR氨水脱硝计算
评论
0/150
提交评论