Intel 80286 CPU


一、80286概述

INTEL 1982年推出80286芯片,該芯片相比8086和8088有了飛躍式發展,雖然它仍是16位結構,但在CPU內部含有13.4萬個晶體管,時鍾頻率由最初6MHz逐步提高到20MHz。內部和外部數據總線皆為16位,地址總線24位,可尋址內存大小達到16Mb。80286兼容了8086所有功能,並且是8086的向上兼容的微處理器,使8086的匯編語言程序可以不做任何修改地在80286上運行。同時80286的推出也是實模式和保護模式CPU的分水嶺。80286微處理器內部有4個功能部件,即地址部件AU,指令部件IU,執行部件EU和總線部件BU。這四個部件的並行操作,提高了吞吐率,加快了處理速度。

二、80286引腳及功能

80286具有68條外部引腳,可封裝程PGA或LCC兩種形式,它的多數引腳與8086相同,對此不在重復,下面介紹那些功能不同的引腳

A0~A23-----24位地址

D0~D15-----16位數據線

S1、S0 --系統狀態輸出;COD/INTA 代碼或中斷響應,輸出;M/IO  選擇存儲器或I/O端口

PEREQ 協處理器操作請求  PEACK 協處理器操作響應  BUSY  協處理器忙  ERROR 協處理器出錯

CAP 濾波電容輸入

VSS  系統的參考地

NC  內部沒有連接

三、80286結構

 

8086內部由執行單元和總線接口單元兩大部分組成。而80286恰好與此不同,它由總線單元、指令單元、執行單元及地址單元四大部分組成,這些打印可以同步地並行工作,實現流水線作業,避免傳統的順序處理方式,最大限度的發揮處理器性能。

地址單元

Adress Unit, AU 由地址偏移量加法器,段基址寄存器,段容量寄存器,段限檢查器和物理地址加法器等組成。同是還增加了對方式操作時的存儲器管理和保護機構。地址部件的職責是根據執行部件EU的請求,從EU的寄存器中取出尋址信息,根據尋址規則形成物理址,然后把物理地址送到總線部件BU的地址鎖存器和驅動器中,所長生的地址是物理存儲器地址或I/O設備的端口。在地址單元中,由偏移量加法器進行有效偏移地址計算時,要對其偏移量的段界限進行檢查,並且還要對段存取檢查,最后才進行從虛擬地址到物理地址的轉換。

總線單元

總線單元(Bus Unit, BU)由地址存儲器和驅動器、總線控制、數據收發器、預取器和指令預取隊列以及協處理器借口等組成,他是由CPU與系統之間的一個高速接口,其任務是使CPU以最高速率從外部取代碼和讀/寫數據。總線單元生成存儲器及IO請求所必須的地址、數據、指令信號,並執行CPU的所有總線操作。

指令單元

指令單元(Instruction Unit, IU)由指令譯碼器和已被譯碼的指令隊列組成,其功能是不斷的從總線部件BU的預取代碼隊列中取出指令,譯碼后放倒已被譯碼的指令隊列中,為執行部件EU執行指令做好准備。IU的引入進一步改善了流水操作,IU內部始終存放着3條已譯碼的指令,執行部件EU執行的就是這些已經譯碼指令。IU和EU的並行操作,縮短了執行指令的時間。

執行單元

執行單元(Execution Unit, EU)由算術邏輯部件ALU,控制器和微代碼只讀存儲器構成,EU負責執行指令,所執行的指令時從IU中所取來的已譯碼的指令。

四、80286的工作模式

4.1. 實地址模式
系統開機CPU復位時,自動進入實地址模式,A23~A20自動置為0,以 A19~A0尋址1M的存儲空間。也就是8086工作模式
4.2. 虛地址保護模式
當機器狀態字MSW的PE位置1時,進入保護模式。該模式主要針對在多任務機制中的存儲管理。 其有兩個方面的含義:
虛地址 —— 應用程序可以尋址一個比實際物理地址空間(16M)大得多的虛存空間(1024M)。
保護 —— 對存儲空間的(數據和程序的)保護,保障多任務機制。
保護模式下的尋址過程:為實現“虛地址”和“保護”兩大功能,系統必須提供一種“機制”或“平台”或一個“中間環節”來實施並完成上述兩大功能。而這個所謂“中間平台”的核心部分,就是傳說中的描述子 (Descriptor)。
描述子的作用:刻划存儲段的屬性(比如一個段的保護屬性)並提供虛地址到實地址轉化的信息。描述子的引入,使存儲器的構成就由單一的存儲段,轉變成了若干存儲段和若干存儲段的描述子構成,因此存儲器的組織形式就由實地址模式的單一的“存儲段”變為兩級結構,即:(1)一系列可變長的段(1 ~ 64K)、(2) 一系列的描述子。下圖即為虛地址保護模式下尋址的順序(從 ① 到 ④ )。

所有的描述子都有特定的功能,所有Intel對其划分成了若干類:
按描述子的作用范圍:局部描述子和全局描述子。
    ◆  局部描述子:刻划某一個任務所要訪問代碼段或數據段的描述子, 作用於該任務所要訪問的范圍。這些描述子的的組合構成一個描述子表, 稱為局部描述子表LDT。每個任務都有一個LDT。
    ◆  全局描述子:作用范圍涉及系統中所有的代碼段和數據段。所有這些描述子的組合構成一個全局描述子表GDT。整個系統只有一個GDT。
從描述子的功能來划分:
    ◆  數據/代碼段描述子:用於刻划一個存放數據或代碼的存儲段的各種屬性。比如該段的特權級、段限、讀寫屬性、並提供從虛地址到實地址轉換的信息。
    ◆  門描述子:實現不同任務間的轉換和同一任務的不同代碼段之間的轉移。
    ◆  任務狀態段描述子:系統中每一個任務都有一個任務狀態段(類似於操作系統中,進程相應的PCB),由於任務狀態段也是一個段,因此也有一個對應的描述子,稱為任務狀態段描述子。(門描述子和任務狀態段描述子統稱為系統描述子)
4.3. 描述子和選擇子
4.3.1、 數據/代碼段描述子
描述子是一個位於內存的數據結構, 用於描述所對應的(或所描述的)那個存儲段的訪問屬性。 這些屬性包括:一個存儲段可以被哪一特權級的任務訪問、該段的大小、該段的讀寫/可執行權限、該段的基地址。如下:

BASE23~16 BASE15~0 : 描述子所描述的那個段的段基地址。
Limit (段限): 該段的最后一個字節的偏移量,指明了該段的大小。
A: 該段是否被訪問,該段已被訪問過,則 A←1;該段未被訪問過,則 A←0。該位與操作系統的時鍾相結合,可進行段淘汰算法。
S: 描述子類型,1 代表數據代碼段描述子;0 代表系統描述子(如門描述子/任務狀態段描述子)
DPL: 共兩位,規定可以訪問該描述子所描述的那個段的任務的最低特權級。
P: 0 表示該描述子所描述的段不在物理空間;1 表示該描述子所描述的段在物理空間。
TYPE:由三位構成,即數據段(E, ED, W) 或代碼段(E, C, R)。這個TYPE對所描述的存儲段的具體屬性有着極其重要的意義。若該段為數據段,則 E=0,需要配合TYPE的ED和W。ED為0則段向上生長,所以要求偏移量小於Limit(段限);ED為1則段向下生長,所以要求偏移量大於Limit(段限);W為0則該數據段只能讀,不能寫;如果W為1則該數據段可讀、可寫。若該段為代碼段,則E=1,需要配合TYPE的C和R(ED變成了C,W變成了R)。C為0則非一致性代碼段訪問和被訪問代碼段特權級相同;C為1則一致性代碼段訪問和被訪問代碼段特權級可以不同;R為0則代碼段只能執行,不能讀;R為1代碼段可以執行,也可以讀。
綜上,根據描述子中的內容和定義, 將保護模式下的尋址過程描述為:

前面所敘述的局部描述子表LDT,全局描述子表GDT和中斷描述子表IDT,每個表都作為一個特殊的段存放在主存中。CPU提供三個寄存器存放描述子表的基地址,稱為描述子表基地址寄存器(24位),分別為:LDTR、GDTR、IDTR 寄存器。
4.3.2、選擇子功能(程序給出)
80286進入保護模式以后,那幾個段寄存器存放的再不是段基址了,而是一種用來定位段描述子的東西,叫做選擇子。選擇子主要扮演以下三個角色:
◆ 指明使用該選擇子的任務的特權級
◆ 指明所要訪問的描述子在描述子表中的偏移量(索引)
◆ 指明訪問全局描述子表還是訪問局部描述子

RPL: 請求特權級,用以表示使用該選擇子的任務的特權級。當前運行任務的特權級稱為當前特權級CPL。一般有: RPL= CPL
TI: 區分訪問全局描述子還是局部描述子:TI為0——訪問全局描述子;TI為1——訪問局部描述子。
偏移量D15~D3:所要訪問的描述子在描述子表中的偏移量。

4.3.3、 虛存空間的計算
◆ 總共可以訪問的描述子的數量為2^13=8K (個描述子)
◆ TI位區分了全局描述子或局部描述子,因此可以訪問的描述子的總數為:2×8K=16K
◆ 一個描述子對應一個存貯段,段的最大空間64K(2^16(limit)),因此可訪問的最大存儲空間(虛地址空間)為: 16K×64K=1000M=1G
由於在保護模式下訪存時,首先需要訪問選擇子,再得到描述子。為了加快訪問速度,避免二次訪存,即每次訪問存儲器時都要通過訪問描述子表而獲得對應的段描述子,從80286開始,每個段寄存器都配備了一個高速緩沖寄存器,稱之為段描述子高速緩沖寄存器(隱Cache)。當將一個選擇子裝入某個段寄存器時,處理器將自動從描述子表中取出相應的描述子,將描述子的信息保存到對應高速緩沖寄存器中。 以后對該段進行訪問時,處理器都使用對應高速緩沖寄存器中的描述子信息,從而不再從描述子表中取描述子。

隱Cache位於CPU內部,其內容隨着段寄存器的修改而被重新裝入,這種裝入操作對程序員透明。
假設一個32位的虛地址:005E0100H,其中選擇子為005EH=0000000001011110,低位補3個0,為0058H, 作為訪問LDT的偏移量;RPL=2(10);TI=1,訪問局部描述子。 每個描述子為8個字節, 意味着選擇子中的偏移量每增減一個單位, 應指向另一個描述子(偏移8個字節), 因此描述子在描述子表中偏移量的D2、D1、D0始終保持為0, 增減一個單位均在D3上進行,以保證偏移8字節。虛地址的偏移量為0100H。
我們假設 LDTR=100000H
第一步:將描述子表基地址LDTR+選擇子偏移量 =100000H+0058H=100058H
第二步:由物理地址100058H訪問並得到相應的描述子,檢查對該描述子訪問的合法性(比較CPL和DPL),假設DPL=3, 則CPL=RPL=2≤DPL(數值上),訪問是合法的。
第三步:由描述子中的訪問權字段(TYPE)檢查本次訪問的訪問權限,假設通過檢查,將虛地址中的偏移量(即0100H)與描述子中的段限Limit進行比較,以確定訪問是否越界,假設描述子中給出的段基地址位046000H, Limit=2000H, 有偏移量0100≤段限2000H,未越界。
第四步:形成物理地址046000+0100=046100H(24位),以此訪問存儲單元的物理地址,得到所需要的數據。
4.3.4、 門描述子
前面介紹了描述子和選擇子,80286還有一個重要的概念是門描述子,用於中斷控制和保護,以及任務之間的切換。注意,門描述子也是描述子的一種,但它並不用於描述某個存儲段的屬性,而是控制同一個任務內不同代碼段之間的轉移,或用於控制任務之間的切換。門描述子有四種類型:調用門、中斷門、自陷門、任務門。前三者是控制同一個任務內不同代碼段之間的轉移;后一個是控制任務之間的切換。


調用門 → 主程序調用子程序、轉移指令
中斷門 → 中斷引起的代碼段轉移
自陷門 → 自陷引起的代碼段轉移。與中斷門區別僅在於調用中斷門時要將IF置0, 調用自陷門則不管IF標志。
門描述子的格式如下:

對比描述子,我們可以看到,字計數(5位)僅調用門使用;若是任務門,則目標代碼段描述子的選擇子表示TSS描述子的選擇子;目標代碼段的偏移量對任務門無效。P為 0 表示該描述子內容無效;P為 1 表示該描述子內容有效;TYPE為4表示調用門、為5表示任務門、為6表示中斷、為7表示自陷門。對任務門:任務門與任務狀態段描述子一起, 控制任務之間的切換。
通過中斷門/自陷門實現代碼段轉移調用的過程:

通過調用門實現代碼段調用的過程:
 

先暫時把任務門放一放,這里說明幾點問題:
[1] 流程中的地址轉換過程,只要訪問描述子,都需要作的保護性檢查,比如僅當CPL≤DPL時轉換過程才能繼續往下進行。
[2] 為什么需要兩次訪問描述子(第一次是訪問門描述子,第二次是訪問目標代碼段描述子),就這個問題,我們來詳細說一下。在保護模式下, 同一任務的不同代碼段, 也有不同的特權級, 意味着主調代碼段與被調代碼段可能處於不同的特權級, 因此需要指明目標代碼段特權級, 並由此實現這同一任務的特權級的改變。為實現特權級的改變, 通過 “門”這樣一個描述子中提供目標代碼段描述子的選擇子, 該選擇子的低2位(RPL)指明目標代碼段的特權級。
[3] 中斷/自陷/調用門的使用場合:
◆ 同級特權級之間轉移:可以使用也可以不使用“門”。不使用意味着在指令中直接引用目標代碼段描述子的選擇子。
◆ 向更低特權級轉移:可以使用也可以不使用調用門, 但不管使用與否, 都只能發生在RET或IRET兩種情況。可以直接引用目標代碼段描述子的選擇子, 此時,該選擇子中的RPL將成為新的CPL2。
◆ 向更高級轉移:向更高特權級轉移, 必須“門”來實現。舉個例子,假設:源代碼段的特權級為CPL1;目標代碼段的特權級為CPL2;轉換過程如下圖所示:

我們可以看到,“門”為目標代碼段提供了保護,如果不允許低優先級的代碼來訪問,我可以把我的“門”給關閉,即不設置對應的“門”。
[4] 任務門的存放位置
任務門與中斷/自陷/調用門不一樣,可在LDT、GDT和IDT任何一個表中。如果將任務門放在IDT表中, 即可以通過訪問IDT表來訪問任務門, 則可以達到由於中斷而發生任務切換的目的。
4.3.5任務狀態段描述子
任務狀態段(Task State Segment 簡稱TSS)是Intel用於存放在任務被切換時刻的處理器現場的一個存儲段。注意,它是一個段,跟代碼段,數據段一樣,而且每個任務都有一個TSS。TSS中的內容隨着任務的執行不斷發生變化。 TSS的內容主要包括:該任務斷點各寄存器的內容,指向該任務的LDT選擇子, 任務在特權級0、1、2的堆棧指針以及指向前一個任務的TSS的選擇子等。

[1] 任務切換的引起。任務切換可由JMP、CALL指令或中斷(INT)指令,異常或外部中斷引起。JMP、CALL指令可以直接引用一個任務狀態段, 也可以先引用一個GDT或LDT中的任務門, 再由任務門的目標選擇子引用任務狀態段而實現任務轉換。中斷類的指令則必須先從IDT中引用任務門,再由任務門的目標選擇子引用狀態任務段而實現任務轉換。IRET指令通過引用IDT中的任務門而返回到原任務中去。
[2] 任務切換方式
直接切換 —— 直接引用目標任務狀態段描述子的選擇子
同特權級之間或向更低的特權級切換, 可采用直接切換。直接切換方式不使用任務門,直接引用任務狀態段描述子的選擇子來訪問TSS,以實現任務切換。如下圖:

間接切換 —— 從引用任務門開始, 由任務門提供目標任務狀態段描述子的選擇子。間接切換則可以向任何特權級切換。需要使用任務門。

五、80286的內存管理

80286有兩種工作模式,在實模式下,跟8086內存管理一樣,只能管理和尋址1MB物理內存。而在保護模式下,可以管理224=16MB物理內存。但在保護模式下,采用的32位的虛擬地址來訪問虛擬存儲器(是指程序可以占有的空間,它並不是內存芯片提供的物理地址空間,而是由大型外部存儲器提供的所謂虛擬地址空間),提供虛擬空間1GB。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM