i386cpu不僅有段機制,而且支援頁機制。乙個32位的邏輯位址經過段機制對映成線性位址後,還要經過頁機制對映成32位的邏輯位址。
與頁機制有關的暫存器有:cr3,cr0
cr0的最高位pg是頁對映機制的總開關,如果pg位是1則開啟頁對映機制。
cr3暫存器用來存放頁面目錄的首位址。
頁面目錄dir,10bits
頁面表page,10bits
頁內偏移offset,12bits
i386把位址分成許多頁面,每個頁面大小為4k位元組(12位)。
容易看出,頁面目錄裡共有1k個頁面表的位址,由於每個位址是32位的,所以乙個頁面目錄占用4k位元組的空間,正好乙個頁面。
同樣,1個頁面表裡共有1k個頁面的位址,占用4k位元組,也是乙個頁面。
頁機制的工作過程如下:
把32位線性位址的dir部分加上cr3,得到相應頁面表的首位址。
把頁面表的首位址加上線性位址中的page部分,得到頁面的首位址。
把頁面首位址加上線性位址的offset部分,得到邏輯位址。
由於每個頁面表大小正好位4k位元組,因此每個頁面表會正好放在乙個頁面裡面。也就是說頁面表的首位址是4k的倍數。因此頁面目錄中每項的低12位都沒用到,因此i386把頁面目錄項的低12位移做他用。
同樣,對頁面表中的每個位址,低12位也有其他用途。
notes:
1 對核心空間,從虛擬位址上看,核心空間是分配在4g空間中的最高的1g,而實體地址是分配在最低的1g空間。他們之間存在乙個簡單的關係,即核心空間的線性位址減去3g就是實體地址。雖然他們也要通過頁機制來對映,但頁機制對映核心空間位址時,保證它們之間存在如上的關係。
i386和i686的區別
i386和i686 現在所有的intel 32位體系 包括amd等相容cpu 都叫i386體系,包括p4。i686仍然屬於i386體系,不過對cpu 相對於386 的特性作了指令優化。gnu linux分為alpha powerpc sun等各個不同版本,所有從intel386 p4都用i386版本...
計組 i386呼叫約定
x64呼叫約定是由硬體的彙編指令call和ret的微指令和軟體的彙編指令規範共同完成的 一般為如下順序 父函式引數入棧 軟體彙編 父函式call 硬體微指令 子函式棧建立 軟體彙編 子函式棧清理 軟體彙編 子函式ret 硬體微指令 父函式棧清理 軟體彙編 下文中將演示 f a1,a2,a3,a4,a...
i386段式記憶體管理
1 intel x86 cpu段式記憶體管理 1 在保護模式下改變段暫存器的功能,使其從乙個單純的基位址變成向這樣乙個資料結構的指標。這樣,當一條訪問記憶體的指令發出乙個記憶體位址時,cpu就可以這樣來歸納出實際應該放上資料 a.根據指令的性質來確定應該使用哪乙個段暫存器,例如轉移指令中的位址在 段...