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连接逻辑图如图所示,详细框图请参 看教材。 三、存储器读写原理