主存地址

Report
第三章 存储系统
1
第一节
存储系统设计基本原理
一、层次结构存储系统
1、存储器的性能指标
*容量(S):SM=w·l·m,m为存储体数,w、l为存储体字长、字数
*速度:常用存取时间(TA)或存取周期(TM)、带宽(BM)表示
TM=TA+T恢复,BM=W/TM,W=w或m·w
地址和命令有效
MEM响应
TA
数据有效
地址和命令有效
MEM恢复
TM
MEM响应
TA
数据有效
MEM恢复
TM
*价格(C):c=C/S,c为每位价格、C为总价格
2
2、层次结构的引入
矛盾
矛盾
*用户需求的矛盾:大容量←―→高速度←―→低价格
*程序访问局部性规律:指令和数据访问的“簇聚”特性
时间局部性—被访问过的信息,可能很快被再次访问
空间局部性—被访问信息的相邻信息,可能很快被访问
示例:for (i=0;i<n;i++) S=S+A[i];
*用户需求矛盾的解决:多种MEM组合使用
近期常用数据—放在“前方”MEM(快而小)中
近期不用数据—放在“后方”MEM(慢而大)中
3
回下页
3、层次结构存储系统
*结构与组成:多种MEM、按速度分层、协调工作
M1
寄存器
M2
…
Mn
存储系统
CPU
*工作方法:
信息存储—Mi中信息是Mj(i<j)中信息的副本
信息访问—CPU只访问M1,M1~Mn间透明地交换信息
*预期目标:① c≈cn; ② TA≈TA1
注⑴—实现目标①、②后,容量需求已不是问题
注⑵—程序访问局部性规律是实现根基
4
转上页
回下页
4、存储系统的性能参数
*每位平均价格(c ):
c
c1S M 1  c2 S M 2  cn S Mn
S M 1  S M 2  S Mn
*命中率(H ):CPU的访存操作,在M1中成功访问的概率
H

R1
R1  R2  Rn ,其中 Ri 为数据在 M i中访问到的次数
缺失率(F )—即不命中概率,F =1-H
*平均访问时间(TA ):
TA =HTA1+(1-H )(TA2+TB+TA1)=TA1+(1-H )TA2’,TA2=…
M2→M1的传送、存储时间
*预期目标实现要求:
SMi<<SMi+1 —可减小c,利于目标①
BAi>>BAi+1 —即cAi+1<<cAi,利于目标①
H 较大—接近于1.0,利于目标②
5
转上页
二、存储系统设计原理
1、存储系统层次数量的设计
CPU访问MEM—主存,MEM分为主存及辅存
层 次 结 构 —Cache-主存-辅存,围绕主存
*“Cache-主存”存储层次
—解决主存速度问题
辅助软硬件
辅助硬件
CPU
主存
地址
Cache
主存
*“主存-辅存”存储层次
CPU
主存
地址
主存
辅存
—解决主存容量问题
*对OS的支持:CPU按逻辑地址访存,增设VA→PA变换机构
6
回下页
2、层次存储系统总体设计
*需解决问题:①如何组织层次结构
②如何组织层次中MEM的结构
层间交换
信息所需
(1)层次结构的组织
*层次管理机构:各MEM设置管理单元(MU)进行地址变换
虚拟地址
CMU
不命中
CPU
MMU
AMU
不命中
辅存 地址
Cache 地址
D/I
D/I
(CPU Bus) Cache (Mem Bus)
主存 地址
主存
D/I
(I/O Bus)
辅存
MU相关内容—输入地址类型、层间交换单位,
实现方式
7
转上页
*CMU组织方式:有物理地址及虚地址两种
虚拟
地址
CPU
AMU
MMU
D/I
(CPU Bus)
CMU
D/I
Cache (Mem Bus)
D/I
(CPU Bus)
D/I
(I/O Bus)
辅存
AMU
虚拟地址
CPU
主存
MMU
CMU
D/I
Cache (Mem Bus)
主存
D/I
(I/O Bus)
辅存
CMU组织方式设计—常为物理地址,L1$有为虚地址
(易实现)
(性能好/处理复杂)
各MU的输入地址—AMU为虚地址,其余为主存或虚地址
※说明:后续讨论中,CMU均基于物理地址方式组织!
8
回下页 回10页
(2)层次结构的性能设计
*MU的实现方式:
CMU用硬件实现,MMU部分用硬件实现,AMU用软件实现
(各MEM映射表大小量级不同,考虑性/价)
*层间信息交换单位:
减少TA方法—多个字一起交换,猝发传送(成组传送)
Tn个字=T地址+n*(T存取+T传输),取决于MEM及Bus
信息交换单位设计—
依据:各层MEM的Tn个字/n相同
结果:MEM越远离CPU,n越大
CPU
字/次
(如4B)
Cache
块/次
(如32B)
←无瓶颈
主存
页/次
(如4KB)
辅存
9
转上页
(3)层次结构的MEM组织
*MEM存储空间管理:有两种交换粒度,上层、下层粒度不同
…
…
…
本层MEM
上层MEM
下层MEM
*MEM组成:存储阵列、控制器、层间辅助机构(MU)
Data
Cmd
Addr(主存地址)
命中
存储
阵列
控
制
器
比较器 不命中
映
射
表
处不
理命
中
更新
10
转8页
回下页
*MEM工作原理:地址变换、数据访问、一致性保持
请求到达
替换算法
地址映射规则
查找方法
用下层地址查映射表
N
命中?
Y
地址变换规则
找一空闲位置
N
选出一个位置
本层MEM数据
写到下层MEM
中(按下层交
换粒度)
下层地址→本层地址
找到?
写
Y
取下层MEM数
据到本层MEM
中(按下层交
换粒度)
读/写?
上层数据写到本
层MEM中(按上层
交换粒度)
读
读本层MEM中数
据到上层(按与
上层交换粒度)
请求完成
写数据到下层MEM中
(按下层交换粒度)
更新策略
(4)层次结构的性能优化
TA=T命中+(1-H)T缺失,从3个方面优化(Cache中讨论)
转上页
11
第二节
高速缓冲存储器
一、基本工作原理
1、Cache基本组成
*组成:存储阵列、目录表、比较器、控制器等
CPU
Data
比较器
有效
标记
有效
标记
控制器
状态
数据块
(字0~字2b-1)
状态
数据块
(字0~字2b-1)
…
目
录
表
Cmd
有2种组织方式
…
存储阵列
(SRAM)
Addr
*存储空间管理:
信息交换单位—Cache-CPU为字、Cache-主存为块
信息交换管理—目录表实现主存映射管理
回下页
12
2、Cache的基本工作原理
*完成访问过程:①地址变换,②访问数据,③保持一致性
接收CPU的主存地址
查找方法
查找相关的行
N
命中
Y
访问(R/W)行中数据
写策略
替换算法
映射规则
N
有空闲行i
Y
找出被替换行i
腾空行i中数据
CPU操作=W
Y
数据写回主存
调入目标块(到行i)
缺失处理
通知CPU操作完成
*相关实现技术:映射规则、查找方法、替换算法、写策略
*实现要求:全部工作均由硬件完成(对程序员透明)!
13
转上页
二、相关实现技术
1、地址映射及变换
*功能目标:某主存块可存放到Cache的哪些行中?
*性能指标:块调入的块冲突率、地址变换的速度与成本
*映射方法:全相联、直接、组相联
Cache地址
主存地址
全相联映射
主存块号i
直接映射
区号r
组相联映射
群号r
标记项
区内块号j
块内地址
行号m
块内地址
块内地址
行号j
块内地址
群内块号j 块内地址
索引项
组j内行号k 块内地址
*性能分析:块冲突率—全相联<组相联<<直接
变换速度—相近(必须的)
变换成本—直接<组相联<<全相联
14
回下页
2、查找方法
*功能目标:如何在候选位置中查找目标行?
候选位置—直接1个,组相联n个(路数),全相联G个(块数)
*性能指标:查找的速度、成本
*常见方法:按地址并行查找、按内容查找(相联存储器)
行0
有效位
有效位 标记位
组0
…
p
…
…
比较器
…
1
组g
行n-1
…
比较REG
标记
屏蔽REG
…
r
…
1
=
&
≥1
&
比较器
…
命中
=
…
组G/n-1
主存块地址
相联存储器
标记r
索引j
*方法评价:按地址并行查找较好
转上页
回21页
主存块地址
字选择 结果
REG
REG
标记r
索引j
15
3、替换算法
*功能目标:无空闲行时块调入,如何选择被替换的行?
*性能指标:对命中率的影响、算法的实现开销
*常见算法:RAND、FIFO、LRU
状态记录—1个随机数、G个计数值、G个计数值
状态更新—替换时、块调入时(n个)、块访问时(n个)
行 选 择—值对应、值最大(n个中)、值最大(n个中)
对命中率H的影响—H随机、H随机、H随n增加(堆栈算法)
*LRU算法实现方法:
堆栈法—寄存器堆栈、相联查找+栈中移出,栈底对应行
☆比较对法—触发器( C2n 个)记录两两间次序,
门(n个)判断是否为最久访问行(仅一个有效)
16
4、写策略
--又称更新策略
*功能目标:CPU所写的数据,何时写到主存?
*性能指标:TA、总线占用度、一致性开销
*写命中策略:全写法—TA写命中=TMem(字),占用总线
写回法—TA写命中=TCache(字),不一致性(修改位)
写一次法—首次全写法、其余写回法
*写丢失策略:按 写 分 配 法 —TA写不命中≥TMem(块)+TCache(字)
不按写分配法—TA写不命中=TMem(字)
写i
写j
CPU 操 作
Cache动作
写i
主 存动作
写i(字) 写j(字)
空
读k
写i
读k
写i
t
写j
读k
写j
读k
读j(块)
t
*命中/丢失匹配:全写法-不按写分配法、写回法-按写分配法
*常见选择:连接CPU时用全写法,连接总线时用写回法
17
三、Cache性能分析
1、命中率H
(1)影响因素
*地址映射规则: H直接<H组相联<H全相联,常采用组相联
*替换算法: HRAND、HFIFO<HLRU,均采用(伪)LRU算法
*Cache容量:容量↑,H↑、成本↑
*块大小: 块大小↑,H↑、可能↓(容量固定时)
*相联度: 相联度↑,H↑、可能↓(容量固定时)
H
H
1
H
1
H
1
2SC
SC
块大小
块大小增加
SC
1
组大小增加
SC
2SC
SC
组大小
*地址流: 优化软件或算法,H↑(与软件工作特性有关)
18
回下页
回56页
(2)缺失类型及特征
*类型:强制(冷启动)缺失、容量缺失、冲突缺失
*特征:强制缺失—只与块大小有关
容量缺失—只与Cache容量、软件工作特性有关
冲突缺失—与地址映射、Cache容量、块大小、相联
度、地址流等有关
2、平均访问时间TA
TA=T命中+F*T缺失,缺失率F=1-H
*与TCPU关系:TCPU=TN*CPI*TC=(NUMCPU执行+NUMMEM停顿)*TC
=(NUMCPU执行+NUMMEM*F*缺失开销)*TC
*TA优化方法:降低缺失率、减少缺失开销、减少命中时间
19
转上页
四、降低Cache缺失率的方法
1、增加块大小(S块)
1-H
*测试结果:① F先↓、后↑
② SCache↑,F最小时S块↑
*问题:S块增大→T缺失增加
T失效=T地址+n*(T存取+T传输)
改善
改善
强制失效 冲突失效
SC
2SC
4SC
块大小
*块大小的选择:
目标—使TA最小(F、 T缺失均较小);
方法—为降低F,S候选块=F较小(一定范围)的S块;
为减小T缺失,下级MEM低延迟时,S块=max{S候选块}
否则,S块=min{S候选块}
20
转上页
2、提高相联度(组内块数n)
*测试结果:①n越大,F越低
②容量SC=N的F直接 接近于 SC=N/2的F2路组相联
③F8路组相联 接近于 F全相联
*问题:n增大→ T命中增大,T命中=T查表+T访问,成本亦增大
*相联度的选择:
目标—使TA最低(F、T命中、成本均较低);
方法—用测试程序进行测试;
结果—小容量Cache(≤32KB),n越高TA越低,
大容量Cache,n为4或8时TA较低
21
转15页
3、设置Victim Cache(牺牲Cache)
*Victim Cache:全相联的小Cache,存放被替换出的块
数据
CPU
地址
目
录
表
=?
N
Cache
存储阵列
Victim
Cache
Y
Y
主存
=?
N
*降低F原理:①Victim在Cache内部,代替访问下级MEM;
②Victim采用全相联映射
*减小T缺失原理:并行访问Cache与Victim Cache
*测试结果:①对SCache=128个块、直接映射方式的Cache,
SVictim=4个块时,F可减少20%~90%;
②对组相连映射的Cache,Victim意义不大
22
4、采用预取技术
*降低F原理:数据块被访问之前,已调入Cache中
(1)硬件预取技术
--Dual Core 2采用
*实现原理:利用预取器,在CPU访问前、将数据块提前调入
预取器—在Cache外部、含有缓冲区(FBuff)
预取算法—Cache不命中时,选定预取块(如下个块)
上层
MEM
Cache
命中否
Cache缺失时
下层
MEM
Cache Fetcher
预取操作—空闲时请求,优先级较低,数据写入FBuff
*测试结果:SC=256、直接映射I$,FBuff为4个块时F↓50%;
2个64KB的4路组相联D$,8个FBuff时F↓>50%
23
回下页
(2)软件预取技术
--国产神威(SW)CPU采用
*实现原理:编译器在目标代码适当位置插入预取指令
预取类型—寄存器预取、Cache预取
预取方式—故障性预取、非故障性预取(故障时转变为NOP)
程序目标代码
……
Load A
Load B
预取指令(PreLoad C)
……
Load C
Load C+1
……
*硬件需求:非阻塞Cache
←使CPU访存、预取并行
*特点:预取效率较高、无硬件成本,需编译器介入
(硬件预取特点相反)
24
转上页
五、减少Cache缺失开销的方法
1、读缺失优先于写
--所有Cache采用
*写操作性能优化:写提交代替写完成,即零等待写
硬件需求—增设写缓冲区或写回缓冲区
实现方法—数据先写入缓冲区、空闲时再写入主存
数据
CPU
地址
数据
目 Cache
录
表 存储阵列
=?
Y
N
Y
写
缓冲区
=?
N
全写法Cache[不按写分配]
主
存
目 Cache
录
表 存储阵列
地址
=?
N
Y
Y
写回
缓冲区
=?
N
写回法Cache[按写分配]
*减小T缺失原理:读缺失检查写(回)缓冲区,并优先处理
25
回下页
全
写
法
写
回
法
CPU 操 作
Cache动作
写i
写a
读j
读k
写i 写M(i) 读j 写a 写M(a) 读M(k) 读k
CPU 操 作
Cache动作
写i 读j
CPU 操 作
Cache动作
写i 读j 写a
CPU 操 作
Cache动作
写i 读j 写a
t
读k
写a
写i 读j 写M(i) 写a 读M(k) 读k 写M(a)
写i 读j 写a
写i 读j 写a
t
读k
读M(k)
写M(a)
读k
t
读k
读M(k)
读k
写M(a)
t
*对F的影响:F↓,写(回)缓冲区类似于victim Cache
*对T命中的影响:无影响,同时查找目录表、写(回)缓冲器
*写(回)缓冲区:组成— 有效位 主存块地址
大小—一般为1~2个块
主存块数据
26
转上页
2、写缓冲合并技术
--全写法Cache常采用
*写缓冲区组成:缓冲项包含多个子项
←支持可变数据长度
缓冲项管理—子项有独立有效位
写操作处理—有空闲缓冲项时写入,否则等待
地址
有效位 子项3
子项2 子项1 子项0
00100H 0011
00102H 0001
不采用写合并效果
*减少T缺失原理:写入时比较地址,
地址匹配时,所写数据合并到该项中
地址
有效位 子项3
子项2 子项1 子项0
00100H 0111
00000H 0000
采用了写合并效果
27
回下页
3、请求字处理技术
--块较大时采用
*尽早重启方案:块按序调入,请求字到达时立即送给CPU
主存地址
(来自CPU)
主存地址
成功
主存块号
块内地址
地址映射及变换
Cache地址
块号
失败
有空闲
无空闲
块内地址
主存
替换块
Cache阵列
(去CPU)
数据
单字宽
块宽度
单字宽
*请求字优先方案:先调入请求字、送给CPU,后调入其他字
实现方法—子块搁置技术,最小访存单位为子块
标记
有效位 子块3
子块2 子块1 子块0
00100H 0010
28
转上页
回31页
4、非阻塞Cache技术
--与乱序执行CPU配合使用
*降低T缺失原理:当前请求缺失时,可处理后续请求
CPU的请求
读请求(A) 读请求(B) 写请求(C)
Cache的操作
读失效(A)
块调入(A)
t
读命中(A)
读命中(B) 写命中(C)
读完成(B) 写完成(C) 读完成(A)
CPU请求的完成
*非阻塞Cache结构:增设请求缓冲区
数据
CPU
(乱序
执行)
地址
请求缓冲区
目
录
表
=?
Cache
存储阵列
主存
Y
N
*应用:对超标量流水线、异步流水线的实现帮助很大
29
5、采用两级Cache
--Pentium开始采用
*减小T缺失原理:Cache-主存间增加一层MEM,TCache<<TMem
CPU
Cache
主存
CPU
L1
L2
Cache Cache
主存
*性能分析:设Cache总容量相同
单级Cache—TA=TCache命中+F·TMem,F=1-H
二级Cache—TA=TL1$命中+FL1$·TL2$命中+FL1$·FL2$·TMem
测试结果—①F≈FL1$·FL2$,对缺失率影响很小
②TL1命中+FL1·TL2命中<TCache命中,可减少T命中
思考—为什么通常不采用更多级Cache?
P4中设置L3级Cache适合的应用场合?
30
6、旁侧式Cache技术
*贯通式Cache:Cache不命中时才访问主存
*旁侧式Cache:并行访问Cache与主存,命中时通知主存停止
实现需求—增加“Cache命中”、“抢占总线”信号线
主存地址
(来自CPU)
Cache命中
抢占总线
主存地址
成功
主存块号
块内地址
地址映射及变换
Cache地址
块号
失败
有空闲
无空闲
块内地址
主存
替换块
Cache阵列
(去CPU)
数据
Cache命中
单字宽
抢占总线
块宽度
单字宽
对MEM总线的要求—支持2种传输粒度,增加2根信号线
性能—降低了T缺失、增加了T命中、未降低总线占用率
31
转28页
六、减少Cache命中时间的方法
*Cache实现技术:SDRAM阵列、硬件实现全部功能、靠近CPU
1、小而简单的一级Cache
*虚地址访存:TA(V)=T地址变换+(T取目录项+T比较标记+T访问数据)+F*T缺失
相关因素—
(TLB)
(组数)
(相联度) (块大小)
*减少T命中原理:容量小、结构简单,减少、隐藏TA(V)的项
*容量设计:T地址变换+T取目录项 → max{T地址变换,T取目录项}
→Len(组号,块内地址)≤Len(页内地址),∴容量=页大小*相联度
*结构设计:T比较标记+T访问数据 → max{T比较标记,T访问数据},T命中≈TC
→直接映射最好→F最差;∴相联度尽量低 (MUX延迟、功耗、流水)
思考—为什么目前的L1$相联度较高(如n=8)?
①TC更重要→T命中=2TC,②增加L1$容量,③多线程→冲突缺失↑
32
2、虚拟Cache(虚拟地址Cache)
--仅L1$使用
*减少T命中原理:T地址变换+T取目录项 → T取目录项
虚拟地址
虚拟地址
AMU
MMU
CPU
CMU
Cache
辅存
AMU
CPU
(虚存)
主存
CMU
Cache
MMU
辅存
主存
(虚存)
*存在问题:进程切换(1VA:nPA)—清空Cache,或VA中加PID
数据共享(nVA:1PA)—无解→VA、PA低m位相同
信息保护—添加保护字段
*折中方法:虚拟索引-物理标识,ndx2→L1$容量受限
虚地址
虚页号
页偏移
tag1 ndx1 ndx2
ndx1
tag1
V
TLB(组相联)
标记 实页号 保护
…
=
=?
MUX
ndx2
V
L1$(组相联)
标记 块数据 状态
…
=
=?
MUX
33
3、写操作流水化
--P4采用
*减少T命中原理:T取/比较标记+T写数据 → max{T取/比较标记,T写数据}
CPU操作
向A1写数据D1
向A1写数据D2
取Tag与A1比较
取Tag与A2比较
Cache操作
缓冲区→阵列(A1)
写D1→缓冲区
缓冲区→阵列(A2)
写D2→缓冲区
*流水化Cache结构:增设延迟写缓冲区,标记、数据分离
数据
地址
变换
目
录
表
数据
MUX
地址
延迟写缓冲区
Y
=?
N
写/读
写回缓冲区
存储
阵列
主
存
*读操作处理:比较标记、读数据已并行(索引+MUX)
34
七、Cache的一致性
1、不一致性产生原因
①I/O设备(如DMA)绕过Cache直接对主
存进行I/O操作
②不同CPU在其Cache中,对同一主存单
元(拷贝)的异步读/写操作(写回法)
CPU
CPU
主存
Cache
DMA
…
Cache
I/O1 … I/On
2、不一致性解决方案
*禁止法:共享数据禁止进入Cache,或允许进入+禁止修改
*刷新法:操作前先对共享数据进行刷新,再进行操作
刷新方法—根据Cache块状态、新操作类型,采用一致性
协议实现
一致性协议类型—有写作废和写更新两种
35
3、一致性协议
是一种控制Cache块状态变化、以保证一致性的分布式算法
*协议原理:某Cache块被改写后,立即通知具有该块副本的
所有Cache,作废或更新该块
*实现方法:依Cache-MEM连接结构,有监听法和目录法两种
CPU
CPU
Cache
Cache
主存
I/O1 … I/On
DMA
…
(a)总线互连[采用监听法]
CPU
Cache
NIC DMA
SM
CPU
···
Cache
NIC DMA
SM
互连网络
(b)网络互连[采用目录法]
*实现原理:各Cache控制器分布式实现,
监听总线操作或查询宿主块目录,
自行产生状态变化及相应操作
36
回下页
4、MESI协议
*属性:基于监听、四态、写作废
(1)Cache块状态
修改态(M)—脏 块,块仅同时在一个Cache中存在
独占态(E)—干净块,块仅同时在一个Cache中存在
共享态(S)—干净块,块可同时在多个Cache中存在
无效态(I)—缺失块,块同时在零个Cache中存在
Cache块在各Cache中的状态枚举
P0 Cache
P1 Cache
P2 Cache
I
I
I
S
S
I
S
I
S
I
S
S
S
S
S
E
I
I
I
E
I
I
I
E
M
I
I
I
M
I
I
I
M
37
转上页
回下页
(2)协议基本思想
*满足一致性的Cache工作流程:
不命中
无空闲位置
有空闲位置
PrRd(读) 选择被替换块i;
若块i为M态,写回主存; 调入目标块;
转→
PrWr(写) 转→
状态
CPU操作
命中
完成操作
通知其他Cache作废
目标块、完成操作
*Cache可见操作/事务:
①PrRd、PrWr;②CaInvd(替换的伪定义);
③BusRd、BusWB、BusRdX(总线互斥读[调入+通知])
PrRd、PrWr
CaInvd
CPU
CPU
主存
Cache
Cache
BusRd、BusRdX、BusWB
38
转上页
回下页
*协议基本思想:
①写-无效策略的体现—
接收到PrWr操作时,产生BusRdX事务(通知作废);
监听到BusRdX事务时,块状态变化为S/M→I(被作废)
②工作流程的实现—
实现工作流程时,产生相应总线事务、状态改变
③总线事务的优化—
监听命中、块为M态时,Cache提供数据、主存接收数据
Cache1(块a为I态): BusRd
Cache2(块a为M态):
主存(块a为旧数据):
等待
BusRd(续)
BusRd
BusWB
接收数据
优化
发送数据
Cache2抢占总线 主存提供数据
时间
发送数据
接收数据
时间
Cache2提供数据、主存接收数据
块拥有者—块最新数据所在部件(M态的Cache或主存)
39
回下页
转上页
(3)状态转换图
PrRd/—
PrWr/—
CaInvd/BusWB
PrWr/(BusRdX+newPrWr)
M
PrWr/—
CaInvd/—
PrRd/—
说明:①
②
③
⑤
I
BusRdX/Flush
PrRd/BusRd(S)
BusRdX/—
CaInvd/—
E
BusRd/—
S
PrRd/—
BusRd/—
A/B—A操作或事务被观察到时,产生B操作或事务;
实线—CPU操作时的状态变化,虚线—监听命中时的状态变化;
S—块共享信号(监听命中时有效);④newPrWr—M态块的写操作;
Flush—事务的数据由本Cache提供 (否则由主存提供)
40
转上页
回下页
*状态转换示例:不同CPU对块u的操作
CPU 1
CPU 2
CPU 3
PrRd、PrWr
主存
Cache 1
Cache 2
Cache 3
BusRd、BusRdX、BusWB
Pi操作
P1 Cache P2 Cache P3 Cache
块u状态 块u状态 块u状态
产生的
总线事务
块拥有者
I
I
I
主存
P1读u块
E
I
I
BusRd
主存
P3读u块
S
I
S
BusRd
主存
P3写u块
I
I
M
BusRdX
主存
P1读u块
S
I
S
BusRd
P3 Cache(主存收数据)
P2读u块
S
S
S
BusRd
主存
41
转上页
八、Pentium/PentiumⅡ的Cache技术
1、Pentium的Cache技术
(1)Cache结构
*结构:贯穿式L1$、L2$(L1$为L2$子集),L1$采用哈佛结构
CPU核心
L1 I-Cache L1 D-Cache
本地总线
L2 Cache
系统总线
*L1$参数:容量各为8KB、块大小为32B,2路组相联映射、
LRU替换算法、写一次法或写直达法写策略
*L2$参数:容量为256/512KB、块大小为32B,2路组相联映
射、LRU替换算法、写回法或写直达法写策略
42
回下页
回45页
(2)Cache的一致性协议
*L1一致性协议:基于写一次法的MESI协议
与写回法MESI区别—I态写丢失、S态写命中的处理不同
写丢失 ↓
不分配
读丢失
I
写
监
听↓
命
中
读命中
↑
↑ WB/WT#低
读命中
S
写监听命中
↓
读
监
听
命
中
M
写命中
读监听命中
↓ 写命中、
WB/WT#为高
E
读命中
写命中
说明:① ↑为片外MEM读周期(BusRd),↓为片外MEM写周期(BusRdX或Flush)
② WB/WT#为高时,表示L2 Cache采用的是写回法,否则为写直达法
③ 替换操作的动作(BusWB)及状态变化在该图上未标识
*L2一致性协议:基于写回法的MESI协议
43
转上页
(3)Cache一致性协议的实现
*本地总线支持:写策略—PWT(L1$)、WB/WT#(L2$)
监听状态—INV、AHOLD(监听未完成),HIT#、HITM#
操作等待—BOFF#(L2$忙于总线事务[M态写回])
L1 I-Cache
监听窗口
L1 D-Cache
监听窗口
总线接口单元BIU
L2 Cache(含控制器)
系统总线
KEN#
AB
32 M/IO#
位 D/C#
W/R#
CACHE#
64
位
DB
PWT
HIT#
HITM#
WB/WT#
INV
AHOLD
BOFF#
本地
总线
M/IO#~W/R#--CPU的操作命令
CACHE#--CPU命令的数据大小
KEN#--块的读操作允许信号
PWT—L1$写策略(高为全写)
HIT#--L1$监听命中
HITM#--L1$ M态监听命中
WB/WT#--L2$写策略(高写回)
INV—系统总线事务类型(W/R#)
AHOLD—地址请求保持
BOFF#--CPU操作等待
*L2$支持:按MESI协议处理操作,总线相关操作传递到L1$
*系统总线支持:块操作命令—MEM行读、MEM写、MEM写并无效
监听状态—SBO#(M态监听命中)、SDONE(监听命中)
44
2、Pentium Ⅱ的Cache技术
(1)Cache结构
*结构:旁侧式L1$、L2$(主-辅关系),L1$采用哈佛结构
CPU核心
L1 I-Cache
L1 D-Cache
总线接口单元BIU
前端总线(系统总线)
L2 Cache
后端总线
*L1$参数:容量各为16KB、块大小为32B,4路组相联映射、
LRU替换算法、写回法写策略、非阻塞Cache
*L2$参数:容量为512KB、块大小为32B,4路组相联映射、
LRU替换算法、写回法写策略、非阻塞Cache
45
回下页
转42页
(2)Cache的一致性协议
*L1$一致性协议:基于写回法的MESI协议
*L2$一致性协议:改进的基于写回法的MESI协议
改进目标—M态块仅在L1$或L2$中存在(主-辅关系)
读丢失(S)
I
Ll$
的
BusWB
读
命
中
,
写
命
中
写
监
↓ 听
命
中
读命中
↑
写命中, 写监听命中
↑
↓
S
读监听命中
读
监
听
命
中
M
E
读命中
说明:①L1$的BusRd及BusRdX作为L2$的读(PrRd)、写(PrWr)
②读/写命中时,M态块作废(M→I)、L1$成为M态
③监听L1$的BusWB,接收块数据、块状态I→M
④ ↑为片外(FSB)MEM读周期,↓为片外(FSB)MEM写周期
46
转上页
第三节
虚拟存储器
*OS存储管理的任务:主存分配、主存扩充、存储保护
(分配与回收) (虚拟MEM)
(VM保护)
一、虚拟存储器的组织
1、虚拟存储器工作原理
*虚拟存储器(VM):地址空间=进程逻辑地址空间的“存储器”
*VM组成:主存、辅存、MMU(存储管理单元)
虚拟存储器
虚拟地址
CPU
MMU
程序按逻辑顺序执行所需
物理地址
主存
程序执行所需
辅存
程序存储所需
47
回下页
*VM存储空间管理:
信息交换单位
信息交换管理机制
虚存-主存
段、页
段表、页表
虚存-辅存
文件块(如扇区)
文件目录表、文件控制块
*工作原理:地址变换、访问实现、一致性保持
虚拟
地址
虚存-主存 失败时
地址变换
成功时
系统
虚存-辅存 失败时
异常
地址变换
成功时
主存存储管理
辅助软硬件
物理地址
命令
主存
数据
辅存
虚拟
存储器
主存存储管理—主存的分配与回收(OS存储管理)
VM的实质—是面向程序的存储器模型!
48
转上页
2、虚拟存储器的组织
*虚存-主存管理的组织:
映射方式
映射表组织
行数
存放
查表
替换
算法
写
策略
全相联
S虚存/S交换 主存
1行
伪LRU
写回
方法
原因 主存利用率 查表速度 表空间 访问主存 表存放 写次数
*虚存-辅存管理的组织:OS完成(进程管理、文件管理)
*虚存实现的组织:MMU、OS相互协调
VA
虚存-主存
地址变换
失败时
访问TLB/主存 产生中断/异常
辅助硬件(MMU)
虚存-辅存
地址变换
失败时
系统
异常
执行异常处理程序
辅助软件(OS)
49
3、虚拟存储器的性能优化
*平均访问时间:TVA=TV命中+(1-H)TV缺失
(1)H优化方法
主存容量↑,页大小↑,两种页大小,预取页式调度
(2)TV缺失优化方法
*缺失作为异常处理:提高优先级(中断→异常)
*增设缺页向量寄存器:减少中断响应延迟
*增设缓冲区(快表):小容量(几十行)Cache(H≈99.99%)
组织:组相联/全相联、LRU替换算法、写回法写策略
有效 标记 LRU 脏 实页号
0组
…
G/n-1组
行0
有效 标记 LRU 脏 实页号
…
…
行n-1
50
回下页
(3)TV命中优化方法
--提高地址变换速度
*并行查快表和慢表:旁侧式快表(TLB),隐藏部分T查慢表
=?
V Tag L M PP
页表
基址
虚地址
+
虚页号
页内地址
装入 实页号(PP)
缺失时
快表(CPU中)
慢表(主存中)
实地址 物理页号 页内地址
*支持多种页大小:以减少访存次数,减小页表项数
正常页管理—采用多级页表(S页表>1页时)
PD
基址
装入 属性 页表基址
装入 属性
实页号
VA
虚页号
PA
页目录(PD)
页内地址
物理页号 页内地址
页表(PT)
特大页管理— PD中设置标志位(PSE),PSE=1时仅访问PD
51
转上页
二、虚拟存储器的保护
*VM保护种类:区域保护、访问保护
1、区域保护及其实现
*区域保护类型:映像表保护、环保护、键保护
*常见应用:映像表保护和环保护
(1)映像表保护方式
*信息区域类型:私有区域、共享区域
*基本方法:
①区域管理—私有区域用各进程的私有映像表管理,
共享区域用系统的公共映像表管理
②区域保护—进程只可访问自身私有映像表、公共映像表
52
回下页
*保护实现:
①每个进程拥有1个私有映像表、共用1个系统映像表
②映像表项(信息区域)中包含信息保护属性(如段长、类型等)
③进程访问VM时,先与保护属性进行比较(地址变换时)
主存空间分配
程序A段0(私有、代码)
程序B段2(共享、代码)
程序A段1(私有、数据)
程序A段2(私有、代码)
程序A的段表
段号 段基址 装入位 段长
0
0
1
3K
1
4K
1
1K
2
5K
1
1K
程序A段3(共享、数据)
程序B段0(私有、代码)
程序B段1(私有、数据)
…
程序B的段表
段号 段基址 装入位 段长
0
8K
1
2K
1
10K
1
1K
系统公共空间的段表
段号
段基址 装入位 段长 …
程序A段3
6K
1
2K
程序B段2
3K
1
1K
*缺点:无法实现共享信息的分级保护
(如程序B的段2希望仅可被OS访问、不可被程序A访问)
53
转上页
回55页
…
(2)环保护方式
--分级保护(简单)
*级别表示:用层(环)表示,
外层不可直接访问内层
用户层
系统层
0 1 2 3
*基本方法:外层不可直接访问内层空间,
0层—内核;1层—系统服务
通过软中断(OS功能调用)访问 2层—OS扩展;3层—应用层
*保护实现:①每个进程拥有1个进程环号
②映像表项(信息区域)中包含信息保护环号
③进程访问VM时,先与保护环号进行比较
(3)键保护方式
--分级保护(复杂)
*级别表示:用存储键(锁)、访问键(钥匙)表示
*保护实现:①每个进程拥有1个访问键
②映射表项中包含信息存储键
③进程访问VM时,先与存储键进行比较
54
2、访问保护及其实现
*访问保护类型:读(R)、写(W)、执行(E)
*常见应用:数据为读(R)和写(W),程序为执行(E)
*保护实现:
①映像表项(信息区域)中包含信息允许类型
②进程访问VM时,先用访问类型与允许类型进行比较
※虚存保护的常见应用—
①同时采用区域保护、访问保护
②映像表项中存放所有保护信息
③保护全部由硬件实现(地址变换时)
※保护模式定义— 采用虚拟存储器扩充主存空间、提供信
息保护机制的CPU操作模式!
55
转53页
四、Pentium的虚拟存储器
1、多任务管理原理
*任务状态:1个当前任务(运行)、n个非当前任务(阻塞/就绪)
*机器工作状态:分为系统态、用户态
系统态时—系统管理,如当前任务切换
用户态时—执行当前任务
系统态
用户态
如:任务1
系统态
用户态
如:任务3
系统态 …
时间
*多任务管理表格:
系统级—任务链表,全局描述符表GDT
任务级—任务状态结构TSS,
虚存的段表(局部描述符表LDT)、页目录及页表
56
回下页
管理表格的关联—GDT管理各个TSS、共享信息,
TSS管理LDT、页目录及页表
全局描述符表GDT
任务1 TSS描述符
任务1 LDT描述符
任务2 TSS描述符
任务2 LDT描述符
…
任务状态结构TSS
LDT选择符
页目录表基址
段寄存器选择符
通用寄存器值
……
任务链表指针
任务链表组成
任务1
TSS
任务2
TSS
任务3
TSS
局部描述符表LDT
段0描述符
段1描述符
…
页目录
页目录项
页目录项
…
页表
页表项
页表项
…
注:描述符--指信息项的内容(如信息长度、主存基址、属性等)
选择符—指信息项在管理表格中的索引(如行号等)
57
转上页
回下页
回59页
回62页
*任务状态结构TSS: (PCB的子栏目)
任务建立时,设置的所需资源信息(或索引);
任务切换时,保存的CPU状态信息
68H
64H
60H
54H
48H
28H
20H
1CH
18H
14H
10H
0CH
08H
04H
00H
I/O允许位映像(最大8KB)
中断重定向位映象(32B)
操作系统可利用(长度可变)
I/O允许位映像域基址
0
T
0
任务LDT选择符
0
GS、FS、DS选择符
0
SS、CS、ES选择符
EDI、ESI、EBP、EBX、EDX、ECX、EAX
EFLAG、EIP
CR3(包含页目录表基址)
0
SS2(特权级2)
ESP2
0
SS1(特权级1)
ESP1
0
SS0(特权级0)
ESP0
0
反向链
转上页
回61页
任务的段表(LDT)
在GDT中的行号
对应的段在GDT
或LDT中行号
任务切换时各
通用REG的值
构成任务链表
58
2、虚拟存储器概述
*存储管理方式:支持段式、页式、段页式
虚地址: 6位进程ID 16位段选择符
32位段内地址
多任务管理
当前任务虚地址:
16位段选择符
32位段内地址
或者
48位虚拟地址
段式管理
页式管理
32位线性地址
直接
页式管理
32位物理地址
32位物理地址
段长—20位,≤1MB或≤4GB(220页)
页长—20位,4KB或4MB
32位物理地址
←用标志位区分
←用标志位区分
*信息保护方式:映像表保护+环保护+访问保护
映像表—GDT、LDT,共享段∈GDT,私有段∈各任务LDT
环—分4级,只使用了0级和3级
访问类型—读、写、执行
转57页
59
3、系统级寄存器与系统管理表格
*控制寄存器CRO~CR4:系统工作时的方式控制REG
31 30
29
18
16
5
4
3
2
1
0
CR0 PG CD NW
AM
WP
NE ET TS EM MP PE
PG—允许/禁止页式存储管理;CD—禁止/允许内部Cache按写分配法;
NW—禁止/允许数据Cache使用写直达法;PE—允许/禁止保护模式;
TS—任务切换位,该位由硬件置位、软件复位
31
0
CR1
Intel保留
CR2
页面失效(故障)线性地址
页面失效线性地址—页面失效时,统一的异常处理服务程序入口地址
31
CR3
12
4
3
2
1
0
页目录基地址(高20位)
PCD PWT
页目录基地址—地址低12位为0,即页目录须从页基址开始(4KB倍数);
PCD—禁止/允许页面Cache操作;PWT—页面Cache采用写直达法/写回法
31
6
MCE
CR4
4
3
2
1
0
PSE DE TSD PVI VME
PSE--页面大小扩展位,1为允许使用4MB页;VME—允许/禁止虚拟8086模式
60
回下页
回64页
*映射表寄存器GDTR、LDTR、TR:
指向管理表GDT、LDT、TSS,减少访问时索引级数
公共映射表GDT
GDTR
当前任务TSS
描述符 TR
当前任务段表
描述符 LDTR
全局描述符表GDT
任务1 TSS描述符
任务1 LDT描述符
中断描述符
任务2 TSS描述符
任务2 LDT描述符
任务2 公共段j描述符
…
任务状态结构TSS
LDT选择符
页目录表基址
段寄存器选择符
通用寄存器值
……
任务链表指针
当前页目录
CR3
局部描述符表LDT
私有段0描述符
私有段1描述符
…
页目录
4KB页目录项
4MB页目录项
4KB页目录项
…
页目录表
4KB页表项
4KB页表项
4KB页表项
…
61
转上页
转58页
4、段式虚存管理与保护
*段表的组织:私有段∈LDT,共享段∈GDT
段描述符(8B)
全局描述符表GDT
局部描述符表LDT
段描述符
段0描述符
段基址(32bit)
其它描述符
段1描述符
段长(20bit)
……
……
属性(12bit)
段属性项:段长单位(页/字节)、信息类型(代码/数据)、
环保护(保护环号DPL)、访问保护(E/R/W位)等
*访问请求中虚地址(段式)的表示:
理论上的虚地址:
段号(16bit)
段内地址(32bit)
段描述符的表中偏移地址(字节)
实际上的虚地址: 段选择符(16bit)
15
段选择符组成:
偏移地址低3位为0
3 2
索引
段内地址(32bit)
1 0
TI RPL
RPL—请求者(当前任务)的环号
目标段在LDT/GDT中(1LDT,0-GDT)
目标段在LDT/GDT中的行号
62
转57页
*虚-实地址变换过程:
访问请求的虚地址
TI RPL 段内偏移地址(32位)
索引
TI=1
LDTR
LDT
段描述符
段描述符
…
TI=0
GDTR
段基地址(32位)
GDT
其他描述符
段描述符
…
+ 段内偏移地址(32位)
线性地址(32位)
段式管理
主存物理地址(32位)
段页式管理之段式管理
页式虚拟地址(32位)
*虚存(段式)的保护:地址变换时
①映像表保护—请求者只能访问GDT及自身LDT
②环保护—请求者的RPL≤DPL(目标段保护环号)
③访问保护—请求者的操作类型∈目标段描述符允许类型
63
5、页式虚存管理及保护
*基本参数:虚地址长度—32位,页大小—4KB或4MB
*页表的组织: 页表项大小—4B
页表级数—4KB页两级(页目录+页表),4MB页一级(页目录)
当前任务的CR3
页目录
4KB页目录项
4MB页目录项
4KB页目录项
…
页表
4KB页表项
4KB页表项
4KB页表项
…
页目录项及页表项组成—基址、控制及保护信息
31
22 21
12 11 ~ 9 8
7
6
5
4
3
2
1
0
4MB页目录项 页框基址(高10位) 保留
AVL
PS=0 D
A PCD PWT US RW
P
4KB页目录项
AVL
PS=1 D
A PCD PWT US RW
P
页表基址(高20位)
P=有效位,D=“脏”位,A=访问过位,PS=页大小位,RW=读/写位,PWT=写直达位
4KB页表项
页框基址(高20位)
AVL
D
A PCD PWT US RW
4KB/4MB页实现条件—CR4中PSE=1时,PS位表示
回下页
转60页
64
P
*访问请求中虚地址(页式)的表示:
4MB页的虚地址: 虚页号(10b)
页内地址(22b)
4KB页的虚地址: 页目录号(10b) 虚页号(10b) 页内地址(12b)
*虚-实地址变换过程:
页式虚地址(32位) 页目录号
虚页号
页内地址
12位
页目录
4KB页目录项
4MB页目录项
……
PS=1
PS=0
页表
4KB页表项
4KB页表项
……
页框基址(高10位)
主存
地址
实页号
页内地址
页框基址(高20位)
主存
地址
实页号
22位
页内地址
*虚存(页式)的保护:地址变换时
①映像表保护—无(由段表保护即可)
②环保护—页目录项/页表项的US位(用户/系统)
③访问保护—页目录项/页表项的RW位
转上页
65
第三章课后复习思考题
⑴层次结构存储系统的产生原因、性能公式各是什么?为什么只有两
个层次?不同层间信息交换单位大小为何各不相同?进行层次管
理需增加哪些部件、如何进行访问?
⑵如何实现组相联按地址并行查找?写一次法写策略的特征是什么?
⑶降低Cache的缺失率、缺失开销、命中时间的方法有哪些?各自的
思想是什么?(以Pentium为例找感性认识)
⑷Cache不一致性的产生原因、解决方法是什么?一致性协议有哪两
种、核心思想是什么?实现方法有哪两种、原因是什么?
⑸虚拟存储器的辅助管理机构如何组织?虚存与Cache的实现技术有
何异同?虚存的访问过程有哪些环节?
⑹优化VM性能的方法有哪些?为什么要用虚存实现程序保护?虚存保
护的种类、原理是什么?
⑺Pentium如何实现多任务系统的虚存及保护(即如何实现多任务管理、
段/页式存储管理、虚存保护)?
66

similar documents