一、Intel CPU物理結構
x86實模式
實模式
- 20位:1M內存空間
- 地址表示方式:段地址(16位):偏移地址(16位)
- 段地址4位對齊
保護模式
- 32位地址空間:4GB
- 支持多任務,任務切換,上下文保護
- 進程隔離:代碼和數據的安全
- 支持分段機制和分頁機制
- 新的寄存器
控制寄存器CR0
CR0的低5位組成機器狀態字(MSW)
- PE:0——實模式;1——保護模式
- MP:1(系統由數學協處理器時)
- EM:0(仿真協處理器)
- TS:任務切換,切換任務時自動設置
- PG:允許分頁
控制寄存器CR2
如果發生缺頁,引發缺頁的線性地址保護在CR2中
控制寄存器CR3
CR3包含頁目錄基址:高20位
x86 CPU架構下的三種地址
邏輯地址
線性地址
物理地址
- 第一級:段機制(邏輯地址到線性地址)
- 第二級:分頁機制(線性地址到物理地址)
二、Intel CPU段機制
段:一段連續內存
段描述符:描述段的屬性,8字節
- 段基址
- 段界限
- 段屬性
- 段類型
- 訪問該段所需最小特權級
- 是否在內存
描述符
段基址:32位(段基址1+段基址2)
段界限:20位(段界限1+段界限2)
描述符表
存放描述符的數組
長度:8字節的整數倍
類型
- 全局描述符表GDT(系統僅1個)
- 局部描述符表LDT(每個進程都有)
- 中斷描述符表IDT(中斷門描述符)
選擇子:選擇子用於選擇GDT/LDT中的某個描述符
構成:
- 索引域(13位)
- TI域(1位)
- 特權級別域(2位)
三、liunx頁面機制
硬件分頁
分頁
- Intel CPU的頁:4GB
- 通過設置CR0的PG位開啓分頁功能
- 分頁:線性地址->物理地址
- 在MMU中進行分頁
Linux三級頁表結構
二級頁表
爲了對小頁表進行管理和查找,另設一個頁目錄的表,記錄每個小頁表的存放位置(即頁框號)
頁目錄:一級頁表或外部頁表;小頁表:二級頁表
映射特點:
- 訪問數據需要三次訪問內存
- 頁目錄調入內存
- 頁表按需要調入主存
- 頁面、頁表、頁目錄的大小都剛好4K(佔一個頁框)
四、Linux對段的支持
Linux段機制
進程建立是,段機制對寄存器初始化
liunx四個範圍一樣的段:內核數據段、內核代碼段、用戶數據段、用戶代碼段
各段屬性不同
- 內核段特權級爲0
- 用戶段特權級爲3
作用:
利用段機制隔離用戶數據和系統數據
- 保留段的等級保護機制
簡化(避免)邏輯地址到線性地址轉換
- 可以直接將虛擬地址當做線性地址