目录
第一节 本文讨论的内容
本文总结嵌入式系统开发中常见的存储器及其特点。
第二节 嵌入式存储结构层次的划分
首先看一下嵌入式存储体系的划分,此处按照存储速度进行划分。
- 寄存器
- 高速缓存Cache
- RAM(例如SRAM、DRAM、DDRAM)
- 主存储器(例如Flash、PROM、EPROM、EEPROM)
- 外部存储器(例如磁盘、光盘、CF卡、SD卡)
- 远程二级存储(例如分布式文件系统、Web服务器)
那么问题来了,为什么会存在嵌入式存储体系,都用寄存器或者磁盘存数据不就好了?其实计算机采用分级存储体系的主要目的是解决存储容量、成本和速度之间的矛盾问题。速度越快的存储器,通常价格也越高。所有数据都采用寄存器存储也是可以的,但是做出来的产品价格将会特别昂贵!用磁盘存所有的数据也行,但是嵌入式设备的运行速度将会特别慢!所以两者在商业上并不可行。因此我们的寄存器一般用特别小的容量,Cache容量比寄存器大,主存储器容量又比RAM大,如此递推,可以获得最佳的性价比。
第三节 寄存器
通常是嵌入式开发中最高速的存储器,由边沿触发方式的的触发器、门电路组成,价格极为昂贵。主要作用是用来暂时存放数码或指令,一个触发器可以存储1位二进制代码,故存放n位二进制代码的寄存器,需用n个触发器来构成。
第四节 高速缓存Cache
大家在嵌入式开发中,可能比较少听说过Cache这个词,但Cache的作用是至关重要的。你可以把Cache理解为一个承上启下的存储器,它传递数据给CPU,又向主存获取数据。那么为什么不直接从主存直接获取内容传给CPU?原因是存储速度和储存的局部性原理。为了缓解CPU和主存中速度差异,引入Cache这种比CPU速度慢但是又比主存速度快的中间介质会有效解决速度差异带来的矛盾。再者存储是有局部性的,在CPU运行时,所访问的数据会趋向于一个较小的局部空间地址内(例如循环操作,循环体反复被执行),所以高速缓存Cache用来存储当前最为活跃的程序和数据,直接与CPU交互。Cache由半导体材料(通常是SRAM)构成,其功能对于程序员来说是透明的存在,所以大部分程序员都没有留意到它。这里值得注意的是Cache的存储内容是当前最为活跃的程序和数据,因此Cache有一个命中率的概念,即当CPU所访问的数据在Cache中命中时,直接从Cache中读取数据。若CPU访问的数据不在Cache中,则还是需从主存中读取。
第五节 RAM
RAM是随机存取存储器(Random Access Memory)的简称,其存储的内容可以随意取出或者存入,且存取速度与存储单元的位置无关,存储速度快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。这种存储器在断电时将会丢失其存储内容,故用于存储短时间使用的程序和数据。嵌入式开发常见的RAM有:SRAM、DRAM、DDRAM(双倍速率随机存储器)。
①SRAM是静态的,因此只要供电它就会保持一个值,不用对它进行周期性刷新。其由触发器构成基本单元,每个存储单元由六个晶体管组成,因此其成本较高,但它具有较高的速率,可以用来做Cache。
②DRAM是动态的,需要有规律地定时进行刷新,但是价格比SRAM低。DRAM中的每个存储单元由一个晶体管和一个电容器组成,因为组成包括电容器,而电容器会漏电,所以才要定期刷新,刷新周期一般为1ms。
③SDRAM(Synchronous DRAM,同步动态随机存储器),即数据的读写需要时钟来同步。其存储单元不是按线性排列的,是分页的。DRAM和SDRAM由于实现工艺问题,容量较SRAM大。但是读写速度都不如SRAM。
④DDRAM(display data RAM)是显示数据随机存储器的简称,为了解决SDRAM中读写速度慢的一种RAM。其基于SDRAM技术,引入一种叫做双倍预取的技术(即在内存芯片内部的数据宽度是外部接口数据宽度的两倍),使峰值的读写速度达到输入时钟速率的两倍。
第六节 主存储器
主存储器常见的有ROM和Flash两种,一般被用来保存较大容量的数据,现在的人习惯把Flash也叫做ROM。其实ROM指的是只读存储器(Read Only Memory,一般是指MaskROM)和Flash(闪速存储器)有一定区别。但是Flash又是从ROM和RAM的发展而来,Flash不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据(RAM的优势),就常被电商划分为ROM了。
主存储器的种类:
- MaskROM(掩模ROM):一次性由厂家写入数据的ROM,用户无法修改。
- PROM(可编程ROM):由用户来编程一次性写入数据,只能写入数据一次。
- EPROM(电可擦写ROM):可以重复擦除与写入,但是要通过紫外光才能擦除。
- EEPROM(电可擦除可编程ROM,也就是E²PROM):解决了EPROM的擦除问题,可以通过加电擦除原数据,擦除更加方便。
- Flash Memory(闪速存储器):综合了EEPROM的优点,而且极大提高了读写速度。常见的有NOR Flash、NAND Flash。NOR Flash允许程序直接在上面运行,但是价格比较贵。NAND Flash解决了NOR Flash成本较贵的问题,但是NAND Flash的困难在于需要特殊的系统接口。
- EMMC (Embedded Multi Media Card):将NAND Flash芯片和控制芯片设计成1颗MCP芯片,手机客户只需要采购eMMC芯片,放进新手机中,不需处理其它繁复的NAND Flash兼容性和管理问题,最大优点是缩短新产品的上市周期和研发成本,加速产品的推陈出新速度。
第七节 外部存储器
常见的外部存储器分为磁盘存储器、光盘存储器、CF卡、SD卡。一般被用来保存大容量的数据,其特点如下:
- 磁盘储存器:分为硬盘和软盘,容量大、使用寿命长但价格昂贵,主要在个人PC中应用多,较少出现在嵌入式领域中。
- 光盘存储器:用光学方式读取/写入信息的圆盘,一般用于多媒体数字信息的载体,较少出现在嵌入式领域中。
- CF卡:最早推出的存储卡,体积比磁盘储存器和光盘存储器小,抗磁性好、储存性能稳定
- SD卡:可以看做CF卡的升级版,体积比CF卡小,安全性也更高。支持SD模式和SPI模式,外围只需简单电路就可以用于嵌入式开发。嵌入式领域最常见的外部存储器。
第八节 存储管理和页面置换算法
通过前面几节的学习,我们对嵌入式存储体系有了一定的了解,那么在这个体系下,会出现一个问题—当进程运行所需的内存大于系统内存时,就无法将整个进程一起调入系统内存,因此无法运行。为了解决上面这个矛盾,我们采用页式存储或者段式存储将进程空间划分。此时总的进程空间就会变成多个小段的进程空间,然后通过页面置换算法进行淘汰,使分出的小段进程空间有序调入内存中运行。