存储系统
graph TB
MH{{Memory hierarchy}}
IN{{Internal}};MA{{Main}};OL{{On-line mass storage}};OFL{{Off-line bulk storage}};
REG([Registers]);CA([Cache]);RAM([RAM]);CC([Controller Cards]);SS([Secondary storage]);TS([Tertiary storage]);OFLS([Offline storage])
MH---IN;MH---MA;MH---OL;MH---OFL;
IN---REG;IN---CA;
MA---RAM;MA---CC;
OL---SS;
OFL---TS;OFL---OFLS;
存储器分类
相联存储器
一个可以接受N个关键字,每个字占m位的相连存储器
flowchart LR;
subgraph IIR;
KWS[key words]
end
subgraph SR;
KW[key word]
end
IIR--->|key-words|SR
subgraph CPs;
WCP[2^m]
BCP[2^m*N]
end
SR--->|N*key|CPs
subgraph MEM
end
高速缓存
用来存放当前最活跃的程序和数据
- 容量: Kb~Mb
- 速度: 5~10x主存
- 内容: 主存局部域的副本
flowchart TB;
subgraph Classic
direction TB;
MA([Main memory])<--->BUS([Bus]);
CA([Cache])<--->CC([CPU Core])
CA<--->BUS
end
subgraph modern
direction TB;
Ma([Main memory])<--->Bus([Bus]);
subgraph Caches
direction LR;
L3Ca([L3 Cache])<--->L2Ca([L2 Cache])<--->L1Ca([L1 Cache]);
end
L3Ca<--->Bus;
Cc([CPU Core])<--->L1Ca;
L1ICa([L1 instruction Cache])<--->Cc([CPU Core]);
L1ICa<--->L2Ca;
end
地址映像
CPU送出主存单元地址,而应从Cache读取数据,这就需要将主存地址转换为Cache的地址,这种转换称为地址映像。
flowchart TB;
subgraph DIR
ma([Main memory])--->ca([Cache])
end
subgraph Full
Ma([Main memory])--->Mapping
subgraph Cache
Mapping--->Ca([Cache])
end
end
- 直接映像
- 主存区号与缓存记录的区号相同表示命中。
- 命中后由主存地址中的区内块号可以访问Cache中的块。
- 最后使用主存地址的低位地址访问Cache的块内地址。
- 全相联映像
- 🍺主存和缓存分成大小相同的块,允许主存的任何一块调入缓存的任何一个块空间。
- 主存64MB
- Cache32KB,块大小4KB,块内地址12位。
- 主存分为块,块号0-16383,需要14位表示块号。
- 缓存分为,块号0-7,需要3位表示块号。
- 相连存储器共8个单元,每个单元14位。
- 组相联映像
- 🍺区号采用直接映像,块号采用全相联映像。
- 缓存有n块,每k块分为一组,则缓存就分为组。
- 主存有m区,同样每区分为n块,每k块分为一组,则主存每区就分为组。
- 主存任何区的第i组缓存的第i组,主存块号缓存组内块号。
替换算法
使Cache获得更高命中率。
- 随机替换
- 先进先出
- 近期最少使用
- 优化替换
性能分析
- 设为命中率,为存取时间,为主存访问时间。
- 则Cache的等效加权平均访问时间
- Cacahe容量越大命中率越高,但是牺牲成本和命中时间。
多级Cache
- 访问优先级。
- 速度比较。
- 容量比较。
虚拟存储器
虚拟存储技术使辅助存储器和主存储器密切配合,CPU生成逻辑地址,逻辑地址由MMU转换为物理地址后访问主存。
flowchart LR
CPU----MMU----MA([Main memory])
外存储器
- 磁表面存储器
- 光盘存储器
- 固态硬盘
磁盘阵列技术
- RAID-0
- RAID-1
- RAID-2
- RAID-3
- RAID-4
- RAID-5
- RAID-6
存储域网络
flowchart TB
subgraph Servers
direction TB
Serv1([Server1])
Serv2([Server2])
Serv3([...Servern])
end
Servers---SAN
subgraph Pool
direction TB
RAID1([RAID1])
RAID2([RAID2])
RAID3([RAIDn])
end
SAN---Pool