嵌入式系统的基础知识对于一台内存为256M的32bitx86主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x000000000~0x0FFFFFFF(256M)。存储器结构哈佛结构:程序存储器和数据存储器是相互独立的,使用各自不同的总线进行访问.冯*诺依曼(VonNeumann)结构:程序存储器和数据存储器合二为一,使用同样的总线进行访问.流水线技术流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。这样显然可加速一段程序的运行过程。市场上推出的各种不同的16位/32位微处理器基本上都采用了流水线技术。如80486和Pentium均使用了6步流水线结构,流水线的6步为:(1)取指令。CPU从高速缓存或内存中取一条指令。(2)指令译码。分析指令性质。(3)地址生成。很多指令要访问存储器中的操作数,操作数的地址也许在指令字中,也许要经过某些运算得到。(4)取操作数。当指令需要操作数时,就需再访问存储器,对操作数寻址并读出。(5)执行指令。由ALU执行指令规定的操作。(6)存储或写回结果。最后运算结果存放至某一内存单元或写回累加器A。ARM7三级流水线ARM9五级流水线Arm9的流水线分为:取值,译码,执行,访存,回写取值从指令存储器取指令译码读取寄存器操作数执行产生ALU运算结果或产生存储器地址访存访问数据存储器回写完成结果写寄存器ARM10六级流水线取值,发射,译码,执行,访存,回写但是随着流水线深度的增加,指令的吞吐量提高了,每一段的工作量被消减了,使得处理器可以工作在更高的频率,同时也改善了性能,但系统延时(latency)也增加了,这是因为在内核执行一条指令前,需要更多的周期来填充流水线。并且,时钟频率的增加,指令执行周期也相应缩减了,这就要求减小指令执行周期的时间,也就对硬件设计带来了更大的要求。所以,流水线深度并不是越深越好。对指令执行的几种方式1)顺序执行(传统机采用)只有在前一条指令的各过程段全部完成后,才从存储器取出下一条指令取译执取译执i条i+1条2)仅两条指令重叠:第i条指令的执行与第i+1条的取指重叠。3)三条指令重叠:第i条指令的执行与第i+1条的译码及第i+2条的取指重叠。i条取译执取译执i+1条i条取译执i+1条取译执i+2条取译执若一条指令的过程段划分更多时,重叠组合方式更多。超流水线技术:流水线超过5~6步以上。超标量技术:指在CPU中有一条以上的流水线。相关和转移相关1何谓相关:在重叠方式的指令执行过程中,由于发生了某种关联,使正在被解释的指令无法再继续下去的现象,称相关。相关类型2相关类型1)从性质上分•①指令相关:重新修改了正在被解释的指令•②数相关:因等待前面指令执行的结果,使后面指令等待不能连续解释。•如:S=a/b+cLDR,ADIVR,BADDR,C;要等DIV结果STR,S;存结果转移i-1jij+1i+1j+2i+2......YesNo成功支路不成功支路条转指令解决方法乱序执行:解决相关问题,即在两条指令中插入不相关的指令。分支预测技术:解决条件转移。CISC和RISCCISC:复杂指令集(ComplexInstructionSetComputer)具有大量的指令和寻址方式,指令长度可变8/2原则:80%的程序只使用20%的指令大多数程序只使用少量的指令就能够运行。RISC:精简指令集(ReducedInstructionSetComputer)只包含最有用的指令,指令长度固定确保数据通道快速执行每一条指令使CPU硬件结构设计变得更为简单CISC与RISC的数据通道IFIDREGALUMEM开始退出IFIDALUMEMREG微操作通道开始退出单通数据通道RISC:Load/Store结构CISC:寻址方式复杂CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构。它们的区别在于不同的CPU设计理念和方法。早期的CPU全部是CISC架构,它的设计目的是要用最少的机器语言指令来完成所需的计算任务。比如对于乘法运算,在CISC架构的CPU上,您可能需要这样一条指令:MULADDRA,ADDRB将ADDRA和ADDRB中的数相乘并将结果储存在ADDRA中。将ADDRA,ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作全部依赖于CPU中设计的逻辑来实现。这种架构会增加CPU结构的复杂性和对CPU工艺的要求,但对于编译器的开发十分有利。比如上面的例子,C程序中的a*=b就可以直接编译为一条乘法指令。今天只有Intel及其兼容CPU还在使用CISC架构。RISC架构要求软件来指定各个操作步骤。上面的例子如果要在RISC架构上实现,将ADDRA,ADDRB中的数据读入寄存器,相乘和将结果写回内存的操作都必须由软件来实现,比如:MOVA,ADDRA;MOVB,ADDRB;MULA,B;STRADDRA,A。这种架构可以降低CPU的复杂性以及允许在同样的工艺水平下生产出功能更强大的CPU,但对于编译器的设计有更高的要求。CISC的背景和特点背景:存储资源紧缺,强调编译优化增强指令功能,设置一些功能复杂的指令,把一些原来由软件实现的、常用的功能改用硬件的(微程序)指令系统来实现为节省存储空间,强调高代码密度,指令格式不固定,指令可长可短,操作数可多可少寻址方式复杂多样,操作数可来自寄存器,也可来自存储器采用微程序控制,执行每条指令均需完成一个微指令序列CPI5,指令越复杂,CPI越大。CPI:指令平均执行周期数CISC的主要缺点指令使用频度不均衡。•高频度使用的指令占据了绝大部分的执行时间,扩充的复杂指令往往是低频度指令。大量复杂指令的控制逻辑不规整,不适于VLSI工艺•VLSI{(超大规模集成电路(VeryLargeScaleIntegratedcircuites)}的出现,使单芯片处理机希望采用规整的硬联逻辑实现,而不希望用微程序,因为微程序的使用反而制约了速度提高。(微码的存控速度比CPU慢5-10倍)。软硬功能分配•复杂指令增加硬件的复杂度,使指令执行周期大大加长,直接访存次数增多,数据重复利用率低。不利于先进指令级并行技术的采用•流水线技术RISC基本设计思想减小CPI:CPUtime=Instr_Count*CPI*Clock_cycle精简指令集:保留最基本的,去掉复杂、使用频度不高的指令采用Load/Store结构,有助于减少指令格式,统一存储器访问方式采用硬接线控制代替微程序控制RISC:减少指令平均执行周期数CPUtime=Instr_Count*CPI*Clock_cycle•ICRISCICCISC,30%---40%•CCRISCCCCISC•CPIRISCCPICISC,20%•超标量、超流水线、VLIW等系统结构,目标在于减小CPI,可使CPI1RISC的提出与发展Load/Store结构提出:CDC6600(1963)--CRAY1(1976)RISC思想最早在IBM公司提出,但不叫RISC,IBM801处理器是公认体现RISC思想的机器。1980年,Berkeley的Patterson和Dizel提出RISC名词,并研制了RISC-,实验样机。1981年Stenford的Hennessy研制MIPS芯片。85年后推出商品化RISC:MIPS1(1986)和SPARCV1(1987)典型的高性能RISC处理器SUN公司的SPARC(1987)MIPS公司的SGI:MIPS(1986)HP公司的PA-RISC,IBM,Motorola公司的PowerPCDEC、Compac公司的AlphaAXPIBM的RS6000(1990)第一台SuperscalarRISC机CISC与RISC的对比类别CISCRISC指令系统指令数量很多较少,通常少于100执行时间有些指令执行时间很长,如整块的存储器内容拷贝;或将多个寄存器的内容拷贝到存贮器没有较长执行时间的指令编码长度编码长度可变,1-15字节编码长度固定,通常为4个字节寻址方式寻址方式多样简单寻址操作可以对存储器和寄存器进行算术和逻辑操作只能对寄存器对行算术和逻辑操作,Load/Store体系结构编译难以用优化编译器生成高效的目标代码程序采用优化编译技术,生成高效的目标代码程序MMUMMU是MemoryManagementUnit的缩写,中文名是存储器管理单元,它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为物理地址,以及提供硬件机制的内存访问授权。MMU的相关概念——地址范围、虚拟地址映射为物理地址以及分页机制任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF(4G),而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF(64T).这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集。在没有使用虚拟存储器的机器上,虚拟地址被直接送到内存总线上,使具有相同地址的物理存储器被读写;而在使用了虚拟存储器的情况下,虚拟地址不是被直接送到内存地址总线上,而是送到存储器管理单元MMU,把虚拟地址映射为物理地址。虚拟内存地址空间分针两个部分:1.用户空间2.系统空间大多数使用虚拟存储器的系统都使用一种称为分页(paging)机制。虚拟地址空间划分成称为页(page)的单位,而相应的物理地址空间也被进行划分,用页表实现虚拟地址到物理地址的映射操作系统在物理内存中为MMU维护着一张全局映射表,TLB(TranslationLookasideBuffers,转换旁置缓冲区):◆TLB是一个专用的高速缓冲器,用于存放近期经常使用的页表项;◆TLB中的内容是页表部分内容的一个副本;◆TLB也利用了局部性原理。TLBMMU的功能1、将虚拟地址映射为物理地址2、提供硬件机制的内存访问授权MMU和CPU1、X86系列的MMUINTEL出品的80386CPU或者更新的CPU中都集成有MMU.可以提供32BIT共4G的地址空间.2、ARM系列的MMUARM7:没有MMU,不支持WindowsCE和标准Linux操作系统,但uCLinux可以。ARM9以上的处理器集成有MMUBSPBSP(BoardSupportPackage)是板级支持包,是介于主板硬件和操作系统之间的一层,应该说是属于操作系统的一部分,主要目的是为了支持操作系统,使之能够更好的运行于硬件主板。BSP是相对于操作系统而言的,不同的操作系统对应于不同定义形式的BSP,例如VxWorks的BSP和Linux的BSP相对于某一CPU来说尽管实现的功能一样,可是写法和接口定义是完全不同的,所以写BSP一定要按照该系统BSP的定义形式来写(BSP的编程过程大多数是在某一个成型的BSP模板上进行修改)。这样才能与上层OS保持正确的接口,良好的支持上层OS。不同的“板”也对应着不同的BSP。狭义广义BSP包含各种开发软件、工具以及文档:1)C/C++语言的交叉编译器2)BootLoader程序3)嵌入式操作系统4)调试、下载工具5)开发板上设备的驱动程序6)开发板相关的技术文档等BootLoader简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境