微處理器管理模式(上)

1.微處理器的基本結構

總線接口單元(BIU)、中央處理單元(CPU)、存儲器管理單元(MMU)

2.CPU的工作模式

 2.1 實模式

  • 不支持硬件上的多任務切換;不能對內存進行分頁管理;不支持特權級。
  • 實模式下,就相當於一個16位的8086微處理器。
  • 採用類似8086的體系結構,尋址機制、中斷處理機制都相同。20根地址線,使用1MB地址空間,以及16位的“段首址:偏移”的地址格式。
  • DOS操作系統運行於實模式下,Windows、Linux操作系統運行於保護模式下。

 2.2 保護模式

  • 保護模式下,CPU支持內存分頁機制,提供段式、頁式內存管理功能,協助操作系統高效實現虛擬內存,支持多任務和特權級。
  • 工作在保護模式時,物理尋址空間高達4GB(80386/80486)或64GB(Pentium及以上CPU)。
  • 保護模式下有四個特權級:分別爲特權級0、特權級1、特權級2、特權級3。操作系統運行在特權級0,應用程序運行在特權級3。應用程序不能直接修改操作系統的程序與數據。

 2.3 虛擬8086模式(V86模式)

  • 32位的80x86給每個以V86模式運行的任務創造了一個與8086處理器十分相似的運行環境,以便運行DOS程序。
  • 既有保護功能,又能執行8086代碼的工作模式。

3.寄存器

  寄存器大概可分爲:程序可見寄存器(運行在保護模式或實模式下)、程序不可見/特殊寄存器(運行在保護模式下)。

 3.1 程序可見寄存器

  程序可見寄存器包括多個8位、16位、32位的寄存器。包括:通用寄存器,段寄存器,專用寄存器。彙編語言討論寄存器時,要明確寄存器的位數,這是不能又歧義的。
在這裏插入圖片描述

  3.1.1通用寄存器

  通用寄存器可以被程序訪問,用於傳遞和暫存數據,也可以參與算數邏輯運算,並保存運算結果。
16位cpu通用寄存器共有8個: AX, BX, CX, DX, BP, SP, SI, DI.
32位cpu通用寄存器共有8個: EAX, EBX, ECX, EDX, EBP, ESP, ESI, EDI

  • 數據寄存器 EAX, EBX, ECX, EDX (Data Register)
  • 指針寄存器 EBP, ESP (Pointer Register)
    注意:實模式使用SP(實模式是16位),保護模式使用ESP。實模式使用BP,保護模式使用EBP。
  • 變址寄存器 ESI, EDI (Index Register)

在這裏插入圖片描述

  3.1.2 段寄存器
  • 簡介:實模式下的存儲器採用分段管理方法組織,因此一個物理地址用段基址和偏移量表示。一個程序可以由多個段組成。
  • 段寄存器功能:段寄存器存放段基址。在實模式下存放段基地址的高16位,在保護模式下存放段選擇符。
  1. 代碼段寄存器CS(Code Segment):指定當前代碼段,代碼段中存放當前正在運行的程序段。在實模式下,段寄存器存放當前運行程序的段基址的高16位,在保護模式下,段寄存器存放當前正在運行程序的段選擇符。
  2. 堆棧段寄存器SS(Stack Segment):指定當前堆棧段。
    說明:堆棧段是在內存開闢的一塊特殊區域,其中的數據訪問原則是後進先出(LIFO),允許插入和刪除的一端叫做棧頂。IBM PC機中SP(或ESP)指向棧頂,SS指向堆棧段基地址。
  3. 數據段寄存器DS(Data Segment):指定當前運行程序所使用的數據段。
  4. 附加數據段寄存器ES(Extra Segment):指定當前運行程序所使用的附加數據段。
  5. 段寄存器FS和GS:指定當前運行程序的另外兩個存放數據的存儲段(只對80386以上機器有效)。
    說明:雖然DS、ES、FS、GS(甚至於CS、SS)所指定的段中都可以存放數據,但DS是主要的數據段寄存器,在默認情況下使用DS所指向段的數據。若要引用其它段中的數據,通常需要顯式說明。
  3.1.3 專用寄存器

主要包括指令指針寄存器和標誌寄存器。
(1)指令指針寄存器(IP/EIP/RIP)
  指令指針指向程序的下一條指令。這個寄存器作爲16位寄存器時,使用IP。32位時,使用EIP。64位時,使用RIP。

(2)堆棧指針寄存器(SP/ESP/RSP)
  堆棧指針,指向棧頂單元。SP歸類爲8個通用寄存器之一,因爲它可以像其他通用寄存器一樣使用。但實際上,SP指向堆棧頂部,應用程序不應該隨意修改,所以其性質又具有專用性,也可以認爲它是專用寄存器。

(3)標誌寄存器(FLAGS/EFLAGS/RFLAGS)
  標誌寄存器:被稱爲狀態寄存器,由運算結果特徵標誌和控制標誌組成。
在這裏插入圖片描述

運算結果特徵標誌:用於記錄程序中運行結果的特徵。8086~Pentium的標誌寄存器均含有CF、PF、AF、ZF、SF、OF這6位標誌。

  • CF:進位標誌,記錄運算結果的最高位向前產生的進位或借位。CF=1,有進位或借位。CF=0,無。
  • PF:奇偶標誌,記錄運算結果最低8位中含1的個數。可用於檢測數據傳送過程中是否發生錯誤。 PF=1 個數爲偶數,PF=0 個數爲奇數。
  • AF:輔助進位標誌,記錄運算結果最低4位向前產生的進位或借位。只有在執行十進制運算指令時才關心此位。AF=1 有進位或借位 ,AF=0無進位或借位
  • ZF:零標誌,記錄運算結果是否爲0。ZF=1 運算結果爲零,ZF=0 結果非零。
  • SF:符號標誌,記錄運算結果的符號。SF=1 運算結果爲負,SF=0 結果非負
  • OF:溢出標誌,記錄運算結果是否超出了機器所能表示的範圍。可用於檢測帶符號數運算時是否發生溢出。OF=1 運算結果超出範圍 ,OF=0
    結果未超出

控制標誌位:控制標誌控制處理器的操作,要通過專門的指令才能使控制標誌發生變化。

  • IF:中斷允許標誌。IF的控制只對外部可屏蔽中斷請求(INTR)起作用。IF=1/0 允許/禁止 CPU響應INTR。
  • DF:方向標誌。專服務於字符串操作指令,指示串操作時操作數地址的增減方向。DF=1/0 串操作時操作數地址爲自動減/增量。
  • TF:陷阱標誌。用於程序調試。TF=1/0 CPU處於單步/連續方式。

 3.2 保護模式下的寄存器

  3.2.1GDTR(全局描述符表寄存器)

在這裏插入圖片描述

  • 其最低16位是限長,給出全局描述符表(GDT)的字節大小(其值比GDT的長度少1)。
  • 其高32位是基址(線性地址),指出GDT在物理存儲器中存放的基地址。
  • LGDT指令可以將描述符表的起始位置裝入GDTR。GDT(全局描述符表)
  • 全局存儲器是一種共享系統資源,該存儲器可以被所有任務訪問。
  • 全局描述符表GDT是用來定義全局存儲器空間的一種機制,它用段描述符說明一個全局存儲器中的段,每個GDT最多含有8192個描述符(8192×8=64KB)。
  • GDT是位於存貯器中,用全局描述符表寄存器GDTR指出它的位置和大小,可軟件編程改變。
  • 全局描述符表只能有一個。
  3.2.2 IDTR(中斷描述符表寄存器)

在這裏插入圖片描述

  • 中斷描述符表寄存器48位。
  • 其最低16位是限長,給出中斷描述符表IDT的字節大小(其值比IDT的長度少1)
  • 其高32位是基址(線性地址),指出IDT在物理存儲器中存放的基地址。
  • IDT中保存的是中斷門描述符。每個門描述符包含8字節,IDT最多包含256個門描述符,因爲CPU最多支持256箇中斷。中斷門指出的是中斷服務程序的入口。

GDTR和IDTR的值必須在進入保護模式之前裝入。

  3.2.3 LDTR(局部描述符表寄存器)
  • 局部描述符表寄存器,16位寄存器! LDTR是一個16位的選擇符,包含LDT描述符在GDT中的索引,不直接指出LDT的位置和大小。
  • 保護模式下多任務的環境中每個任務都有一個局部描述符表LDT。
  • LDT只含有與系統中某一個任務相關的各個段的描述符。
  • 和所有任務有關的公用段的描述符放在全局描述符表GDT中。
  • 每一任務的代碼段、數據段、堆棧段與系統其他部分隔離開,達到保護的目的。
  3.2.4 段選擇符

  段寄存器在實模式、V86模式、保護模式下有不同的內容。實模式和V86模式下,她們的用法兼容16位CPU,即段寄存器保存20位段基址的高16位,段基址的低4位爲0。在保護模式下,段寄存器存放一個索引,稱爲段選擇符。由段選擇符從GDT或LDT中找到8個字節長的段描述符,從而確定關於這個段的全部描述信息。
在這裏插入圖片描述

  • RPL(Requestor Privilege Level):請求特權級,2位二進制數字,範圍爲0~3。00代表特權級0,01代表特權級1,10代表特權級2,11代表特權級3。請求特權級是將要訪問的段的特權級。
  • TI(Table Indicator):表指示符。爲0時,從GDT中選擇描述符;爲1時,從LDT中選擇描述符。
  • Index:索引。指出要訪問描述符在段描述符表中的順序號,Index佔13位。因此,順序號的範圍是0~8191。每個段描述符表(GDT或LDT)中最多有8192=213個描述符。
  3.2.5 任務寄存器

  任務寄存器(TR)在保護模式的任務切換機制中使用。在多任務環境下,每個任務都有屬於自己的狀態段。
  TR是16位的選擇符,它指出了TSS描述符在GDT中的順序號。TR的初值由軟件裝入,當執行任務切換指令時,TR內容自動修改。
  TSS中包含所啓動任務所必須的信息,任務狀態段TSS在存儲器的基址和限長由TSS描述符指出。

  3.2.6 控制寄存器

  80386中有四個系統控制寄存器:CR0~CR3。如圖2-6所示
在這裏插入圖片描述

  • CR0是,CR0中包含了6個預定義標誌,這裏就不再一一列出講解。
  • CR1是未定義的控制寄存器,供將來的處理器使用。
  • CR2是頁故障線性地址寄存器,保存最後一次出現頁故障的全32位線性地址。用於發生頁異常時報告出錯信息。
  • CR3是頁目錄基址寄存器,高20位用來保存頁目錄表的起始物理地址的高20位,頁目錄表總是放在以4K字節爲單位的存儲器邊界上,因此,它的地址的低12位總爲0,不起作用,即使寫上內容,也不會被理會。

4.內存管理

 4.1 實模式下分段管理

  實模式下,當存儲器採用分段管理後,一個內存單元地址要用段基址和偏移量兩個邏輯地址來描述。表示爲”段基址:偏移量“。
  對於實模式尋址,要求其段基址必定位在地址爲16的整數倍上。1MB空間的20位地址的第4位可以不表示處,而高16位就可以完全放入段寄存器。物理地址計算方法:10H*段基址+偏移量。(說白了,就是在16進制段基址後加一個0,然後在與偏移量相加)

 4.2 保護模式下分段管理

以CS:EIP爲例:

  • CS中存放了一個16位的段選擇符
  • EIP是32位偏移量
  • 16位段選擇符加上32位偏移量,總共是48位,其中段選擇符的2位RPL與虛擬地址的轉換無關,因此可以認爲虛擬地址是46位的,段選擇符的Index和TI佔14位,偏移量爲32位,
  • 虛擬地址空間爲246B=64TB

段基址=段的起始地址,段基址+限長(Limit)=段結束地址。
在這裏插入圖片描述
段描述符
在這裏插入圖片描述
段屬性位P、S、A等,這裏不再講解,有需要可以自行百度。

 4.3 頁式內存管理

  保護模式下的CPU支持分頁基機制,並且分頁管理是在分段管理機制的基礎上工作的。它將分段管理機制得到的線性地址轉換爲物理地址
  分頁機制的好處在於它可以把每個活動任務當前所必須的少量頁面放在內存中,而不必將整個段調入內存,從而提高了內存的使用效率。

  • 所有頁的長度固定爲4KB,頁與頁之間也沒有重疊。CPU將4GB的線性地址空間劃分成220頁。
  • 在Windows/Linux操作系統中,將段式內存管理和頁式內存管理結合起來,主要是依賴頁式內存管理來調度內存。
  • 線性地址到物理地址的映射
     —線性地址按頁(4KB)爲單位映射到物理地址。
     —每一個線性頁面都映射到一個物理頁面上。

在這裏插入圖片描述

  • 32位線性地址被劃分爲3個部分:
    在這裏插入圖片描述
    其中第1項是對頁目錄(Page Directory)的索引,第2項是對頁表(Page Tables)的索引,第3項是線性地址在頁面內的偏移。
  4.3.1 頁表項

  頁表項就是在分頁轉換時用到的頁表描述符頁描述符,都是32位,頁表項格式如圖2-24。
在這裏插入圖片描述

  • 頁目錄、頁表和物理頁的基地址的低12位全部爲0,定位在頁的邊界上。
  • 頁表項的低12位提供保護功能和統計信息。U/S位、R/W位、P位實現頁保護機制。A、D、AVL訪問控制。

在這裏插入圖片描述

  • 頁表項的高20位基址,給出了物理頁面的基地址的高20位。
  • 物理頁面的基地址再加上線性地址中的12位字節的頁內偏移量,得到物理地址。

5.總結

  瞭解微處理器管理模式是進行內核編程的前提。文章總結了微處理器的一些管理模式,包括CPU工作模式、寄存器、內存管理等。後面還會介紹任務和保護等相關的知識,敬請關注:微處理器管理模式(下)。
     在這裏插入圖片描述

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