存储
两个经常混淆的词汇:
-
可靠性:设备出现故障的几率来衡量。改善使用环境;减少组成部件;提高部件可靠性
-
可用性:系统能正常运行的几率来衡量。增加校验码(硬件冗余)
可用性的提高可能带来可靠性的降低
$$
你正常 \neq 你没问题
$$
层次化存储
-
DRAM : 动态随机访问存储;SRAM : 静态随机访问存储;flash :闪存;disk :磁盘
SRAM
feature
-
一个读写端口 ;读写访问时间不同;对于任意位置的数据,SRAM访问时间固定;一般集成在芯片上
DRAM
-
分两次送行列;dram以bank方式来组织,一个bank有很多行,一个行有很多列;dram缓存行数据以便重复访问
-
添加时钟后成为同步 DRAM( Synchronous DRAM, SDRAM) 可以利用和cpu同步的时钟信号突发传递后续数据
突发传递:无需每次使能与选择,参考shenzhen i/o 的ram
cache
结构
-
直接映射;全相联;组相联
相联度每增加一倍,cache的组数减少一半,索引的长度也增加一位
直接映射
映射方法:
例子:五位地址01101,cache有8项,那么地址低三位是索引,剩下两项是tag
64位地址;cache 大小为 $2^n$ 数据块;数据块大小为 $2^m$ 个单字(4字节,因此忽略地址的最低两位)
标签字段的大小为:$64-n-m-2$ ;该直接映射 cache 的总容量为
$$
2^n \times (单个数据块容量 + 标签字段大小 + 有效位大小)
$$
全相联
64位地址
cache 大小为 $2^n$ 数据块
数据块大小为 $2^m$ 个单字(4字节,因此忽略地址的最低两位)
标签字段的大小为:$64-m-2$
这个很好理解,因为cache可以放在任意位置,所以cache index不包含信息,于是标签字段就要相应增大
而且这样就需要对每一个tag判断是否符合要求。
组相联:结合直接映射和全相联
通过索引找到组,数据块在组内的位置是任意的
每个数据块有 n 个位置可放的组相联 cache 称为n路组相联 cache。
在组相联 cache 中,包含主存块的组号为
$$
(数据块号)mod(cache 中的组数)
$$
实际上,直接映射就是一路组相联,全相联就是M路组相联,M为cache大小
假设 64 位的存储地址,对于直接映射 cache, 如果数据大小为 16KiB, 每个数据块为 4 字大小。该 cache 容量多大 (用 bit 表示)?
块大小的影响?
我自己的cache只有64个基本块,而且每一个块就是一个字.这样一一对应虽然很简单,但是完全没有挖掘出空间局部性.
容量更大的块可以通过挖掘空间局部性来降低失效率,如果基本块大小为4个字,那么不仅当前这个字不用再访存,下次访问下面三个字也不用访存了.
但是数据块也不是越大越好
-
cache可存放的块数变少,最终使得失效率反而增加
-
增加失效损失
cache失效
-
必然缺失 对策:预取
-
容量缺失 增加cache容量
-
冲突缺失 增加cache容量 增加相联的路数
-
无效缺失 其他进程修改了主存数据块
cache的接入
侧接法:
像入出设备似的连接到总线上,优点是结构简单,成本低,缺点是不利于降低总线占用率。
隔断法
把原来的总线打断为两段
应用:
注意c语言是行优先的,其中
$$
C[i+j*n]=C[i][j]
$$
DISK
磁盘访问
-
寻道(tracks)
磁头径向移动
-
寻扇
等待磁盘旋转
-
数据传输
磁盘访问时间 = 寻道时间 + 旋转延迟 + 传输时间 + 磁盘控制器延迟
其中旋转延迟等于磁盘旋转半周的时间
传输时间就是读取大小/读取速度
缺页的处理过程
(逻辑上)缺页引起,内存(=主存)中没有所需页,要从外存(通常是硬盘)中调入。
CPU给地址,需要访问某存储单元;并行进行TLB、cache查找,TLB没有找到,停止并行查找,通知OS处理;
OS检查页表,发现该页不在内存中,需要从硬盘调入;选择被换出的牺牲页,若是脏页,则需写回,写回时OS申请I/O总线,发送写命令,传回数据;I/O控制器会控制磁盘进行访问然后写入扇区。然后需要调入新页,也是申请I/O,……,磁盘申请I/O总线,得到授权后将数据通过总线送到内存。
结论:
-
额外开销在总开销中比例较大 =>一次传输大量数据比较有效
-
将页面存放在相邻扇区中可以避免额外的寻道开销
RAID:
RAID,即冗余阵列独立磁盘(Redundant Array of Independent Disks),是一种将多个硬盘驱动器组合在一起以提供性能、冗余或两者兼而有之的存储技术。RAID技术旨在通过在多个硬盘之间分发或复制数据,提高系统性能、数据可用性和/或容错能力。
定义
-
廉价磁盘的冗余阵列(Redundant Arrays of Inexpensive Disks)
-
用N 个低价磁盘构成一个统一管理的阵列,以取代特贵单一磁盘
-
RAID 0(条带化):
-
概念: 数据被分割成strip,然后分别存储在不同的硬盘上。
-
性能: 提供良好的读写性能,因为数据被分割并同时写入多个硬盘。
-
冗余: 无冗余,一个硬盘故障将导致数据丢失。
-
用途: 适用于对性能要求较高而对数据冗余要求较低的场景。
-
示意图:
1
2
3
4
5|-----------------| |-----------------|
| Data Block 1 | | Data Block 2 |
|-----------------| |-----------------|
| Data Block 3 | | Data Block 4 |
|-----------------| |-----------------|在这个示意图中,数据块1和2同时写入硬盘1和硬盘2,数据块3和4同时写入硬盘3和硬盘4,以此类推。
-
-
RAID 1(镜像):
-
性能: 读性能可能比单个硬盘更好,写性能通常比RAID 0差。
-
冗余: 数据被完全复制到两个硬盘上,其中一个硬盘失效时,另一个仍然可用。
-
用途: 适用于对数据冗余要求高而对性能要求适中的场景。
-
概念: 数据被完全复制到两个硬盘上。
-
示意图:
1
2
3|-----------------| |-----------------|
| Data Block | | Data Block |
|-----------------| |-----------------|在这个示意图中,相同的数据块被同时写入硬盘1和硬盘2,实现数据的冗余备份。
-
-
RAID 5:
-
性能: 提供较好的读性能,写性能比RAID 1好。
-
冗余: 通过分布式冗余校验(Parity)实现数据冗余,其中一个硬盘失效时,可以通过其他硬盘的数据和校验信息进行恢复。
-
用途: 平衡了性能和冗余需求,适用于中等负载的通用情况。
-
概念: 数据和校验信息被分布式存储在多个硬盘上。
-
示意图:
1
2
3
4
5
6
7|-----------------| |-----------------|
| Data 1 | | Parity 1 |
|-----------------| |-----------------|
| Data 2 | | Parity 2 |
|-----------------| |-----------------|
| Data 3 | | Parity 3 |
|-----------------| |-----------------|在这个示意图中,数据块和校验信息(通过异或运算产生)交替存储在不同的硬盘上,允许一个硬盘失效时通过其他硬盘的数据和校验信息进行恢复。
-
-
RAID 6:
-
性能: 类似于RAID 5,但写性能可能稍差。
-
冗余: 使用双分布式冗余校验,允许两个硬盘同时失效而不导致数据丢失。
-
用途: 针对更高的冗余需求,适用于大容量硬盘阵列。
-
概念: 类似于RAID 5,但使用双分布式冗余校验。
-
示意图:
1
2
3
4
5
6
7
8|-----------------| |-----------------|
| Data 1 | | Parity 1 |
|-----------------| |-----------------|
| Data 2 | | Parity 2 |
|-----------------| |-----------------|
| Data 3 | | Parity 3 |
|-----------------| | Parity 4 |
|-----------------| |-----------------|在这个示意图中,除了数据块和校验信息外,还有第二份校验信息,允许两个硬盘失效时进行数据恢复。
-
-
RAID 10(1+0):
-
性能: 提供很好的读写性能。
-
冗余: 数据被镜像,允许多个硬盘失效,只要不是同一镜像组内的两个硬盘。
-
用途: 结合了RAID 1和RAID 0的优点,适用于对性能和冗余都有高要求的应用。
-
概念: 结合了RAID 1和RAID 0的优点,数据被同时条带化和镜像。
-
示意图:
1
2
3
4
5|-----------------| |-----------------|
| Data Block 1 | | Data Block 1 |
|-----------------| |-----------------|
| Data Block 2 | | Data Block 2 |
|-----------------| |-----------------|在这个示意图中,数据块1和2同时写入硬盘1和硬盘2,同时也被复制到硬盘3和硬盘4,实现数据的冗余备份和提高读写性能。
-
选择合适的RAID级别通常取决于对性能、冗余和成本的特定需求。RAID技术提供了在硬盘阵列中平衡这些要求的选项。
固态硬盘(SSD)
固态硬盘(Solid State Drives):由控制单元、存储单元(FLASH+DRAM芯片)组成,用固态电子存储芯片阵列制成。控制单元:FTL完成上层逻辑地址→底层物理地址的转换、磨损均衡。存储单元:按block有限次擦除,按页进行读写,组织为package-die-plane-block-page
SSD的写入: