析
現(xiàn)在進(jìn)入頁式映射的過程了, Linux系統(tǒng)中的每個(gè)進(jìn)程都有其自身的頁面目錄PGD, 指向這個(gè)目錄的指針保存在每個(gè)進(jìn)程的mm_struct數(shù)據(jù)結(jié)構(gòu)中。 每當(dāng)調(diào)度一個(gè)進(jìn)程進(jìn)入運(yùn)行的時(shí)候,內(nèi)核都要為即將運(yùn)行的進(jìn)程設(shè)置好控制寄存器cr3, 而MMU的硬件則總是從cr3中取得指向當(dāng)前頁面目錄的指針。當(dāng)我們在程序中要轉(zhuǎn)移到地址0x08048368去的時(shí)候, 進(jìn)程正在運(yùn)行,cr3早以設(shè)置好,指向我們這個(gè)進(jìn)程的頁面目錄了。 先將線性地址0x08048368展開成二進(jìn)制:
0000 1000 0000 0100 1000 0011 0110 1000
對照線性地址的格式,可見最高10位為二進(jìn)制的0000 1000 00, 也就是十進(jìn)制的32,所以MMU就以32為下標(biāo)在其頁面目錄中找到其目錄項(xiàng)。這個(gè)目錄項(xiàng)的高20位指向一個(gè)頁面表,CPU在這20位后添上12個(gè)0就得到頁面表的指針。找到頁面表以后, CPU再來看線性地址中的中間10位,0001001000,即十進(jìn)制的72.于是CPU就以此為下標(biāo)在頁表中找相應(yīng)的表項(xiàng)。表項(xiàng)值的高20位指向一個(gè)物理內(nèi)存頁面,在后邊添上12個(gè)0就得到物理頁面的開始地址。假設(shè)物理地址在0x620000的,線性地址的最低12位為0x368. 那么test()函數(shù)的入口地址就為0x620000 0x368 = 0x620368
億恩科技地址(ADD):鄭州市黃河路129號天一大廈608室 郵編(ZIP):450008 傳真(FAX):0371-60123888
聯(lián)系:億恩小凡
QQ:89317007
電話:0371-63322206 本文出自:億恩科技【1tcdy.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|