读文网>电脑>网络知识>网络基础知识

物理地址与虚拟地址怎么转换

MAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制,或称为物理地址、硬件地址,用来定义网络设备的位置。今天读文网小编给大家介绍一下物理地址虚拟地址转换。供大家参考!

物理地址虚拟地址转换参考如下

物理地址按照页来分配成很多不同的页,每个页有页号

有的页里存放的是页表,有的页里存放的是可以写的内存

每个页的大小是4KB,32位机器有2^32个地址

因此有2^32/2^21=2^20个页号,即2的20次方个虚拟页

物理地址也按照4K来分,但是物理地址一般没有4G大小

|*****4K*****| 第0项

|*****4K*****| 第1项

|*****4K*****| 第2项

|*****4K*****| 第3项

|*****4K*****| 第4项

...

......

ARM的虚拟地址和物理地址的转换

比如按照10 10 12来划分

10位 10位 12位

|0000000010| - |0000000010| - |00000000010|

| 2 | | 2 | | 2 |

按照划分,首先虚拟地址向右便宜22位的到,第一级(首级)页表项

为数值2.

然后根据全局唯一的地址,即首级页表的存放地址,这部分是连续的。

比如地址是第0XFF00 00FF

则可以得到第一级页表内存放的内容:

即读取0XFF00 00FF + 2*4k这个物理地址中的内容,其中分为12bit+20bit

后面20bit表示了第二级页表所在的物理页,为什么用20bit,因为一共有20bit

个物理页,比如得到的值是3,则这个第二级页表的的物理地址是4k*3,然后

看第二个10位,即二级页表的页内便宜,得到的是2,则可以得到第二级页表的

物理得只是4k*3 + 2,然后读取(4k * 3) + 2中的值,32位,其中20位表示了

第三级页表的物理地址,比如是0x0000 FF00,然后读取后12位的值,即2

则得到在第0x0000 ff00这个页表中的第2位,从而得到物理地址。

页表最多占用多少内存?

2^10个32位 2^10个32位 + 2^12个32位

即2^11 + 2^12 = 2kb + 4kb = 6kb

如果不采用2级页表的话

那么有2^20次方个页表项,需要2^20次方个32位,即2^10kb=2MB

2MB也不是很大,可是在linux下,每个进程有自己的独立页表,

那每个进程一上来就分配2MB,这样的开销很大。

因此多级页表,主要是灵活,而且节省空间,每个32bit中有12bit的状态位

表示了页表的各种状态。

已知一个虚拟地址0x01AF5518, 则转换的过程如下:

注意: *这里讨论的以Windows下普通模式分页的情况, 也就是2级页表的情况*

1.首先把虚拟地址拆分成3个部分(低12位, 中10位, 高10位), 换成2进制如下:

-> 0000 0001 1010 1111 0101 0101 0001 1000

按照10, 10, 12的位数重新排列后

-> (页目录索引)00 000 00110, (页表项索引)10 1111 0101, (偏移)0101 0001 1000

换算成十六进制后可以得到如下结果

页目录索引 = 6, 页表项索引 = 0x2f5 , 偏移 = 0x518

2. 根据当前的CR3寄存器中的物理地址定位页目录表基址

Cr3中存放的是物理地址, 这个物理地址指向进程的页目录表基址, 由此可以得到

页目录表基址(PDE) = Cr3 = 0xAA0E5000

3. 计算页表项的地址

页表地址存放在页目录表(PDE)中的第6个项目中, 也就是

[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867为该页表属性值, PTE = 0x3D955000

3. 计算页面物理地址

我们要找的页面在这个页表中的第0x2f5项, 所以虚拟地址所在的页的物理地址为

[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =

假设[0x3D955BD4] = 0x7095e847, 页面的物理地址 x0x7095e000, 0x00000847表示的是页面属性

4. 计算最终的物理地址

由虚拟地址分离的偏移可以计算出最终的物理地址为

0x7095E000 + 0x00000518 = 0x7095E518.

读文网小编介绍了物理地址虚拟地址转换的相关知识,希望你喜欢。

相关热搜

相关文章

【网络基础知识】热点

【网络基础知识】最新