RAM和ROM的区别

发布时间 2023-10-07 10:18:41作者: ImreW

一、CPU,寄存器,缓存,RAM,ROM的作用和他们之间的联系

中央处理器

中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。
中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核心部件。

寄存器

寄存器是中央处理器内的组成部份。它跟CPU有关。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。

存储器

存储器范围最大,它几乎涵盖了所有关于存储的范畴。你所说的寄存器,内存,都是存储器里面的一种。凡是有存储能力的硬件,都可以称之为存储器,这是自然,硬盘更加明显了,它归入外存储器行列。


 

内存

内存既专业名上的内存储器,它不是个什么神秘的东西,它也只是存储器中的沧海一粟,它包涵的范围也很大,一般分为只读存储器(ROM)随机存储器(RAM),以及最强悍的高速缓冲存储器(CACHE),只读存储器应用广泛,它通常是一块在硬件上集成的可读芯片,作用是识别与控制硬件,它的特点是只可读取,不能写入。随机存储器的特点是可读可写,断电后一切数据都消失,我们所说的内存条就是指它了。

缓存CACHE

缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在用完后还是会把文件送到硬盘等存储器里永久存储。电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给显卡运算芯片用的缓存,硬盘上也有16M或者32M的缓存。

CACHE是在CPU中速度非常块,而容量却很小的一种存储器,它是计算机存储器中最强悍的存储器。由于技术限制,容量很难提升。


 

ROM、RAM的区别:

ROM(只读存储器或者固化存储器)

RAM(随机存取存储器)

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

RAM有两大类,一种称为静态RAM(Static RAM/SRAM),当数据被存入其中后不会消失。SRAM速度非常快,是目前读写最快的存储设备了。当这个SRAM 单元被赋予0 或者1 的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电之后才会更改或者消失。但是存储1bit 的信息需要4-6 只晶体管。因此它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM 必须在一定的时间内不停的刷新才能保持其中存储的数据。DRAM 只要1 只晶体管就可以实现。DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很 多,计算机内存就是DRAM的。

DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用 得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。

ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修 改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。

最初,把只能读的存储器叫做ROM(Read Only Memory),并且掉电后数据不会丢失。由于不能改写,因而使用起来很不方便。随着技术的进步,在ROM中使用一些新技术,就可以使它具有可以编程的功能。比较早的是熔丝型的可编程ROM,由于是通过熔断熔丝来编程的,所以这类ROM编程后,就不能再写了,是一次性的(OTP)。后来又出现了EPROM,是通过紫外线来擦除的,并且通过高压来编程,这类ROM上面一般有一个透明的石英玻璃窗,看上去挺漂亮的,它就是用来给紫外线照射的。后来又出现了EEPROM,不用紫外线照射就可以擦除,因而可以直接在电路中编程。另外还有FLASH ROM,又可分为NOR FLASH和NAND FLASH。FLASH ROM一般有一个特点,就是写数据时,可以将1改为0,而不能将0改为1,因而写数据前需要擦除,擦除时将所有数据置1。

之所以依然叫做ROM,归纳一下,大概有几个原因:

  • ①不能像RAM那样快速的写;
  • ②可能需要特殊的擦写电压;
  • ③可能需要特殊的擦写时序;
  • ④可能需要在写之前进行擦除操作;
  • ⑤擦写次数有限,不像RAM那样可以随意写而不损坏;
  • ⑥掉电后数据不会丢失;
  • ⑦有些可写的存储器只能写一次(OTP)。

举个例子,手机软件一般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通过记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。

FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦出可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据 (NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来 Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

目前Flash主要有两种NOR FlashNADN Flash。NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一快的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户 不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还作上了一块小的NOR Flash来运行启动代码。

一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的“闪盘”,可以在线擦除。

二、RAM和ROM的区别

只读存储器(Read Only Memory,ROM)。ROM所存数据,一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,计算机中的ROM主要是用来存储一些系统信息,或者启动程序BIOS程序,这些都是非常重要的,只可以读一般不能修改,断电也不会消失。

随机存取存储器(Random Access Memory,RAM)又称作“随机存储器”,是与CPU直接交换数据的内部存储器,也叫主存(内存)。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介。当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。

从电脑来说一般比较好理解,RAM就是我们平时所说的运行内存,它的确是随时可读写的。因为CPU处理的数据都是以运行内存为中介的。断电后信息是不保存的。那么对于ROM来说,是不是就是硬盘呢?不是说ROM只可以读吗?硬盘却是可以修改的。的确,必须明确一点,RAM与ROM都是内存,而硬盘是外存,所以ROM不等于硬盘。只不过RAM叫随机内存,ROM叫只读内存。


 

内存(即随机存贮器RAM)可分为静态随机存储器SRAM,和动态随机存储器DRAM两种。我们经常说的“内存”是指DRAM。而SRAM大家却接触的很少。  

SRAM其实是一种非常重要的存储器,它的用途广泛。SRAM的速度非常快,在快速读取和刷新时能够保持数据完整性。SRAM内部采用的是双稳态电路的形式来存储数据。所以SRAM的电路结构非常复杂。制造相同容量的SRAM比DRAM的成本高的多。正因为如此,才使其发展受到了限制。因此目前SRAM基本上只用于CPU内部的一级缓存以及内置的二级缓存。仅有少量的网络服务器以及路由器上能够使用SRAM。例如可以对全局变量、局部静态变量、全局静态变量等。

举例说明

可以知道SRAM属于RAM,掉电后数据丢失;FLASH和EEPROM属于ROM,掉电后数据不丢失。

FLASH和EEPROM的区别在于:Flash存储器,适用于速度要求高,容量要求大,掉电时要求数据不丢失的场合;EEPROM适用于速度不高,容量不大,掉电时要求数据不丢失的场合。

了解这些之后,翻看开发板的stm32f103开发手册统计一下用到了哪些内存。

  • 1.芯片自带内存:SRAM:20K,FLASH:128K.
  • 2.IIC实验里介绍MCU与24C02通过IIC实现通讯,24C02是一款EEPROM芯片,总容量2Kbit。
  • 3.SPI实验里介绍MCU与W25Q128通过SPI实现通讯,W25Q128是一块外部FLASH,容量128Mb,也就是16M字节。

知道了有哪些内存,再来总结下各个内存块的用处。

在单片机中,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据。

三、堆栈、全局变量、全局静态变量、局部静态变量、文字常量、函数代码

据我所知,单片机程序可分为 Code(数据代码区)、RO-data(只读存储区)、RW-data(可读可写存储区)、ZI-data(零初始化存储区),

其中Code(数据代码区) 和RO-data(只读存储区)存储在FLASH中,RW-data(可读可写存储区)和ZI-data(零初始化存储区)存储在SRAM中。

那麽堆栈、全局变量、全局静态变量、局部静态变量、文字常量、函数代码分别存储在那些存储区中呢?

栈区(Stack) 包含在RW-data(读写数据存储区) 存放函数的参数值,局部变量的值等
堆区(Heap) 包含在单片机的sram中的(读写数据存储区) 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。
全局区(静态区)(static) 全局变量、全局静态变量、局部静态变量((读写数据存储区)) 这些数据也是可读可写的,和stack、heap一样,被包含在sram中。
一般未初始化的变量 ZI-data(零初始化存储区) 被包含在sram中, 掉电会丢失数据
文字常量(const) RO-data(只读存储区) 掉电不会丢失数据,EEPROM或者FLASH中
函数代码 存放函数体的二进制代码Code(数据代码区) 因为对于MCU来说,当其重新上电,代码还会继续运行,并不会消失,所以存储在flash中(Flash主要用来存储程序)