实模式与保护模式详解二:地址映射
論8086如何尋址1MB物理空間
實模式下的地址映射
在實模式下,32CPU與8086一樣,只能尋址1MB物理儲存空間并采用分段使用的方式,每段大小不超多64KB,段首地址和段內偏移地址都是用16位表示。這樣1MB的儲存空間最少可分為16段,每段最多64KB。
在某一時刻,CPU可以訪問6個段:代碼段,數據段,堆棧段,和三個附加數據段,對應的段寄存器分別為CS,DS,SS,ES,FS,GS
在實模式下,邏輯地址與物理地址是一一對應的,用戶程序與系統程序是在同一狀態下的
注意:
保護模式下的地址映射
特權級
保護模式下建立了四個特權級,0級最高,3級最低,程序中的每個段都有一個特權級,任何時候,CPU都在同一個特權級下運行,成為當前特權級。低特權級的程序無法訪問高特權級的數據。
0級:操作系統內核
1級:操作系統服務程序
2級:系統擴展程序
3級:應用程序
描述符
在保護模式下,每個段的信息遠遠多于實模式下的地址方式,每個段中的信息除了段基址外,還有段的大小,段的類型,特權級,是否被執行過,是否能被讀/寫等多種信息。系統通過8字節的描述符來保存這些信息。
屬性的描述
P:Present,是否在內存中【1在】
G:段的粒度(段長計量單位)
G=0, 字節 (段最長1M)
G=1 ,頁面4KB(段最長4G)
DPL: Descriptor Privilege Level 描述符特權級別
S: 描述符的類型
【數據段/代碼段S=1】
【系統描述符/門描述符S=0】
TYPE : 描述段的存取類型或類型(與S有關)
【讀,寫,擴展,訪問標志等及其組合】
描述符表
描述符表是描述符的集合,存放在指定的一段內存中,有三種描述符表:局部描述符表,全局描述符表和中斷描述符表
局部描述符表:
每一個執行程序都有一個局部描述符表LDT,包含該程序中各段的描述符,一個LDT就是一個系統段,最大可為64KB,存放8192個描述符,由于每個程序有自己的局部描述符表,用各自的代碼和數據,所以由此實現程序之間的隔離
全局描述符表:
只有一個,最大可謂64KB,存放8192個描述符,包含有系統各任務共享段的描述符,如操作系統所使用的代碼段,數據段,堆棧段的描述符,還有所有系統段的描述符,如各個任務LDT段的描述符
為了支持多任務來回切換,系統中的每一個任務都建有一個任務狀態段TSS,TSS也屬于系統段,該段的描述符也竄訪在全局描述符表中。TSS用于保存任務掛起時現場的全部寄存器,堆棧,地址映射,鏈接狀態,I/O允許圖首址等完整印象
中斷描述符表:
中斷描述符表IDT最大可為2KB,含有指向多大256個中斷服務程序的位置的描述符
段選擇符和描述符寄存器
保護模式下,段寄存器中不在保存段的開始地址,而是指出從描述符表中選擇相應段描述符的方式,段寄存器中此時的內容稱作段選擇符(選擇子)
選擇子(Selector):
選擇子用于選擇GDT/LDT中的某個描述符。
構成 :
- 索引域(INDEX):13位
- TI域(Table Indicator):1位
- 特權級別域(Request Privilege Level):2位
索引域(INDEX)
給出段描述符在GDT或LDT中的位置。
TI域(Table Indicator)
TI=1,從LDT中選擇相應描述符, TI=0,從GDT中選擇描述符。
特權級別域(Request Privilege Level) 請求者最低特權級的限制。 只有請求者特權級高于或等于DPL,對應段才能被存 取,實現段的保護。
保護模式下物理地址的形成
總結
以上是生活随笔為你收集整理的实模式与保护模式详解二:地址映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实模式与保护模式详解一:寄存器
- 下一篇: 实模式与保护模式详解三:寻址方式