80486保护模式存储管理
80486微處理器有三種存儲器地址空間:虛擬地址(邏輯地址)空間、線性地址空間和物理地址空間。
80486CPU工作在保護模式時,使用46位虛擬地址,虛擬地址空間最大可達64TB(字節),采用分段分頁管理機制;線性地址空間是一個不分段的、連續的地址空間,線性地址為32位,所以線性地址空間(即段的最大長度)可達4GB(字節),段數最多可達個,頁面大小固定在4KB;物理地址空間的大小同線性地址空間。用戶在程序中所使用的地址都是由“段選擇符”和“偏移量”組成的邏輯地址,程序在系統中運行時,由存儲管理機制把邏輯地址轉換成物理地址。
在80486微處理器中集成有存儲管理部件MMU,MMU采用了分段機制和分頁機制以實現兩級“虛擬—物理”地址的轉換,如圖5.39所示。
圖5.39 兩級“虛擬—物理”地址轉換
1.分段分頁存儲管理
80486微處理器的分段分頁存儲器工作原理與上節介紹的相同:首先將虛擬地址空間分成若干大小不等的邏輯段,邏輯地址由間接指向段基址的16位段選擇符和32位段內偏移量兩部分組成,并由分段機制將48位邏輯地址轉換為32位線性地址,然后再將線性地址空間等分為固定大小的若干頁,將線性地址用頁基址和頁內偏移量表示,以頁為單位進行地址映射,并由分頁機制將32位線性地址轉換為32位物理地址。
虛擬地址、線性地址和物理地址的關系如圖5.40所示。
圖5.40 虛擬地址、線性地址和物理地址的關系
?
2.分段方式中的地址轉換
分段機制實現邏輯地址到線性地址的轉換。它把用戶程序中的64TB的虛擬地址空間分成1~4GB大小不等的存儲分段,并且有實施段間隔離與保護的硬件機構。
分段方式中的地址轉換原理如圖5.41虛線左側部分所示。程序中的邏輯地址由16位段選擇符(通過段選擇符可獲得32位段基址)和32位段內偏移量構成。段選擇符的格式如圖5.42所示。邏輯地址中的16位段選擇符在程序執行時裝載到相應的段寄存器CS, DS, SS, ES, GS, FS中,用來選擇邏輯地址空間中的一個特定段,32位偏移量由指令中的尋址方式給出。段選擇符長16位:13位索引(Index)、1位表選擇位(TI)和2位請求特權級(RPL)位。其中,請求特權級不用于段選擇,即16位中只有14位用于段選擇,可尋址214個邏輯段,加上每個段最大可達4GB,使32位微處理器的虛擬存儲空間可達64TB。
由程序給出的邏輯地址通過描述符表中的描述符數組進行轉換。邏輯地址在段寄存器CS, DS, SS, ES, GS, FS中的選擇符用于在全局描述符表(GDT)或局部描述符表(LDT)中索引段描述符。每當段選擇符裝入段寄存器時,由索引指向的段描述符自動從TI位所選定的GDT或LDT中取出,段描述符中的32位段基址與邏輯地址中的32位偏移量相加即可得到32位線性地址。若不啟用分頁機制(控制寄存器CR0的PG=0)時,線性地址就是物理地址。
Index:13位長的選擇符變址(索引)值,據此值到GDT/LDT中查找對應的描述符。
圖5.41 地址空間轉換
圖5.42 段選擇符的格式
TI(table index):1位長的表指示符。
當TI=1時,在LDT中;當TI=0時,在GDT中。
PRL(request privilege level):段選擇符的2位長的請求特權級位。
在保護方式下,80486微處理器常用三類描述符,分別是全局描述符、局部描述符和中斷描述符,用來描述程序中所使用的各種存儲段的特性,這些描述符分別存放在三種段描述符表中,分別是全局描述符表、局部描述符表和中斷描述符表。所有這些表都是變長的數組,其長度在8B到64KB之間,存放在內存中,每個表最多可以容納8 192()個8B的段描述符。用戶程序使用的虛擬存儲空間由全局描述符表和局部描述符表定義的存儲分段組成。每個段的最大可尋址存儲空間是4GB(),所以處理器為用戶提供了2××4GB=64TB()的虛擬地址空間。
全局描述符表(GDT)定義了能被系統中所有任務公用的存儲分段,可以避免對同一系統服務程序不必要的重復定義與存儲,GDT中包含了除中斷服務程序所在段以外的所有類型存儲分段的描述符。通常在GDT中包含了操作系統使用的代碼段、數據段、任務狀態及系統中各個LDT所在段的段描述符,一個系統只能有一個GDT。
局部描述符表(LDT)包含了與某個任務相關聯的段描述符,在設計操作系統時,通常每個任務有一個獨立的LDT。LDT提供了將一個任務的代碼段、數據段與操作系統的其余部分相隔離的機制。
中斷描述符表(IDT)最多包含256個中斷服務程序位置的描述符。為容納Intel保留的32個中斷描述符,IDT的長度至少應有256個字節。系統所使用的每種類型的中斷在IDT中必須有一個描述符表項,IDT的表項通過中斷指令、外部中斷和異常事件來訪問。
GDT在內存中的位置及其長度由全局描述符表寄存器(GDTR)給出。這是一個48位寄存器,其中高32位存放了GDT的基地址,低16位存放了GDT的長度(段限),GDTR同GDT的關系如圖5.43所示。
圖5.43 GDTR與GDT的關系
同樣,IDT在內存中的位置及其長度也由一個中斷描述符表寄存器(IDTR)給出,IDTR與IDT的關系如圖5.44所示。
圖5.44 IDTR與IDT的關系
LDT的定位與GDT不同,LDT的段基址和段限由LDT描述符表示,該描述符同一般的段描述符一樣存放在全局描述符表中,因此首先要從GDT中找到LDT描述符。80486微處理器中有一個局部描述符表寄存器(LDTR),這是一個16位寄存器,LDTR中存放一個稱為“段選擇符”的16位數,段選擇符用來在GDT中尋找LDT描述符,LDTR與LDT的關系如圖5.45所示。
圖5.45 LDTR與LDT的關系
?
3.分頁方式中的地址轉換
分頁機制實現了線性地址到物理地址的轉換。它把用戶的線性地址空間等分為固定大小的塊,每一塊稱為一頁,線性地址以“頁號—頁內地址”對表示。系統也把存儲器物理空間等分為同樣大小、位置固定的塊,每一物理存儲塊稱為“頁面”,存儲空間的物理地址也以“頁面號—頁內地址”對表示。為實現頁面管理,系統為每個作業建立一張頁面對照表——頁表,頁表內記錄了每個線性地址塊的頁號和為其分配的物理存儲塊的頁面號,當控制寄存器CR0的PG位置1時,就啟用了分頁存儲器管理機制,它自動地把線性地址空間中的任何一頁映射到物理空間的一頁,將線性地址轉換成物理地址。
為了節省頁表所占的內存空間,32位微處理器的MMU分頁存儲管理采用兩級頁表轉換技術:第一級用個表項構成頁目錄表,每項4個字節,共有1 024項,占4KB內存,其物理基地址由CR3控制寄存器提供;第二級也是由個表項構成頁表,每項也是4個字節,最多1 024個頁表,占4KB內存。這樣,兩級頁表組合起來只占8KB內存,即可描述220個表項。
頁目錄項和頁表項分別說明對應頁表和頁的屬性,其格式相同,如圖5.46所示。
D31~D12給出頁表或頁面的20位地址,其余12位是標志位或保護信息,定義如下。
D(dirty):寫標志,僅頁表項中的D位有意義,頁目錄項中的D位未用。當進行頁面寫操作時,D位由硬件置1,并一直保持,直到該頁被調出內存。當某頁要調出內存時,首先檢查D位,若D=1,則把該頁內容復制到外存相應位置,以刷新外存上的該頁內容。
A(address):訪問標志,說明該目錄項或頁表項是否在近期被訪問過。當頁面被訪問時,A位由硬件置1。若需要調出一些頁面時,頁面調度程序只需檢查A位即可知各頁的使用情況,從而決定調出哪些頁。
PCD(page-level cache disable):頁cache禁止位,用于分頁高速緩沖存儲控制。若PCD=1,內部cache被禁止使用。
PWT(page-level writes transparent):通寫方式位,用于cache寫操作。PWT只對裝有片外cache的系統起作用。PWT=1時,片外cache采用通寫方式;PWT=0時,片外cache采用回寫方式。
U/S(user/superisor,用戶/管理員)和R/W(read/write,讀/寫):表示頁面的保護屬性,用于對單獨的頁目錄或頁面項所指定頁表的所有頁面提供用戶/管理員操作和讀/寫保護。
P(present):存在位,決定該頁是否要用地址轉換。若P=1,表示要用地址轉換,即頁表或頁面在存儲器中。
AVAIL(available):用戶使用位,供系統設計人員使用。
為了與兩級頁表結構相適應,將32位線性地址分成頁目錄號(10位)、頁號(10位)和頁內偏移量(12位)三個字段。通過依次訪問頁目錄表和頁表,即可找到與線性地址相對應的物理地址所在的頁號。再根據頁內偏移量,即可求得32位物理地址。分頁地址轉換原理如圖5.41虛線右側部分所示,實現過程如下。
?、?由控制寄存器CR3中提供的頁目錄表的高20位基地址和線性地址中高10位(A31~A22)頁目錄號乘以4相加,指向頁目錄項。
?、?由頁目錄項中提供的高20位頁表的物理基地址和線性地址中間10位(A21~A12)頁號乘以4相加,指向頁表項。
?、?由頁表項找到對應物理頁的基地址,此物理頁基地址的高20位為物理頁號,這樣,線性地址高20位表示的線性頁號就轉換為物理地址高20位表示的物理頁號。
④ 由于不管是線性地址空間中的邏輯頁還是物理地址空間中的物理頁,都要與4KB的頁邊界對準,因此,32位線性地址中的最低12位偏移地址就不必再進行轉換便可直接使用。所以最后,物理頁號與線性地址中低12位(A11~A0)頁內偏移量合成為32位物理地址。
由上述過程可知,頁轉換只是對線性地址高20位進行轉換,即把線性頁號轉換成物理頁號,頁內偏移量對兩者都是相同的。在線性空間內,相鄰頁經過頁轉換后可能分散在物理空間不同區域,而線性空間不相鄰頁也可能成為物理空間相鄰頁。
采用兩級頁表轉換技術固然具有節省內存的優點,但多訪問一級頁表會使地址轉換速度降低。為此,在32位CPU的分頁部件中,設置了一個轉換后援緩沖器TLB。TLB是一個四路組相連高速緩沖存儲器,其間保存了當前最可能訪問的32個頁表項,構成一個內存頁表的局部副本。這種分頁存儲管理機制有效地加速了從線性地址到物理地址的轉換過程。
圖5.47 TLB的結構及地址變換原理
TLB的結構及地址變換原理如圖5.47所示。TLB由兩個字段組成:頁表數據字段中存放頁表項;標記字段中存放與其頁表項對應的線性地址的高20位(位31~12,線性頁號)。TLB中共可保存32個頁表項。當頁部件將線性地址變換為物理地址時,先用TLB的標記字段來搜索線性地址位31~12。若搜索到,說明TLB命中,則使用TLB中對應的頁表數據字段作為頁物理地址位31~12(物理頁號);若未搜索到,說明TLB未命中,這時才經內存的二級頁表結構去尋找物理頁號(頁表項),同時將它復制到TLB中。如果復制時TLB已滿,則按某種算法進行置換。
32位微處理器的分頁機制和分段機制都使用駐留在內存中的各種表格固定各自的轉換函數,這些表格具有彼此獨立的表結構,段表存儲在線性地址空間,頁表存儲在物理地址空間。這些存儲在存儲器中的表格只允許由操作系統進行訪問,應用程序不能對其進行修改。操作系統為每一任務維護一個不同的轉換表格集,使每個任務可使用的地址跨越整個虛擬地址空間,這樣不僅使每個任務具有不同的虛擬地址空間,并且使任務之間可以彼此隔離。
?
4.存儲保護機制
80486微處理器支持兩個主要的保護機制:一個是通過給每個任務分配不同的虛擬地址空間,使任務之間完全隔離,每個任務有不同的“虛擬地址—物理地址”的轉換映射;另一個是任務內的保護機制操作,保護操作系統存儲段及處理器寄存器,使其不能被其他應用程序破壞。
??? 在存儲器的虛擬地址空間中僅由一個任務占有的虛擬地址空間部分,即不可被其他任務共享的虛擬地址部分,稱為“局部地址空間”。操作系統存儲在全局地址空間中,使操作系統由所有任務共享,并且允許每一任務對其進行訪問,而且仍然保護了操作系統,使其不被應用程序破壞。
圖5.48 80486微處理器支持四級保護的特權級層次結構
80486微處理器支持四級保護的特權級(privilege level),如圖5.48所示。特權級標號為0~3,其0級為最高特權級,處于最內層,3級為最低特權級,處于最外層。每個存儲段都同一個特權級相聯系,只有足夠級別的程序才可以對相應的段進行訪問。在運行程序時,微處理器是從CS寄存器尋址的段中取出指令并執行指令的,當前活躍代碼段的特權級稱為“當前特權級”(current privilege level,CPL),CPL確定哪些段可由程序訪問。處理器的保護機制規定,對給定CPL的執行程序,只允許訪問同一級別或外層級別的數據段,若試圖訪問內層級別的數據段則屬于非法操作,將產生一個異常,向操作系統報告這一違反特權規則的操作。
特權級的典型用法是:把操作系統核心放在0級,操作系統的其余部分——系統服務程序放在1級,應用系統服務程序(操作系統擴展)——中間軟件放在2級,應用程序放在3級。這樣,一個任務的操作系統程序、中斷服務程序和其他系統軟件因處于不同的特權層而得到保護,因而可與應用程序在同一地址空間內共處而不發生越權操作。
總結
以上是生活随笔為你收集整理的80486保护模式存储管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保护模式及其编程——8086系统寄存器和
- 下一篇: 实地址模式与保护模式下的中断与异常处理