嵌入式复习资料_第1页
嵌入式复习资料_第2页
嵌入式复习资料_第3页
嵌入式复习资料_第4页
嵌入式复习资料_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统复习资料一、Windows CE的体系结构Windows CE体系结构采用层次化的设计方法,其层次化体系结构如下图所示:第三方应用程序用户界面应用程序层Ineternet 客户端服务Windows CE应用程序操作系统层硬件层硬件层:嵌入式操作系统在整个嵌入式系统中起着承上启下的作用:一方面,操作系统为嵌 入式应用程序提供了一个运行平台;另一方面,操作系统要运行在硬件之上,直接与硬 件打交道并管理硬件资源。Windows CE只支持RAM,X86, SH3,MIPx架构的处理器。 OEM 层:(OEM: original equipment manufacturer,原始设备制造商)

2、OEM抽象层(OEM Abstraction Layer,OAL)是整个OEM层的主体。它包含高度 硬件相关代码。OAL主要负责Windows CE内核与硬件通信。当引导程序引导操作系统结束后,有OAL负责硬件平台的初始化,包 括中断服务例程,实时时钟,计数器,内核调试,开关中断,内核性能检测等工作。OAL 的代码在物理上是内核的一部分,最终经过编译连接,OAL会成为内核的一部分。Boot Loader是硬件开发板上执行的一段代码,它的主要功能是初始化硬件,加载操 作系统映像到内存,然后跳到操作系统代码去执行。它加载操作系统映像方式有:串口, USB,以太网下载。配置文件是一些包含配置信息的文

3、本文件。这些配置信息通常与操作系统映像或源代 码有关。例如告诉编译系统如何编译某些代码,或告诉编译系统如何配置最终的操作系 统映像文件。设备驱动程序直接与硬件外设打交道,是应用程序或操作系统与硬件外设交互的桥 梁。不同的外设有不同的驱动程序,如声卡驱动,显卡驱动,USB驱动等等。在嵌入式系统中有一个与可indows CE的OEM相对应的概念:BSP(板级支持 包)。BSP是介于主板硬件和操作系统之间的一层,主要目的是为了支持操作系统使之 能正常运行于主板硬件上。操作系统层:内核:windows CE的内核表现为NK.EXE进程,它是所有基于windows CE的系 统中都存在的核心进程,为设备

4、提供处理器调度,内存管理,异常处理及系统内通信等 功能并为应用程序使用这些核心功能提供内核服务。Core DLL:它是一个会被所有用户进程都加载的动态链接库,应用程序希望访问 windows CE提供的服务,只能通过Core DLL.DLL进行。Core DLL.DLL的主要功能是 负责应用程序与windows CE通信以及完成windows CE的系统调度。系统调度是操作系 统向应用程序提供的服务,一般以函数的形式提供。对象存储:为应用程序及其相关数据提供的存储方式,完成管理栈和内存堆,必 要时压缩或展开文件无缝的集成基于ROM的应用和基于RAM的数据三项任务。理论上 包含文件系统,数据库,

5、系统注册表。GWES:图形窗口系统负责操作系统中与图形界面相关的部分提供基本的绘图功能 和窗口管理器。所有的用户输入(键盘,触摸屏等)相关的驱动程序都由GWES.EXE来 加载和管理。设备管理:DEVICE.EXE是windows CE中的设备管理器。它负责加载,卸载和管 理所有不被GWES.EXE管理的驱动程序,也负责加载所有的总线驱动程序和电源管理 DLL,同时向系统提供所有关于驱动的API的实现。网络服务:SERVICES.EXE是负责加载系统服务的进程。它们提供一些后台的处 理或者为应用程序提供高级的功能。Windows CE中,FTP,HTTP和TELNET都是以系 统服务的形式实现

6、。Windows CE提供单独的API来启动,停止和操作服务。二、线程与进程的区别WinCE是一个基于优先级的抢占式多任务操作系统,在WinCE中,每一个运行着的 应用程序都是一个进程。在一个进程中可以包含一个或多个线程。进程是程序的一次动态执行实例。进程与程序不同,当程序被WinCE加载到内存并 开始执行后就变成了一个实例或者说进程。在WinCE中进程本身不参加系统的调度,也 没有优先级和上下文。线程是WinCE中最小的可执行单元。WinCE中真正参加调度的是线程,每个进程 在创建的时候都会创建一个主线程作为该进程默认的执行体。从某种意义上说,进程只 是线程的容量。线程除了占有内存外,还占有

7、其他资源,例如处理器的寄存器和栈,每 个线程都有自己独立的栈。这些资源构成了线程的上下文。进程总是先于线程创建而后与线程撤离,也只有在进程中才有可能创建线程。同一 进程中的多个线程共享该进程的地址空间,这些线程可以执行同一段代码、处理同一堆 数据,还能共享内核对象的句柄。知识拓展:WinCE最多只支持32个进程同时运行。每个进程占据32MB的虚拟内存空间。由于 操作系统本身也被分成多个进程,因此,用户实际可用的进程数只有不到三十个。因此, 在构建复杂的应用程序时,如果需要同时处理多个任务,那么应该选择多线程解决方案 而不是采用多进程。线程可以运行在核心态和用户态。在核心态,线程可以访问操作系统

8、所有的资源。三、线程的调度线程的调度是抢占式的,WinCE使用的是基于时间片轮转算法对线程进行调度的, 也就是说,对于处于就绪状态列队的线程,先分给优先级更高的线程以时间片,当时间 片用完后,无论线程是否执行完毕,都退回就绪状态列队中继续等待下一次时间片的分 配。WinCE的线程被分为256个优先级,从0255, 0的优先级最高。通常,应用程序能 使用的优先级为248255这八个最低的优先级,0247供驱动程序和内核使用,这样做 的目的是为了保证系统的可靠性和安全性。应用程序可使用CreateThread()函数创建一个新线程。结束线程,可以从线程的执行 体函数返回,也可以使用WinCE中的E

9、xitThread()和TerminateThread()函数结束线程。四、WinCE内核启动过程在NBOOT引导EBOOT后,EBOOT加载并引导WinCE操作系统(NK)。首先,eboot跳转到OAL.exe的startup函数中执行。startup的作用是初始化CPU。startup函数执行完后将跳转到 Kernelstart函数|中,这个函数的主要任务就是为WINCE操作系统设置页表并且启用MMU。之后KernelStart函数就会调用ARMInit函数。ARMIint函数有三个主要的任务:是调用KernelRelocate()函数进行内核全局变量重定位。全局变量重新定位之后,对内核启

10、动所需要的KDataStruct结构体是调用函数FindKernelEntry通过TOC找到kernel.dll的入口点函数地址调用函数ARMInit函数后返回到NKStartup函数。NKstartup函数的主要工作如下:从NK Loader传递过来的KDataStruct结构体数据中获取到供自身启动所需要的数据信息,定位对 WINCE6.0特有的OEMGLOBAL结构体的初始化函数OEMInitGlobals地址, 该 结构体构建了内核和OAL层之间进行通信的桥梁。调用函数ARMSetup为操作系统内核进程填充虚拟内存0XA00000000XBFFFFFFF范围的 uncachable静态

11、映射区域如果系统启用了 KITL调试功能,则加载KITL模块调用OAL函数执行对目标平台板级硬件的初始化动作。NKStartup函数完成后跳转到第二个KernelStart函数|,这里的Kernelstart函数与前面的KernelStart函数的属于两个完全不同的函数。这个函数的主要工作有两部分:调用Kernellnit函数来初始化内核调用FirstSchedule。FirstSchedule函数为Windows CE操作系统启动过程中最后无条件跳转的 一个函数,FirstSchedule调用HandleException函数来让系统进行重新调度,这样就选择了第一个就 绪的线程来执行。ker

12、nelstart函数完成之后就调用内核初始化|KernelInit函数|。主要完成在启动第一个线程前对内核进行初始化,主要包括API函数集初始化、堆的初始化、 初始化内存池、进程初始化、线程初始化和文件映射初始化等操作。之后跳转到操作系统的第一个启动的任务FirstSchedule函数|。FirstSchedule 函数为Windows CE操作系统启动过程中最后无条件跳转的一个函数,windows CE 进行第一个调度,实际为一个空闲线程,因为windows CE系统还没有完成启动,只有 当windows CE完全启动并进入稳定状态,然后启动文件系统filesys.dll,设备管理 devi

13、ce.dll,窗体图像子系统 gews.dll 和 shell 程序 explore.exe。五、WINCE流驱动接口函数参数详解DWORD XXX_Init ()备注:当驱动被系统加载时,调用此函数。初始化必要的驱动资源,执行内存映射操作,初始化 服务线程。BOOL XXX_Deinit()备注:当驱动被系统卸载时,调用此函数。释放初始化时分配的内存资源,停止服务线程。(驱 动卸载)DWORD XXX_Open ()备注:当应用程序调用CreatFile()函数时,调用此函数。返回函数句柄为其他IO函数使用,为 打开的资源分配必要的资源。BOOL XXX Close ()备注:当应用程序调用

14、CloseHandle()函数时,调用此函数。释放打开设备时分配的一些内存资 源。DWORD XXX_Read ()备注:当应用程序调用ReadFile()函数时,调用此函数。从设备中读取数据DWORD XXX_Write ()备注:当应用程序调用WriteFile(涵数时,调用此函数。向设备中写入数据DWORD XXX_Seek ()备注:该函数移动设备的数据指针DWORD XXX_IOControl 备注:当应用程序调用DeviceIOControl()函数时,调用此函数。提供支持自定义驱动操作机制, 大多数驱动系统采用该方法进行设备控制,每个10口控制代号表示某种设备操作。void XX

15、X_PowerDown (DWORD hDeviceContext);备注:当系统停止对设备供电,或在调用DeviceIOControl()函数时,I/O命令字为.OCTL_POWER_XXX时调用此函数。允许驱动执行使驱动设备进入低功耗模式。void XXX_PowerUp (DWORD hDeviceContext);备注:当系统恢复对设备供电,或在调用DeviceIOControl()函数时,I/O命令字为IOCTL_POWER_XXX时调用此函数。该函数恢复对设备供电XXX_PreCloSe备注:通知设备管理器把它打开的句柄设置为无效,并唤醒任何正在休眠的线程XXX PreDeinit

16、备注:释放设备,在设备被卸载时调用六、汇编指令1.数据处理指令 MOV MVN ADD ADC SUB SBC RSB RSC ANDORR EOR BIC CMP CMN TST TEQMOV MOV R1,R0;将寄存器R0的值传送到寄存器R1MOV R1,R0,LSL #3;将寄存器R0的值左移3位后传送到R1 LSL左移M VN MVN R1,R2将R2取反,结果存到R1中ADDADD R0,R1,R2ADCADDS R0, R2, R4ADC R1, R3, R5SUB SUB R0,R1,#6;R0 = R1 + R2;低32位加,S影响标志位;高32位带进位加;R0 = R1 -

17、 6SUB R0,R2,R3,LSL#1 ;R0 = R2 - (R3 左移一位)SBC SBC R0,R1,R2;R0=R1-R2-!C,并根据结果设置CPSR的进位标志位,! C表示C取反RSB 实例:RSB R0, R1,R2 ; R0=R2-R1;RSC 实例:RSC R0,R1,R2;R0=R2-R1-!CAND AND R0,R0,#3;该指令保持R0的0,1位,其余位清零清零ORR ORR R0,R0,#3;该指令设置R0的0和1位,其余位保持不变置位EOR EOR R0,R0,#3;该指令反转R0的0和1位,其余位保持不变保持BIC BIC R0,R0,#%1011;该指令清除

18、RO的0和1位,其余位保持不变位清CMP CMP R1,R0 ;将寄存器R1和R0相减,根据结果设置CPSR标志位CMN CMN R1,R0 ;将R1和R0相加,根据结果设置CPSR标志位TST TST R1,0 xffe ;R1和0 xffe按位与,根据结果设置CPSRTEQ TEQ R1,R2; R1和R2按位异或,根据结果设置CPSR2.乘法MULMUL R0 ,R1,R2; R0=R1*R2MLA MLA R0,R1,R2,R3; R0=R1*R2+R3SMULL SMUL R0 R1,R2,R3; R0=(R2*R3)低 32 位,R1=(R2*R3)高 32 位SMLAL SMLA

19、L R0, R1,R2,R3;R0=(R2*R3)低 32 位+R0,R1=(R2*R3)高 32 位+R1UMULL UMULL R0 R1, R2, R3;和SMULL 一样 只不过操作数为无符号UMLAL UMLAL R0 R1, R2, R3;和 SMLAL 一样,操作数无符号指令敏据加载与存储指令LDR R1,R2,#0 x08; R2+0X08 一 R1LDR R1, R2, #0 x08 ; R2 R1, R2+8 R1STR R1, R2,#8;R1R2+8STR R1, R2,#8;R1R2,R2+8R2LDRB R0, R1 ;R1公0,并将R0的高24位清零。LDRB R

20、0, R1,# 8;R1+ 8 R0,并将 R0 的高 24 位清零。STRB R0, R1;将寄存器R0中的字节数据写入以R1为地址的存储器中。STRB R0, RL# 8;将寄存器R0中的字节数据写入以R1+8为地址的存储器中。LDRH R0, R1;将存储器地址为R1的半字数据读入寄存器公0,并将R0的高16位清零。LDRH R0, R1,# 8;将存储器地址为R1+ 8的半字数据读入寄存器&0,并将R0的高16位清 零LDRH R0, R1, R2;将存储器地址为R1+ R2的半字数据读入寄存器公0,并将R0的高16位 清零。STRH R0, R1;将寄存器R0中的半字数据写入以R1为

21、地址的存储器中。LDRSB R0,R1,#4;将存储地址为R1+4的有符号字节数读入R0, R0中的高24位设置成该字节数 据的符号LDRSH R6, R2, #2 ;将存储地址为R2+2的有符号半字数据读入R6, R6中的高16位设置成该 字节数据的符号位,R2=R2+24、多寄存器加载与存储指令重要的寻址:堆栈寻址57面快复制寻址58面重要的程序:见书109面数据块复制程序.LDM/STM批量数据加载济储指f列3.4G 没执彳亍百订=RO=OOOOOOIOKS=K7=RS=OOOOOOOO,布fi者 号号上也1上为OzkOOOIHMNLO存”者的 内 容女口图3-N3所示.0 x90020

22、1 0 x00000005Ox9OOlC0 x000000040 x900180 x000000030 x900140 x000000020 x900101 0 x00000001Ox9OOOC0 x00000000贝!I分另UN彳亍十旨令LD1XIIA RO!.LOIMI15 KOI,各相 关寄存旨罟值的变化分别如何W0 x900200 x00000005RO=Ox9001C -X、Qk9001C0 x000000040 x900180 x00000003R8=0 x000000030 x900140 x00000002R7=0 x00000002R0=0 x90010 -0 x900100

23、 x00000001R6=0 x00000001OxSOOOC0 x00000000IASTMFD SP!0 x900200 x00000005RO=Ox9001C OxOOlC0 x00000004R8= 0 x000000040 x900180 x000000030 x000000030 x900140 x00000002R6=0 x00000002R0=0 x90010 0 x00100 x00000001OxSOOOC0 x00000000,R1-R7, LR数据压栈,将R1-R7, LR中的数据FD压栈图3-26 LDMIA指令执行后LDMFD SP!,R1-R7, LR数据出栈将F

24、D堆栈中的数据送入R1-R7, LR南通大学计算机科学与技木学院系虢教研室状态寄存器传送指令:MRS MRS R0 ,CPSR; CPSRR0MSR MSR CPSR ,R0; RACPSR6.转移指令:B BL BX BLXB Label;程序无条件跳转到标号Label处执行CMP R1,#0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行BEQ LabelBL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的PC值保存到R14中7.协处理器指令CDP P3, 2, C12, C10, C3, 4;该指令完成协处理器P3的初始化LDC P5, C1,

25、 R0;将ARM处理器的寄存器R0所指向的存储器中的字数据传送到协处理器P5的寄存器C1中。STC P3, C4, R0;将协处理器P3的寄存器C4中的字数据传送到ARM处理器的寄存器R0所指向的存储器中。MCR P5, 5, R1, C1, C2, 9 ;将ARM处理器寄存器R1中的数据传送到协处理器P5 的寄存器C1和C2中,协处理器执行操作5和9。MRC P3, 3, R0, C4, C5, 6;协处理器P3执行操作3和6,操作数为C4、C5,其操作的结果传送到ARM处理器寄存器R0中。8.交换指令SWP R0, R1, R2SWP R0, R0, R1SWPB R0, R1, R2;R

26、2 R0, R1 R2;将R1所指向的存储器中的字数据与R0中的字数据交换。;将R2所指向的存储器中的字节数据加载到R0, R0的高24位清零,同时将R1中的低8位数据存储到R2所指向的存储单元。SWPB R0, R0, R1;将R1所指向的存储器中的字节数据与R0中的低8位数据交换。软件中断指令SWI 0 x02;该指令调用操作系统编号为02的系统例程(1)把准备传递的参数通过寄存器进行传递MOV R0,#0 x8;使用8号功能段SWI 0;实现中断,不指明调用的功能号(2)用SWI指令传递中断号SWI 8;实现中断,指明调用的功能号ARM伪指令ADR小范围的地址读取伪指令Start MOV

27、 R0,#10;此指令执行完后,PC=start+8ADR R1,start;0 PC=S前指令地址值为 +8,换成 SUB R1,PC ,0 x0CADRL中等范围的地址读取伪指令Start MOV R0,#10;此指令执行完后,PC=start+8ADR R1,start;替换为:ADD R4,#84 和 ADD R4 ,R4,#59904LDR大范围的地址读取伪指令LDR R1,=0 xFFF;编译 LDR R1,PC,OFFSER_TO_LPOOL和LPOOL DCD 0 xFFF两条指令DCD分配地址NOP空操作伪指令指令的可选后缀S后缀:指令中使用S后缀时,指令执行后程序状态寄存器

28、的条件标志位将被刷新,不使用S后缀 时,指令执行后程序状态寄存器的条件标志将不会发生变化。假设R0=0 x1, R3=0 x3,指令执行之前CPSR=nzcvqIFt_SVC,分别执行如下指令CPSR的值有何变化?SUB R1, R0, R3 ; R0的值减去R3的值,结果存入R1SUBS R1, R0, R3 ; R0的值减去R3的值,结果存入R1 影响标志位分析:执行第1条指令对于标志寄存器的值没有任何影响,因此CPSR的值不变。执行第2条指令后CPSR=NzcvqIFt_SVC,因为R0的值减去R3值,结果变成负数,故而N 被置位了。!后缀:如果指令地址表达式中不含!后缀,则基址寄存器中

29、的地址值不会发生变化。指令中的地 址表达式中含有!后缀时,指令执行后,基址寄存器中的地址值将发生变化,变化的结果如下:例3.3分别执行下面两条指令有何区别?LDR R3, R0,#4LDR R3, R0,#4 !分析:在上述指令中,第1条指令没有后缀!,指令的结果是把R0加4作为地址指针,把这个 指针所指向的地址单元所存储的数据读入R3, R0的值不变。第2条指令除了实现以上操作外,还把 R0+4的结果送到R0中。指令的条件执行程序要执行的指令,均保存在存储器中,当计算机需要执行一条指令时,首先产生这条指令的地址, 并根据地址号打开相应的存储单元,取出指令代码,CPU根据指令代码的要求以及指令

30、中的操作数, 去执行相应的操作。ADD R4, R3, #1ADDEQ R4, R3, #1ADDS R4, R3, #1条件后缀只是影响指令是否执行,不影响指令的内容,如上述ADDEQ指令,可选后缀EQ并不影响 本指令的内容,它执行时仍然是一条加法指令这上面的指令没有给出明确的定义 只给出例子不懂得自己看下书七、电平转换逻辑标准Vcc电平牢机出高电平UOH出低电平UO应入高电平u计入低电平UL 传输带宽TTL5V0.880MHZLVTTL3.3V0.8133MHZ2.5V0.7166MHZ1.8V0.7266MHZCMO

31、S5VUcc0.2UCCNALCOMS3.3V0.8NA2.5V0.7NA1.8VUcc-Ucc0.2UccNA1.5VUcc-Ucc0.2UccNAPCI3.3V0.9Ucc0Ucc0.5Ucc0.3Ucc33,66,133MHZ经常能考到的是TTL与CMOS的对接。PCI电平可以不用看。八、MMU工作过程大多数使用虚拟存储器的系统都使用一种称为分页(paging)。虚拟地址空间划分成称 为页(page)的单位,而相应的物理地址空间也被进行划分,单位是页框(frame).页和页框 的大小必须相同。接下来

32、配合图片我以一个例子说明页与页框之间在MMU的调度下是如何进 行映射的:虚拟地址空间60-64k X 56-60k X52-56k X页、页抠映射关系图在这个例子中我们有一台可以生成16位地址的机器,它的虚拟地址范围从 0 x00000 xFFFF(64K),而这台机器只有32K的物理地址,因此他可以运行64K的程序,但该 程序不能一次性调入内存运行。这台机器必须有一个达到可以存放64K程序的外部存储器 (例如磁盘或是FLASH)以保证程序片段在需要时可以被调用。在这个例子中,页的大小为 4K,页框大小与页相同(这点是必须保证的,内存和外围存储器之间的传输总是以页为单位 的),对应64K的虚拟

33、地址和32K的物理存储器,他们分别包含了 16个页和8个页框。我们先根据上图解释一下分页后要用到的几个术语,在上面我们已经接触了页和页 框,上图中绿色部分是物理空间,其中每一格表示一个物理页框。橘黄色部分是虚拟空间, 每一格表示一个页,它由两部分组成,分别是Frame Index(页框索引)和位p(present存 在位),Frame Index的意义很明显,它指出本页是往哪个物理页框进行映射的,位p的意 义则是指出本页的映射是否有效,如上图,当某个页并没有被映射时(或称映射无效,Frame Index部分为X),该位为0,映射有效则该位为1。我们执行下面这些指令(本例子的指令不针对任何特定机

34、型,都是伪指令)例1:MOVE REG,0 /将0号地址的值传递进寄存器REG.虚拟地址0将被送往MMU,MMU看到该虚地址落在页0范围内(页0范围是0到4095), 从上图我们看到页0所对应(映射)的页框为2 (页框2的地址范围是8192到12287),因 此MMU将该虚拟地址转化为物理地址8192,并把地址8192送到地址总线上。内存对MMU的 映射一无所知,它只看到一个对地址8192的读请求并执行它。MMU从而把0到4096的虚拟 地址映射到8192到12287的物理地址。例2:MOVE REG,8192被转换为MOVE REG,24576因为虚拟地址8192在页2中,而页2被映射到页框

35、6 (物理地址从24576到28671)例3:MOVE REG,20500被转换为MOVE REG,12308虚拟地址20500在虚页5 (虚拟地址范围是20480到24575)距开头20个字节处,虚页 5映射到页框3 (页框3的地址范围是12288到16383),于是被映射到物理地址 12288+20=12308。通过适当的设置MMU,可以把16个虚页隐射到8个页框中的任何一个,但是这个方 法并没有有效的解决虚拟地址空间比物理地址空间大的问题。从上图中我们可以看到,我们 只有8个页框(物理地址),但我们有16个页(虚拟地址),所以我们只能把16个页中的 8个进行有效的映射。我们看看例4会发生

36、什么情况MOV REG,32780虚拟地址32780落在页8的范围内,从上图总我们看到页8没有被有效的进行映射(该 页被打上X),这是又会发生什么? MMU注意到这个页没有被映射,于是通知CPU发生一个 缺页故障(page fault).这种情况下操作系统必须处理这个页故障,它必须从8个物理页 框中找到1个当前很少被使用的页框并把该页框的内容写入外围存储器(这个动作被称为 page copy),随后把需要引用的页(例4中是页8)映射到刚才释放的页框中(这个动作 称为修改映射关系),然后从新执行产生故障的指令(MOV REG,32780)。假设操作系统决 定释放页框1,那么它将把虚页8装入物理地

37、址的4-8K,并做两处修改:首先把标记虚页1 未被映射(原来虚页1是被影射到页框1的),以使以后任何对虚拟地址4K到8K的访问都 引起页故障而使操作系统做出适当的动作(这个动作正是我们现在在讨论的),其次他把虚 页8对应的页框号由X变为1,因此重新执行MOV REG,32780时,MMU将把32780映射为4108。我们大致了解了 MMU在我们的机器中扮演了什么角色以及它基本的工作内容是什么, 下面我们将举例子说明它究竟是如何工作的(注意,本例中的MMU并无针对某种特定的机型, 它是所有MMU工作的一个抽象)。首先明确一点,MMU的主要工作只有一个,就是把虚拟地址映射到物理地址。我们已经知道,

38、大多数使用虚拟存储器的系统都使用一种称为分页(paging)的技术,就象 我们刚才所举的例子,虚拟地址空间被分成大小相同的一组页,每个页有一个用来标示它的 页号(这个页号一般是它在该组中的索引,这点和C/C+中的数组相似)。在上面的例子中 04K的页号为0,48K的页号为1,812K的页号为2,以此类推。而虚拟地址(注意:是 一个确定的地址,不是一个空间)被MMU分为2个部分,第一部分是页号索引(page Index), 第二部分则是相对该页首地址的偏移量(offset).。我们还是以刚才那个16位机器结合 下图进行一个实例说明,该实例中,虚拟地址8196被送进MMU,MMU把它映射成物理地址

39、。16位的CPU总共能产生的地址范围是064K,按每页4K的大小计算,该空间必须被分成16 个页。而我们的虚拟地址第一部分所能够表达的范围也必须等于16 (这样才能索引到该页 组中的每一个页),也就是说这个部分至少需要4个bit。一个页的大小是4K(4096),也就是 说偏移部分必须使用12个bit来表示(212=4096,这样才能访问到一个页中的所有地 址),8196的二进制码如下图所示:Virtual Address 81921 0 0 0 ooooooo ooioopage indexoffset页索引号与偏移量关系图该地址的页号索引为0010(二进制码),既索引的页为页2,第二部分为0

40、00000000100 (二进制),偏移量为4。页2中的页框号为6 (页2映射在页框6,见上图),我们看到 页框6的物理地址是2428K。于是MMU计算出虚拟地址8196应该被映射成物理地址24580 (页框首地址+偏移量=24576+4=24580)。同样的,若我们对虚拟地址1026进行读取,1026 的二进制码为 0000010000000010,page index=0000=0,offset=010000000010=1026。页 号为0,该页映射的页框号为2,页框2的物理地址范围是819212287,故MMU将虚拟地址 1026映射为物理地址9218 (页框首地址+偏移量=8192+1026=9218)。以上就是MMU的工作 过程。S3C24XX的MMU工作过程下面我们针对s3c2410的MMU(注 1)进行讲解。S3c2410总共有4种内存映射方式,分别是:Fault (无映射)Coarse Page (粗表)Section (段)Fine Page (细表)我们以Section(段)进行说明。ARM920T是一个32bit的CPU,它的虚拟地址空间为232=4G。而在Section模式,这4G 的虚拟空间被分成一个一个称为段(Section)的单位(与我们上面讲的页在本质上其实是一 致的),每个段的长度是1M (而我们之前所使用的页的长度是4K)。4G的虚拟

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论