存儲管理——Intel CPU與Linux內存管理

一、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

作用:

利用段機制隔離用戶數據和系統數據

  • 保留段的等級保護機制

簡化(避免)邏輯地址到線性地址轉換

  • 可以直接將虛擬地址當做線性地址

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章