【王道考研-组成原理】存储系统(学习笔记)

一、存储系统的概述

1、现代计算机结构

2、存储器层次结构

  1. cpu
  2. 寄存器
  3. Cache高速缓存存储器
  4. 主存(内存)
  5. 辅存(磁盘)
  6. 外存(U盘、磁带、光盘)

主存<–>辅存:实现虚拟存储系统,解决了主存容量不够的问题

Cache<–>主存:解决了主存与CPU速度不匹配的问题

3、存储器的分类

1)层次
  1. CPU直接使用:Cache、主存
  2. CPU间接使用:辅存
2)存储介质
  1. 半导体:主存、Cache
  2. 磁性材料:硬盘
  3. 光介质:光盘
3)存取方式
  1. 随机存取存储器(RAM):读写时间与位置无关
  2. 串行访问存储器:读写时间取决于位置
    1. 顺序存取存储器(SAM):读写时间取决于位置
    2. 直接存取存储器(DAM):先直接选取再顺序存取
  3. 相连存储器(CAM):根据内容找到存储位置(快表)
4)信息的可更改性
  1. 读写存储器:可读可写
  2. 只读存储器(ROM):可读(CD、BIOS)
5)信息的可保存性
断电
  1. 易失性存储器:主存、Cache
  2. 非易失性存储器:磁盘、光盘
信息读出
  1. 破坏性读出:DRAM芯片
  2. 非破坏性读出:SRAM、光盘

4、存储器的性能指标

存储容量 = 存储字数 x 字长(1M x 8位)

单位成本:每个比特的价格 = 总成品 / 总容量

存储速度:数据传输率 = 数据宽度 / 存储周期

主存带宽(Bm):又称为数据传输率,表示主存进出信息的最大数量

二、主存储器的基本组成

1、半导体元件的原理

MAR:地址寄存器

MDR:数据寄存器

存储元 = 电容(存储器) + MOS管(开关)

MOS管可理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通

2、存储芯片的基本原理

总容量 = 存储单元个数 * 存储字长

例:8K × 8位,即 2 13 ∗ 8 b i t 2^{13}*8bit 2138bit。地址线13根,数据线8根

三、SRAM和DRAM

1、SRAM和DRAM概述

Dynamic Random Access Memory:动态RAM

Static Random Access Memory:静态RAM

类型特点SRAM(静态RAM)DRAM(动态RAM)
存储信息触发器电容
破坏性读出
读出后需要重写?(再生)不用需要
运行速度
集成度
发热量
存储成本
易失/非易失性存储器?易失(断电后信息消失)易失(断电后信息消失)
需要"刷新"?不需要需要
送行列地址同时送分两次送(地址线复用技术)
用途Cache主存

2、特性差异

DRAM芯片,使用栅极电容存储信息

SRAM芯片:使用双稳态触发器存储信息

核心区别:存储元不同

1)DRAM

读出1:MOS管接通,电容放电,数据线产生电流

读出0:MOS管接通,数据线无电流

每个存储元制造成本更低,集成度高,功耗低

电容放电信息被破坏,是破坏性读出

读出后应有重写操作,也称"再生"

2)SRAM

双稳态触发器:6个mos管组成

读出1:A高B低

读出0:A低B高

每个存储元制造成本更高,集成度低,功耗大

读出数据,触发器状态保持稳定,是非破坏性读出,无需重写

3、DRAM的刷新

1)存储器特性差异

电容:电容内的电荷只能维持2ms。即便不断电,2ms后信息也会消失 => 2ms之内必须"刷新"一次

双稳态触发器:只要不断电,触发器的状态就不会改变

2)DRAM刷新方式

拆分为行列刷新(扫描): 2 n 2^{n} 2n => 2 n / 2 + 2 n / 2 2^{n/2}+2^{n/2} 2n/2+2n/2 节约地址线

  1. 分散刷新:每次读写完都刷新一行 => 浪费时间
  2. 集中刷新:2ms内集中刷新 => 造成访问死区
  3. 异步刷新:2ms内每行刷新1次即可 => 找cpu空闲时间刷新

4、DRAM地址线复用技术

行、列地址分两次送,可使地址线更少,需要的芯片引脚减半

2 n / 2 + 2 n / 2 2^{n/2}+2^{n/2} 2n/2+2n/2 => 2 n / 2 2^{n/2} 2n/2

5、SDRAM

SDRAM 同步动态随机存取内存

四、只读存储器ROM

1、RAM和ROM区别

RAM:易失性,断电后数据消失

ROM:非易失性,断电后数据不会丢失

2、ROM分类

1)MROM

MROM(Mask Read-Only Memory):掩模式只读存储器

厂家按照客户需求,在芯片生产过程中直接写入信息,之后任何人不可重写(只能读出)

可靠性高、灵活性差、生产周期长、只适合批量定制

2)PROM

PROM(Programmable Read-Only Memory):可编程只读存储器

用户可用专门的PROM写入器写入信息,写一次之后就不可更改

3)EPROM

EPROM(Erasable Programmable Read-Only Memory):可擦除可编程只读存储器

允许用户写入信息,之后用某种方法擦除数据,可进行多次重写

  1. UVEPROM(ultraviolet rays):一用紫外线照射8~20分钟,擦除所有信息
  2. EEPROM(也常记为EPROM,第一个E是Electrically):可用"电擦除"的方式,擦除特定的字
4)Flash Memory

Flash Memory:闪速存储器(U盘、SD卡)

每个存储元只需单个MOS管,位密度比RAM高

在EEPROM 基础上发展而来,断电后也能保存信息,且可进行多次快速擦除重写

注意:由于闪存需要先擦除在写入,因此闪存的"写"速度要比"读"速度更慢

5)SSD

SSD (Solid State Drives):固态硬盘

由控制单元+存储单元 (Flash 芯片)构成,与闪速存储器的核心区别在于控制单元不一样,但
存储介质都类似,可进行多次快速擦除重写

SSD速度快、功耗低、价格高。目前个人电脑上常用SSD取代传统的机械硬盘

五、主存与CPU的连接

A 1 A_1 A1 - A 7 A_7 A7:地址线

D 1 D_1 D1 - D 7 D_7 D7:数据线

CS ‾ \overline{\text{CS}} CS $ \overline{\text{CE}}$:片选线

WE ‾ \overline{\text{WE}} WE $ \overline{\text{WR}}$:读写控制线

1、位扩展法

2、字扩展法

1)线选法

线选法: A 14 A_{14} A14 A 13 A_{13} A13只能为01或10

n条线 => n个选片信号

2)译码片选法

译码片选法:n条线 => 2n个选片信号

3)小总结
线选法译码片选法
n条线 => n个选片信号n条线 => 2 n 2^n 2n个选片信号
电路简单电路复杂
地址空间不连续地址空间可连续

3、字位扩展法

4、译码器

138译码器
  1. G1、G2A、G2B:使能端,G2A、G2B低电平有效,G1高电平有效
  2. A、B、C:译码输入端,高电平有效
  3. Y0 - Y7:译码输出端,低电平有效

五、双端口RAM和多模块存储器

1、存取周期

存取周期:可以连续读写的最短时间间隔

DRAM芯片的恢复时间比较长,有可能是存取时间的几倍(SRAM的恢复时间较短)

2、双端口RAM

作用:优化多核CPU访问一根内存条的速度

需要有两组完全独立的数据线、地址线、控制线。CPU、RAM中也要有更复杂的控制电路

两个端口对同一主存操作有以下4种情况:

  1. 两个端口同时对不同的地址单元存取数据 => 正常操作
  2. 两个端口同时对同一地址单元读出数据 => 正常操作
  3. 两个端口同时对同一地址单元写入数据 => 写入错误
  4. 两个端口同时对同一地址单元,一个写入数据,另一个读出数据 => 读出错误

解决:置"忙"信号为0,由判断逻辑决定暂时关闭一端口(即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问。

3、多模块存储器

1)单体多字存储器

数据连续存放,每次读出一行

每个存储单元存储m个字、总线宽度也为m个字、一次并行读出m个字

每次只能同时取m个字,不能单独取其中某个字 => 指令和数据在主存内必须是连续存放的

2)多体并行存储器

每个存储周期内可读写地址连续的m个字。采用"流水线"的方式并行存取(宏观上并行,微观上串行)

微观上,m个模块被串行访问;宏观上,每个存取周期内所有模块被并行访问

  1. 存取周期为T,存取时间为r,为了使流水线不间断,应保证模块数 m ≥ T / r m≥T/r mT/r
  2. 存取周期为T,总线传输周期为r,为了使流水线不间断,应保证模块数 m ≥ T / r m≥T/r mT/r

六、Cache

1、概述

1)局部性原理

空间局部性:在最近的末来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的

时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息

基于局部性原理,不难想到以把CPU目前访问的地址周围的部分数据放到Cache中

2)性能

t c t_c tc为访问一次Cache所需时间, t m t_m tm为访问一次主存所需时间

命中率 H H H:CPU欲访问的信息己在Cache中的比率

缺失(未命中)率: M = 1 − H M=1-H M=1H

平均访问时间:

  1. 先访问Cache, 若Cache未命中再访问主存: t = H t c + ( 1 − H ) ( t c + t m ) t=Ht_c+(1-H)(t_c+t_m) t=Htc+(1H)(tc+tm)
  2. 同时访问 Cache和主存,若Cache命中则立即停止访问主存: t = H t c + ( 1 − H ) t m t=Ht_c+(1-H)t_m t=Htc+(1H)tm
3)界定周围

基于局部性原理,可以把CPU目前访问的地址"周围"的部分数据放到Cache中 => 界定周围

将主存的存储空间分块,主存与Cache之间以“块”为单位进行数据交换

主存的“块”又叫“页/页框/页面”;Cache 的“块”又叫“行”

主存地址可拆分为(主存块号,块内地址)的形式

每次被访问(读取)的主存块,一定会被立即调入Cache

2、Cache-主存的映射方式

0)总览

全相联映射:主存块可以放在Cache的任意位置

直接映射:每个主存块只能放到一个特定的位置
Cache块号=主存块号 % Cache总块数

组相联映射:Cache块分为若干组,每个主存块可放到特定分组中的任意一个位置
组号 = 主存块号 % 分组数

1)全相联映射

访问过程

2)直接映射

1、标记优化

2、访问过程

3)组相联映射

二路组相联映射:两块为一组,分四组

n路组相联映射:每n个Cache行为一组

1、标记优化

2、访问过程

WX20221108-103515

3、替换算法

0)概述

组相联映射:Cache完全满了才需要替换,需要在全局选择替换哪一块

直接映射:如果对应位置非空,则直接替换

组相联映射:分组内满了才需要替换,需要在分组内选择替换哪一块

组相联映射、组相联映射需要用到替换算法

1)随机算法(RAND)

随机算法(RAND,Random):若Cache已满,则随机选择一块替换

实现简单,但完全没考虑局部性原理,命中率低,实际效果很不稳定

2)先进先出算法(FIFO)

先进先出算法(FIFO, First In First Out):若Cache己满,则替换最先被调入Cache的块

实现简单,FIFO没考虑局部性原理,最先被调入Cache的块也有可能是被频繁访问的

抖动现象:频繁的换入换出象(刚被替换的块很快又被调入)

3)近期最少使用算法(LRU)

近期最少使用算法(LRU, Least Recentlv Used):为每一个Cache块设置一个“计数器”,用于记录每个Cache块己经有多久没被访问了,当Cache满后替换计数最大的

  1. 命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变
  2. 未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行全加1
  3. 未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装行的块的计数器置0,其余全加1

基于局部性原理,近期被访问过的主存块,在不久的将来也很有可能被再次访问,因此淘汰最久没被访问过的块是合理的。LRU算法的实际运行效果优秀,cache命中率高。

若被频繁访问的主存块数量 > cache行的数量,则有可能发生"抖动"。曾经被经常访问的主存块在未来不一定会用到

4)最近不经常使用(LFU)

最不经常使用算法(LFU, Least Frequently Used):为每一个Cache块设置一个"计数器",用于记录每个Cache块被访问过几次,当Cache满后替换"计数器"最小的。

新调入的块计数器 = 0,之后每被访问一次计数器 + 1。需要替换时,选择计数器最小的一行。若有名个计数器最小的行,可按行号递增或FIFO策略进行选择

曾经被经常访问的主存块在未来不一定会用到,并没有很好地遵循局部性原理,因此实际运行效果不如LRU

4、Cache写策略

1)写命中
1. 全写法

全写法(写直通法):当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲

使用写缓冲,CPU写的速度很快,若写操作不频繁,则效果很好。若写操作很频繁,可能会因为写饱和而发生阻塞

2. 写回法

写回法:当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存

脏位:表示是否被修改过

减少了访存次数,但存在数据不一致的隐患

2)写不命中
1. 写分配法

写分配法:当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用。

2. 非写分配法

非写分配法- 当CPU对Cache写不命中时只写入主存,不调入Cache。搭配全写法使用。

3)多级Cache

现代计算机通常采用多级Cache结构

各级Cache 间常采用"全写法+非写分配法",Cache和主存间常采用"写回法+写分配法"

七、页式存储器

1、页式存储器概述

页式存储系统:一个程序(进程)在逻辑上被分为若干个大小相等的"页面","页面"大小与"块"的大不相同。每个页面可以离散地放入不同的主存块中。

2、实地址与虚地址

逻辑地址(虚地址):程序员视角看到的地址

物理地址(实地址):实际在主存中的地址

逻辑地址 = 逻辑页号 + 页内地址

物理地址 = 主存页号 + 页内地址

3、页表

页表:逻辑页号 => 主存块号

CPU执行的机器指令中,使用的是"逻辑地址",因此需要通"页表"将逻辑地址转为物理地址。

页表的作用:记录了每个逻辑页面存放在哪个主存块中

4、地址转换过程

页表基地址:指明了页表在主存中的存放地址

  1. 将逻辑地址拆分为:逻辑页号 + 页内地址
  2. 查询页表,找到逻辑页面存放的主存块
  3. 用主存块号拼接页内地址得到最终的地址

5、快表TLB

快表TLB是一种相联存储器,可以按内容寻访

快表中存储的是页表项的副本,Cache中存储的是主存块的副本

八、虚拟存储器

1、页式虚拟存储器

访问位(引用位):用于页面替换算法

有效位:数据是否调入内存

外存块号:外存页表的块号

脏位:数据是否被更改

2、段式虚拟存储器

3、段页式虚拟存储器

把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页。程序对主存的调入、调出仍以页为基本传送单位。

每个程序对应一个段表,每段对应一个页表。

虚拟地址 = 段号 + 段内页号 + 页内地址

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wmh1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值