一、分段存儲管理
Pentium支持分段存儲管理、分頁存儲管理和段頁式存儲管理。
1.1 分段存儲管理的基本思想
一個程序由多個模塊組成。
每一個模塊都是一個特定功能的獨立的程序段。
段式管理:把主存按段分配的存儲管理方式。
程序模塊→段→段描述符→段描述符表一段描述符表寄存器
1.2 分段存儲管理工作過程
每一個程序段都會有一個段描述符
1.3 虛擬地址和虛擬地址空間
Pentium 微處理機在保護模式下的存儲器管理單元使用48位的存儲器指針。
高16位為段選擇符,其中INDEX字段是索引字段,即可以從 2 13 2^{13} 213個段描述符的段描述符表中選出一個段描述符
TI為段描述符表選擇字段,來說明是GDT還是LDT(即全局描述符表還是局部描述符表)
RPL則是請求特權級字段。
因此,Pentium 的實際尋址范圍是46位(去掉了特權級字段)
1.4 虛實地址轉換
轉換過程:
段選擇符 -> 段描述符表 -> 段描述符 -> 段基址 -> 偏移量 -> 物理地址
1.5 段描述符
段描述符:用于描述段的基本信息。
由8個字節組成。
段描述符保存段的屬性、段的大小、段在存儲器中的位置以及控制和狀態信息。
分類如下:
1.5.1 程序段描述符
基地址:32位,規定一個段在4GB物理地址空間中的起始位置。
段界限:20位,決定了段的長度,該字段的值的單位出“G”位決定。
“G”位稱作粒度位,用來確定段界限所使用的長度單位
-
G = 0時,單位為一個字節
-
G = 1時,單位為4KB
分類S:區分是系統段描述符還是非系統段述符。
- 當S=0時,是系統段描述符
- 當S=1時,是非系統段描述符。
段存在位P:該段是否在內存中。
- 當P=1時,表示該段在內存中。
- 當P=0時,表示該段不在內存中。
系統可用位AVL:表示系統軟件是否可用本段。
- 當AVL=1時,表示系統軟件可用本段。
- 當AVL=0時,表示系統軟件不能用本段。
特權級DPL:定義段的特權級。
- 2位,有4個特權級:00、01、10、11,稱作0級、1級、2級、3級。0級的特權最高,1級次之,3級的特權最低。
- 用這個字段定義的特權級去控制對這個段的訪問。
?
D位/B位:32/16大小選擇。D/B=1,選32位;D/B=0,選16位。
- 在代碼段描述符中,指示操作數長度和有效地址長度,D位。
- 在堆棧段描述符中,指示ESP或SP,B位。
- 在數據段描述符中,指示操作數長度。B位
類型TYPE:在不同的段描述符中有不同的格式。
數據段或堆棧段描述符中的類型TYPE字段
E可執行位:當E=0時,是數據段或堆棧段。
ED擴展方向位:當ED=0時,向上擴展(地址增加方向),通常用于數據段。
當ED=1時,向下擴展(地址減小方向),通常用于堆棧段。
W可寫位:當W=0時,不允許寫入。當w=1時,允許寫入
A訪問位:當A=0時,該段尚未被訪問。當A=1時,該段已被訪問
代碼段描述符中的類型TYPE字段
E可執行位:當E=1時,是代碼段。
C一致性位:一致性檢查就是采用特權級進行控制。C-0,表示非一致性代碼段,此時忽視段描述符的特權值。C=1,表示一致性代碼段,需要進行特權級檢查。
R可讀位:當R=0時,不允許讀。當R=1時,允許讀。
A訪問位:當A=0時,該段尚未被訪問;當A=1時,該段已被訪問
1.5.2 系統段描述符
1.6 門描述符
門:一種關卡,用來控制從一段程序到另一段程序或從一個任務到另一個任務的轉移。
門描述符:用于控制轉入目標代碼段的入口點。
門描述符包括:調用門、任務門、中斷門和陷阱門。
調用門用于改變特權級別。
任務門用于任務切換。
中斷門和陷阱門用于確定中斷服務程序
段選擇符:16位,指出段描述符位置,索引值。
任務門送TR,其他門則送CS。
類型TYPE:確定門的分類:調用門、任務門、中斷門和陷阱門。
類型TYPE字段的規則與系統段描述符中的類型TYPE字段的格式完全相同。
P字段:表示描述符內容是否有效。
當P=0時,表示描述符內容無效。
當P=1時,表示描述符內容有效。
1.7 全局描述符表及寄存器
全局描述符表GDT:保存系統使用、各任務共享的段描述符,只有一個
全局描述符表寄存器GDTR:指定了GDT的起始地址
48位=32位基地址+16位界限
GDT保存的描述符類型:除中斷門、陷阱門外的各類描述符。
GDT尋址可歸納為:
1.段選擇符 * 8 + GDTR基址 = 段描述符地址
2.段描述符內容(包括基址) → 相應段cache
3.cache中段基址 + 虛地址偏移量 = 物理地址
由GDTR確定GDT存儲位置和界限
1.8 局部描述符表及寄存器
- 局部描述符表LDT:保存某任務使用的段描述符,每個任務一個。
- LDTR:指出LDT的基址
- 16位選擇符 + (32位基址 + 20位界限 + 12位屬性)
- LDTR的段選擇符確定LDT描述符在GDT中的位置
- 如果LDTR中裝入了段選擇符,處理器自動地將相應的LDT描述符從全局描述符表GDT中讀出來,并裝入LDTR中的cache部分,其中包括LDT基址,從而為當前任務創建一個LDT
1.9 中斷描述符表及寄存器
- 中斷描述符表IDT:保存門描述符,整個系統一個,包括中斷門、陷阱門、任務門(通常沒有調用門)
- 門提供了一種將程序控制轉移到中斷服務程序入口的手段。每個門8個字節,包含服務程序的屬性和起始地址。
- 中斷描述符表寄存器IDTR:
- 48位 = 32位基地址 + 16位界限
- IDT按字節計算大小,IDT最大可達64KB(但是Pentium微處理機只能夠支持256個中斷和異常,最多占用2KB)。
- 中斷描述符表IDT中存放的描述符類型均是門描述符。
1.10 任務狀態段及寄存器
- 任務狀態段TSS:保存現有任務的機器狀態(指處理器的工作環境,比如各個寄存器的狀態)及其任務間的關聯信息。
- 沒有數據和代碼,每個任務一個。
-
(1)返回鏈BACK LINK:是一個段選擇符,把前一個任務的TSS描述符的段選擇符(即原來TR中的16位可見部分)轉入新任務TSS中,供任務返回時使用。
- 比如我們平時從QQ切換到vscode,又從vscode切換回QQ,其實就是BACK LINK保存了QQ的段選擇符
-
(2)由返回指令IRET將其裝入TR寄存器,從而回到前一個TSS
-
寄存器保存區域,用于保存通用寄存器、段寄存器、指令指針和標志寄存器。
-
每當任務切換時,處理器當前所有寄存器的內容都被保存在TSS的這些單元中,然后又將新任務TSS所對應的單元內容裝入所有的寄存器。
1.11 段選擇符及寄存器
在實模式下,段寄存器的16位值是基地址。
在保護模式下,每一個段寄存器由兩部分組成:
可見部分 不可見部分(高速緩存)
16位 64位
段選擇符
選擇符分為3個字段:
INDEX TI RPL
索引字段 描述符表選擇字段 請求特權級字段
13位 1位 2位
-
索引值乘以8就是相對于GDT或LDT首址的偏移量,這個偏移量再加上描述符表的基地址(來自全局描述符表寄存器GDTR,或者局部描述符表寄存器就是段描述符在LDTR)描述符表中的地址。
-
當TI=0時,選擇的是全局描述符表GDT。
-
當TI=1時,選擇的是局部描述符表LDT。
-
有4個特權級,00、01、10、11,稱作0級、1級、2級、3級
-
0級的特權最高,1級次之,3級的特權最低。
段選擇符裝入段寄存器的操作
裝入段寄存器的指令有2類:
**直接的裝段寄存器指令:**例如MOV DS,AX等。
**隱含的裝段寄存器指令:**例如CALL FAR SUB1,JMP FAR AA6等。
二、保護模式下的訪問操作與保護機制
2.1 保護機制的分類
1.任務間存儲空間的保護
任務間的保護是通過每一個任務所專用的LDT描述符實現的。根據LDT描述符,每個任務都有它特定的虛擬空間,因而避免各任務之間的干擾,起到隔離、保護的作用。
2.段屬性和界限的保護
當段寄存器進行加載時,需要進行段存在性檢查以及段限檢查
在段描述符中給出了20位的段界限值,每當產生一個邏輯地址時,都要比較偏移量和段限值。一旦偏移地址大于段限值,CPU就終止執行命令,并發出越限異常。由此限制每個程序段只在自己的程序、數據段內運行,不相互干擾。
最后,還要對該段的讀寫權限進行檢查
3.特權級與特權級保護
特權級與特權保護是為了支持多用戶多任務操作系統,使系統程序和用戶的任務程序之間、各任務程序之間五不干擾而采取的保護措施。
3種形式的特權管理:
(1)當前特權級CPL
- CPL是當前正在執行的代碼段所具有的訪問特權級。
- 每一項任務都是在其代碼段描述符所確定的特權級中運行。當前特權級就是任務執行時所處的特權級。例如,一個正在運行的任務的CPL,就是其描述符中訪問權限字節的DPL。當前特權級的值一般就是代碼段描述符中的DPL。
(2)描述符特權級DPL
DPL是段被訪問的特權級,保存在該段的段描述符的特權級DPL位。
(3)請求特權級RPL
RPL是新裝入段寄存器的段選擇符的特權級,存放在段選擇符的最低兩位
特權管理規定:特權級為P的段中存儲的數據,只能由特權級高于或等于P的段中運行的程序使用;特權級為P的代碼段/過程,只能由在低于或等于P的特權級下執行的任務調用。
為記憶方便,特權級規則可以不嚴格地歸納為:
- 高特權級可以訪問低(等于)特權級的數據;
- 低特權級可以調用高(等于)特權級的程序。
2.2 數據段訪問
2.3 分頁存儲管理
分頁是虛擬存儲器多任務操作系統另一種存儲器管理方法。**段的長度是可變的,而頁的長度是固定的,**比如每頁4KB。
分頁:將程序分成若干個大小相同的頁,各頁與程序的邏輯結構沒有直接的關系。
Pentium微處理器采用二級頁表方法對頁面進行管理,第1級頁表稱作頁目錄,頁目錄中的頁目錄項指明第2級頁表中各頁表的基址。
頁目錄基地址寄存器CR3:保存頁目錄的基地址,該基地址起始于任意4KB的邊界。
頁目錄:由頁目錄項組成,頁目錄項包含下一級頁表的基址和有關頁表的信息。Pentium微處理器中,頁目錄最多包含1024個頁目錄項,每個頁目錄項為4個字節,所以,頁目錄白身占用一個4KB的頁面(存儲頁)
頁表:由頁表項組成,頁表項包含頁面(存儲頁)的基和有關頁面的信息。Pentium微處理器中,頁表最多包含1024個頁表項,每個頁表項為4個字節,所以,頁表自身也占用一個4KB的頁面(存儲頁)。
2.4 段頁式存儲管理尋址過程
地址寄存器CR3**:保存頁目錄的基地址,該基地址起始于任意4KB的邊界。
頁目錄:由頁目錄項組成,頁目錄項包含下一級頁表的基址和有關頁表的信息。Pentium微處理器中,頁目錄最多包含1024個頁目錄項,每個頁目錄項為4個字節,所以,頁目錄白身占用一個4KB的頁面(存儲頁)
頁表:由頁表項組成,頁表項包含頁面(存儲頁)的基和有關頁面的信息。Pentium微處理器中,頁表最多包含1024個頁表項,每個頁表項為4個字節,所以,頁表自身也占用一個4KB的頁面(存儲頁)。
2.4 段頁式存儲管理尋址過程
[外鏈圖片轉存中…(img-kSzrAPLh-1719744231622)]