计算机组成原理第3章-存储系统
写在前面:本文参考王道论坛主编的 计算机组成原理单科教材。
文章目录
- 3.1 存储器概述
- 3.1.1 存储器的分类
- 1 按照在计算机的作用(层次)分类
- 2 按照存储介质分类
- 3 按照存取方式分类
- 4 按照信息的可保存性分类
- 3.1.2 存储器的性能指标
- 王道题目精选
- 3.2 存储器的层次化结构
- 3.3 半导体随机存储器
- 3.3.1 SRAM和DRAM
- 1 SRAM的工作原理
- 2 DRAM的工作原理
- 3.3.2 只读存储器
- 1 只读存储器的特点
- 2 ROM的类型
- 3.4 主存储器与CPU的连接
- 3.4.2 主存容量的扩展
- 1.位扩展法
- 2.字扩展法
- 3.字位同时扩展法
- 王道习题
- 3.5 双端口RAM和多模块存储器
- 3.5.1 双端口RAM
- 3.5.2 多模块存储器
- 1 单体多字存储器
- 2 多体并行存储器
- 王道题目
- 3.6 高速缓冲存储器(cache)
- 3.6.1 程序访问的局部性原理
- 3.6.2 cache的基本工作原理
- 3.6.3 Cache和主存的映射方式
- 1 直接映射
- 2 全相联映射
- 3组相联映射
- 王道书上Cache例题
- 3.6.4 Cache中主存块的替换算法
- 3.6.5 Cache写策略
- 王道习题
- 2010年408统考真题--两段for循环程序
- 全相联映射-块表
- 四路组相联-标记阵列和LRU替换
- 2013年408统考真题(undone)
- 2016年408统考真题(undone)
- 3.7虚拟存储器
- 3.7.1 虚拟存储器的基本概念
- 3.7.2 页式虚拟存储器
- 3.7.3 加快地址转换:快表(TLB)
- 3.7.4 段式虚拟存储器
- 3.7.5 段页式虚拟存储器
3.1 存储器概述
3.1.1 存储器的分类
1 按照在计算机的作用(层次)分类
1)主存储器。 简称主存,又称内存,用来存放计算机运行期间所需的大量程序和数据,CPU可以直接随机地对其进行访问,也可以和高速缓冲存储器(Cache)及辅助寄存器交换数据。
特点是:容量较小、存储速度较快、每位价格较高。
2)辅助存储器。简称辅存,又称外存, 是主存储器的外援存储器,用来存放当前暂时不用的程序和数据,以及一些需要永久性保存的信息,它不能与CPU直接交换信息。
特点是:容量极大、存储速度较慢、单位成本低。
3) 高速缓冲存储器。简称Cache,位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能高速地使用它们。
特点是:存取速度可与CPU的速度相匹配,但存储容量小、价格高。
目前的高档计算机通常将Cache制作在CPU中。
2 按照存储介质分类
按照存储介质分类,存储器可分为磁表面存储器(磁盘、磁带)、磁心存储器半导体存储器(MOS型存储器、双极型存储器)和光存储器(光盘)。
3 按照存取方式分类
1)随机存储器(RAM)。存储器的任何一个存储单元的内容都可以随机存取,而且存储时间与存储单元的物理位置无关。其优点是读写方便、使用灵活,主要用作主存或者cache。RAM又分为静态RAM(以触发器原理寄存信息)和动态RAM(以电容充电原理寄存信息).
2)只读存储器(ROM)。 存储器的内容只能随机地读出而不能写入。 信息一旦写入存储器就固定不变,即使断电,内容也不会丢失。 因此,通常用它存放固定不变的程序、常数和汉字字库,甚至用于操作系统的固化。它与随机存储器可共同作为主存的一部分,同一构成主存的地址域。
3)串行访问存储器。 对存储单元进行读写操作时,需按照物理位置的先后顺序寻址,包括顺序存取存储器(如磁带)和直接存取存储器(如磁盘)。
直接存取存储器既不像RAM那样随机地访问任何一个存储单元,又不像顺序存取存储器那样完全按顺序存取,而是介于两者之间。存取信息通常先寻找整个存储器的某个小区域(比如磁盘上的某个磁道),再在小区域内顺序查找。
4 按照信息的可保存性分类
断电后存储信息立刻消失的存储器,称为易失性存储器,比如RAM。
断电后存储信息仍然保持的存储器,称为非易失性存储器,比如ROM、磁表面存储器和光存储器。
若某个存储单元所存储的信息被读出时,原存储信息被破坏,则称为破坏性读出(比如DRAM);若读出时,被读单元原存储信息不被破坏,称为非破坏性读出。
3.1.2 存储器的性能指标
存储器有3个主要性能指标,即存储容量、单位成本和存储速度。 这三个指标相互制约,设计存储器系统所追求的目标就是大容量、低成本和高速度。
1) 存储容量 =存储字数× 字长 (比如 1M × 8位,又比如 1M × 32位)
存储字数表示存储器的地址空间大小,字长表示一次存取操作的数据量。
2)单位成本:每位价格=总成本/总容量
3) 存储速度:数据传输率=数据的宽度/ 存储周期
存取时间(TaT_aTa):存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。
存取时间是指从存储器读出或写入一次信息所需要的平均时间。
存取周期(TmT_mTm):存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔。 通常包括存取时间+恢复时间。
主存带宽(BmB_mBm):主存带宽又称为数据传输率,表示每秒从主存进出信息的最大数量。
存取时间不等于存储周期,通常存储周期大于存取时间。这是因为对任何一种存储器,在读写操作之后,总要有一段回复内部状态的复原时间。对于破坏性读出的存储器,存取周期往往比存取时间大得多。
王道题目精选
3.2 存储器的层次化结构
为了解决存储系统大容量、高速度和低成本三个相互制约的矛盾,在计算机系统中,通常采用多级存储器结构,如下图所示。 在图中,从上到下, 价位越来越低,速度越来越慢,容量越来越大, CPU访问的频率越来越低。
实际上, 存储系统层次结构主要体现在“cache-主存”层次和“主存-辅存”层次。前者主要解决CPU和主存速度不匹配的问题,后者主要解决存储系统的容量问题。在存储体系中,cache、主存能和CPU直接交换信息, 辅存则许哟啊通过主存与CPU交换信息;主存与CPU、cache和辅存都能够交换信息。
存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。从CPU和角度看, cache-主存 层次速度接近于cache,而容量和价格却接近于主存; 从主存-辅存层次看,其速度接近于主存,而价格和容量却接近于辅存。
需要注意的是,主存和cache之间的数据调动是由硬件自动完成的,对所有程序员透明; 而主存和辅存之间的数据调动是硬件和操作系统共同完成的,对应用程序员透明。
3.3 半导体随机存储器
主存储器由DRAM实现,cache由SRAM实现,它们都是易失性存储器,只要电源被切断,原来保存的信息就会丢失。 DRAM的每比特成本低于SRAM,速度也慢于SRAM,价格差异主要是因为SRAM集成度较低,同样面积的硅片可以做出更大容量的DRAM,而只能做出很少的SRAM,所以SRAM更贵。【价格差异的原因】 而ROM则属于非易失性存储器。
3.3.1 SRAM和DRAM
DRAM SRAM
为什么 SRAM 和DRAM都是易失性存储器?
答: 因为两者都是以电信号的形式储存0/1 ,所以断电之后就丢失信息。
为什么 SRAM 不需要刷新,而DRAM需要刷新?
答: 因为DRAM存储信息的元件是电容,电容上的电荷只能维持2ms左右(即使不断电),为了防止电荷自动丢失,所以需要刷新,恢复电荷量(即恢复信息);而SRAM存储信息所用的是双稳态触发器,它有两种稳定的状态,不需要刷新。
SRAM和DRAM读写的原理是什么呢?以及为什么DRAM是破坏性读?
DRAM使用电容,【1】读取数据的时候需要别的电路连接电容,检测电流的变化,所以会改变电容中储存的电荷,因而会改变存储的信息,也就是破坏性读。 【2】写数据的时候要给电容充放电
SRAM使用触发器,有两种稳定的状态,【1】读取数据仅需要查看触发器的状态;【2】写数据需要修改触发器的状态。
1 SRAM的工作原理
通常把存放一个二进制位的物理器件称为存储元,它是存储器的最基本的构件。地址码相同的多个存储元构成一个存储单元。 若干存储单元的集合构成存储体。
静态RAM的存储元是用双稳态触发器实现的,因此即时信息被读出后,它仍保持其原状态而不需要再生。
2 DRAM的工作原理
与SRAM不同,动态随机存储器(DRAM)是利用存储元电路中栅极电容上的电荷来存储信息的,DRAM的基本存储元通常只使用一个晶体管,所以它比SRAM的密度更高。DRAM采用地址复用技术,地址信号分行列两次传送。
DRAM电容上的电荷一般只能维持1~2ms,因此即使电源不断电,信息也会自动消失。 为此,每隔一定时间必须刷新,通常取2ms,这个时间称为刷新周期。 常用的刷新方式有三种:集中刷新、分散刷新和异步刷新。
1)集中刷新。指在一个刷新周期内,利用一端固定的时间,依次对存储器的所有行进行逐一再生(读出一行信息后重新写入),在此期间停止对存储器的读写操作,称为"死时间",又称访存“死区”。
集中刷新的优点是读写操作时不受刷新工作的影响,因此系统的存取速度较高;缺点是在集中刷新期间(死区)不能访问存储器。
2)分散刷新。 把对每行的刷新分散到各个工作周期中。这样,一个存储器的系统工作周期分为两部分:前半部分用于正常读、写或保持;后半部分用于刷新某一行。 这种刷新方式增加了系统的存取周期, 如存储芯片的存取周期为0.5 us,则系统存取周期为1us。
存取周期,它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔。 通常包括存取时间+恢复时间。
分散刷新的优点是没有死区;缺点是加长了系统的存取周期,降低了整机的速度。
3)异步刷新。
异步刷新是前两种方法的结合,它既可以缩短“死时间”,又能充分利用最大刷新间隔为2ms的特点。 具体做法是将刷新周期除以行数, 得到两次刷新操作之间的时间间隔t,利用逻辑电路每个时间t产生一次刷新请求。这样可以避免使CPU连续等待过长的时间,而且减少了刷新次数。
若将刷新安排在不需要访问存储器的译码阶段, 则既不会加长存取周期,也不会产生“死时间”,这是分散刷新方式的发展,也称为“透明刷新”。
3.3.2 只读存储器
1 只读存储器的特点
ROM和RAM都是支持随机存取的存储器,其中DRAM和SRAM都是易失性存储器;而ROM中一旦有了信息,就不能轻易改变,即使掉电也不会丢失,也在计算机系统中是只供读出的存储器。 ROM器件有两个显著的优点:
1)结构简单,所以位密度比可读写存储器的高;
2)具有非易失性,所以可靠性高;
2 ROM的类型
U盘属于闪存(flash)!!!
3.4 主存储器与CPU的连接
3.4.2 主存容量的扩展
由于单个存储芯片的容量是有限的,它在字数或者字长方面与实际存储器的要求有差别,因此需要在字和位两方面进行扩充才能满足实际存储器的容量要求。 通常采用位扩展法、字扩展法和字位同时扩展法来扩展主存容量。
1.位扩展法
CPU的数据线数和存储芯片的数据位数不一定相等,此时必须对存储芯片扩位(即进行位扩展,用多个存储器对字长进行扩充,增加存储字长),使其数据位数与CPU的数据线数相等。
位扩展的连接方式是将多个存储芯片的地址端、片选端和读写控制端相应并联, 数据端分别引出。
注意: 仅采用位扩展时,各芯片连接地址线的方式相同,但连接数据线的方式不同,在某一时刻选中所有的芯片,所以片选信号要连接到所有芯片。
2.字扩展法
字扩展是指增加存储器中字的数量,而位数不变。 字扩展将芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各个芯片的地址范围。
3.字位同时扩展法
王道习题
解答:
解答:
解答:
解答:
解答:
3.5 双端口RAM和多模块存储器
为提高CPU访问存储器的速度,可以采用双端口存储器、多模块存储器等技术,它们同属于并行技术,前者为空间并行,后者为时间并行。
3.5.1 双端口RAM
双端口RAM是指同一个存储器有左右两个独立的端口,分别具有两组相互独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步地访问存储单元。 当两个端口的地址不相同时,在两个端口上进行读写操作一定不会发生冲突。
3.5.2 多模块存储器
1 单体多字存储器
单体多字系统的特点是存储器中只有一个存储体,每个存储单元存储m个字,总线宽度也是m个字。一次并行读出m个字,地址必须顺序排列并处于同一存储单元。
单体多字系统在一个存取周期内,从同一地址取出m条指令,然后将指令逐跳送至CPU执行,即每隔1/m存取周期,CPU向主存取一条指令。这增大了存储器的带宽,提高了单体存储器的工作速度。
缺点: 指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或操作数不能连续存放,这种方法的效果就不明显。
2 多体并行存储器
多体并行存储器由多体模块组成。每个模块都有相同的存储容量和存取速度,各个模块都有独立的读写控制电路,地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。
多体并行存储器分为高位交叉编址(顺序方式)和低位交叉编址(交叉方式)两种。
1)高位交叉编址
高位地址表示体号,低位地址为体内地址。
2 ) 低位交叉编址
低位地址是体号,高位地址是体内地址。
程序连续存放在相邻模块中,因此称为交叉存储器。采用低位交叉编址后,可以在不改变每个模块存取周期的前提下,采用流水线的方式进行并行存取,提高存储器的带宽。
模块数为4的流水线方式存取示意图。
王道题目
3.6 高速缓冲存储器(cache)
3.6.1 程序访问的局部性原理
程序访问的局部性原理包括时间局部性和空间局部性。
时间局部性是指在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环;
空间局部性是指在最近的未来要用的信息,很可能与现在真在使用的信息在存储空间上是邻近的,因为指令通常是顺序存放、顺序执行的。
高速缓冲技术就是利用程序访问的局部性原理,把程序中正在使用的部分存放在一个高速的、容量较小的cache中,使CPU的访存操作大多数针对cache行进行,从而大大提高程序的执行速度。
3.6.2 cache的基本工作原理
Cache位于存储器层次结构的顶层,通常由SRAM构成。
为便于Cache和主存之间交换信息,Cache和主存都被划分为相等的块,Cache块又称为Cache行,每块由若干字节构成,块的长度称为块长(Cache行长)。由于Cache的容量远远小于内存的容量,所以Cache中的块数要远少于主存中块数,它仅保存主存中最活跃的若干块的副本。因此Cache按照某种策略,预测CPU在未来一段时间内欲访存的数据,将其装入Cache.
当CPU发出读请求时,若访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关。
如果Cache不命中,则仍然需要访问主存, 并把此字所在的块一次性地从主存调入Cache。如果此时Cache已满,需要按照某种替换算法,用这个块替换Cache中原来的那块信息。
CPU与Cache之间的数据交换以字为单位,而Cache与主存之间的数据交换以Cache块为单位。
3.6.3 Cache和主存的映射方式
Cache行中的信息是主存中某个块的副本,地址映射是指把主存地址空间映射到Cache地址空间,即把存放在主存中的信息按照某种规则装入Cache。
由于Cache行数比主存块数要少得多,因此主存中只有一部分块的信息可放在Cache中,因此在Cache中要为每块加一个标记,指明它是主存中哪一块的副本。 该标记的内容相当于主存块的编号。 为了说明Cache行中的信息是否有效,每个cache行需要一个有效位。
1 直接映射
主存中的每一块只能装入Cache中的唯一位置。 若这个位置已经有内容,则产生块冲突,原来的块将被无条件替换出去(无需使用替换算法)。直接映射实现简单,但不够灵活,即使Cache的其他许多地址空着也不能占用,这使得直接映射的块冲突概率最高,空间利用率最低。
直接映射的关系可定义为
j=imod2cj= i \,mod\, 2^c\,j=imod2c
其中j是Cache的块号,i是主存的块号,2c2^c2c是Cache中的总块数
直接映射的地址结构是
由映射函数可以看出,主存块号的低C位正好是它要装入的Cache行号。给每个Cache行设置一个长度为t=m−ct=m-ct=m−c的标记(tag),当主存某块调入Cache后,就将其某块号的高t位设置在对应Cache行的标记中。
2 全相联映射
主存中的每一块可以装入Cache中的任何位置,每行的标记用于指出该行取自主存的哪一块,所以CPU访存时需要与所有Cache行的标记进行比较。全相联映射方式的优点是比较灵活,Cache块的冲突概率低,空间利用率高,命中率也高;缺点是标记的比较速度较慢,实现成本较高,通常需要采用昂贵的按内容寻址的相联存储器进行地址映射。
全相联映射方式的地址结构
3组相联映射
将Cache空间分成大小相同的组,主存的一个数据块可以装入一组内的任何一个位置,即组间采用直接映射,而组内采用全相联映射。
组相联映射是对直接映射和全相联映射方式的一种折中,当Q=1时,变成全相联映射,当Q=Cache块数时变成直接映射。 假设每组有r个Cache行,则称之为r路组相联。 上图中每组有两个cache行,所以称为2路组相联。
组相联映射的关系可以定义为:
j=imodQj= i\, mod\, Qj=imodQ
其中,j是Cache行的组号,i是主存的块号, Q是cache 的组数。
路数越多,即每组Cache行的数量越大,发生块冲突的概率越低, 但相联比较电路也越复杂。 选定适当的数量, 可使得组相联电路的成本接近直接映射,而性能上接近于全相联映射。
组相联映射的地址结构为
CPU访存过程如下:
首先根据访存地址中间的组号,找到对应的Cache组;
将对应的Cache组中每个行的标记与主存地址的高位标记进行比较:
1)若有一个相等且有效位是1,则访问,Cache命中,此时根据主存地址中的块内地址,在对应Cache行上存取信息;
2)若都不相等或虽相等但有效位为0,则不命中,此时CPU从主存中读出该地址所在的一块信息送到对应的Cache组的任意一个空闲行中,将有效位置1,并设置标志,同时将该地址中的内容送CPU。
来源于:王道课件
王道书上Cache例题
注意:
【1】 这里计算每个Cache行的容量 : 数据容量(64B=64 * 8位=512位)+ 有效位1位+标记字段位数 。然后再乘以Cache行的行数。
【2】主存地址3200(十进制)如何使用? 别忘了按照字节编址,则为3200B,然后除以每个Cache行长(Cache块大小)64B,得到对应的块号(3200B/ 64B=50,块号是50)。然后看Cache有几行? 8行 ,则 50 mod 8 = 2 ,即对应的Cache行号为2.(注意:Cache行号从0开始)。
第一问答案:
第二问答案
第三问答案:
需要把地址0123456H写成二进制,并且分清楚每部分的功能。
3.6.4 Cache中主存块的替换算法
在采用全相联映射方式或组相联映射方式时,从主存向Cache传送一个新块,当Cache或Cache组中的空间已被占满时,就需要使用替换算法置换Cache行。 而采用直接映射时,一个给定的主存块只能放到唯一的固定的Cache行中,所以在对应Cache行已有一个主存块的情况下,新的主存块毫无选择地把原先已有的那个主存块替换掉,因而无需考虑替换算法。
常用的替换算法有随机(RAND)算法,先进先出(FIFO)算法、近期最少使用(LRU,Least Recently Used)算法和最不经常使用(LFU)算法。其中最长考察的是LRU算法。
近期最少使用算法:依据程序访问的局部性原理,选择近期内未访问过的Cache行作为替换的行,平均命中率要比FIFO高,是堆栈类算法。
3.6.5 Cache写策略
因为Cache中的内容是主存块副本,当对Cache中的内容进行更新时,就需要选用写操作策略使cache内容和主存内容保持一致。 此时分为两种情况。
1)全写法(写直通法、write-through)。当CPU对Cache写命中时,必须把数据同时写入Cache和主存。当某一块需要替换时,不比把这一块写回主存,用新调入的块直接覆盖即可。这种方法实现简单,能随时保持主存数据的正确性。 缺点是增加了访存次数,降低了cache的效率。
写缓冲:为减少全写法直接写入主存的时间损耗,在cache和主存之间加一个写缓冲(Write Buffer)。 CPU同时写数据到Cache和写缓冲中,写缓冲再控制将内容写入主存。 写缓冲是一个FIFO队列,写缓冲可以解决速度不匹配的问题。 但如果出现频繁写时,会使得写缓冲饱和溢出。
2)写回法(write-back).当CPU对Cache写命中时,只修改Cache 的内容,而不立即写入主存,只有当此块被换出时才写回主存,这种方法减少了访存次数,但存在不一致的隐患。 采用这种策略时,每个cache行必须设置一个标志位(脏位),以反映此位是否被CPU修改过。
对于写不命中的情况,也有两种方式处理。
1) 写分配法(Write-allocate).加载主存中的块到cache中,然后更新这个cache块。
2 ) 非写分配法(not-write-allocate)。只写入主存,不进行调块。
王道习题
2010年408统考真题–两段for循环程序
第一问解答
第二问解答
第三问解答
全相联映射-块表
题目
第一问解答
第二问解答
第三问解答
四路组相联-标记阵列和LRU替换
注:
【1】 cache 的标记阵列只与Cache行数有关!!!,不管是直接映射,还是全相联映射、组相联映射。
【2】写直达式cache每个标记项包含啥? 写回式cache每个标记项又包含什么?
写直达式cache每个标记项= 标记+替换控制位+有效位1位
写回式cache每个标记项=标记+替换控制位+有效位1位+脏位1位
解答
2013年408统考真题(undone)
2016年408统考真题(undone)
3.7虚拟存储器
主存和辅存共同构成了虚拟存储器,二者在硬件和软件的共同管理下工作。 对于应用程序员而言,虚拟存储器是透明的。 虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。
3.7.1 虚拟存储器的基本概念
虚拟存储器将主存或辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间中,用户可以自由编程,而不用考虑实际的主存容量和程序在主存中实际的存放位置。
用户编程允许的地址称为虚地址或逻辑地址,虚地址对应的存储空间称为虚拟空间或程序空间。 实际的主存单元地址称为实地址或物理地址,实地址对应的是主存地址空间,也称实地址空间。 虚地址比实地址要大得多。
CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已经装入主存。
如果已经在主存,则通过地址变换,CPU可直接访问主存指示的实际单元;
若不在主存中,则把包含这个字的一页或一段调入主存后再由CPU访问。如果主存已满,则采用替换算法置换主存中的一页或一段。
3.7.2 页式虚拟存储器
以页为基本单位的虚拟存储器称为页式虚拟存储器。
虚拟空间与主存空间都被划分为同样大小的页,主存的页称为实页,虚存的页称为虚页。
把虚拟地址分为两个字段:虚页号和页内地址。 虚拟地址到物理地址的转换是由页表实现的。页表是一张存放在主存中的虚页号和实页号的对照表,它记录程序的虚页调入内存时被安排在主存中的位置。 页表一般长久地保存在内存中。
下图是一个页表示例。
有效位也称为装入位,用来表示对应页面是否在主存中,若为1,表示该虚拟页已经从外存调入主存,此时页表项存放该页的物理页号;若为0,则表示没有调入内存,此时页表项可以存放该页的磁盘地址。
脏位也称修改位,用来表示页面是否被修改过,虚拟机制中采用回写策略,利用脏位可判断替换时是否需要写回磁盘。
引用位也称使用位,用来配合替换策略进行设置,例如是否实现最先调入(FIFO位)或最近最少使用(LRU位)策略等。
CPU执行指令时,需要先将虚拟地址转化为主存的物理地址。每个进程都有一个页表基址寄存器,存放该进程的页表首地址,然后根据虚拟地址高位部分的虚拟页号找到对应的页表项,若装入位为1,则取出物理页号,和虚拟地址低位部分的页内地址拼接,形成实际物理地址。若装入位为0,则说明缺页,需要操作系统进行缺页处理。地址变换过程如下图所示。
页式虚拟存储器的优点:页面的长度固定,页表简单,调入方便。
页式虚拟存储器的缺点:由于程序不可能是页面的整数倍,最后一页的零头将无法利用而造成浪费,并且页也不是逻辑上独立的实体,所以处理、保护和共享都不及段式虚拟存储器方便。
3.7.3 加快地址转换:快表(TLB)
由地址转换过程可知,访存时先访问一次主存去查页表,再访问主存才能得到数据。如果缺页,还要进行页面替换、页面修改等,因此采用虚拟存储机制后,访问主存的次数更多了。
依据程序执行的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在高速缓冲器组成的快表(TLB)中,则可以明显提高效率。相应地把放在主存中的页表称为慢表(Page)。在地址转换时,首先查找快表,若命中,则无需访问主存中的页表。
3.7.4 段式虚拟存储器
段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。把虚拟地址分为两部分,段号和段内地址。虚拟地址到实地址之间的变换是由段表来实现的。段表是程序的逻辑段和在主存中存放位置的对照表。段表的每行记录与某个段对应的段号、装入位、段起点和段长等信息。 由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。
CPU根据虚拟地址访存时,首先根据段号与段表基地址拼接成对应的段表行,然后根据该段表行的装入位判断该段是否已调入主存(装入位为1,表示该段已经调入主存;;装入位为0,表示该段不在主存中)。已调入主存时,从段表读出该段在主存中的起始地址,与段内地址(偏移量)相加,得到相应的主存实地址。
段式虚拟存储器的优点:段的分界与程序的自然分界相对应,因而具有逻辑独立性,便于编译、管理、修改和保护,也便于多道程序的共享。
段式虚拟存储器的缺点:段长度可变,分配空间不便,容易在段间留下碎片,不好利用,造成浪费。
3.7.5 段页式虚拟存储器
把程序按照逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位,这样的虚拟存储器称为段页式虚拟存储器。在段页式虚拟存储器中,每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。
虚地址分为段号、段内页号、页内地址三部分。 CPU根据虚地址访存时,首先根据段号得到段表地址;然后从段表中取出该段的页表起始地址,与虚地址段内页号合成,得到页表地址;最后从页表中取出实页号,与页内地址拼接形成主存实地址。
段页式虚拟存储器的优点:兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护;
段页式虚拟存储器的缺点:在地址变换过程中需要两次查表,系统开销较大。
总结
以上是生活随笔为你收集整理的计算机组成原理第3章-存储系统的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 计算机组成原理第7章-输入/输出系统
- 下一篇: 操作系统第三章-内存管理