首页
社区
课程
招聘
[翻译]虚拟化是如何工作的(第二部分 内存虚拟化)
发表于: 2018-11-16 18:42 8553

[翻译]虚拟化是如何工作的(第二部分 内存虚拟化)

2018-11-16 18:42
8553


上一部分,我们已经讨论了处理器虚拟化。那么内存虚拟化呢?如果对内存随意修改,内存很可能会挂,所以在解释VMM怎样控制内存之前,我们先了解一下内存的结构。

内存通常被认为是线性分布的,内存单元用来存储字节,分布在0x00000000-0xFFFFFFFF的32位地址供CPU调用。

但对于现在的大多数计算机来说,以上描述已不适用(小型嵌入式系统有时会以这种方式处理内存以节省资源)。相反,现代计算机使用内存管理单元(MMU),它在CPU中负责将虚拟地址转化为物理地址(虚拟与虚拟化无关,只是名字相似)

地址的转换使用了分页机制,分页的理解重点在计算部分。我们取4KB的物理内存,将其基地址存储到一个表项中。这4KB内存称为一页,这个表称为页表(PT)。因特尔手册中定义一个PT可以保存512个页。按照每个页4KB计算,大概可寻址2MB的内存。但是我们想寻址更多内存,所以我们将512个页表的物理地址存储到一个页目录项(PDE)中。计算一下,每个PDE有1GB的内存。这些内存还不够,我们继续将512个PDE的物理地址存储到一个页目录指针表项(PDPTE)中。然后,将512个PDPTE的物理地址存储到一个PML4E中。

 


物理地址可以理解为“内存中的第0xffec1230个字节”。而虚拟地址则包含不同指针表的所有索引,用于将MMU指引到正确的字节。

64位虚拟地址(9位可表示0-511)的含义如下:

63-48位:16位地址扩展;

47-39位:9位PML4偏移;

38-30位:9位PDPT偏移;

29-21位:9位页目录偏移;

20-12位:9位页表偏移;

11-0位:12位页内偏移;

举个例子,虚拟地址0x00000000007FC031写成二进制形式为:

该虚拟地址的含义为:基于虚拟地址,MMU查找PML4的第一项(索引为0),保存着PDPT的物理地址。继续查找,PDPT的第一项保存着PD的物理地址。在PD中查找第四个PT,在PT中查找第509项的指针。该指针将MMU指引到一个页,该页的第50位表示读或写。

 

要时刻记得,每个表项的实际物理地址由两部分组成。存储在表项中的物理地址的前导位,加上虚拟地址的索引,这两部分共同构成一个有效的物理地址。

也许你已经知道,64位计算机的总线地址大多时候只使用48位。所以在实际的处理器中内存地址只有48位,而不是64位。这意味着指向下一表项的指针并没有64位,但每个表项是64位,所以下一表项的指针不能占用所有位。

实际上,这48位中,存储着最后一个指针的前36位,索引占9位,还余3位。这3位是填充位,如果索引由字节构成,这3位会用来表示索引。


分页机制有利有弊:内存管理单元(MMU)必须将虚拟地址转换为物理地址,这意味着处理器需要花更多时间访问内存。但同时,可以利用它做更多有趣的事。

因为指向下一表项的指针不能占用所有64位(只占用36位),剩下的位就用来做标记位。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2018-12-28 17:54 被Green奇编辑 ,原因:
收藏
免费 5
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/11/17
最新回复 (6)
雪    币: 18549
活跃值: (2352)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了
最后于 2018-11-16 19:25 被会飞的锅编辑 ,原因:
2018-11-16 19:24
0
雪    币: 10704
活跃值: (809)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
666,思路很清晰,解释的很好很全面,表示我这种小白也看得懂
最后于 2018-11-16 19:40 被固件安全编辑 ,原因:
2018-11-16 19:39
1
雪    币: 3738
活跃值: (3872)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
感谢分享!
2018-11-17 13:05
1
雪    币: 11716
活跃值: (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
辛苦
2018-11-17 16:22
1
雪    币: 26205
活跃值: (63302)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
6
2018-11-17 16:24
0
雪    币: 24
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
一个页表到底包含多少个页啊,不是1024吗,这里为啥是512,
2018-11-30 16:53
0
游客
登录 | 注册 方可回帖
返回
//