物理地址查询的命令(彻底搞懂虚拟地址翻译为物理地址的过程)

现代操作系统将可执行文件加载后,创建一个进程,进程中的每个指令和数据都被分配一个虚拟地址,中央处理器在获得这个虚拟地址后,在访问指令和数据之前,需要将其转换为内存的物理地址。本文的重点是物理地址的虚拟地址翻译过程和实践,因此分为两部分

1.如何将虚拟地址转换为物理地址?

2.举例练习?

如何将虚拟地址转换为物理地址?

当CPU第一次访问虚拟地址时,虚拟地址所在的虚拟页不在内存中,虚拟页表条目也不在内存中(PTE)TLB因此,需要执行许多步骤,如下图所示

首次访问虚拟地址

处理器将虚拟地址(VA)邮寄MMU(内存管理单元)

虚拟地址格式

如上图所示,虚拟地址长度为n,虚拟页偏移量长度为p。

2.MMU进入虚拟地址虚拟页码(VPN),然后将虚拟页码发送到TLB(翻译备份NicholasTse设备),TLB来自虚拟页码TLB映射表中等查询PTE(页面表格条目)。

PTE(页面项目)


3.TLB(翻译备份NicholasTse)将查询结果返回给MMU(内存管理单元)

4.MMU(内存管理单元)分析查询结果是否PTE(页面输入),找到PTE无效,错过,所以MMU根据页表基址寄存器(ptbr)plus中页表的起始地址虚拟页码(VPN)以获取虚拟页表项的物理地址PTEA(即页表条目地址),然后将这个物理地址发送到高速缓冲(L1)

5.高速缓冲(L1)根据PTEA查询内部NicholasTse映射表,发现没有找到PTEA的映射内容,即PTE(页面表项),然后请求内存PTEA满足于。

6.记忆会PTEA满足于PTE,发送给高速列车缓冲(L1),他在PTEA和PTE之间建立了映射关系。

7.高速缓冲(L1)根据PTEA再次查询缓冲的内部映射表,这次找到了,然后将PTE发送到TLB

8~9.TLB我明白了PTE建国后虚拟页码(VPN)和PTE的映射(8),然后将PTE发送到MMU

10.MMU我明白了PTE之后,检查PTE的有效位,看看虚拟页面是否在内存中。

11.MMU检查PTE之后,发现虚拟页不在内存中,因此它向CPU发送缺页中断,CPU开始执行缺页中断处理程序。

12.根据页面替换算法,缺失页面中断处理程序选择一个已被NicholasTse替换的虚拟页面作为牺牲页面(如果虚拟页面发生更改,它将被更新到磁盘),然后PTE的有效位设置为0,表示牺牲页内存不足。

13.缺失页面中断处理程序将缺失页面从磁盘切换到可用物理内存,将缺失虚拟页面的PTE的有效位设置为1,并更新物理编号。

14.执行缺页中断处理程序后,跳转到出现缺页的指令,然后CPU重新执行该指令,重新向MMU发出虚拟地址,跳转到1,并开始下一个周期。

当CPU第二次访问同一虚拟地址时,虚拟地址所在的虚拟页面已经在内存中,虚拟页面表条目(PTE)也在TLB中,因此要执行的步骤要少得多,如下图所示

第二访问虚拟地址

处理器将虚拟地址(VA)邮寄MMU(内存管理单元)

2.MMU进入虚拟地址虚拟页码(VPN),然后将虚拟页码发送到TLB(翻译备份NicholasTse设备),TLB来自虚拟页码TLB映射表中等查询PTE(页面表格条目)。

3.TLB(翻译备份NicholasTse)将查询结果返回给MMU(内存管理单元)

4.MMU(内存管理单元)分析查询结果是否PTE(页面输入),找到PTE如果有一个值,它就会命中。然后检查PTE的有效位,发现有效位为1,因此没有缺页。根据PTE中的物理数和虚拟地址中的VPO(PA)计算指令或数据的物理地址,并将PA发送给高速NicholasTse(L1)

5.高速缓冲(L1)根据小马查询内部NicholasTse映射表,发现找不到PA映射的内容,即指令或数据,然后从内存请求小马满足于。

6.记忆会小马内容被发送给高速尼古拉斯·谢(L1),后者在PA和内容之间建立映射关系。

7.高速NicholasTse(L1)根据PA再次查询内部NicholasTse映射表,这次找到了,然后将代码或指令发送给数据总线,在从数据总线接收到数据后,CPU叹息说它终于得到了数据。

当CPU第三次访问同一虚拟地址时,与第二次不同的是,虚拟地址对应的物理地址的数据已映射到高速NicholasTse(L1),因此不再从内存中查询。

描述了虚拟地址转换为物理地址的整个过程。让我们以一个具体的例子来实践!

以实践为例

前一部分是将虚拟地址转换为物理地址的过程。现在,在实践中,我们将在实践之前普及TLB和缓冲这两个概念。

TLB

TLB的全名叫缓冲。这是一个映射表。它在虚拟页码(VPN)和页面表项(PTE)之间建立映射关系。每次访问虚拟地址时,都需要找到与虚拟地址对应的页表项。每次你进入内存,都需要几十甚至几百个时钟周期。虽然pagetable的项缓冲在高速时落后于缓冲,但消耗的周期可以减少到1-2个周期,但在TLB之后,缓冲几乎不需要消耗时钟周期。它几乎与CPU同步,类似于登记

那么,如何通过TLB的页面表项(PTE)映射虚拟地址呢?让我们来看看TLB。我们说TLB是一个映射表。让我们看看映射表的样子,如下图所示

如上图所示,TLB由M组成TLB组组成:每个TLB组下有n个条目,每个条目由PTE和标记位组成。

标签位是一个数字,每个TLB组的标签位不能重复。因此,在songZuying组中,可以根据该标记位定位项目。

每个组都有一个唯一的编号,称为组号。

因此,TLB就是其中之一二维阵列,知道组号和标记位后,可以找到唯一的PTE(页面表项)。

虚拟地址中的虚拟页码(VPN)可分为两部分,即组号和标记位。假设一个n位长度的虚拟地址,如下图所示

TLB部分虚拟地址

从上图可以看出,VPN由标签位(TLBT)和组号(也称为标签索引(TLBI))组成。组号占用t位,标记位占用虚拟页码的剩余位。

如果TLB有4个组,总共64个条目,每组16个条目,VPN中的组号占2位(2=4的幂),标签位占4位(2=16的幂)。

高速缓冲

高速的缓冲通常采用SRAM(静态随机存取存储器)用于存储,比内存DRAM(动态随机存取存储器)快几十倍甚至几百倍。因此,为了加快CPU获取数据的速度,最近访问的数据存储在高速NicholasTse中。

高速NicholasTse内部有一个映射表,它建立了内存物理地址PA与内存物理地址下内容的映射关系,如下图所示

高速Nicholas-Tse映射表

如上图所示,映射表分为m组。每组由标记位、有效位和N个块组成。有效位1表示缓冲尚未过期,有效位0表示缓冲已过期。

物理地址由组号+标记位+块号组成,如下图所示

物理地址的组成

从上图可以看出,物理地址为m位,块号占用P位,组号占用t位,剩余位为标签位占用的位。

我们可以根据物理地址的组号在映射表中定位一个组,然后查看该组下的有效位是否为1。如果不是1,则表示该组的内容无效,无需进行比较。因此,缓冲错过了比赛。如果为1,则将该组下的标记位与物理地址的标记位进行比较。如果不相等,那就是小姐。如果它们相等,则根据物理地址中的块号继续查找该组的相应块号。如果你找到了数据,就意味着你击中了,否则缓冲就错过了。

假设一个高速NicholasTse有16个组,每个组有4个块,那么物理地址中的组号占用的空间是4位(2的4次方等于16),块号占用的位数是2位(2的2次方等于4),剩余的位数是标签位占用的位数。

好吧,在这个概念普及之后,让我们正式开始举例

第一个假设

1.内存由字节寻址,每个字是一个字节(32位系统通常为4个字节)。

2.虚拟地址的长度为14位。假设页表有256个页表条目,虚拟页码(VPN)占用的位数为8,虚拟偏移量(VPO)为6。

3.物理地址的长度为12位。

4.页面大小为64字节(P=64)

5.TLB分为4组,每组4项,共16项

6.高速缓冲(L1)有16组,每组有4个街区。

7.采用一级页表(多级页表比较复杂,但原理相似)。

首先看虚拟地址和物理地址的格式,如下图所示:


虚拟地址

从上图可以看出,组号(TLBI)占2位,因为我们假设TLB有4个组,标记位占6位。

物理地址

从上图可以看出,组号(CI)占4位,因为我们假设高速NicholasTse有16个组,每个组下有4个块,所以块号(CO)占2位,其余6位为标记位(CT)。

假设高速公路的TLB和缓冲的地图如下:

TLB映射表

高速Nicholas-Tse映射表

页面表中有256项。我们列出了前16项,如下图所示


页面表格前16项

一切都准备好了。假设CPU访问的虚拟地址是0x03d4,其二进制的是16位,即0000001111010100,虚拟地址只有14位,所以上面的2位被丢弃,如下图所示

0x03d4虚拟地址分布图

从上图可以看出,组号(TLBI)为11,即0x03,标签位(TLBT)为000011,即0x03。发现它是从TLB映射表中命中的,如下图所示

TLB

从上图中,我们找到了红色部分的标记位。PTE中的PPN=0x0d,有效位为1。我们根据PPN添加虚拟页面偏移量,如下图所示


虚拟地址

由上图可知,虚拟页偏移量(VPO)为010100=0x14,虚拟页偏移量(VPO)=物理页偏移量(PPO),即PPO=0x14,PPN与PPO之间的连接为物理地址PA,即001101100=0x354,如下图所示

物理地址

根据上图,组号为0101,即0x05,区块号(CO)为00,即0x00,标记位为001101,即0x0d。通过组号+标记位+区块号,可以找到高速公路缓冲的0x36号数据,如下图所示

物理地址命中数据

物理地址查询

找到与物理地址对应的数据并返回给CPU。当然,也可能出现其他情况,如TLB的失误、缓冲的高速失误、缺页等。这些读者可以自己练习。

虚拟地址翻译的过程和实践。在介绍之后,我们来谈谈下一个话题。

您可以还会对下面的文章感兴趣

最新评论

  1. 萌总大人
    萌总大人
    发布于:2022-04-27 20:08:28 回复TA
    01101,即0x0d。通过组号+标记位+区块号,可以找到高速公路缓冲的0x36号数据,如下图所示物理地址命中数据找到与物理地址对应的数据并返回给CPU。当然,也可能出现其他情况,如TLB的失误、
  1. 三生石旁遇到你
    三生石旁遇到你
    发布于:2022-04-27 13:44:38 回复TA
    0001111010100,虚拟地址只有14位,所以上面的2位被丢弃,如下图所示0x03d4虚拟地址分布图从上图可以看出,组号(TLBI)为11,即0x03,标签位(TLBT)为000011,即0x03。发现它是从TLB映射表中命中
  1. 冷傲痞子
    冷傲痞子
    发布于:2022-04-27 10:38:31 回复TA
    e)将查询结果返回给MMU(内存管理单元)4.MMU(内存管理单元)分析查询结果是否PTE(页面输入),找到PTE无效,错过,所以MMU根据页表基址寄存器(ptbr)plus中页表的起始地址虚拟页码(V
  1. 祁承超梅
    祁承超梅
    发布于:2022-04-27 08:40:52 回复TA
    世界那么大能认识你,我觉得好不幸。
  1. 弘佳鹏琳
    弘佳鹏琳
    发布于:2022-04-27 08:40:52 回复TA
    一个男人若将女人当成朋友,往往就会忘记她是个女人。

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

使用微信扫描二维码后

点击右上角发送给好友