物理地址與虛擬地址怎么轉(zhuǎn)換
MAC(Media Access Control或者M(jìn)edium Access Control)地址,意譯為媒體訪問控制,或稱為物理地址、硬件地址,用來定義網(wǎng)絡(luò)設(shè)備的位置。今天學(xué)習(xí)啦小編給大家介紹一下物理地址虛擬地址轉(zhuǎn)換。供大家參考!
物理地址虛擬地址轉(zhuǎn)換參考如下
物理地址按照頁來分配成很多不同的頁,每個(gè)頁有頁號(hào)
有的頁里存放的是頁表,有的頁里存放的是可以寫的內(nèi)存
每個(gè)頁的大小是4KB,32位機(jī)器有2^32個(gè)地址
因此有2^32/2^21=2^20個(gè)頁號(hào),即2的20次方個(gè)虛擬頁
物理地址也按照4K來分,但是物理地址一般沒有4G大小
|*****4K*****| 第0項(xiàng)
|*****4K*****| 第1項(xiàng)
|*****4K*****| 第2項(xiàng)
|*****4K*****| 第3項(xiàng)
|*****4K*****| 第4項(xiàng)
...
......
ARM的虛擬地址和物理地址的轉(zhuǎn)換
比如按照10 10 12來劃分
10位 10位 12位
|0000000010| - |0000000010| - |00000000010|
| 2 | | 2 | | 2 |
按照劃分,首先虛擬地址向右便宜22位的到,第一級(jí)(首級(jí))頁表項(xiàng)
為數(shù)值2.
然后根據(jù)全局唯一的地址,即首級(jí)頁表的存放地址,這部分是連續(xù)的。
比如地址是第0XFF00 00FF
則可以得到第一級(jí)頁表內(nèi)存放的內(nèi)容:
即讀取0XFF00 00FF + 2*4k這個(gè)物理地址中的內(nèi)容,其中分為12bit+20bit
后面20bit表示了第二級(jí)頁表所在的物理頁,為什么用20bit,因?yàn)橐还灿?0bit
個(gè)物理頁,比如得到的值是3,則這個(gè)第二級(jí)頁表的的物理地址是4k*3,然后
看第二個(gè)10位,即二級(jí)頁表的頁內(nèi)便宜,得到的是2,則可以得到第二級(jí)頁表的
物理得只是4k*3 + 2,然后讀取(4k * 3) + 2中的值,32位,其中20位表示了
第三級(jí)頁表的物理地址,比如是0x0000 FF00,然后讀取后12位的值,即2
則得到在第0x0000 ff00這個(gè)頁表中的第2位,從而得到物理地址。
頁表最多占用多少內(nèi)存?
2^10個(gè)32位 2^10個(gè)32位 + 2^12個(gè)32位
即2^11 + 2^12 = 2kb + 4kb = 6kb
如果不采用2級(jí)頁表的話
那么有2^20次方個(gè)頁表項(xiàng),需要2^20次方個(gè)32位,即2^10kb=2MB
2MB也不是很大,可是在linux下,每個(gè)進(jìn)程有自己的獨(dú)立頁表,
那每個(gè)進(jìn)程一上來就分配2MB,這樣的開銷很大。
因此多級(jí)頁表,主要是靈活,而且節(jié)省空間,每個(gè)32bit中有12bit的狀態(tài)位
表示了頁表的各種狀態(tài)。
已知一個(gè)虛擬地址0x01AF5518, 則轉(zhuǎn)換的過程如下:
注意: *這里討論的以Windows下普通模式分頁的情況, 也就是2級(jí)頁表的情況*
1.首先把虛擬地址拆分成3個(gè)部分(低12位, 中10位, 高10位), 換成2進(jìn)制如下:
-> 0000 0001 1010 1111 0101 0101 0001 1000
按照10, 10, 12的位數(shù)重新排列后
-> (頁目錄索引)00 000 00110, (頁表項(xiàng)索引)10 1111 0101, (偏移)0101 0001 1000
換算成十六進(jìn)制后可以得到如下結(jié)果
頁目錄索引 = 6, 頁表項(xiàng)索引 = 0x2f5 , 偏移 = 0x518
2. 根據(jù)當(dāng)前的CR3寄存器中的物理地址定位頁目錄表基址
Cr3中存放的是物理地址, 這個(gè)物理地址指向進(jìn)程的頁目錄表基址, 由此可以得到
頁目錄表基址(PDE) = Cr3 = 0xAA0E5000
3. 計(jì)算頁表項(xiàng)的地址
頁表地址存放在頁目錄表(PDE)中的第6個(gè)項(xiàng)目中, 也就是
[0xAA0E5000 + 4 * 6] = [0xAA0E5018] = 0x3D955867, 其中0x00000867為該頁表屬性值, PTE = 0x3D955000
3. 計(jì)算頁面物理地址
我們要找的頁面在這個(gè)頁表中的第0x2f5項(xiàng), 所以虛擬地址所在的頁的物理地址為
[0x3D955000 + 0x2f5 * 4] = [0x3D955BD4] =
假設(shè)[0x3D955BD4] = 0x7095e847, 頁面的物理地址 x0x7095e000, 0x00000847表示的是頁面屬性
4. 計(jì)算最終的物理地址
由虛擬地址分離的偏移可以計(jì)算出最終的物理地址為
0x7095E000 + 0x00000518 = 0x7095E518.
學(xué)習(xí)啦小編介紹了物理地址虛擬地址轉(zhuǎn)換的相關(guān)知識(shí),希望你喜歡。
物理地址與虛擬地址怎么轉(zhuǎn)換
上一篇:物理地址與虛擬地址映射
下一篇:物理地址能改嗎