第四章 存储系统 计算机科学技术系 2006 年 4 月
主要内容: 存储系统原理 虚拟存储器 高速缓冲存储器(Cache) 三级存储系统
存储系统原理 存储系统的定义 存储系统的层次结构 存储系统的频带平衡 并行访问存储器 交叉访问存储器 无冲突访问存储器
存储系统的定义 种类:主存储器、Cache、通用寄存器、缓冲存储器、磁盘存储器、磁带存储器、光盘存储器等 在一台计算机中,通常有多种存储器 种类:主存储器、Cache、通用寄存器、缓冲存储器、磁盘存储器、磁带存储器、光盘存储器等 材料工艺:ECL、TTL、MOS、磁表面、激光,SRAM,DRAM 访问方式:随机访问、直接译码、先进先出、 相联访问、 块传送、文件组
地位:在整个计算机信息传输中处于中心地位 存储系统的定义 存储器在计算机中的作用和地位 作用: 1 向CPU提供数据和指令; 2 控制输入/输出设备的读写。 存 储 器 运 算 器 控 制 器 输 出 输 入 以存储器为中心的计算机系统结构 地位:在整个计算机信息传输中处于中心地位 现代计算机系统以存储器为中心
存储系统的定义 决定存储系统三个基本参数 —— 容量、速度和价格 1) 容量(S) S = W*L*M 2) 速度(T) 访问时间(Ta):从接收读申请到读信息送到存储器输出端的时间。 存储周期(Tm):连续两次启动该存储器所需的最小时间间隔。 存储带宽 (Bm):存储器连续访问时,可提供信息的传送速率, 即每秒传送的信息位数。 Bm= W / Tm
存储系统的定义 3) 价格(C) 三个参数之间的关系: 存储器的速度越快,每位的价格就越高; 存储器的容量越大,存储器的速度就越慢; 组成存储系统的关键:把速度、容量和价格不同的多个物理存储器组织成一个存储器,这个存储器的速度最快,存储容量最大,单位容量的价格最便宜。
存储系统的定义 存储访问的局部性原理 指在访问存储器时,无论是存取指令或存取数据所访问的存储单元都趋于聚集在一个较小的连续单元区域中。 时间局部性:最近的访问的存储单元在不久的将来仍将被访问。(程序循环) 空间局部性:下次访问的存储单元很可能就在刚刚访问的存储单元附近。(程序中大部分指令顺序存储和顺序取出执行、数据聚集存放(如向量、数组、树、表)等)
存储系统的定义 1. 定义 两个或两个以上速度、容量和价格各不相同的存储器用硬件、软件、或软件与硬件相结合的方法连接起来成为一个存储系统。这个存储系统对应用程序员是透明的,并且,从应用程序员看,它是一个存储器: 这个存储器的速度接近速度最快的那个存储器 存储容量与容量最大的那个存储器相等 单位容量的价格接近最便宜的那个存储器
存储系统的定义 由多个存储器构成的存储系统 CPU
存储系统的定义 在一般计算机系统中,有两种存储系统: Cache存储系统:由Cache和主存储器构成 主要目的:提高存储器速度 CPU
存储系统的定义 虚拟存储系统:由主存储器和硬盘构成 主要目的:扩大存储器容量 CPU
存储系统的定义 2.存储系统的容量 要求: 方法有两种: Cache存储系统 虚拟存储系统 提供尽可能大的地址空间 能够随机访问 只对系统中存储容量最大的那个存储器进行编址,其他存储器只在内部编址或不编址 Cache存储系统 另外设计一个容量很大的逻辑地址空间,把相关存储器都映射这个地址空间中 虚拟存储系统
存储系统的定义 3.存储系统的每位平均价格 计算公式: 当S2》S1时,C≈C2 S2与S1不能相差太大
存储系统的定义 4. 存储系统的速度 表示方法:访问周期、存取周期、存储周期、存取时间等 命中率定义:在M1存储器中访问到的概率 其中:R1是对M1存储器的访问次数 R2是对M2存储器的访问次数
存储系统的定义 访问周期与命中率的关系: 存储系统的访问效率: 访问效率主要与命中率和两级存储器的速度之比有关 当命中率H→1时,T→T1 T=H*T1+(1-H)*T2 当命中率H→1时,T→T1 存储系统的访问效率: 访问效率主要与命中率和两级存储器的速度之比有关
存储系统的定义 例:假设T2=5T1,在命中率H为0.9和0.99两种情况下,分别计算存储系统的访问效率。 解: 当H=0.9时, e1=1/(0.9+5(1-0.9))=0.72 当H=0.99时, e2=1/(0.99+5(1-0.99))=0.96
存储系统的定义 提高存储系统速度的两条途径: 提高命中率H; 两个存储器的速度不要相差太大; 其中,第二条有时做不到(如虚拟存储器3-4倍),这时,只能依靠提高命中率
存储系统的定义 例:在虚拟存储系统中,两个存储器的速度相差特别悬殊,例如:T2=105 T1。如果要使访问效率到达e=0.9,问需要有多高的命中率? 解: 0.9H+90000(1-H)=1 89999.1 H=89999 计算得: H=0.999998888877777… ≈0.999999
存储系统的定义 5. 采用预取技术提高命中率 方法:不命中时,把M2存储器中相邻多个单元组成的一个数据块取出来送入M1存储器中。 计算公式: 其中:H’是采用预取技术之后的命中率 H是原来的命中率 n为数据块大小与数据重复使用次数的乘积
存储系统的定义 例:在一个Cache存储系统中,当Cache的块大小为一个字时,命中率H=0.8;假设数据的重复利用率为5,T2=5T1。计算块大小为4个字时,Cache存储系统的命中率?并分别计算访问效率。 解: n=4×5=20, 采用预取技术之后,命中率提高到:
存储系统的定义
存储系统的定义 例:在一个虚拟存储系统中,T2=105 T1,原来的命中率只有0.8,如果访问磁盘存储器的数据块大小为4K字,并要求访问效率不低于0.9,计算数据在主存储器中的重复利用率至少为多少? 解:假设数据在主存储器中的重复利用率为m,根据前面给出的关系,有如下方程组:
存储系统的定义 解方程组: 由方程(1)得到:0.9H+90000-90000H=1
计算公式证明方法一: 采用预取技术之后, 不命中率(1-H)降低n倍: 存储系统的定义 计算公式证明方法一: 采用预取技术之后, 不命中率(1-H)降低n倍:
存储系统的定义 计算公式证明方法二: 在原有命中率的计算公式中,把访问次数扩大到n倍。由于采用了预取技术,命中次数为:nR1+(n-1)R2,不命中次数仍为R2,因此新的命中率为:
存储系统的层次结构 多个层次的存储器: 用i表示层数,则有: 第1层:寄存器堆 (Register Piles) 第2层:先行缓冲栈 (Buffers(Lookahead) ) 第3层:高速缓冲存储器 (Cache) 第4层:主存储器 (Main Memory ) 第5层:联机存储器 (Online Storage) 第6层:脱机存储器 (Off-line Storage) 用i表示层数,则有: 工作周期:Ti<Ti+1 存储容量:Si<Si+1 单位价格:Ci>Ci+1
各级存储器的主要主要性能特性 CPU与主存储器的速度差距越来越大 目前相差两个数量级 今后CPU与主存储器的速度差距会更大
解决存储器频带平衡方法 存储系统的频带平衡 例:Pentium4的指令执行速度为8GIPS,CPU取指令8GW/s,访问数据16GW/s,各种输入输出设备访问存储器1GW/s,三项相加,要求存储器的频带宽度不低于25GW/s。 如果采用PC133内存,主存与CPU速度差188倍 如果采用PC266内存,主存与CPU速度差94倍 解决存储器频带平衡方法 (1)多个存储器并行工作 (2)设置各种缓冲存储器 (3)采用存储系统
并行访问存储器 方法:把m字w位的存储器改变成为m/n字n×w位的存储器 逻辑实现:把地址码分成两个部分,一部分作为存储器的地址,另一部分负责选择数据 主要缺点:访问冲突大 (1)取指令冲突 (2)读操作数冲突 (3)写数据冲突 (4)读写冲突
并行访问存储器 并行访问存储器结构框图
交叉访问存储器 主存储器由多个模块构成 两种组织方式 假设主存储器包含m=2a个存储器模块,每个模块包含w=2b个存储单元(字),则总存储容量为: 两种组织方式 交叉访问的存储器可以分为两种: (1)高位交叉方式 (2)低位交叉方式
1. 高位交叉访问存储器 交叉访问存储器 主要目的:扩大存储器容量 实现方法:用地址码的高位部分区分存储体号 参数计算方法: m:每个存储体的容量, n:总共的存储体个数, j:存储体的体内地址,j=0,1,2,...,m-1 k:存储体的体号,k=0,1,2,...,n-1 存储器的地址:A=m×k+j 存储器的体内地址:Aj=A mod m。 存储器的体号: Ak=
交叉访问存储器 2. 低位交叉访问存储器 主要目的:提高存储器访问速度 实现方法:用地址码的低位部分区分存储体号 参数计算: m:每个存储体的容量, n:总共的存储体个数, j:存储体的体内地址,j=0,1,2,...,m-1 k:存储体的体号,k=0,1,2,...,n-1 存储器地址A的计算公式为:A=n×j+k 存储器的体内地址:Aj= 存储器的体号:Ak=A mod n
n个存储体分时启动 一种采用流水线方式工作的并行存储器 每存储体的启动间隔为:t= 其中: Tm为每个存储体的访问周期, n为存储体个数。 交叉访问存储器 n个存储体分时启动 一种采用流水线方式工作的并行存储器 每存储体的启动间隔为:t= 其中: Tm为每个存储体的访问周期, n为存储体个数。
交叉访问存储器
交叉访问存储器 例:Star-100巨型机存储系统采用并行和交叉相结合的方式工作,有32个存储体低位交叉,每次并行读写512位,存储周期为1280ns,处理机字长32位,计算它的频带宽度Bm和峰值速度T。 解:因为:n=32,w=512,Tm=1280ns, Bm=n w/tm=32512b/1280ns =12.8Gb/s=1.6GB/s=400MW/s T=2.5ns 与Tm相比,峰值速度提高512倍 实际速度的提高要远远小于这个数字
交叉访问存储器 PC存储器的发展 30pin内存,8b,80~120ns 72pin内存,32b,40~80ns
SDRAM结构框图
主要内容: 存储系统原理 虚拟存储器 高速缓冲存储器(Cache) 三级存储系统
虚拟存储器 虚拟存储器工作原理 地址的映象和变换方法 加快内部地址变换的方法 页面替换算法及其实现 提高主存命中率的方法
虚拟存储器工作原理 也称为虚拟存储系统、虚拟存储体系等; 其概念由英国曼彻斯特大学的Kilbrn等人于1961年提出; 到70年代广泛应用于大中型计算机系统; 目前,许多微型机也使用虚拟存储器; 把主存储器、磁盘存储器和虚拟存储器都划分成固定大小的页 主存储器的页称为实页 虚拟存储器中的页称为虚页
虚拟存储器工作原理 内部地址变换: 多用户虚拟地址Av变换成主存实地址A 多用户虚拟地址中的页内偏移D直接作为主存实地址中的页内偏移d, 主存实页号p与它的页内偏移d直接拼接起来就得到主存实地址A。
地址的映象与变换 三种地址空间:虚拟地址空间 主存储器地址空间 辅存地址空间 地址映象: 把虚拟地址空间映象到主存地址空间 地址变换: 在程序运行时,把虚地址变换成主存实地址 三种虚拟存储器:页式虚拟存储器 段式虚拟存储器 段页式虚拟存储器
地址的映象与变换 1. 段式虚拟存储器 地址映象方法:每个程序段都从0地址开始编址,长度可长可短,可以在程序执行过程中动态改变程序段的长度。
地址的映象与变换 地址变换方法:由用户号找到基址寄存器,读出段表起始地址,与虚地址中段号相加得到段表地址,把段表中的起始地址与段内偏移D相加就能得到主存实地址。
地址的映象与变换 主要优点: 主要缺点: (1)支持程序的模块化和并行编程 (2)便于多道程序的实现和数据的共享 (3)程序的动态链接和调度比较容易 (4)便于按逻辑意义实现访问方式保护 主要缺点: (1)地址变换所花费的时间长,两次加法 (2)主存储器的利用率往往比较低 (3)对辅存(磁盘存储器)的管理比较困难 很难实用
页式虚拟存储管理是将主存空间和程序空间都机械等分成相同大小的页面,让程序的起点必须处在主存中某一个页面位置的起点。 地址的映象与变换 2. 页式虚拟存储管理 页式虚拟存储管理是将主存空间和程序空间都机械等分成相同大小的页面,让程序的起点必须处在主存中某一个页面位置的起点。
地址的映象与变换 页式虚拟存储器 地址映象方法:
地址的映象与变换 地址变换方法:
地址的映象与变换 主要优点: (1)主存储器的利用率比较高 主要缺点: (1)程序的模块化性能不好 (2)页表相对比较简单 (3)地址变换的速度比较快 (4)对磁盘的管理比较容易 主要缺点: (1)程序的模块化性能不好 (2)页表很长,需要占用很大的存储空间 例如:虚拟存储空间4GB,页大小1KB,则页表的容量为4M字,16MB。
将程序按逻辑意义先分成段,再让各段和实主存都机械等分成相同大小的页面。每道程序通过一个段表和相应的一组页表来进行程序在主存空间的定位。 地址的映象与变换 3. 段页式虚拟存储管理 将程序按逻辑意义先分成段,再让各段和实主存都机械等分成相同大小的页面。每道程序通过一个段表和相应的一组页表来进行程序在主存空间的定位。
3. 段页式虚拟存储器 地址的映象与变换 用户按段写程序, 每段分成几个固定大小的页 地址映象方法:每个程序段在段表中占一行,在段表中给出页表长度和页表的起始地址,页表中给出每一页在主存储器中的实页号。
地址变换方法: 先查段表,得到页表起始地址和页表长度, 再查页表找到要访问的主存实页号, 把实页号p与页内偏移d拼接得到主存实地址。 地址的映象与变换 地址变换方法: 先查段表,得到页表起始地址和页表长度, 再查页表找到要访问的主存实页号, 把实页号p与页内偏移d拼接得到主存实地址。
4. 外部地址变换 每个程序有一张外页表,每一页或每个程序段,在外页表中都有对应的一个存储字。 地址的映象与变换 4. 外部地址变换 每个程序有一张外页表,每一页或每个程序段,在外页表中都有对应的一个存储字。
加快内部地址变换的方法 造成虚拟存储器速度降低的主要原因: (1) 要访问主存储器必须先查段表或页表 (2) 可能需要多级页表 页表级数的计算公式: 其中: Nv为虚拟存储空间大小, Np为页面的大小, Nd为一个页表存储字的大小
加快内部地址变换的方法 例如:虚拟存储空间大小Nv=4GB,页的大小Np=1KB,每个页表存储字占用4个字节。计算得到页表的级数: 通常仅把1级页表和2、3级页表中的一小部分驻留在主存中
1.目录表 基本思想:用一个小容量高速存储器存放页表 加快内部地址变换的方法 1.目录表 基本思想:用一个小容量高速存储器存放页表
加快内部地址变换的方法 地址变换过程: 主要优点: 主要缺点: 把多用户虚地址中U与P拼接,相联访问目录表。读出主存实页号p,把p与多用户虚地址中的D拼接得到主存实地址。如果相联访问失败,发出页面失效请求。 主要优点: 与页表放在主存中相比,查表速度快。 主要缺点: 可扩展性比较差, 主存储器容量大时,目录表造价高,速度低。
加快内部地址变换的方法 2. 快慢表 快表:TLB(Translation Lookaside Buffer): 慢表: 小容量(几~几十个字) 高速硬件实现 采用相联方式访问 慢表: 当快表中查不到时,从主存的慢表中查找; 慢表按地址访问;用软件实现。 快表与慢表也构成一个两级存储系统。 主要存在问题:相联访问实现困难,速度低
加快内部地址变换的方法
3. 散列函数 目的:把相联访问变成按地址访问 散列(Hashing)函数:Ah=H(Pv) 加快内部地址变换的方法 3. 散列函数 目的:把相联访问变成按地址访问 散列(Hashing)函数:Ah=H(Pv)
采用散列变换实现快表按地址访问 避免散列冲突:采用相等比较器 地址变换:相等比较与访问存储器同时进行 加快内部地址变换的方法 采用散列变换实现快表按地址访问 避免散列冲突:采用相等比较器 地址变换:相等比较与访问存储器同时进行
4.虚拟存储器举例 加快内部地址变换的方法 例:IMB370/168计算机的虚拟存储器中的快表结构及地址变换过程。 虚拟地址长36位,页面大小为4KB,每个用户最多占用4K 个页面,最多允许16G个用户,但同时上机的用户数一般不超过6个。 采用了两项新的措施: (1)采用两个相等比较器,以减少散列冲突。 (2)用一个相联寄存器组,把24位用的多户号U压缩成3位,以缩短快表的长度。
页面替换算法及其实现 1. 页面替换发生时间: 当发生页面失效时,要从磁盘中调入一页到主存。如果主存储器的所有页面都已经被占用,必须从主存储器中淘汰掉一个不常使用的页面,以便腾出主存空间来存放新调入的页面。 2. 评价页面替换算法好坏的标准: 一是命中率要高, 二是算法要容易实现。
页面替换算法及其实现 3. 页面替换算法的使用场合: (1)虚拟存储器中,主存页面的替换,一般用软件实现。 (2)Cache中的块替换,一般用硬件实现。 (3)虚拟存储器的快慢表中,快表存储字的替换,用硬件实现。 (4)虚拟存储器中,用户基地址寄存器的替换,用硬件实现。 (5)在有些虚拟存储器中,目录表的替换。
页面替换算法及其实现 4. 主要页面替换算法 (1)随机算法(RAND random algorithm) 算法简单,容易实现 没有利用历史信息,没有反映程序的局部性 命中率低 (2)先进先出算法 (FIFO first-in first-out algorithm) 容易实现,利用了历史信息 没有反映局部性 最先调入的页面,很可能也是要使用的页面
页面替换算法及其实现 (3)近期最少使用算法(LFU least frequently used algorithm):既充分利用了历史信息,又反映了程序的局部性,但实现起来非常困难。 (4)最久没有使用算法(LRU least recently used algorithm):把LFU算法中的“多”与“少”简化成“有”与“无”,实现比较容易 (5)最优替换算法(OPT optimal replacement algorithm):是一种理想算法,仅用作评价其它页面替换算法好坏的标准。 在虚拟存储器中,实际上可能采用的只有FIFO和LRU两种算法。
页面替换算法及其实现 例:一个程序共有5个页面组成,在程序执行过程中,页面地址流如下: P1,P2,P1,P5,P4,P1,P3,P4,P2,P4 假设分配给这个程序的主存只有3个页面。 (1)给出用FIFO、LRU和OPT三种页面替换算法对这3个主存页面的调度情况表,并统计页面命中次数。 (2)计算这LRU页面替换算法的页面命中率。 (3)假设每个数据平均被访问30次,为了使LRU算法的失效率小于10-5,计算页面大小至少应该为多少?
页面替换算法及其实现 解: (1)FIFO、LRU和OPT的页面命中次数分别为2次、4次和5次 (2)LRU页面替换算法的页面命中率为: Hp=4/10=0.4 (3) 解得 P > 2000字 页面大小应该为2K字。
例:一个循环程序,依次使用P1,P2,P3,P4页面,分配给它的主存页面数只有3个。在FIFO和LRU算法中,发生“颠簸”现象。 页面替换算法及其实现 例:一个循环程序,依次使用P1,P2,P3,P4页面,分配给它的主存页面数只有3个。在FIFO和LRU算法中,发生“颠簸”现象。
提高主存命中率的方法 影响主存命中率的主要因素: 以下,对后三个因素进行分析 (1)程序在执行过程中的页地址流分布情况 (2)所采用的页面替换算法 (3)页面大小 (4)主存储器的容量 (5)所采用的页面调度算法 以下,对后三个因素进行分析
1.页面大小与命中率的关系 提高主存命中率的方法 页面大小为某个值时,命中率达到最大。 页面大小与命中率关系的解释: 假设At和At+1是相邻两次访问主存的逻辑地址,d=|At-At+1|。 如果d<Sp(页面大小),随着Sp增大,At 和 At+1在同一页面的可能性增加,即H随着Sp的增大而提高。 如果d>Sp,At和At+1一定不在同一个页面内。随着Sp增大,主存页面数减少,页面替换更加频繁。H随着Sp的增大而降低。
提高主存命中率的方法 当Sp比较小的时候,前一种情况是主要的,H随着Sp的增大而提高。当Sp达到某一个最大值之后,后一种情况成为主要的,H随着Sp的增大而降低。 当页面增大时,造 成的浪费也要增加 当页面减小时,页 表和页面表在主存 储器中所占的比例 将增加
提高主存命中率的方法 2. 主存容量与命中率的关系 主存命中率H随着分配给该程序的主存容量S的增加而单调上升。 在S比较小的时候,H提高得非常快。随着S的逐渐增加,H提高的速度逐渐降低。当S增加到某一个值之后,H几乎不再提高。
3. 页面调度方式与命中率的关系 提高主存命中率的方法 请求式:当使用到的时候,再调入主存 预取式:在程序重新开始运行之前,把上次 停止运行前一段时间内用到的页面先调入到 主存储器,然后才开始运行程序。 预取式的主要优点: 可以避免在程序开始运行时,频繁发生页面 失效的情况。 预取式的主要缺点: 如果调入的页面用不上,浪费了调入的时间,占用了主存的资源。