原文:rom和ram区别是什么
相信有很多人都对计算机里的各种存储器(ROM、RAM、FLASH 等等)傻傻分不清,就会存在,内存条是 dram 还是 nand?nand flash 和 nor flash 的区别又是什么?程序运行是在DRAM还是 NOR FLASH?ram 和 rom 的区别?等等的疑问。从 IT 小白到资深工程师都会存在这种现象。本文将根据个人理解,从存储器与 CPU 的接口、程序运行的角度,系统而详细介绍各种存储器的分类与用途,从而让读者深刻的认识并区分各种存储器。ROMROM 是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器,部分拥有 CPU 的总线接口,可以执行代码(需要配合RAM,因为程序的执行过程肯定有写操作的)。这是很早期的定义了,现今 ROM 的概念已经非常广了,通常掉电后数据不会消失的半导体存储器都泛称为 ROM 了。比如手机参数里所说的 ROM 通常就是指 NAND FLASH 类存储器。但这些 ROM 基本上都是不支持执行代码的。NAND FLASH
Nand FLASH 是目前市面上的两种主流的非易失性闪存技术之一,支持掉电保存数据,具有容量较大,改写速度快的优点。但不能通过 CPU 总线随机访问,依赖 NAND FLASH 控制器访问,所以不能直接执行程序。通常作为广义上的 ROM 来使用。NOR FLASHNOR FLASH 和 Nand FLASH 一样,是两种主流的非易失性闪存技术之一,同样支持掉电保存数据。相对于 NAND FLASH,NOR FLASH 有类似于RAM的接口,可以通过 CPU 总线随机访问,所以可以作为传统的 ROM 直接执行程序,不过也是需要与 RAM 配合,因为 NOR FLASH 不支持随机写操作。NOR FLASH 的成本较高,在容量小的时候收益才较大。SRAM
静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器中的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持,掉电还是会消失的。这是性能十分优秀的 RAM,但价格较高,一般用在 CPU 内部做高速缓存(cache),或是起步石。如三星的 S3C2440 内部就有 16Kb 的指令缓存、16Kb 的数据缓存和 4Kb 的内部 RAM(起步石)。
DRAM
动态随机存取存储器(Dynamic Random Access Memory),是如今最为常见的系统内存 RAM(无论是个人电脑还是智能手机)。它相对于SRAM,在通电的情况下,也只能将数据保持很短的时间,为了保持数据稳定,所以必须隔一段时间就要对存储单元刷新(refresh)一次,如果存储单元没有被刷新,那么存储的数据就会丢失。
SDRAM
同步动态随机存储器(Synchronous Dynamic Random Access Memory),它与 DRAM 类似,只是多了一个同步(Synchronous)。同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。
程序的执行与存储器的关系
最后再从程序执行的角度来区分以上各种存储器。首先,程序的执行有取指令、分析指令和执行指令这三个过程。取指令的过程必然有按顺序取指令和跳跃取指令这两种方式的,那么在程序执行过程中,指令的存储器就必须是支持随机读取的。而执行指令这个过程则必然会有随机写这一需求的。
那么,以上各种存储器的差别就很明显了。
1、在程序没有被执行的时候,程序可以存在所有支持掉电保存数据的存储器(ROM、NAND FLASH、NOR FLASH)。当程序需要被执行的时候再将其加载到可以执行程序的存储器中。
2、当程序执行时,
(1)很明显各种 RAM(SRAM、DRAM、SDRAM)都是可以完全的支持程序执行的,因为它们都是支持随机读/写的。
(2)而对于拥有总线接口的 ROM 和 NOR FLASH 来说则不能完全支持程序的执行了,因为它们只支持随机读,而不支持随机写。所以,要想在程序执行时将代码存在 ROM 或者 NOR FLASH,则需要 RAM 的配合。代码指令存在 ROM 或 NOR FLASH 上执行,而需要写的存储空间则安排在 RAM,如此,也就可以在 ROM 和 NOR FLASH 上执行程序了。