Document
虚拟地址转换[二]

虚拟地址转换[二]

关于上文提到的“关于在TLB中具体是怎么找的,在page table中又是怎么"walk"的问题,下面通过一个简单的例子说明一下。假设当前cpu支持的虚拟地址是14位,物理地址是12位,page size为64字节(这里要说明一下,通常情况下呢,虚拟地址和物理地址的位数是一样的,但其实并不一定需要一

Related articles

Setting up Federation Between OneLogin and Oracle Identity Cloud Service 8 Of The Best Cloud Couch Dupes Ranked By A Home Editor Best Free VPN for School (2024): Unblock Websites at School Effortessly! Cloud vs. On-Premise Deployment: Which Is Better for Your Business? Meet ‘Firebows,’ the Flat, Rainbow-Like Stacks That Appear in Sunny Skies

关于上文提到的“关于在TLB中具体是怎么找的,在page table中又是怎么”walk”的问题,下面通过一个简单的例子说明一下。

假设当前cpu支持的虚拟地址是14位,物理地址是12位,page size为64字节(这里要说明一下,通常情况下呢,虚拟地址和物理地址的位数是一样的,但其实并不一定需要一样,因为本来就可以多个虚拟地址指向同一个物理地址嘛 ) 。

不管是虚拟地址还是物理地址,因为最小管理单位都是page,在转换过程中,代表page内的偏移地址(offset)的低位bits部分是不需要参与的,需要转换的只是代表page唯一性标识的高位bits部分,称作page is offset number。由此产生了4个概念:vpn(virtual page number),ppn(physical page number),vpo(virtual page offset)和PPO(physical page is offset offset )

VPO和PPO占的bit位数为 ,p为page size大小,即64,因而VPO和PPO的值为6。因为所有pages都是同样大小的,所以VPO始终等于PPO。

虚拟地址中剩下的bit位就成了VPN,物理地址中剩下的bit位就成了PPN。

假设我们的TLB一共有16个entries,是4路组相关(4-way set associative)的,则有16/4=4个sets。TLB本身就是一个hardware cache, 关于cache中way, set, index, tag的基础概念,如果还不熟悉的,可以参考这两篇文章:浅谈Cache Memory和cache之虚虚实实。

TLB Index(以下简称TI)的值为 =2,剩下的bit位就成了TLB Tag(以下简称TT)。

下面,我们准备读取虚拟地址为0x0334处的内容。

  1. 将这一地址分割成VPN和VPO

2 . 将VPN分割成TT和TI

3. 使用TT (0x03) 和TI (0) 在TLB中查找。一个TLB entry的构成如下:

作为cache,TLB index是用来索引的,不会存储在TLB entry中,TLB entry中存的只有tag , 权限位,有效位和内容(对于TLB来说就是PPN ) 。

假设现在tlb中的内容是这样的(这里为了简化,省略了permission bit ) :

虽然在set/index为0这一行,找到了tag为03的一个entry,但这个entry中PPN是不存在的,整个entry目前是invalid的,也就是说TLB miss了,需要去page table中找。

4 . 使用VPN ( 0x0C ) 作为index在page table中查找。一个只有one level的page table(单级页表)构成如下 :

index作为索引,也是不会存储于page table entry中的,PTE存的只有权限位,有效位和内容(对于PTE来说也是PPN)。

假设现在的page table是这样的(同样为了简化,省略了permission bits):

对应的PTE(page table entry)中的PPN不存在,依然是invalid的,这将触发一个page fault。

实现的细节展开后,上文中的图也可以展开了(只用关注左半部分)

对比一下,你可能会发现一个TLB entry比一个page table entry多了一个tag,tlb使用的是tag比对【1】,而页表使用的是index索引,在pte数目很大的情况下这会带来一系列问题,详情请看下回分解 。

【 1】:如果是full associative的tlb,则只有tag没有index;如果是n – way set associative的TLB,则先通过index索引,再进行tag比对 。

说明:本文例子来源于https://courses.cs.washington.edu/courses / cse351/16wi / sections/8 / cse351_16wi_08.pdf

原创文章,转载请注明出处。