存储器层次结构

物理介质

存储技术

随机访问存储器

基本存储体系

1)输入设备将程序与数据写入主存; 2) CPU取指令; 3) CPU执行指令期间读数据; 4) CPU写回运算结果; 5) 输出设备输出结果;

主存速度慢的原因

主存容量不足的原因

存储体系的层次结构

2021927173034

存储器 硬件介质 单位成本(美元/MB) 随机访问延时 说明
L1 Cache SRAM 7 1ns
L2 Cache SRAM 7 4ns 访问延时15x L1 Cache
Memory DRAM 0.015 100ns 访问延时15X SRAM,价格1/40 SRAM
Disk SSD(NAND) 0.0004 150μs 访问延时1500X DRAM,价格1/40 DRAM
Disk HDD 0.00004 10ms 访问延时70X SSD,价格1/10 SSD

局部性

时间局部性

空间局部性

主存中的数据组织

ISA设计时要考虑的两个问题

数据存储与边界

按边界对齐的数据存储:浪费一些空间

批注 2020-01-30 161009

未按边界对齐存放:虽节省了空间,但增加了访存次数

批注 2020-01-30 161136

需要在性能与容量间权衡

大端与小端存储

无论是大端还是小端,每个系统内部是一致的,但在系统间通信时可能会发生问题!因为顺序不同,需要进行顺序转换

存储技术

随机访问存储器

静态RAM(SRAM)

批注 2020-01-30 162459

工作原理

结构

批注 2020-01-15 092634

静态存储器的不足

动态RAM(DRAM)

202274213610

批注 2020-01-30 164801

DRAM与SRAM不同的是,需要靠不断地“刷新”,才能保持数据被存储起来

刷新

集中刷新

分散刷新

异步刷新

其它结构的DRAM存储单元

批注 2020-01-30 190355

传统DRAM

存储扩展

用16K X 8 的存储芯片构建16K X 32的存储器

用16K X 8 的存储芯片构建128k X 8的存储器

用16K X 8 的存储芯片构建128K X 32的存储器

批注 2020-01-30 190639

无论哪种类型的存储扩展都要完成CPU与主存间地址线、数据线、控制线的连接

磁盘存储

磁盘构造

构造

性能度量

访问优化

物理结构决定了磁盘更擅长顺序访问,为了优化随机读写的低效率,有一些手段:

磁盘容量度量

连接到磁盘

访问磁盘

内存映射:将磁盘文件映射到进程的虚拟地址空间中的技术,这样就可以像访问内存一样访问磁盘文件,从而方便了文件的读写操作

固态硬盘

raid

raid的数据拆分有两种:

比特级的粒度较细,所以读写效率相对较低能

批注 2020-02-08 204640

RAID级别说明 可靠性 读性能 写性能 最少硬盘数量 硬盘利用率
RAID0 1 100%
RAID1 2 1/N
RAID5 较高 3 (N-1)/N
RAID6 较高 3 (N-2)/N
RAID1E 3 M/N
RAID10 4 M/N
RAID50 较高 6 (N-M)/N
RAID60 较高 6 (N - M * 2)/N

N为RAID组成员盘的个数,M为RAID组的子组数。

RAID0

批注 2020-02-08 204953

RAID1

批注 2020-02-08 205138

RAID2

在数据盘的基础上,增加了一个磁盘来存放ECC

RAID 3/4

批注 2020-02-08 205227

RAID5

批注 2020-02-08 205428

RAID6

为每4 位数据存储2 位的冗余信息,这样系统可容忍两张磁盘 发生故障

RAID10

批注 2020-02-08 205601

RAID01

批注 2020-02-08 205654

只能容忍一个磁盘故障,如0号盘损坏,左边RAID0失效,只能使用右边的RAID0,不能再有盘损坏,故冗余度为1

实现方式

在空闲时期,控制器会对每张磁盘的每一个厨区进行读取,如果发现某个扇区无法读取,会从其余磁盘中进行恢复

一些硬件RAID实现允许热交换:在不切断电濒的情况下梅出错磁盘用新的磁盘替换

比较

批注 2020-02-08 205826

选择考量

存储技术的趋势

对程序数据引用的局部性

取指令的局部性

多体交叉存储器

其基本思想是在不提高存储器速率、不扩展数据通路位数的前提下,通过存储芯片的交叉组织,提高CPU单位时间内访问的数据量,从而缓解快速的CPU与慢速的主存之间的速度差异。

高位多体交叉存储器

批注 2020-01-16 113946

低位多体交叉存储器

批注 2020-01-16 113919

批注 2020-02-08 161132

高速缓存存储器

内存中的指令、数据,会被加载到 L1-L3 Cache 中,而不是直接由 CPU 访问内存去拿

CPU 从内存中读取数据到 CPU Cache 的过程中,是一小块 Cache Line 来读取数据的,而不是按照单个数组元素来读取数据的,大部分 Cache Line的大小通常是64个字节,Disruptor 利用了这点

cache的工作过程

批注 2020-02-08 161925

批注 2020-02-08 162227

cache地址映射机制

批注 2020-02-08 162555

内存地址到 Cache Line

这种映射机制跟我们在应用层维护缓存是很像的

cache的结构

批注 2020-02-08 162726

相联存储器

Cache地址映射与变换方法

全相联映射

批注 2020-02-08 164919

特点

所以应用在小容量cache

直接映射

批注 2020-02-08 165705

特点

应用在大容量cache

组相联映射

批注 2020-02-08 185829

替换算法

程序运行一段时间后,Cache存储空间被占满,当再有新数据要调入时,就需要通过某种机制决定替换的对象

先进先出法-FIFO

批注 2020-02-08 191721

最不经常使用法---LFU

批注 2020-02-08 191910

近期最少使用法--- LRU

批注 2020-02-08 192722

替换算法的抖动

MESI

是一种写失效协议:只有一个 CPU 核心负责写入数据,在这个 CPU 核心写入 Cache 之后,它会去广播一个“失效”请求告诉所有其他的 CPU 核心。其他的 CPU 核心,只是去判断自己是否也有一个“失效”版本的 Cache Block,然后把这个也标记成失效

相对应的就是写广播协议:一个写入请求广播到所有的 CPU 核心,同时更新各个核心里的 Cache,写广播还需要把对应的数据传输给其他 CPU 核心

stateDiagram-v2
  M --> M: 本地读/写
  M --> S: 总线读/发出写回信号
  M --> I: 总线写/发出写回信号

  E --> M: 本地写
  E --> E: 本地读
  E --> S: 总线读
  E --> I: 总线写/发出写回信号

  S --> S: 本地写/发出总线写信号
  S --> S: 本地读
  S --> I: 总线写/发出写回信号

  I --> S: 本地读/发出总线读信号
  I --> E: 本地读/发出总线读信号
  I --> M: 本地写/发出总线写信号

虚拟存储器

概述

必须解决的问题

批注 2020-02-08 200857

地址划分

虚拟地址 = 虚页号+页偏移量

逻辑地址与物理地址的转换

TLB (Translation Lookaside Buffer)

虚实地址转换过程中存在的问题

批注 2020-02-08 202837

工作原理

TLB类似页表,也是PTE的集合。为实现对TLB的快速访问,类似于Cache中的映射方法,对来自于CPU的虚页号进行逻辑划分,得到相应的标记和索引字段

批注 2020-02-08 204051

缓存写

高速缓存参数的性能影响

存储器层次结构中的缓存

缓解快速CPU与慢速的主存之间的速度差异

工作工程

编写高速缓存友好的代码

高速缓存对程序性能的影响