操作系統分頁分段小筆記

以前看分頁分段時記得筆記,今天無意翻出來發現記得還挺好的,雖然當時貌似看的不怎麼懂,博客發下

分段機制:
CS,DS,ES,FS,GS,SS  段選擇器
高13位表示索引(從0開始)
第二位 TI=0在GDT中,TI=1在LDT中
0,1位表示程序的當前優先級RPL


GDTR:全局描述符表寄存器 48位  指向全局描述符表GDT
LDTR:局部描述符表寄存器 16位  類似段寄存器


虛擬地址到線性地址的形成過程:
xxxx:yyyyyyyy  段地址與偏移地址
(1)xxxx的TI位爲0
   1.GDTR寄存器中取GDT基址
   2.段選擇器xxxx中取索引得到段描述符
   3.從段描述符中得到段的基址加上偏移地址yyyyyyyy得到線性地址 
  
(2)xxxx的TI位爲1
   1.GDTR寄存器中取GDT基址
   2.LDTR中取索引得到LDT段的位置
   3.xxxx中取索引從LDT中得到段描述符
   4.從段描述符中得到段的基址加上偏移地址yyyyyyyy得到線性地址 


分頁機制:
寄存器的位數都是從0計數的
控制寄存器:
CRO
啓用保護模式PE(Protected Enable)位(位0)和開啓分頁PG(Paging)位(位31)分別用於控制分段和分頁機制。
PE:CR0的位0是啓用保護(Protection Enable)標誌。當設置該位時即開啓了保護模式;當復位時即進入實地址模式。這個標誌僅開啓段級保護,而並沒有啓用分頁機制。若要啓用分頁機制,那麼PE和PG標誌都要置位。
PG:CR0的位31是分頁(Paging)標誌。當設置該位時即開啓了分頁機制;當復位時則禁止分頁機制,此時所有線性地址等同於物理地址。在開啓這個標誌之前必須已經或者同時開啓PE標誌。即若要啓用分頁機制,那麼PE和PG標誌都要置位。
CR1  保留不用
CR2  用於出現頁異常時報告出錯信息
CR3  含有存放頁目錄表頁面的物理地址(物理地址!),因此該寄存器也被稱爲頁目錄基地址寄存器PDBR(Page-Directory Base address Register)。
CR4  PAE標誌 啓用物理地址擴展,可最多尋址64GB物理內存,否則最多4GB。
           PSE標誌 用於啓用大頁面支持 PAE=1時,大頁面爲2MB,PAE=0,時,大頁面爲4MB




線性地址到物理地址:
把物理地址或線性地址換分爲大小相同的塊,稱爲頁(可能物理地址有不同的叫法)


頁:開始地址XXXXX000H,XXXXX是頁碼,頁碼左移12位是頁的開始地址

映射表結構:
頁目錄跟頁表都是操作系統負責建立的
第一級:頁目錄
    頁目錄是用來存放頁目錄表項(PDE)的線性表。每個頁目錄佔4KB內存頁,PDE每個4字節,相除=1024,包含對應的第二級表所在物理地址空間頁的頁碼(高20位是頁表基址)。當沒有啓用PAE時,有兩種PDE格式,分別用於指向4KB的頁表和4MB的內存頁。
第二級:頁表
    頁表是用來存放頁表表項(PTE)的線性表。每個頁表佔4KB內存頁,PTE每個4字節。2MB和4MB的大內存頁是直接映射到頁目錄表項的,不需要使用頁表。




地址翻譯:
1.CR3寄存器取頁目錄起始地址
2.取線性地址的高10位作爲索引選取頁目錄的一個表項,也就是PDE
3.根據PDE中的頁表基址(取PDE的高20位,低12位設爲0)定位到頁表
4.取線性地址的12位到21位(10位)作爲索引選取頁表的一個表項,也就是PTE
5.取出PTE的內存頁基址(取PTE的高20位,低12位設爲0)
6.取線性地址的低12位作爲頁中偏移與上一步的內存頁基址相加得到物理地址


對於4MB的大內存頁,PDE的高10位便是4MB內存頁的基地址的高10位,線性地址的低22位是頁中偏移。


由這個過程我們可知二級分頁地址機制帶來的嚴重問題就是內存訪問效率的嚴重下降,由不分頁時的1次,上升到了3次,這個問題必須解決。那就是利用cache實現地址的快速變換。

發佈了94 篇原創文章 · 獲贊 218 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章