写在前面
在没有接触过嵌入式之前,对于计算机存储的认知仅限于知道硬盘和内存,然后硬盘掉电可以保存数据,内存掉电丢失数据。后来逐渐听到更多的专业名词,什么ROM,RAM,SRAM,DRAM,FLASH,,NandFlash,NorFlash等等了。以前将自己的定位总是局限在协议工程师,对于和硬件和驱动相关的东西有些抵触,随着工作的深入,也时常会用到一些I2C,gpio之类的东东。本着沉下来,归零,再出发的心态,这篇文章用来梳理一下自己对于计算机存储体系的认知。
总体架构
下面这张图大家应该都很熟悉了
生活中的大部分物品,基本都满足“好的不一定是最贵的,但是最贵的一定是好的”,在计算机存储体系中,基本满足了上面这句话。塔尖上的那一小撮是最贵的,最快的,存储空间最小的。在实际生产中需要做到价格与性能(或者说实际需求)的平衡。下面从上到下梳理一下吧。
寄存器
恩,之前软考《网络工程师》的时候接触过一点点.哦,文章有点跑题了,但是还是想记录一下。CPU执行指令分为:取指令,分析指令,执行指令三部曲,这里面会用到一系列的寄存器,有分别属于控制器和运算器,列举几个常见的。
1 | 控制器 |
指令包括操作码和地址码(操作数所在的地址)
1 | 运算器: |
具体见下图:
寄存器是CPU的内部组成单元,是CPU运算是取指令和数据最快的地方。当然不仅仅是CPU了,比如交换芯片及很多其它的ASIC都是用寄存器来实现某些功能的,你会发现芯片SDK提供的API最底层就是读写某些寄存器来实现具体功能。
cache与主存
cache与主存都是RAM(Random-Access Memory, 随机访问存储器),cache使用的是静态SRAM,主存使用的是DRAM。这两种器件掉电数据都会丢失。
SRAM只要存储器保持通电,里面存储的数据就可以保持不变。
DRAM需要周期性的充电刷新,主存也就是我们PC中的内存条了。
ROM与flash
以前一直纳闷为啥只读存储还能改里面的数据。
ROM一般用来存放bootloader(一般叫做固件,firmware),这里面的内容在程序运行期间是无法更改的,掉电数据依然存在。
早期ROM在工厂里用特殊方法烧录进去,一旦烧录进去,用户只能验证写入的资料是否正确,不能再做任何修改。
后来人们发明了PROM(Programmable ROM, 可编程ROM),工厂制作的PROM内部没有数据,用户可以使用专用的编程期间烧写资料进去,但只能写一次,一旦写入也无法修改。
再后来发明了EPROM(Erasable Programmable ROM, 可擦写可编程ROM),芯片可以重复擦除和写入,但是需要使用紫外线照射芯片,比较麻烦。
再后来发明了EEPROM(Electrically Erasable Programmable ROM,电可擦除可编程ROM),用专门的烧录器和烧录软件就可以直接烧录了,很方便。现在用的ROM大部分是这种。
至于flash,咱们常见的u盘,固态硬盘灯都是基于flash中的NandFlash。flash分为NorFlash和NandFlash两种类型。
Nor的读取速度比Nand快一些,Nand的写入速度比Nor快很多,Nand的成本低,哈,这是很重要的。
Nand的读写操作是以块为单位的,Nor是以字节为单位。
NorFlash一般用来替代ROM用来存放BootLoader,容量较小,支持芯片内执行(XIP, eXecute In Place),Nand就是用来做大容量数据存储的啦!
顺带提一下eMMC,这玩意没见过。eMMC相当于NandFlash+主控IC ,对外的接口协议与SD、TF卡一样,主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器。eMMC由一个嵌入式存储解决方案组成,带有MMC(多媒体卡)接口、快闪存储器设备(Nand Flash)及主控制器,所有都在一个小型的BGA 封装。
结束语
其实就是RAM的分类,ROM的分类,以及Flash的分类有点迷!搞清楚特性,对应上用途!
参考资料:
计算机存储器结构体系详解
NorFlash、NandFlash、eMMC闪存的比较与区别
NAND flash和NOR flash的区别详解