小鱼儿游啊游啊。。。。
全部博文(338)
分类: LINUX
2012-11-12 14:57:53
代码存储方式分三种:
1)XIP(Execute-In-Place)——就地执行
操作系统内核直接在非易失性存储器中运行,不需要拷贝到RAM。这样减少了内核从闪速存储器拷贝到RAM的时间,也减少了内核自解压的时间。就当前的技术来说,这里的非易失性存储器特指NOR型Flash。
不过,Flash的存储器访问周期要比RAM大得多,会降低程序的运行速度,但由于CPU的指令预取机制以及Cache机制,实际使用起来并不会明显降低应用程序的运行速度。
操作系统内核和应用程序在运行时,它在内存中的映像可以分为三个部分:代码段、数据段和堆栈段。代码(Text Section)包括运行代码和只读数据,一般为只读。数据段(Data Section和BSS Section),存放各种数据(经过初始化的和未经初始化的)和静态变量,而堆栈段存放函数调用和局部变量。从以上分析可知,程序运行时在内存的映像分 为两类:一类是只读的,如代码段;另一类是可写的,如数据段。而Flash虽然是可写的,但并不能像写普通RAM一样进行。因此,当程序在Flash中运 行时,我们仍然需要把部分可写的数据段放在RAM中。因而,采用XIP技术的同时,根据硬件环境对闪速存储器和RAM使用量进行平衡。
应用场景:经常用于ARM、DSP系统中。一个NOR FLASH做代码存储器,外加一些SRAM或者SDRAM作为数据存储器。NAND不适合做代码闪存,原因在于NAND闪存读取速度慢。其实51单片机的 运行机制也和XIP有着异曲同工之妙:单片机内部自带了ROM和RAM,它的代码是从ROM里运行,数据变量大多在RAM上存储。
2)Fully Shadowed——完全映射
嵌入式系统程序运行时,将所有的代码从非易失存储器(Flash、ROM等)复制到RAM中 运行。这种应用也蛮多的,它的好处在于充分依托于RAM在运行代码时速度上的优势,而它的劣势在于需要的RAM存储空间比FLASH的存储空间(代码大 小)还要大。此外,这种启动方式在上电后还必须等待一段时间,直到数据装载完成才能正常运行代码,而代码越大,这个等待时间也会越长。
3)Demand Paging——按需分页
它在代码运行时只复制部分代码到RAM中。这种方法对RAM中的页进行导入/导出管理,如果 访问位于虚存中但不在物理RAM中会产生页错误,这时才将代码和数据映射到RAM中。之所以提出按需分页的代码运行方式,这里打一个简单的比方,我们手头 的PC机,在装好XP操作系统后至少也应该有3GB的存储空间,再加上随便装一些应用程序,4-5个GB那算小的了。如果在每次开机时PC机要把这些代码 都从硬盘预载入内存中,那么我估计咱们的PC机都跑不起来。
所以,按需分页解决了上述问题,它在PC机启动时只装载部分最频繁使用的代码到内存中。而其他应用程序只在用户希望运行时才进行实在装载,这个装载过程就是用户能够感受到的延时。它相比于完全映射方式大大减少了RAM的存储空间。