Skip to main content

存储系统

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;

存储器分类

存储器{所处位置{内存外存构成材料{磁存储器半导体存储器{双极型MOS型静态动态光存储器工作方式{读/写RAM只读{ROMPROMEPROMEEPROM访问方式{按地址访问按内容访问寻址方式{RAMSAMDAM\text{存储器} \begin{cases} \text{所处位置}\begin{cases} \text{内存} \\ \text{外存} \end{cases} \\ \text{构成材料}\begin{cases} \text{磁存储器} \\ \text{半导体存储器}\begin{cases} \text{双极型} \\ \text{MOS型} \\ \text{静态} \\ \text{动态} \end{cases} \\ \text{光存储器} \end{cases} \\ \text{工作方式}\begin{cases} \text{读/写} \to \text{RAM} \\ \text{只读}\begin{cases} \text{ROM} \\ \text{PROM} \\ \text{EPROM} \\ \text{EEPROM} \end{cases} \end{cases} \\ \text{访问方式}\begin{cases} \text{按地址访问} \\ \text{按内容访问} \end{cases} \\ \text{寻址方式}\begin{cases} \text{RAM} \\ \text{SAM} \\ \text{DAM} \end{cases} \end{cases}

相联存储器

一个可以接受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
  1. 直接映像
  • 主存地址: 主存区号区内块号块内地址\text{主存地址: }\boxed{\text{主存区号}}\boxed{\text{区内块号}}\boxed{\text{块内地址}}
  • 缓存: 缓存区号区内块号块内地址\text{缓存: }\boxed{\text{缓存区号}}\boxed{\text{区内块号}}\boxed{\text{块内地址}}
  • 主存区号与缓存记录的区号相同表示命中。
  • 命中后由主存地址中的区内块号可以访问Cache中的块。
  • 最后使用主存地址的低位地址访问Cache的块内地址。
  1. 全相联映像
  • 🍺主存和缓存分成大小相同的块,允许主存的任何一块调入缓存的任何一个块空间。
  • 主存地址: 区内块号块内地址\text{主存地址: }\boxed{\text{区内块号}}\boxed{\text{块内地址}}
  • 缓存: 缓存区号区内块号块内地址\text{缓存: }\boxed{\text{缓存区号}}\boxed{\text{区内块号}}\boxed{\text{块内地址}}
  • 主存64MB
  • Cache32KB,块大小4KB,块内地址12位。
  • 主存分为(641024)÷4=16384(64*1024)\div4=16384块,块号0-16383,16384=21416384=2^14需要14位表示块号。
  • 缓存分为(321024)÷4=8(32*1024)\div4=8,块号0-7,8=238=2^3需要3位表示块号。
  • 相连存储器共8个单元,每个单元14位。
  1. 组相联映像
  • 🍺区号采用直接映像,块号采用全相联映像。
  • 缓存有n块,每k块分为一组,则缓存就分为nj\frac{n}{j}组。
  • 主存有m区,同样每区分为n块,每k块分为一组,则主存每区就分为nj\frac{n}{j}组。
  • 主存任何区的第i组direct\xleftrightarrow{direct}缓存的第i组,主存块号fullymapping\xleftrightarrow{fully mapping}缓存组内块号。

替换算法

使Cache获得更高命中率。

  • 随机替换
  • 先进先出
  • 近期最少使用
  • 优化替换

性能分析

  • HcH_c为命中率,tct_c为存取时间,tmt_m为主存访问时间。
  • 则Cache的等效加权平均访问时间ta=Hctc+(1Hc)tm=tc+(1Hc)(tmtc)t_a=H_ct_c+(1-H_c)t_m=t_c+(1-H_c)(t_m-t_c)
  • Cacahe容量越大命中率越高,但是牺牲成本和命中时间。

多级Cache

  • 访问优先级L1>L2>L3L_1>L_2>L_3
  • 速度比较L1>L2L_1>L_2
  • 容量比较L2>L1L_2>L_1

虚拟存储器

虚拟存储技术使辅助存储器和主存储器密切配合,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