按照离CPU的层次分类:
按照存储介质进行分类:
按照存取方式进行分类:
按照可更改性分类:
按照信息的可保存性分类:
主存储器的基本构成如下图所示:
其可以简化为下图的结构:
其中:
DRAM为动态随机存储器,通常使用栅极电容存储信息,其特性有:
DRAM和SRAM的存储单元差异可见下图:
此外,由于DRAM内存较大,因此其译码器在设计时也不能像左侧那样只使用一个译码器去寻找
DRAM地址线复用技术:同一根线先后传输行地址和列地址,以达到行列地址线的复用。
DRAM的刷新:
SRAM为静态随机存储器,通常使用双稳态触发器存储信息,其特性有:
DRAM和SRAM对比如下:
SRAM | DRAM | |
---|---|---|
信息存储单元 | 双稳态触发器 | 电容 |
读出是否破坏数据 | 否 | 是 |
读出后是否需要重写 | 否 | 是 |
访问速度 | 快 | 慢 |
集成度 | 低 | 高 |
功耗 | 高 | 低 |
制造成本 | 高 | 低 |
断电后数据是否丢失 | 是 | 是 |
是否需要刷新 | 否 | 是 |
常用场景 | Cache | 运行内存 |
以上图为例,一般来说,RAM的访问有如下几个环节:
CPU访问DRAM的流程为:
则DRAM的时序参数(并非总耗时)主要有:
则DRAM访问的时间线为:
tRCD CL tRP
|-----------|-------------|------------|
↑ ↑ ↑ ↑
发送RAS 发送CAS 数据返回 下次行激活
(行激活) (列选通) (数据传递) (新访问)
则DRAM访问的耗时为:
只读存储器、Read Only Memory,ROM。其通常有如下几种:
上述章节所描述的RAM模型只有一个数据总线和一个地址总线,当有多个硬件(如多核CPU、DMA等)需要同时访问时,则会遇到严重的性能问题。
那么此时可以引入双端口RAM,双端口RAM有两个地址总线和两个数据总线,支持两个设备的并行访问:
其访问规则为:
两个设备同时读取不同的地址 | 允许 |
两个设备同时读取相同的地址 | 允许 |
两个设备同时写入不同的地址 | 允许 |
两个设备同时写入相同的地址 | 不允许,RAM向设备发送Busy信号 |
两个设备分别读写相同的地址 | 不允许,RAM向设备发送Busy信号 |
在章节DRAM的时序中讲到,在CPU完成一次对RAM的某个Bank访问之后,需要一定时间(tRP)的恢复才能访问该Bank的新行。但是在该等待时间内可以访问其他的Bank,因此需要将多个Bank之间进行交叉编制,明显地,交叉编址主要有如下两种:
将多个存储单元按高低位横向拼接,例如将4个1Byte存储体拼成4Byte存储体:
现代计算机中:
当DRAM存储芯片的数据位宽度小于CPU的数据总线宽度时,可以将若干个DRAM存储芯片在位宽度上拓展到对应的总线宽度即可:
当DRAM存储芯片的地址位宽度小于CPU的地址总线宽度,并且需要拓展到足够的内存时,可以将地址总线用译码器进行管理即可:
排列组合即可:
本章节主要讲解外部存储器的硬件特性,至于操作系统及软件层面的应参见操作系统学科。
磁表面存储器主要有如下几种:
补充一些操作系统中未提及的概念:
SSD的构成可参考下图:
内存翻译层由主控制器负责,SSD上通常由多个闪存芯片(EEPROM),通常块大小为16KB~512KB,页大小为512B~4KB。其寻址速度比HDD更快。
RAID阵列全名为Redundent Array Inexpensive Disks,即廉价冗余磁盘阵列。该技术可以将多个独立物理磁盘组成一个独立的逻辑盘,并将数据分散在多个物理盘上交叉存储、并行访问、冗余校验。(注意RAID并不是备份技术)
通常来说,RAID有如下几种阵列方式,以若干连续数据 A1 A2 A3 ... A8
为例:
因此单位数据成本上:RAID0 > RAID1 > RAID2 > RAID3 > RAID4 > RAID5
略,详见操作系统。
Cache集成于CPU内部,用于缓和CPU和RAM之间的速度差距。
SMP处理器的基本内存缓存架构如下图所示:
其多个CPU之间的L1、L2 Cache每个CPU独立使用,L3和RAM是共享使用。
而在CPU进行运算或操作时,其数据一定存放于寄存器中。因此在具有多级缓存的CPU架构下,CPU操作数据时,其流程为(假设访问区域合法):
需要注意的是:
在性能分析时,可以使用各级的命中率计算访存时间。
如上述所述,CPU在缓存-内存分级管理时,其基本单位是缓存行(也可叫做缓存块、Cache块等),而MESI就是硬件维护缓存一致性的基础协议。其将缓存行的状态分为如下四种:
在L1、L2缓存中,每一个缓存行都存储的有一份MESI状态标志。当一个核心修改缓存行时,协议通过广播消息使其他核心的对应缓存失效(Invalidation),从而确保对共享数据的操作是原子性的。
在早期Intel Core系列的L3中也使用MESI进行管理,但是现在的x86和ARM中已经改为MOESI协议。
在解决了缓存一致性问题之后,还需要解决Cache和RAM映射关系的问题。Cache和主存的映射方式主要有如下三种:
需要注意的是,Cache和主存之间需要实现双向匹配,一方面需要允许主存能够快速的向Cache中缓存数据,另外一方面也要能快速的使用物理内存地址寻找到对应的缓存行。那么上述三种映射方式的匹配规则分别为: