计算机组成原理之虚拟储存(摘抄自XXB笔记)

主要内容:

  1. 虚拟存储器
  2. 页式存储管理
  3. 页式存储和高速缓存的结合

重点内容:页式存储管理,页表,TLB。

1,虚拟存储器:
        根据局部性原理,程序在执行期间,无需将整个程序全部驻留内存,而是根据需要将一段时间内要用到的部分调入内存。这样一来,利用有限的内存空间就可以执行较大的程序,同时也就有利于多个不同程序共享内存空间。
        因此,用户编程时可以认为自己是在一个不受限的与物理存储器(内存)无关的独立空间中进的,而且这个独立空间是自己一人独占的,这个所谓的“独立空间”称为虚拟存储器
        程序不执行的时候是驻留在外存上,因此,有时也认为外存是虚拟存储器,把内存当做外存的高速缓存。
2,页式存储管理:
1,基本原理
        用户程序和内存空间按照固定大小分成若干 页, 用户程序页也叫 虚页(或逻辑页), 内存也
实页(或物理页)。
        程序执行时,要用到某个虚页,就将其装入内存。需要将某个虚页调入内存时,系统会在存中找到一个空白的物理页,用来存放这个虚页。如果找不到空白物理页,则会将内存中的某个物理页替换出去。
特别说明: 将虚页装入内存时,为了确定物理页,也可以采用类似高速缓存的各种映像方式。其
实, 将虚页调入内存面临的各种问题与将内存块 调入缓存面临的各种问题是一样的。

        页式存储一般采用类似缓存的全相联映像方式来调度虚页。

2,地址格式

物理地址(内存):包括物理页号(PPN)和页内偏移量(offset)。

虚拟地址(外存):包括虚拟页号(VPN)和页内偏移量(offset)。

例如:如果以字节为基本单位,以1024字节为一页,内存容量为1G字节,则

        程序在执行过程中,需要将虚拟地址转化为相应的物理地址,才能找到需要的信息。

3,页表:

        与缓存系统类似,为了记住内存中“已经有哪些虚页?每个虚页在什么地方?使用情况如何?”等信息,系统需要维护一个所谓的页表,来记录有关信息,基本结构如下:

        页表通常存放在内存中,为了记住其位置,一般用一个称为页表寄存器的特殊寄存器来记录其位置信息。

        页表的作用类似于高速缓存中的块表,块表与高速缓存做到一起,是高速缓存的一部分;而页表单独设置。页表按虚页号(外存)索引,利用页表实现虚拟地址到内存地址的转化。

  1. 根据页表寄存器找到页表的位置。
  2. 根据虚页号查页表找到对应的实页号。
  3. 利用找到的有效的物理页号和页内偏移量计算物理地址。
  4. 如果找不到物理页号或者物理页号无效,则引起缺页异常,进入缺页异常处理(从外存读入相应的页并更新页表)。

下图实例:


索引即虚页号,虚页位置只有两种情况:在内存上,即实页上,或者在磁盘上,即外存。

4,快表:

        根据内存中的页表来访问内存,至少需要访问内存两次才能找到需要的数据。分别是页表和内存中的数据。

        为了加快访问速度,现代处理器都包含一个称为快表(TLB)的特殊的缓存,以便记录最近使用过的地址变换。

        与快表对应的,内存中的页表也叫做慢表。

        局部性原理:空间局部性,时间局部性。

        快表利用了时间局部性:紧接着要访问的地址最有可能是最近使用过的地址。

        TLB的工作机制:跟普通的缓存类似,可以采用直接映像,全相连映像或者组相连映像来实现虚拟页号到物理页号之间的转换。但是与缓存不同,快表的映像发生在虚拟页号和快表的块号之间,其数据部分存放的是物理页号。

        下面给出一个图,在直接映像方式下,前两行时什么意思?

第一行:8号虚页(4(组内块数)*2(标记位))在12号实页。

第二行:9号虚页在6号实页。

        现在我们来回顾一下分支目标存储BTB。作用是:存放最近一段时间曾经执行过的分支指令的目标地址,根据分支指令本身的地址检索。

综合举例:在一个采用字节编址和页式存储管理的系统中,页面大小是256个字节,TLB分为4块,某时刻页表状态如下:

假设刚刚访问完5号实页,随后如果需要调入虚页,从13号实页开始按顺序存放。

        从此时刻起,系统需要连续访问10个虚拟地址:222H,333H,444H,731H,558H,C43H,C77H,666H,999H,D34H。分析在下列各种情况下的命中情况,并说明对应的物理地址及访问结束后TLB的状态。

1. TLB 采用直接映像,且此时刻的状态如下:

        中间图是分析表,虚拟地址的偏移量是8位,8位以前的部分是虚页号。如果在页表中存在对应的索引(虚页号),则页表hit。虚页号的后两位是TLB(快表)的索引。在页表内搜索的过程如右图所示。因为是从13号实页开始存放,所以,未找到的物理地址前四位是从D开始计算的。第一个虚拟地址是222h,高四位是0010,高位的后两位是10,即2,先从快表查找,快表的2号索引标记位是1,对应的虚页号是1*4+2=6(直接映像的虚页号是标记位*块数+索引),不等于虚拟地址对应的虚页号,所以并未在快表中发现,虚拟地址对应虚拟页号(索引)是2,而此时2号虚拟页中没有对应的实页,将13号实页写入,更新页表,此时实页号是13,物理地址即用13取代虚拟地址中的虚页号。下面是访问结束之后快表的状态:实页号就是对应的物理地址的高四位。

2,TLB采用全相连映像和LRU替换策略,且此时刻的状态如下:假设最近最久没有使用过的是7号实页,其次是6号实页。

        首先分析地址222h,对应的虚页号是0010,在快表中没有找到标记为2的单元,所以地址222h未能在快表中找到。而索引0010在页表中有效位为0,所以将其写入页表,同时将实页号记为13(从13开始写入虚页)。并记录在快表中,初始快表替换顺序是4123,替换此时1号索引的7号实页。快表中的替换顺序是3412。

        然后来分析给定的第二个地址333h,显然高四位是0011,在快表中有标记位3的单元,即能在快表中找到,对应的实页号是8,所以物理地址是833h。此时更新快表中的替换顺序,变成了2314。

        再来分析第三个地址444h,其高四位是0100,而在快表中没有标记为4的单元,所以未在快表中找到,那么就在页表中寻找,页表中索引(虚拟页号)为4对应的有效位是0,那么就将14写入页表。物理地址变成了E44h。同时加入快表,取代原来的2号索引,标记位变成14,此时快表中的替换顺序是1243。

        第四个地址731h,高四位是0111,对应7号虚页,对应快表中标记位为7,而标记位为7的单元在快表中存在,所以能找到,实页号是5,物理地址是531h,更新快表中的替换顺序,变成4132。

        第五个地址558h,高四位是0101,对应5号虚页,对应快表中标记位为5,而快表中不存在标记位是5的单元,所以没有在快表中找到,在页表中寻找,页表中索引为5对应的实页号是10,所以,物理地址是A58h,将10号实页写入快表,替换原来的索引1对应的7号实页,替换后,索引1对应的变成10号实页,快表中的替换顺序变成3421。

        后序分析类似。

图示表示访问过程以及访问结束后的TLB状态。访问结束后页表的状态与第一题无异。

3,TLB采用二路组相连映像和LRU替换策略,且TLB按块号的低位分组,此时刻的状态如下:

此时快表中的单元对应的虚拟页号是标记位*2+组号。组号为0对应的索引是0,2。组号为1对应的索引是1,3。原始快表的替换顺序是2112。

        首先来看第一个地址222h,高四位是0010,组号是0(高四位的最低一位),标记位是001,现在我们看看索引为1,3的单元,发现没有对应标记位为1的,即快表中不存在,现在返回页表中寻找,页表的索引是2,发现为空,即将13号实页加入,此时物理地址变成D22h。将其写入快表中,同时也要注意替换顺序。替换原2号索引,标记位为1,实页号是13。此时替换顺序是1122。

        再来看第二个地址333h,高四位是0011,组号是1,标记位是1,组号为1的单元中,未发现标记位为1的单元,所以快表中未发现,那么在页表中寻找,页表中虚拟页号是3,找到对应的实页号是8,物理地址是833h,写入快表中,替换索引为1的7号实页,标记位变成1,实页号是8,。而后更新替换顺序,此时替换顺序是1221。

        

上图表示分析过程以及访问结束后的快表状态。

3,页式存储与高速缓存的结合:

        在一个同时具有高速缓存的系统中,虚页和实页进一部分成块,虚存和内存之间以页为单位进行调度,内存和缓存之间以块为单位进行调度。

        缓冲块是内存块的副本,而内存块所在的内存页是虚拟页的副本。

        缓存有4种可能的组织方案:

  1. 物理索引,物理标记。
  2. 物理索引,虚拟标记。
  3. 虚拟索引,物理标记。
  4. 虚拟索引,虚拟标记。

        别忘了,此时指令中计算出来的是虚拟地址。

1,物理索引,物理地址:

        完全根据物理地址(物理块号)访问缓存,因此要求先利用快表和页表将虚拟地址(虚拟页号)转化为物理地址(物理页号)。

2,物理索引,虚拟标记:

        同时根据物理地址(物理块号)和虚拟地址(虚拟块号)访问缓存,要求先利用TLB和页表将虚拟地址(虚拟页号)转换成物理地址(物理块号)。

3,物理索引,虚拟标记:

        同时根据物理地址(物理块号)和虚拟地址(虚拟块号)访问缓存,要求先利用TLB和页表将虚拟地址(虚拟页号)转换成物理地址(物理页号)。

  1. 当索引的位数不超过页内块号的位数时,物理索引就是虚拟索引(物理地址和虚拟地址的差别就是高位),因此这种方式实际上就是虚拟索引,虚拟标记方案。
  2. 当索引位数超过页内块号的位数时,物理索引一般不再是虚拟索引,而且对两个不同的块而言,有可能它们的物理索引相同,虚拟标记也相同。这就麻烦了。

4,虚拟索引,物理标记:

        同时根据物理地址(物理块号)和虚拟地址(虚拟块号)访问缓存,要求先利用TLB和页表将虚拟地址(虚拟页号)转化为物理地址(物理页号)。

 

  1. 当索引位不超过页内块数的位数时,物理索引就是虚拟索引,因此这种方式就是物理索引,物理标记方案。
  2. 当索引的位数超过页内块号的位数时,物理索引一般不再是虚拟索引,而且对于两个不同的块而言,有可能他们的虚拟索引相同,物理索引也相同。
        综合举例 某 mini 计算机系统配备有页表、TLB 和高速缓存 Cache。其虚拟地址为 14 位物理地址为 12 位,页面大小为 64B。TLB 采用四路组相联方式,共设有 16 项。(4组,每组有4个页单元)Cache 按物理地址寻址,采用直接映射方式,其 Cache 行大小为 4B,共有 16 行。下面的表格中数字均为 16 进制,要求你给出的答案也以 16 进制表示,否则判错。
        假定该计算机运行到某一时刻时,TLB 的内容 为:
        

显然,虚拟地址=标记位*4+组号。

        页表前16个页为:

 

        高速缓存中的内容是:

 

        计算TLB组索引,标记,虚拟页号,物理页号,虚拟页偏移量,物理页偏移量,高速缓存标记,高速缓存索引,高速缓存块内偏移量和物理地址标记的位数,并分别说明其内容来自虚拟地址或物理地址的哪些位。

        首先,页面大小是64B,即2**6,所以页内偏移量是6位,(最低的6位:0~5),TLB采用四路组相连,所以TLB索引为2位(6~7)。剩下的6为都作为TLB标记(8~13)。其中,快表的索引和标记构成了虚拟页号。物理页内偏移量就是虚拟页内偏移量6位,(最低6为:0~5)。物理页号=12-6=6位(6~11)。缓存按物理地址寻址,采用直接映射方式,每个缓存行大小是4B,所以缓存块内偏移量是2位,最低两位(0~1)。由于缓存快共有16行,所以高速缓存的索引log16=4位(2~5),剩下的就是物理地址标记(6~11)。

        根据以上信息和下表中给出的虚拟地址,完成表格,不存在的部分请填“-”:

        对于第一个地址027ch=00001001111100,TLB索引为01=1,TLB标记为10=2,显然1号组中有2号标记,但是其有效位为0,所以TLB未命中,虚拟页号,2*4+1=9,在页表中能找到虚拟页号为9的单元,其物理页号是17h。块内偏移量为00,高速缓存索引为1111=15。标记位为9,显然未在15(F)号索引里面发现标记位为9的块。所以缓存未命中,缓存的块内地址就是块内偏移量=0。未命中就不返回缓存字节。

        对于第二个地址03a9h=00 000011 10 1010 01,TLB索引是10=2,标记是11=3,虽然2号组中存在标记为3的单元,但是有效位为0,所以TLB未命中,虚拟页号=3*4+2=14,在页表中存在14号虚页,所以不缺页,对应的实页号是11,缓存标记是1110=E,缓存索引是1010=a,未在索引为E的单元中找到标记为a。所以缓存并未命中。

        后面思路相同。

         

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丘小羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值