以前看分頁分段時記得筆記,今天無意翻出來發現記得還挺好的,雖然當時貌似看的不怎麼懂,部落格發下
分段機制:
cs,ds,es,fs,gs,ss 段選擇器
高13位表示索引(從0開始)
第二位 ti=0在gdt中,ti=1在ldt中
0,1位表示程式的當前優先順序rpl
gdtr:全域性描述符表暫存器 48位 指向全域性描述符表gdt
ldtr:區域性描述符表暫存器 16位 類似段暫存器
虛擬位址到線性位址的形成過程:
***x:yyyyyyyy 段位址與偏移位址
(1)***x的ti位為0
1.gdtr暫存器中取gdt基址
2.段選擇器***x中取索引得到段描述符
3.從段描述符中得到段的基址加上偏移位址yyyyyyyy得到線性位址
(2)***x的ti位為1
1.gdtr暫存器中取gdt基址
2.ldtr中取索引得到ldt段的位置
3.***x中取索引從ldt中得到段描述符
4.從段描述符中得到段的基址加上偏移位址yyyyyyyy得到線性位址
分頁機制:
暫存器的位數都是從0計數的
控制暫存器:
cro
把實體地址或線性位址換分為大小相同的塊,稱為頁(可能實體地址有不同的叫法)
頁:開始位址***xx000h,***xx是頁碼,頁碼左移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實現位址的快速變換。
作業系統分段機制與分頁機制
首先說明一下,我們在除錯程式時看到的位址其實是邏輯位址而不是線性位址或是實體地址。cpu需要通過一些手段才可以訪問到實體地址。這個手段就是分段與分頁。那麼為什麼cpu不直接操控實體地址中?第一,為了程式執行的更安全,程式設計更容易,cpu提供了分段機制。第二,為了方便記憶體管理,無縫擴充套件儲存空間...
作業系統 分段式記憶體管理
從計算機的角度出發,提高了記憶體的利用率,提公升了計算機的效能,以分頁通過硬體機制實現,對使用者透明 考慮到使用者和程式設計師,已滿足方便程式設計 資訊保護和共享 動態增長 動態鏈結等多方面需求 分段式記憶體管理 分段 按照使用者程序中的自然段劃分邏輯空間,例如 使用者的程序由主程式 兩個子程式 棧...
分段分頁儲存 (計算機作業系統)
一 各種儲存器 1 主儲存器 簡稱記憶體 主存 可執行儲存器 主要部件,儲存程序執行時的程式和資料,若干兆位元組 中等速度 中等 主儲存器的訪問速度遠低於cpu執行指令的速度,為緩和這一矛盾,在計算機系統中引入了暫存器和快取記憶體。2 暫存器 速度最快,昂貴,容量小。以字 word 為單位。暫存器用...