主要内容:
- 虚拟存储器
- 页式存储管理
- 页式存储和高速缓存的结合
重点内容:页式存储管理,页表,TLB。
1,虚拟存储器:
2,页式存储管理:
1,基本原理
页式存储一般采用类似缓存的全相联映像方式来调度虚页。
2,地址格式
物理地址(内存):包括物理页号(PPN)和页内偏移量(offset)。
虚拟地址(外存):包括虚拟页号(VPN)和页内偏移量(offset)。
例如:如果以字节为基本单位,以1024字节为一页,内存容量为1G字节,则
程序在执行过程中,需要将虚拟地址转化为相应的物理地址,才能找到需要的信息。
3,页表:
与缓存系统类似,为了记住内存中“已经有哪些虚页?每个虚页在什么地方?使用情况如何?”等信息,系统需要维护一个所谓的页表,来记录有关信息,基本结构如下:
页表通常存放在内存中,为了记住其位置,一般用一个称为页表寄存器的特殊寄存器来记录其位置信息。
页表的作用类似于高速缓存中的块表,块表与高速缓存做到一起,是高速缓存的一部分;而页表单独设置。页表按虚页号(外存)索引,利用页表实现虚拟地址到内存地址的转化。
- 根据页表寄存器找到页表的位置。
- 根据虚页号查页表找到对应的实页号。
- 利用找到的有效的物理页号和页内偏移量计算物理地址。
- 如果找不到物理页号或者物理页号无效,则引起缺页异常,进入缺页异常处理(从外存读入相应的页并更新页表)。
下图实例:
索引即虚页号,虚页位置只有两种情况:在内存上,即实页上,或者在磁盘上,即外存。
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的状态。
中间图是分析表,虚拟地址的偏移量是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,物理索引,虚拟标记:
同时根据物理地址(物理块号)和虚拟地址(虚拟块号)访问缓存,要求先利用TLB和页表将虚拟地址(虚拟页号)转换成物理地址(物理块号)。
3,物理索引,虚拟标记:
同时根据物理地址(物理块号)和虚拟地址(虚拟块号)访问缓存,要求先利用TLB和页表将虚拟地址(虚拟页号)转换成物理地址(物理页号)。
- 当索引的位数不超过页内块号的位数时,物理索引就是虚拟索引(物理地址和虚拟地址的差别就是高位),因此这种方式实际上就是虚拟索引,虚拟标记方案。
-
当索引位数超过页内块号的位数时,物理索引一般不再是虚拟索引,而且对两个不同的块而言,有可能它们的物理索引相同,虚拟标记也相同。这就麻烦了。
4,虚拟索引,物理标记:
同时根据物理地址(物理块号)和虚拟地址(虚拟块号)访问缓存,要求先利用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。所以缓存并未命中。
后面思路相同。