存储器
存储器是用来存储程序和各种数据信息的记忆部件
许多存储单元的集合,按单元号顺序排列。每个单元由若干二进制位(8位 16位 32位)构成,以表示存储单元中存放的数值,这种结构和数组的结构非常相似
存储器的单元地址只有一个,固定不变,而存储在其中的信息是可以更换的
存储器的分类:
![](https://i-blog.csdnimg.cn/blog_migrate/7ef85f9c65dbdac5f2c56b1110e1c02d.png)
磁盘与内存
内存和硬盘都属于计算机的存储设备,断电后内存的数据是会丢失的,而硬盘则不会,因为硬盘是持久化存储设备,同时也是一个 I/O 设备。
硬盘可以选择是固态硬盘还是机械硬盘
注意:存储设备除了内存和硬盘,还有CPU 内部存储数据的组件,比如寄存器、CPU L1/L2/L3 Cache 也都是属于存储设备,但存储的数据非常小。并且靠近 CPU 核心,所以访问速度都非常快,快过硬盘好几个数量级别。
存储器的层次结构
CPU 中的寄存器,处理速度是最快的。
CPU Cache,中文称为 CPU 高速缓存,处理速度相比寄存器慢了一点,但是能存储的数据也稍微多了一些。是能存储的数据也是最少的。
CPU Cache 通常会分为 L1、L2、L3 三层,其中 L1 Cache 通常分成「数据缓存」和「指令缓存」,L1 是距离 CPU 最近的,因此它比 L2、L3 的读写速度都快、存储空间都小。
![](https://i-blog.csdnimg.cn/blog_migrate/453c3d8aebe7e080fa78855a5b71aaca.png)
对于存储器,它的速度越快、能耗会越高、而且材料的成本也是越贵的,以至于速度快的存储器的容量都比较小。
寄存器
寄存器是最靠近 CPU 的控制单元和逻辑计算单元的存储器。
寄存器的数量通常在几十到几百之间,每个寄存器可以用来存储一定的字节(byte)的数据。比如:
32 位 CPU 中大多数寄存器可以存储 4 个字节;
64 位 CPU 中大多数寄存器可以存储 8 个字节。
寄存器的访问速度非常快,一般要求在半个 CPU 时钟周期内完成读写,CPU 时钟周期跟 CPU 主频息息相关,比如 2 GHz 主频的 CPU,那么它的时钟周期就是 1/2G,也就是 0.5ns(纳秒)。
RAM
RAM 是随机存储器也叫主存,是与CPU直接交换数据的内部存储器。它可以随时读写,时间都是相同的而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储介质。而RAM 又分为静态随机访问存储器(Static Random Access Memory - SRAM)和动态随机存取存储器(Dynamic Random Access Memory -DRAM)两种。
DRAM
动态随机存储器 (Dynamic RAM)的存储单元以电容的电荷来表示数据,有电荷代表 1,无电荷代表 0,代表 1 的电容会放电,代表 0的电容会吸收电荷,因此它需要定期刷新操作,才能保存数据,这就是“动态(Dynamic)”一词所形容的特性。
![](https://i-blog.csdnimg.cn/blog_migrate/13c9f97417fa5a88008691bb262a73fa.png)
DRAM存储单元
SRAM
静态随机存储器 SRAM 的存储单元以锁存器来存储数据,即只要有电,SRAM中的数据就不会有变化。加电情况下,不需要定时刷新充电,数据不会丢失。
注意:一般只用于 CPU内部的高速缓存(Cache),而外部扩展的内存一般使用 DRAM
![](https://i-blog.csdnimg.cn/blog_migrate/60535bd67b4cfa08719e0328e49a5a4b.png)
SRAM存储单元
ROM
只读存储器以非破坏性读出方式工作,只能读出无法写入信息。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出,不像随机存储器能快速方便地改写存储内容。 当然,现在的ROM包括闪存就是U盘,包括固态硬盘等,都是可写入的。ROM已经不是只读的了。
RAM和ROM相比,两者的最大区别是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。 并且RAM的速度要远远高于ROM的速度。
CPU Cache
CPU Cache 是CPU内核集成的缓存称为一级缓存(L1 cache)静态SRAM(Static Random-Access Memory,静态随机存储器) ,而外部的称为二级缓存(L2 Cache)动态DRAM;后来随着生产技术的不断提高,最终二级缓存也被挪进了CPU当中。CPU内缓存的运行频率极高,一般是同处理器同频运行,工作效率远远大于系统内存和硬盘。
在 SRAM 里面,一个 bit 的数据,通常需要 6 个晶体管,所以 SRAM 的存储密度不高,同样的物理空间下,能存储的数据是有限的,不过也因为 SRAM 的电路简单,所以访问速度非常快。
CPU 的高速缓存,通常可以分为 L1、L2、L3 这样的三层高速缓存,也称为一级缓存、二级缓存、三级缓存。
L1 高速缓存
L1 高速缓存的访问速度几乎和寄存器一样快,通常只需要 2~4 个时钟周期,而大小在几十 KB 到几百 KB 不等。
每个 CPU 核心都有一块属于自己的 L1 高速缓存,指令和数据在 L1 是分开存放的,所以 L1 高速缓存通常分成指令缓存和数据缓存。
L2 高速缓存
L2 Cache(二级缓存)是CPU的第二层高速缓存,分内部和外部两种芯片。内部的芯片二级缓存运行速度与主频相同,而外部的二级缓存则只有主频的一半。L2 高速缓存位置比 L1 高速缓存距离 CPU 核心 更远,它大小比 L1 高速缓存更大,L2高速缓存容量也会影响CPU的性能,原则是越大越好,CPU 型号不同大小也就不同,现在家庭用CPU容量最大是512KB,而服务器和工作站上用CPU的L2高速缓存更高达256KB—1MB。访问速度则更慢,速度在 10~20 个时钟周期。
L3 高速缓存
L3 Cache(三级缓存)分为两种,早期的是外置,现在的都是内置的。而它的实际作用是进一步降低内存延迟,同时提升大数据量计算时处理器的性能。降低内存延迟和提升大数据量计算能力。而在服务器领域增加L3缓存在性能方面仍然有显著的提升。比方具有较大L3缓存的配置利用物理内存会更有效,故它比较慢的磁盘I/O子系统可以处理更多的数据请求。具有较大L3缓存的处理器提供更有效的文件系统缓存行为及较短消息和处理器队列长度。
L3 高速缓存通常是多个 CPU 核心共用的,位置比 L2 高速缓存距离 CPU 核心 更远,大小也会更大些,通常大小在几 MB 到几十 MB 不等,具体值根据 CPU 型号而定。访问速度相对也比较慢一些,访问速度在 20~60个时钟周期。
内存
内存用的芯片和 CPU Cache 有所不同,它使用的是一种叫作 DRAM (Dynamic Random Access Memory,动态随机存取存储器) 的芯片。
相比 SRAM,DRAM 的密度更高,功耗更低,有更大的容量,而且造价比 SRAM 芯片便宜很多。
DRAM 存储一个 bit 数据,只需要一个晶体管和一个电容就能存储,但是因为数据会被存储在电容里,电容会不断漏电,所以需要「定时刷新」电容,才能保证数据不会被丢失,这就是 DRAM 之所以被称为「动态」存储器的原因,只有不断刷新,数据才能被存储起来。
DRAM可以分为同步和异步两种,这两种方式根据通讯时是否需要使用时钟信号来区分。
DRAM 的数据访问电路和刷新电路都比 SRAM 更复杂,所以访问的速度会更慢,内存速度大概在 200~300 个 时钟周期之间。内存已经是 100 纳秒了,相比 L1 Cache 速度慢了 100 倍。
DDR
ddr是一个内存名称,意思即双倍速率同步动态随机存储器,是内存的其中一种。
SDRAM在一个时钟周期内只传输一次数据,它是在时钟的上升期进行数据传输;而DDR内存则是一个时钟周期内传输两次数据,它能够在时钟的上升期和下降期各传输一次数据,因此称为双倍速率同步动态随机存储器。
DDR内存可以在与SDRAM相同的总线频率下达到更高的数据传输率。
DDR SDRAM 有多个内存条,提供多个隔行扫描的内存访问,从而提高内存带宽。内存条是一个内存阵列,两个内存条是两个内存阵列,四个内存条是四个内存阵列,
DDR经历到现在已经到了DDR5 每代具体的区别如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/18ad91f1f442f54c2ccdcd3e85a8792c.png)
SSD/HDD 硬盘
SSD(Solid-state disk) 就是我们常说的固体硬盘,结构和内存类似,但是它相比内存的优点是断电后数据还是存在的,而内存、寄存器、高速缓存断电后数据都会丢失。内存的读写速度比 SSD 大概快 10~1000 倍。
当然,还有一款传统的硬盘,也就是机械硬盘(Hard Disk Drive, HDD),它是通过物理读写的方式来访问数据的,因此它访问速度是非常慢的,它的速度比内存慢 10W 倍左右。
由于 SSD 的价格快接近机械硬盘了,因此机械硬盘已经逐渐被 SSD 替代了。
存储器的层次关系
现代的一台计算机,都用上了 CPU Cahce、内存、到 SSD 或 HDD 硬盘这些存储器设备了。
存储空间越大的存储器设备,其访问速度越慢,所需成本也相对越少。
CPU 并不会直接和每一种存储器设备直接打交道,而是每一种存储器设备只和它相邻的存储器设备打交道。
比如,CPU Cache 的数据是从内存加载过来的,写回数据的时候也只写回到内存,CPU Cache 不会直接把数据写到硬盘,也不会直接从硬盘加载数据,而是先加载到内存,再从内存加载到 CPU Cache 中。
每个存储器只和相邻的一层存储器设备打交道,并且存储设备为了追求更快的速度,所需的材料成本必然也是更高,也正因为成本太高,所以 CPU 内部的寄存器、L1\L2\L3 Cache 只好用较小的容量,相反内存、硬盘则可用更大的容量,这就我们今天所说的存储器层次结构。另外,当 CPU 需要访问内存中某个数据的时候,如果寄存器有这个数据,CPU 就直接从寄存器取数据即可,如果寄存器没有这个数据,CPU 就会查询 L1 高速缓存,如果 L1 没有,则查询 L2 高速缓存,L2 还是没有的话就查询 L3 高速缓存,L3 依然没有的话,才去内存中取数据。
最慢的机械硬盘随机访问延时已经高达 10 毫秒,我们来看看机械硬盘到底有多「龟速」:
SSD 比机械硬盘快 70 倍左右;
内存比机械硬盘快 100000 倍左右;
CPU L1 Cache 比机械硬盘快 10000000 倍左右;