计算机组成原理重要知识点摘录(考研用)——第三章:存储系统

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。计算机组成原理重要知识点摘录(考研用)——第三章:存储系统,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

计算机组成原理重要知识点摘录(考研用)——第三章:存储系统

 本文参考于《2021年计算机组成原理考研复习指导》(王道考研),《计算机组成原理》

  • (1)随机存储器(RAM)。存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关。主要用作主存或高速缓冲存储器。 RAM又分为静态RAM(以触发器原理寄存信息)和动态RAM(以电容充电原理寄存信息)

  • (2)只读存储器ROM。存储器的内容只能随机读出而不能写入。信息一旦写入存储器就固定不变,即使断电,内容也不会丢失。 通常用它存放固定不变的程序、常数和汉字字库,甚至用于OS的固化。它与随机存储器可共同作为主存的一部分,统一构成主存的地址域。
      由ROM派生出的存储器也包含可反复重写的类型,广义上的ROM已可通过电擦等方式进行写入,但其写入速度比读取速度慢得多。

  a.存取时间(Ta):存取时间又称存储器的访问时间(Memory Access Time),是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间。(读出时间是指从主存接收到有效地址开始到数据稳定为止的时间,写入时间是指从主存接收到有效地址开始到数据写入被写单元为止的时间)
  b.存取周期(Tm):存取周期又称读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立访问存储器操作(读或写操作)之间所需的最小时间间隔 (存取周期=存取时间+恢复时间)
  c.主存带宽(Bm):主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字/秒、字节/秒或位/秒。
  存取时间不等于存储周期,通常存储周期大于存取时间。这是因为对任何一种存储器,在读写操作之后,总要有一段恢复内部状态的复原时间。对于破坏性读出的存储器,存取周期往往比存取时间大得多,因为存储器中的信息读出后需要马上进行再生。
在这里插入图片描述

  一个操作数在内存中可能占多个单元,如何在指令中给出操作数的地址?
  现代计算机都采用字节编址方式,即一个内存单元只能存放一字节的信息。一个操作数可能占用1、2、4、8个内存单元。也即一个操作数可能有多个内存地址对应。
  有两种不同的地址指定方式:大端方式与小端方式
  大端方式:指令中给出的地址是操作数最高有效字节所在的地址
  小端方式:指令中给出的地址是操作数最低有效字节所在的地址

  主存中存储单元地址的分配:
  主存各存储单元的空间位置是由单元地址号来表示的,而地址总线是用来指出存储单元地址号的,根据该地址可读出或写入一个存储字。通常计算机系统既可按字寻址,也可按字节寻址。例如IBM370的字长为32位,它可按字节寻址,即它的每个存储字包含4个可独立寻址的字节,其地址分配如图:
在这里插入图片描述
  字地址是用该字高位字节的地址来表示,故其字地址是4的整数倍 ,正好用地址码的末二位来区分同一字的4个字节的位置。但对PDP-11机而言,其字长为16位,字地址是2的整数倍,它用低位字节的地址来表示字地址:
在这里插入图片描述

  主存由DRAM实现,靠处理器的那一层(Cache)由SRAM实现,它们都属于易失性存储器。DRAM的每bit成本低于SRAM。

  1.SRAM的工作原理

  静态随机存储器SRAM的信息被读出后,它仍保持其原状态而不需要再生(非破坏性读出)。
  SRAM的存取速度快,但集成度低,功耗较大,所以一般用来组成高速缓冲存储器。

  2.DRAM的工作原理

  动态随机存储器DRAM是利用存储元电路中栅极电容上的电荷来存储信息的,DRAM的基本存储元通常只使用一个晶体管,所以它比SRAM的密度要高很多。DRAM采用地址复用技术,地址线是原来的1/2,且地址信号分行、列两次传送。
  DRAM的存取速度比SRAM慢,一般用来组成大容量主存系统。
  DRAM电容上的电荷一般只能维持1~2ms,因此即使电源不断电,信息也会自动消失。为此,每隔一定时间必须刷新,通常取2ms,这个时间称为刷新周期。刷新的过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程。刷新是一行行进行的。常用的刷新方式有3种:集中刷新、分散刷新、异步刷新
  (1)集中刷新:指在一个刷新周期内,利用一段固定的时间,依次对存储器的所有行进行逐一再生,在此期间停止对存储器的读写操作,称为死时间,又称访存死区
  集中刷新的优点是读写操作时不受刷新工作的影响,因此系统的存取速度较高;缺点是在集中刷新期间(死区)不能访存。
  (2)分散刷新:把对每行的刷新分散到各个工作周期中。 一个存储器的系统工作周期分为两部分:前半部分用于正常读、写或保持;后半部分用于刷新某一行。这种刷新方式增加了系统的存取周期。分散刷新的优点是没有死区;缺点是加长了系统的存取周期。
  (3)异步刷新:异步刷新是前两种方法的结合,它既可以缩短死时间,又能充分利用最大刷新间隔为2ms的特点。具体做法是将刷新周期除以行数,得到两次刷新操作之间的时间间隔t,利用逻辑电路每隔时间t产生一次刷新请求。 这样可以避免使CPU连续等待过长时间,而且减少了刷新次数。
  若将刷新安排在不需要访问存储器的译码阶段,则既不会加长存取周期,又不会产生死时间,这是分散刷新方式的发展,也称透明刷新
   DRAM刷新对CPU是透明的,即刷新不依赖于外部的访问; DRAM的刷新单位是行,刷新操作仅需要行地址;刷新类似于读操作,但又有所不同,刷新操作仅给栅极电容补充电荷,不需要信息输出。此外,刷新时不需要选片,即整个存储器中的所有芯片同时被刷新。

数据线的宽度与MDR的宽度相同,地址线的宽度与MAR的宽度相同。

  1.位扩展法

  CPU的数据线数与存储芯片的数据位数不一定相等,此时必须对存储芯片扩位(即进行位扩展,用多个存储器件对字长进行扩充,增加存储字长),使其数据位数与CPU的数据线数相等。
  位扩展的连接方式是将多个存储芯片的地址端、片选端和读写控制端相应并联,数据端分别引出。
  用8片8K x 1位的RAM芯片组成8K x 8位的存储器。8片RAM芯片的地址线A12~A0

C

S

\overline{CS}

CS

W

E

\overline{WE}

WE都分别连在一起,每片的数据线依次作为CPU数据线的一位
在这里插入图片描述
  仅使用位扩展时,各芯片连接地址线的方式相同,但连接数据线的方式不同,在某一时刻选中所有的芯片,所以片选信号

C

S

\overline{CS}

CS要连接到所有芯片。

  2.字扩展法

  字扩展是指增加存储器中字的数量,而位数不变。字扩展将芯片的地址线、数据线、读写控制线相应并联,而由片选信号来区分各芯片的地址范围
  用4片16K x 8位的RAM芯片组成64K x 8位的存储器。4片RAM芯片的数据线D0~D7

W

E

\overline{WE}

WE都分别连在一起。将A15A14用作片选信号,A15A14=00时,译码器输出端0有效,选中最左边的1号芯片;A15A14=01时,译码器输出端1有效,选中2号芯片,依次类推(在同一时间内只能有一个芯片被选中)。各芯片的地址分配如下:
  第1片,最低地址:00 0000 0000 0000 0000 00;最高地址:00 1111 1111 1111 1111 11(16位)
  第2片,最低地址:01 0000 0000 0000 0000 00;最高地址:01 1111 1111 1111 1111 11(16位)
  第3片,最低地址:10 0000 0000 0000 0000 00;最高地址:10 1111 1111 1111 1111 11(16位)
  第4片,最低地址:11 0000 0000 0000 0000 00;最高地址:11 1111 1111 1111 1111 11(16位)
在这里插入图片描述
  仅采用字扩展时,各芯片连接地址线的方式相同,连接数据线的方式也相同,但在某一时刻只需选中部分芯片,所以通过片选信号

C

S

\overline{CS}

CS或采用译码器设计连接到相应的芯片。

  3.字位同时扩展法

  字位同时扩展指既增加存储字的数量,又增加存储字长。
  用8片16K x 4位的RAM芯片组成64K x 8位的存储器。每两片构成一组16K x 8位的存储器(位扩展),4组便构成64K x 8位的存储器(字扩展)。地址线A15A14经译码器得到4个片选信号。
在这里插入图片描述
  采用字位同时扩展时,各芯片连接地址线的方式相同,但连接数据线的方式不同,而且需要通过片选信号

C

S

\overline{CS}

CS或采用译码器设计连接到相应的芯片。

  片选有效信号与CPU的访存控制信号

M

R

E

Q

\overline{MREQ}

MREQ(低电平有效)有关,因为只有当CPU要求访存时,才要求选中存储芯片。若CPU访问I/O,则

M

R

E

Q

\overline{MREQ}

MREQ为高,表示不要求存储器工作。

  1.单体多字存储器

  单体多字系统的特点是存储器中只有一个存储体,每个存储单元存储m个字,总线宽度也为m个字。一次并行读出m个字,地址必须顺序排列并处于同一存储单元。
  单体多字系统在一个存取周期内,从同一地址取出m条指令,然后将指令逐条送至CPU执行,即每隔1/m存取周期,CPU向主存取一条指令。单体多字系统的缺点是:指令和数据在主存内必须是连续存放的,一旦遇到转移指令或操作数不能连续存放,这种方法的效果不明显。

  2.多体并行存储器

  多体并行存储器由多体模块组成。每个模块都有相同的容量和存取速度,各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作、又能交叉工作
  多体并行存储器分为高位交叉编址(顺序方式)和低位交叉编址(交叉方式)两种。
  (1)高位交叉编址:高位地址表示体号,低位地址为体内地址。 高位交叉编址主要用于存储器容量扩展。
在这里插入图片描述
  图中存储器共有4个模块M0~M3,每个模块有n个单元。
  高位交叉编址方式下,总是把低位的体内地址送到由高位体号确定的模块内进行译码。访问一个连续主存块时,总是先在一个模块内访问,等到该模块访问完才转到下一个模块访问,CPU总是按顺序访问存储模块,存储模块不能并行访问,因而不能提高存储器的吞吐率。高位交叉编址方式下易出现某一个存储体繁忙,其余空闲。
  模块内的地址是连续的,存取方式仍是串行存取,因此这种存储器仍是顺序存储器。


  取0号地址时,可交叉取得M1中的n号地址,而要取1号地址时须等到0号地址取完才能取


  (2)低位交叉编址
  低位交叉编址主要用于存储器带宽、访问速度的提高。 低位地址为体号,高位地址为体内地址。每个模块按模m交叉编址,模块号=单元地址%m。假定有m个模块,每个模块有k个单元,则0,m,…,(k-1)m单元位于M0;第1,m+1,…,(k-1)m+1单元位于M1;以此类推。
  低位交叉编址方式下,总是把高位的体内地址送到由低位体号确定的模块内进行译码。程序连续存放在相邻模块中,因此称采用此编址方式的存储器为交叉存储器。采用低位交叉编址后,可在不改变每个模块存取周期的前提下,采用流水线的方式并行存取,提高存储器的带宽。
在这里插入图片描述
  设模块字长等于数据总线宽度,模块存取一个字的存取周期为T,总线传送周期为r,为实现流水线方式存取,存储器交叉模块数应大于等于
  m=T/r
  式中,m称为交叉存取度。每经过r时间延迟后启动下一个模块,交叉存储器要求其模块数>=m,以保证启动某模块后经过m x r的时间后再次启动该模块时,其上次的存取操作已完成(即流水线不间断)。这样,连续存取m个字所需的时间为:t1=T+(m-1)r。而顺序方式连续读取m个字所需的时间为t2=mT。
  模块数为4的流水线方式存取示意图如图:
在这里插入图片描述

  程序访问的局部性原理包括时间局部性和空间局部性。 时间局部性是指在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环。空间局部性是指在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是邻近的,因为指令通常是顺序存放、顺序执行的,数据一般也是以向量、数组等形式簇聚地存储在一起的。

  为便于Cache和主存之间交换信息,Cache和主存都被划分为相等的块,Cache块又称Cache行,每块由若干字节组成,块的长度称为块长(Cache行长)。主存的地址分成两段:高m位表示主存的块地址,低b位表示块内地址,同样,缓存的地址也分为两段:高c位表示缓存的块号,低b位表示块内地址。由于Cache容量远小于主存容量,所以Cache中的块数要远少于主存中的块数,它仅保存主存中最活跃的若干块的副本。因此Cache按照某种策略,预测CPU在未来一段时间内欲访存的数据,将其装入Cache。
  当CPU发出读请求时,若访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关。若Cache不命中,则仍需访问主存,并把此字所在的块一次性地从主存调入Cache。 若此时Cache已满,则需根据某种替换算法,用这个块替换Cache中原来的某块信息。CPU与Cache之间的数据交换以字为单位,而Cache与主存之间的数据交换则以Cache块为单位。

发生取指令Cache缺失的处理过程:
(1)PC恢复当前指令的值;(2)对主存进行读操作;(3)将读入的指令写入Cache中,更改有效位和标记位;(4)重新执行当前指令

 3.6.3 Cache和主存的映射方式

  Cache行中的信息是主存中某个块的副本,地址映射是指把主存地址空间映射到Cache地址空间,即把存放在主存中的信息按照某种规则装入Cache。
  由于Cache行数比主存块数少得多,因此主存中只有一部分块的信息可放在Cache中,因此在Cache中要为每块加一个标记,指明它是主存中哪一块的副本。 该标记的内容相当于主存中块的编号。为了说明Cache行中的信息是否有效,每个Cache行需要一个有效位。
  地址映射不同于地址变换。地址变换是指CPU在访存时,将主存地址按映射规则换算成Cache地址的过程。 由于主存和Cache的块大小相同,块内地址都是相对于块的起始地址的偏移量(即低位地址相同),因此地址变换主要是主存的块号(高位地址)与Cache块号间的转换。 地址映射的方法有以下三种:

  1.直接映射

  主存中的每一块只能装入Cache中的唯一位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去(无须使用替换算法)。 直接映射不够灵活,即使Cache的其他许多地址空着也不能占用,这使得直接映射的块冲突概率最高,空间利用率最低。
  直接映射的关系可定义为:j = i mod 2c
  j是Cache的块号(行号),i是主存的块号,2c是Cache中的总块数。在这种映射方式中,主存的第0块、第2c块、第2c+1…只能映射到Cache的第0行;而主存的第1块、第2c+1块、第2c+1+1块…只能映射到Cache的第1行,依次类推。主存块号的低c位正好是它要装入的Cache行号。 给每个Cache行设置一个长为t=m-c的标记(tag),当主存某块调入Cache后,就将其块号的高t位设置在对应Cache行的标记中
在这里插入图片描述
  直接映射的地址结构为:
在这里插入图片描述
  CPU访存过程如图:
在这里插入图片描述
  首先根据访存地址中间的c位,直接找到对应的Cache行,将对应Cache行中的标记和主存地址的高t位标记进行比较,若相等且有效位为1,则访问Cache命中, 此时根据主存地址中低位的块内地址,在对应的Cache行中存取信息;若不相等或有效位为0,则不命中,此时CPU从主存中读出该地址所在的一块信息送到对应的Cache行中,将有效位置1,并将标记设置为地址中的高t位,同时将该地址中的内容送CPU

  2.全相联映射

  主存中的每一块可以装入Cache中的任何位置,每行的标记用于指出该行取自主存的哪一块,所以CPU访存时需要与所有Cache行的标记进行比较。 全相联映射方式Cache块的冲突概率低,空间利用率高,命中率高;缺点是标记的比较速度较慢,实现成本较高,需采用昂贵的按内容寻址的相联存储器进行地址映射。
在这里插入图片描述

  全相联映射的地址结构为:
在这里插入图片描述

  3.组相联映射

  将Cache空间分为大小相同的组,主存的一个数据块可以装入一组内的任何一个位置,即组间采取直接映射,组内采取全相联映射。 它是对直接映射和全相联映射的一种折中,当Cache组数Q=1时变为全相联映射,Q=Cache块数时变为直接映射。假设每组有r个Cache行,则称之为r路组相联。
在这里插入图片描述
  组相联映射的关系可定义为:
  j=i mod Q
  其中,j是Cache行的组号,i是主存的块号,Q是Cache的组数
  路数越大,即每组Cache行的数量越大,发生块冲突的概率越低,但相联比较电路越复杂。选定适当的数量,可使组相联映射的成本接近于直接映射,而性能上仍接近于全相联映射。
  组相联映射的地址结构为:
在这里插入图片描述
  CPU访存过程如下:首先根据访存地址中间的组号找到对应的Cache组;将对应Cache组中每个行的标记与主存地址的高位标记进行比较;若有一个相等且有效位为1,则访问Cache命中, 此时根据主存地址中的块内地址,在对应Cache行中存取信息;若都不相等或相等但有效位为0,则不命中,此时CPU从主存中读出该地址所在的一块信息送到对应Cache组的任意一个空闲行中,将有效位置1,并设置标记,同时将该地址中的内容送CPU。

  三种映射方式中,直接映射的每个主存块只能映射到Cache中的某一固定行;全相联映射可以映射到所有Cache行;N路组相联映射可以映射到N行。 当Cache大小、主存块大小一定时:
  (1)直接映射的命中率最低,全相联映射的命中率最高
  (2)直接映射的判断开销最小、所需时间最短,全相联映射的判断开销最大、所需时间最长。
  (3)直接映射标记所占的额外空间开销最少,全相联映射标记所占的额外空间开销最大

 3.6.4 Cache中主存块的替换算法

  在采用全相联映射或组相联映射方式时,从主存向Cache传送一个新块,当Cache或Cache组中的空间已被占满时,就需要使用替换算法置换Cache行。而采用直接映射时,一个给定的主存块只能放到唯一的固定Cache行中,所以在对应Cache行已有一个主存块的情况下,新的主存块毫无选择地把原先已有的那个主存块替换掉,因而无须考虑替换算法。
  常用的替换算法有随机(RAND)算法、先进先出(FIFO)算法、近期最少使用(LRU)算法和最不经常使用(LFU)算法。
  (1)随机算法:随机地确定替换的Cache块。不符合程序访问的局部性原理
  (2)先进先出算法:选择最早调入的行进行替换。不符合程序的局部性原理。
  (3)近期最少使用算法:依据程序访问的局部性原理,选择近期内长久未访问过的Cache行作为替换的行,平均命中率比FIFO高,是堆栈类算法。
  LRU算法对每个Cache行设置一个计数器,用计数值来记录主存块的使用情况,并根据计数值选择淘汰某个块, 计数值的位数与Cache组大小有关,2路时有1位LRU位,4路时有2位LRU位。假定采用4路组相联,有5个主存块{1,2,3,4,5}映射到Cache的同一组,对于主存访问序列{1,2,3,4,1,2,5,1,2,3,4,5},采用LRU算法的替换过程如图:(图中左边阴影的数字是对应Cache行的计数值,右边的数字是存放在该行中的主存块号)
在这里插入图片描述

  计数器的变化规则:(1)命中时,所命中的行的计数器清零,计数值比其低的计数器加1,其余不变; (2)未命中且还有空闲行时,新装入的行的计数器置0,其余全加1; (3)未命中且无空闲行时,计数值为3的行的信息块被淘汰,新装行的块的计数器置0,其余全加1

  当集中访问的存储区超过Cache组的大小时,命中率可能变得很低,如上例中的访问序列变为1,2,3,4,5,1,2,3,4,5,…,而Cache每组只有4行,那么命中率为0,这种现象称为抖动

  (4)最不经常使用算法:将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,每访问一次,被访问的行计数器加1,需要替换时比较各特定行的计数值,将计数值最小的行换出。

 3.6.5 Cache写策略

  因为Cache中的内容是主存块副本,当对Cache中的内容进行更新时,就需选用写操作策略使Cache内容和主存内容保持一致。 此时分2种情况。
  对于Cache写命中(write hit),有两种处理方法
  (1)全写法(写直通法、write-through)当CPU对Cache写命中时,必须把数据同时写入Cache和主存。当某一块需要替换时,不必把这一块写回主存,用新调入的块直接覆盖即可。 这种方法能随时保持主存数据的正确性。缺点是增加了访存次数,降低了Cache的效率。写直达法的写操作时间就是访问主存的时间。写缓冲:为减少全写法直接写入主存的时间损耗,在Cache和主存之间加一个写缓冲(Write Buffer)。CPU同时写数据到Cache和写缓冲中,写缓冲再控制将内容写入主存。写缓冲是一个FIFO队列,写缓冲可以解决速度不匹配的问题。但若出现频繁写时,会使写缓冲饱和溢出。
在这里插入图片描述
  (2)写回法(write-back):当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。 写操作时间就是访问Cache的时间。这种方法减少了访存次数,但存在不一致的隐患。采用这种策略时,每个Cache行必须设置一个标志位(脏位),以反映此块是否被CPU修改过
  全写法和写回法都对应于Cache写命中(要被修改的单元在Cache中)时的情况。
  对于Cache写不命中,也有两种处理方法
  (1)写分配法(write-allocate):加载主存中的块到Cache中,然后更新这个Cache块。 它试图利用程序的空间局部性,但缺点是每次不命中都需要从主存中读出一块。
  (2)非写分配法(not-write-allocate):只写入主存,不进行调块。
  非写分配法通常与全写法合用,写分配法通常和写回法合用

 3.7.2 页式虚拟存储器

  以页为基本单位的虚拟存储器称为页式虚拟存储器。 虚拟空间与主存空间都被划分为同样大小的页, 主存的页称为实页,虚存的页称为虚页。把虚拟地址分为两个字段:虚页号和页内地址虚拟地址到物理地址的转换是由页表实现的。 页表是一张存放在主存中的虚页号和实页号的对照表,它记录程序的虚页调入主存时被安排在主存中的位置。页表一般长久地保存在内存中。
  下图为一个页表示例:
在这里插入图片描述
  有效位也称装入位,用来表示对应页面是否在主存, 若为1,则表示该虚拟页已从外存调入主存,此时页表项存放该页的物理页号; 若为0,则表示没有调入主存,此时页表项可以存放该页的磁盘地址。 脏位也称修改位,用来表示页面是否被修改过, 虚存机制中采用回写策略,利用脏位可判断替换时是否需要写回磁盘。 引用位也称使用位,用来配合替换策略进行设置, 例如是否实现最先调入(FIFO位)或最近最少使用(LRU位)策略等。
  CPU执行指令时,需要先将虚拟地址转换为主存物理地址。每个进程都有一个页表基址寄存器,存放该进程的页表首地址,然后根据虚拟地址高位部分的虚拟页号找到对应的页表项, 若装入位为1,则取出物理页号,和虚拟地址低位部分的页内地址拼接,形成实际物理地址;若装入位为0,则说明缺页,需要OS进行缺页处理。
在这里插入图片描述
  页式虚拟存储器的优点是,页面长度固定,页表简单,调入方便。缺点是,由于程序不可能正好是页面的整数倍,最后一页的零头将无法利用而造成浪费,并且页不是逻辑上独立的实体,所以处理、保护和共享都不及段式虚拟存储器方便。

 3.7.3 加快地址转换:快表(TLB)

  依据程序执行的局部性原理,在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在高速缓冲器组成的快表(TLB)中,则可以明显提高效率。相应地把放在主存中的页表称为慢表(Page)。在地址转换时,首先查找快表,若命中,则无须访问主存中的页表。
  快表通常采用全相联或组相联方式。 每个TLB项由页表表项内容加上一个TLB标记字段组成,TLB标记用来表示该表项取自页表中哪个虚页号对应的页表项, 因此,TLB标记的内容在全相联方式下就是该页表项对应的虚页号;组相联方式下则是对应虚页号的高位部分,虚页号的低位部分用于选择TLB组的组索引。
  下图为一个具有TLB和Cache的多级存储系统:
在这里插入图片描述
  图中Cache采用二路组相联方式。CPU给出一个32位的虚拟地址,TLB采用全相联方式,每一项都有一个比较器,查找时将虚页号与每个TLB标记字段同时进行比较,若有一项相等且对应有效位为1,则TLB命中,此时可直接通过TLB进行地址转换;若未命中,则TLB缺失,需要访问主存去查页表。图中所示的是两级页表方式,虚页号被分成目录索引和页表索引两部分,由这两部分得到对应的页表项,从而进行地址转换,并将相应表项调入TLB,若TLB已满,则还需要采用替换策略。完成由虚拟地址到物理地址的转换后,Cache机构根据映射方式将物理地址划分为多个字段,然后根据映射规则找到对应的Cache行或组,将对应Cache行中的标记与物理地址中的高位部分进行比较,若相等且对应有效位为1,则Cache命中,此时根据块内地址取出对应的字送CPU。
  查找时,快表和慢表也可以同步进行,若快表中有此虚页号,则能很快地找到对应的实页号,并使慢表的查找作废。
  在一个具有Cache和TLB的虚拟存储系统中,CPU一次访存操作可能涉及TLB、页表、Cache、主存和磁盘的访问,访问过程如图:
在这里插入图片描述
  CPU访存过程中存在3种缺失情况:(1)TLB缺失:要访问的页面对应的页表项不在TLB中;(2)Cache缺失:要访问的主存块不在Cache中;(3)缺页:要访问的页面不在主存中
在这里插入图片描述
  第一种组合无须访问主存;第2种和第3种组合需访问一次主存;第4种组合需要访问2次主存;第5种组合发生缺页异常,需访问磁盘,并且至少访问两次主存。Cache缺失处理由硬件完成;缺页处理由软件完成,由OS通过缺页异常处理程序来实现;而TLB缺失既可以用硬件又可以用软件来处理,比如OS有专门的TLB缺失异常处理程序。

 3.7.4 段式虚拟存储器

  段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。 把虚拟地址分为两部分:段号和段内地址。 虚拟地址到实地址之间的变换是由段表来实现的。段表是程序的逻辑段和在主存中存放位置的对照表。 段表的每行记录与某个段对应的段号、装入位、段起点和段长等信息。由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。
  CPU根据虚拟地址访存时,首先根据段号与段表基地址拼接成对应的段表行,然后根据该段表行的装入位判断该段是否已调入主存。已调入主存时,从段表读出该段在主存中的起始地址,与段内地址(偏移量)相加,得到对应的主存实地址。
  段式虚拟存储器的优点是,段的分界与程序的自然分界相对应,因而具有逻辑独立性, 使得它易于编译、管理、修改和保护,也便于多道程序的共享;缺点是因为段的长度可变,分配空间不便,容易在段间留下碎片,造成浪费。

 3.7.5 段页式虚拟存储器

  把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位,这样的虚拟存储器称为段页式虚拟存储器。 在段页式虚拟存储器中,每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。
  虚地址分为段号、段内页号、页内地址三部分。CPU根据虚地址访存时,首先根据段号得到段表地址;然后从段表中取出该段的页表起始地址,与虚地址段内页号合成,得到页表地址;最后从页表中取出实页号,与页内地址拼接形成主存实地址。
  段页式虚拟存储器兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护。缺点是在地址变换过程中需要两次查表,系统开销较大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153793.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!