Transcript 第三次讨论课
第三次讨论课 存储系统
Cache的基本原理
存储器连接设计
存储器读写原理
一、Cache的基本原理
Cache存储器
• 1.cache的功能
cache是为了解决CPU和主存之间速度不
匹配而采用的一项重要技术
CPU存储器系统的关系
3.36.swf
3.37.swf
2. cache
的
基
本
原
理
3.cache的命中率
• 在一个程序执行期间,设Nc表示cache完成存
取的总次数,Nm表示主存完成存取的总次数,
h定义为命中率,则有:
若tc表示命中时的cache访问时间,tm表示未
命中时的主存访问时间,1-h表示未命中率,
则cache/主存系统的平均访问时间ta为:
设r=tm/tc表示主存慢于cache的倍率,e表示访
问效率,则有:
为提高访问效率,命中率h越接近1越好,r值以
5—10为宜,不宜太大。命中率h与程序的行为、
cache的容量、组织方式、块的大小有关。
例题
• CPU执行一段程序时,cache完成存取的
次数为1900次,主存完成存取的次数为100
次,已知cache存取周期为50ns,主存存
取周期为250ns,求cache/主存系统的效
率和平均访问时间。
解答
h=Nc/(Nc+Nm)=1900/(1900+100)=0.95
r=tm/tc=250ns/50ns=5
访问效率:
e=1/(r+(1-r)h)=1/(5+(1-5)×0.95)=83.3%
平均访问时间:
ta=tc/e=50ns/0.833=60ns
•
•
•
计算机有cache、主存和用于虚拟存储器的磁盘。
Cache的存取时间为20ns。如果字不在cache中,
则首先需60ns时间把它由主存调入cache,然后
再进行引用。如果字不在主存中,则需12ms时
间把它由磁盘调入主存。若cache的命中率为
0.9,主存的命中率为0.6问存取一个字的平均存
取时间是多少?
Tc=20ns tm=60ns hc = 0.9 hm = 0.6 td
=12ms
Ta= tc×hc+(1-hc)×tm+hm×tm+(1-
hm)×td
3.5.2.主存与cache的地址映射
• 地址映射即是应用某种方法把主存地址定位到
cache中。
• 地址映射方式有全相联方式、直接方式和组相联
方式三种
1.全相联映射方式
• Cache的数据块大小称为行,主存的数据块大
小称为块,行与块是等长的。
• 主存中一个块的地址与块的内容一起存于
cache的行中,其中块地址存于cache行的标
记部分中。
• 这种方法可使主存的一个块直接拷贝到cache
中的任意一行上(cache的行与内存的块相对
应,就是块的意思),非常灵活。
• 它的主要缺点是比较器电路难于设计和实现,因
此只适合于小容量cache采用。
全相连映射方式
3.38.swf
1、内存地址的块号与cache的所有行标记进行比较(相联存储器原理),若
有相等,表示命中:该地址对应的数据在cache中,从cache中存取
2、若没有相等的,表示没有命中,根据内存地址从主存读数据,同时将该
字对应在主存中对应的块根据替换策略传送给cache中的一块(替换策略后面
有讲)
3.39.swf
2.直接映射方式
• 这也是一种多对一的映射关系,但一个主存块只
能拷贝到cache的一个特定行位置上去。
• cache的行号i和主存的块号j有如下函数关系:i=j
mod m
(m为cache中的总行数)
直接映射方式的示意图见下页
• 直接映射方式的优点是硬件简单,成本低。
缺点是每个主存块只有一个固定的行位置可存放,
容易产生冲突。因此适合大容量cache采用。
比如:cache有8行,内存有256块,映射关系是主存的0块(B0),
8 (B8)块,16 (B16)块,…248 (B248)块共32个块对应cache的第0行,
因为0 mod 8,8 mod 8,….248 mod 8都是0,所以都对应cache的0行
注意:此例中因为cache的每一行最多只对应32个块,所以标记号5位即可,
可以区分32个不同的块,而每一块对应的行是固定不变的
映射过程:s位的块地址分为两部分,r位做为cache行地址,s-r位做为标记
(区分对应同一行的不同主存块)。
当CPU以一个内存地址访问cache时候,首先用r位行号找到cache中的此行,
再用s-r位标记与cache中的标记部分进行比较,若相符即命中,从w 字地址从
行中取字;若不符,未命中,从主存读取需要的字,同时将该字对应的块
传送到对应的行中
3.40.swf
3.组相联映射方式
• 这种方式是前两种方式的折衷方案。它将cache分成u组,
每组v行,主存块存放到哪个组是固定的,至于存到该组哪
一行是灵活的,即有如下函数关系:
m=u×v 映射到的组号 q=j mod u (j是主存块号)
先看组相联映射的示意图演示 3.40.swf,再听具体分析
• 组相联映射方式中的每组行数v一般取值较小,这种规模的
v路比较器容易设计和实现。而块在组中的排放又有一定的
灵活性,冲突减少。
比如:cache一共分4组,每组有2行,u=4,v=2,那么B1、
B5…B253共64块就对应第1组S1,因为
1mod4,5mod4…253mod4都等于1,所以对应cache的第1组,至
于到底要替换组内的哪一行,要根据后面讲的替换策略,你看这里每
组是2行,其实都可以替换,但要讲究策略的。
映射过程:s位块地址分为两部分,d位表示cache组号,s-d作为标记(区
分主存中对应相同组的不同块)
当CPU给定一个内存地址访问cache时,用d位找到对应的组,然后用s-d
位标记与组内每一行的标记同时进行比较,有相符的即命中,根据w位从
该行寻址取字;若没有一个相同,没有命中,根据地址从主存取字,同时
将字对应的块传递到对应组中的行,至于是替换组中哪一行,要根据替换
策略。
例1
• 假设某台计算机使用直接映射的高速缓存。计算
机的主存储器的容量为220字,高速缓存有32个存
储空间块,且每个高速缓存块包含16个字。问:
• (1)主存储器可以划分为多少个信息块?
• 220÷16=220÷ 24 = 216个信息块。
• (2)从高速缓存的角度看,存储地址采用的是什
么格式?即分别说明地址中的标记域、块域和字
域的大小。
• 标记域为220÷32÷16=211 为11位;块域为5位,
字域为4位。
• (3)存储器引用时,地址0DB6316将会被映射到
高速缓存中的哪个空间块?
• 0DB6316=00001101101101100011 第22块
例2
• 假设某台计算机使用全相联高速缓存。计算机的
主存储器的容量为216字,高速缓存有64个存储空
间块,且每个高速缓存块包含32个字。问:
• (1)主存储器可以划分为多少个信息块?
• 216÷32=216÷ 25 = 211个信息块。
• (2)从高速缓存的角度看,存储地址采用的是什
么格式?即分别说明地址中的标记域、块域和字
域的大小。
• 标记域为216÷32=211 为11位; 字域为5位。
• (3)存储器引用时,地址F8C916将会被映射到
高速缓存中的哪个空间块?
• 因为是全关联,所以可以映射到任何地方
例3
• 假设系统的存储器有128MB字,块长度为64个字,
高速缓存由32KB块组成。如果使用2路的组关联
高速缓存的映射方式,说明主存储器地址的格式,
并确定地址中的各个域和域的大小。
• 128MB=27×210×210B,地址共27位。
• 组数=32KB÷2=16K 共14位
• 块内地址64= 26字,共6位
• 标记域为128M÷ 16K÷64=227×214×26,
共7位
例:
• 设某机主存容量为4MB,Cache容量为16KB,每
块包含8个字,每字32位,设计一个四路组相联
映像(即Cache每组内共有四个块)的Cache组
织,要求:
• (1)画出主存地址字段中各段的位数
• (2)设Cache的初态为空,CPU依次从主存第0、
1、2、…、99号单元读出100个字(主存一次读
出一个字),并重复按此次序读8次,问命中率是
多少?
• (3)若Cache的速度是主存的6倍,试问有
Cache和无Cache相比,速度提高多少倍?
解:
• (1)主存4MB:22×210×210共22位
• 每块=8个字×4个字节=32B,块内地址
为5位
• 每组4块,组内块号为2位
• 一组=4×32B=128B,16KB共分128组,
组号为7位
• 4MB共256个16KB,区号为8位
标志号
(10位)
组号
(7位)
块内地址
(5位)
第0组
第12组
0
1
2
3
96
97
98
99
4
5
6
7
• (2)由于每个字块有8个字,所以主存第0、1、
2、…、99号字单元分别在字块0~12中,采用四
路组相联映射将分别映射到第0组~12组中,但
Cache起始为空,所以第一次读时每一块中的每
一个单元没命中,但后面的7次每个单元均可以
命中。
Nc
100-13+7 100
命中率 H=
=
=98.4%
Nc +Nm
8 100
• (3)设Cache的存取周期为T,则主存的存取周期
为6T。
• 有Cache的访问时间
• =H×Tc+(1-H)×(Tm+Tc)
• =T+(1-H)×6T=T+(1-98.4%)×6T
• =1.096T
• 无Cache的访问时间为6T
• 所以速度提高倍数=6÷1.096=5.47倍
3.5.3.替换策略
• cache工作原理要求它尽量保存最新数据,必然要产
生替换。
• 对直接映射的cache来说,只要把此特定位置上的原
主存块换出cache即可。对全相联和组相联cache来说,
就要从允许存放新主存块的若干特定行中选取一行换
出。
最不经常使用(LFU)算法
• LFU算法将一段时间内被访问次数最少的那行数据换出。
每行设置一个计数器。从0开始计数,每访问一次, 被访
行的计数器增1。当需要替换时,将计数值最小的行换出,
同时将这些行的计数器都清零。这种算法将计数周期限定
在对这些特定行两次替换之间的间隔时间内,不能严格反
映近期访问情况。
• 比如,行1在前段时间常被访问,计数值大,替换时,由
于行2计数值小,行2被替换,同时计数清0。在后一小段
时间内,行2被访问多,计数值大,替换时把行1替换了,
但是从整个一段时间来看,还是行1被访问的次数多,后
面访问行1的几率还是很高的,所以替换行1就不那么科学
了。所以这种方法不能严格反映近期访问情况。
近期最少使用(LRU)算法
• LRU算法将近期内长久未被访问过的行换出。
• 每行也设置一个计数器,cache每命中一次,
命中行计数器清零,其它各行计数器增1。当
需要替换时,将计数值最大的行换出。(虚存
管理中的替换算法与Cache中的一样,具体例
子见虚存管理中)
随机替换
• 随机替换策略从特定的行位置中随机地选
取一行换出。在硬件上容易实现,且速度
也比前两种策略快。
• 缺点是随意换出的数据很可能马上又要使
用,降低了命中率和cache工作效率。
3.5.4 cache的写操作策略
• CPU对cache的写入更改了cache的内容。可
选用写操作策略使cache内容和主存内容保持
一致。
写回法
• 当CPU写cache命中时,只修改cache的内容,
而不立即写入主存;只有当此行被换出时才写回
主存。
• 这种方法减少了访问主存的次数,但是存在不一致
性的隐患。
• 实现这种方法时,每个cache行必须配置一个修
改位,以反映此行是否被CPU修改过
全写法
• 当写cache命中时,cache与主存同时发生写修
改,因而较好地维护了cache与主存的内容的一
致性。
• 当写cache未命中时,直接向主存进行写入。
cache中每行无需设置一个修改位以及相应的判
断逻辑。
• 缺点是降低了cache的功效。
写一次法
• 基于写回法并结合全写法的写策略
• 写命中与写未命中的处理方法与写回法基
本相同,只是第一次写命中时要同时写入
主存。这便于维护系统全部cache的一致性。
二、存储器连接设计
存储器连接设计实例
CPU的地址总线16根(A15—A0,A0为低位),双向数据总
线8根(D7—D0),控制总线中与主存有关的信号有MREQ(允
许访存, 低电平有效),R/W(高电平为读命令,低电平为写
命令)。主存地址空间分配如下:0—8191为系统程序区,由
只读存储芯片组成;8192—32767为用户程序区;最后(最大
地址)2K地址空间为系统程序工作区。上述地址为十进制,按
字节编址。现有如下存储器芯片:EPROM:8K×8(控制端仅
有CS);SRAM:16K×1位,2K×8位,4K×8位,8K×8位.
请从上述芯片中选择适当芯片设计该计算机主存储器,画出
主存储器逻辑框图,注意画出选片逻辑(可选用门电路及3∶8译
码器74LS138)与CPU 的连接,说明选哪些存储器芯片,选多
少片。
步骤1:根据空间分配选择适当芯片
要求:0—8191为系统程序区,由只读存储芯片组成
分析:
0—8191为8K大小,即字大小为8K
要求中双向数据总线8根(D7—D0),就是要求位长要是8
位
再看我们可以获取的ROM芯片:EPROM:8K×8位,不
需任何的字扩展和位扩展,一个芯片恰好满足要求
所以选用一个EPROM:8K×8位 芯片即可
• 要求:8192—32767为用户程序区;
•
分析:
要求是用户程序区,所以必须选用可读写的RAM
8192—32767大小为24K,所以需要的总字长为24K
要求中双向数据总线8根(D7—D0),就是要求位长要
是8位
再看可选的芯片:SRAM:16K×1位,2K×8位,
4K×8位,8K×8位.
很明显最好的选择就是选用3个8K×8位芯片,进行字
扩展,扩展的24K即可,输出位数仍为8位
• 要求:最后(最大地址)2K地址空间为系统程序工
作区
•
分析:
要求是系统程序工作区,所以必须选用可读写的RAM
地址空间大小为2K,所以需要的总字长为2K
要求中双向数据总线8根(D7—D0),就是要求位长要是8
位
再看可选的芯片:SRAM:16K×1位,2K×8位,
4K×8位,8K×8位.
很明显最好的选择就是选用1个2K×8位芯片
步骤2:确定地址空间分布图
分析:
根据给定条件,选用EPROM:8K×8位芯片1片。
SRAM:8K×8位芯片3片,2K×8位芯片1片。总的
大小为34K
还知道CPU的地址总线16根(A15—A0,A0为低位),
所以总的字大小为216=64K
64K-34K=30K,有30K的不使用空间
再根据已知:0—8191为系统程序区,由只读存储芯
片组成;8192—32767为用户程序区;最后(最大地
址)2K地址空间为系统程序工作区,可知道前面32K空
间是连续分布的,而2K分布在64K的最后2K空间
根据分析见下面的空间分布图
主存地址空间分布如图所示
步骤3:先用适当的译码器
• 分析:
根据给定条件,选用EPROM:8K×8位芯片1
片。SRAM:8K×8位芯片3片,2K×8位芯片
1片
需要选择的芯片一共5片
因为22<5<23 所以要可以选择到5个芯片,需
要3:8译码器(8根译码信号线只用了其中5个,
这是部分译码)
步骤4:存储芯片与cpu连接
• 主存储器的组成与CPU连接逻辑图如图所示,详细框图请参
看教材。
三、存储器读写原理