一、分段與分頁的比較
1.邏輯位址 -----(分段機制)-----> 線性位址 -----(分頁機制)-----> 實體地址
分段機制是必須有的,分頁機制可以沒有。
如果沒有分頁機制,線性位址=實體地址
不同的分段機制和不同的分段機制可以隨意組合
線性位址和實體地址都是32位,是一維的
3.分段的原因:隔絕各個任務的**、資料和堆疊區域的機制,使多個程式(或任務)可以執行在同一處理器上而不會相互干擾
分頁的原因:為虛擬記憶體系統提供了實現機制,也用於提供多工之間的隔離措施
4.先執行段級保護,再執行頁級保護
段特權級有4級,頁只有2級。
超級使用者級執行的程式可對任何頁面有讀寫操作,即使是唯讀頁面。
5.保護檢查操作與位址變換同時進行,因此處理器不會受到影響
二、分段管理
段選擇符中13位是索引號,因此可以選擇8191(0號段不用)個段。
段選擇符中乙個是區分gdt和ldt,因此準備地說,乙個任務最多可以擁有全域性段和區域性段各8191個。
偏移值有32位,因此乙個段最長是4g
只有6個段暫存器,因此只有6個段可供同時訪問
(1)段選擇符 -----> ti -----> 記錄段描述符基址的暫存器
(2)段選擇符 ----->index -----> 段描述符
段描述符位址 = 段描述符基址(暫存器中) + index * 8b
(2)段描述符 -----> 段首位元組的線性位址
(3)段首位元組的線性位址 + 偏移值 -----> 目標線性位址
3.段的分類
段(資料段,**段,系統段(系統段表(ldt段表,tss段表),門描述符(呼叫門,中斷門,陷阱門,任務門)))
段描述符定義乙個段。門描述符存放的是指向乙個過程入口點的指標
任務門:任務切換
陷阱門:呼叫異常處理程式
中斷門:呼叫中斷處理程式
呼叫門:在不同的特權級之間實現受控的程式控制轉移
4.ldt是區域性描述符表,gdt是全域性描述符表
ldt表是一種系統段,其描述符屬於系統段描述符。
每個儲存ldt表的段,都必須在gdt中有乙個段描述符和段選擇符
5.6個段暫存器分別是:**cs, 棧ss, 資料ds, 通用es,gs,fs
6.w/r
一致性**段
在保護模式下不可寫
一致性或非一致性
棧段必須可讀可寫
資料段唯讀或可讀可寫
必須非一致性
7.特權級越大,特權越低
cpl:當前特權級,指當前執行的程式或任務的特權級
dpl:描述符特權級,指目標段或門的描述符特權級
rpl:請求特權級,指目標段或門的選擇符特權級
二、分頁管理
1.分頁機制把張線性位址空間和物理空間劃分成頁面
分頁機制是頁面-頁面的對映,位址-位址的轉換
2.頁面大小為4k
頁面數為2^20 = 2^(32-12)
頁表項大小為4b = 32 / 8
頁表大小為4mb = 2^20 * 4
3.使用二級頁表並沒有解決需要4mb來存放頁表項的問題,它的作用是:
(1)不需要連續的4b空間
(2)目標表頁面必須在記憶體中,但二級頁表可以不在記憶體中
頁面大小:2^offset = 4k
頁框數:2^32 / 2^12 = 2^20
頁表項大小:32位 / 8 = 4b
頁表總大小:2^20 * 4b = 4mb
一頁頁表包含的頁表項:4k / 4b = 1024
計算公式見linux2.6虛擬記憶體管理
5.為什麼在頁表項結構中記錄的實體地址是20位的?
6.線性位址 -> 實體地址
(1)暫存器cr3 -----> 頁目錄表的基址
(2)線性位址高10位 -----> 頁目錄表的偏移量
(3)(1)+(2)-----> 頁目錄表的某一項 -----> 頁表的基址
(4)線性位址中間10位 -----> 頁表的偏移量
(5)(3)+(4)-----> 頁表中的一項 -----> 頁面的的基址
(6)線性位址中的低12位 -----> 頁面中的偏移量
(7)(5)+(6)-----> 頁面中的某個位置,這個位置的位址就是所求的實體地址
(1)(3)(5)的位址都是指實體地址
14.為了減少位址轉換所需要的匯流排週期數,最近訪問的頁目錄和頁表會存放在tlb中
linux 0 12實驗環境
參考 linux核心完全剖析 基於0.12核心 linux 0.12目錄為修改過的源 其中加入了中文注釋,修改部分 使其能在現在的環境下編譯,並且支援gdb除錯。oslab為實驗目錄,切到oslab目錄下,執行該目錄下的run.sh指令碼即可執行linux0.12作業系統。1.1.1 方式一 可以選...
linux0 12之記憶體管理(1) 整體框架思路
記憶體管理一直是本人比較佩服linus的地方。為此先看linux0.11版本,又看了0.12版本,基本思路一樣,差異性會單獨列出來。本篇部落格只是梳理一下大體思路,具體函式分析,放在後面的部落格。一 從實模式到保護模式談起 1 簡單講實模式,是16位定址的訪問方式,保護模式是32位的訪問方式。在li...
Linux0 12初始化程式
1.main 1 設定系統的根檔案裝置號以及一些記憶體全域性變數 2 所有方面的硬體初始化工作 陷阱門 塊裝置 字元裝置 tty 開機啟動時間 排程程式 硬碟 軟碟機 3 開中斷,切換到任務0中執行 4 切換到使用者模式 5 建立乙個用於init 的子程序 6 迴圈執行pause 2.init 1 ...