微機接口技術是採用硬件和軟件相結合的方法,研究微處理器如何與「外部世界」進行最佳聯結,以實現CPU與「外部世界」之間的高效可靠的信息交換的一門技術。(這裏所說的「外部世界」是指除CPU之外的全部設備和電路)程序員
微機接口技術包括信息類的多種技術(計算機技術、通訊技術、電子技術、控制技術等)和計算機技術的多門課程(計算機組成原理、微機原理、程序設計語言、設備驅動程序及操做系統)知識的應用。編程
接口技術的內容可分爲:上層(用戶層)和接口的底層兩個層次。windows
上層的負責的是接口用戶應用程序的編寫,包括MS-DOS和Win32程序兩種形式的上層用戶應用程序。安全
底層則是用戶不可見的接口部分,其基本內容是本地總線與PCI總線之間的總線接口設計和爲實現上層用戶應用程序對底層硬件訪問的設備驅動程序的設 計,包括虛擬設備驅動程序(VDD)和內核設備驅動程序(WDM)程序的設計,而設備驅動程序又會牽涉到windows操做系統的內核;還包括實現PCI 設備的即插即用而對配置空間的設置與訪問。服務器
先來看看下面的圖片:ide
在圖中很明顯:微處理器採用的是以PCI總線爲中心的多總線結構,I/O設備接口的一側是與本地總線想鏈接,另一次是與低速I/O設備相連,而高 速I/O設備則直接與PCI總線相連。與低速I/O設備類似,擴展存儲器經過擴展存儲器的接口與本地總線相連,而主存儲器則直接與Host橋相連工具
圖中已經明確說明了:I/O設備接口和存儲器等都是掛在微機的總線上,而且按照高速和低速分別鏈接在3級不一樣層次的總線上,都不是直接與CPU相鏈接的,而是經過各個關卡逐步靠近CPU。post
值得注意的是,I/O設備接口是CPU與外設I/O設備之間的橋樑,因此I/O設備接口的發展天然要隨着CPU和I/O設備之間的變化而變化。編碼
I/O接口的設計主要是以硬件爲基礎,硬軟結合的方法:spa
①硬件設計方法:
一般採用可編程接口芯片並編寫相應的控制程序,這要求對各類芯片的功能、特色、工做原理、使用方法及編程技巧,都要有深刻了解和熟練的。
②軟件設計的方法:
軟件的方法包括兩種系統下的程序編寫,即MS-DOS和windows系統下的4種編寫。
而在DOS下有3種方式: ⑴直接對硬件編程,這種方式能夠充分發揮底層硬件的潛力和提升程序代碼的效率,可是要求對硬件的細節有至關的瞭解,熟悉硬件的脾氣。且程序對硬件的依賴性大,可移植性差。
⑵/⑶分別是BIOS調用和DOS系統功能調用編程。這兩類主要針對的是標準的系統資源,包括鍵盤、顯示器、打印機、串行口等的程序編寫,而不須要對底層硬件編程。
在windows下,⑷用戶利用win32的API調用來編寫。
不難理解,且動動腦子就能想到:從應用角度瞭解硬件資源的外部特性和功能而不在乎內部硬件細節的方法纔是最佳的設計和分析的方法。
32位微處理器的工做模式有三種:實模式、保護模式、虛擬8086(V86模式)。
1.實模式
①存儲器地址空間採用實地址,而不支持虛擬存儲器。
②無保護機制,不支持存儲器保護功能
③單任務運行,不支持多任務
④存儲器管理採用分段機制,支持段式管理;不支持分頁機制,不支持頁式管理
⑤使用20位地址總線,支持1MB的內存空間尋址
在進入實模式後,微處理器的狀態能夠從相關的寄存器的內容看出來,先來看看下面的圖片:
例如:
CRo的第0位 PE=0,代表微處理器工做在實模式下
第3位 TS=0, 代表無任務轉換,即不支持多任務
第16位 WP=0,代表不進行寫保護,不支持保護功能
第31位 PG=0, 代表不使用分頁式管理
IDTR的基地址=0和界限=3FFH,表示實模式的中斷向量表安排在存儲器的00000H~003FFH區域,而且固定不變。
實際上,實模式下的分段機制對存儲器的段也是按照段描述符的格式定義的,只不過是根據實模式的特色進行的,而且所定義的段描述符中的各類屬性是固定不變的。所以,不像保護模式那樣,因爲段的各類屬性是變化的,而須要使用描述符來描述各個具體的段。
下面是實模式下對段描述符的定義,內容包括段基址、段界限和段屬性3個域:
●代碼段 段基地址 = 段值 x 16
段界限 = OFFFFH(64KB)
段屬性: P = 1, 段老是存在(由於是實地址)
G = 0, 段界限以字節爲單位
CPL = 0, 當前特權級爲0(正在執行的代碼段的訪問特權級)
R = 1,可讀可寫
E = 0, 向上擴展,偏移值必須小於等於段界限
C = 0, 非一致代碼段,訪問特權級與被訪問特權級恆等
●其餘段 段基地址 = 段值 x 16
段界限 = 0FFFFH(64KB)
段屬性: P = 1, 段老是存在 (由於是實地址)
G = 0, 段界限以字節爲單位
CPL = 0, 當前特權級爲0(段的被訪問特權級)
R = 1, 可讀可寫
E = 0, 向上擴展,偏移值必須小於等於段界限
因爲各個段的基地址、界限和屬性都是按照上面固定的值由微處理器復位時就設置好了,因此,實模式下再也不要求用段描述符來講明各個段的具體屬性。
實模式下,用戶在程序中所使用的地址是邏輯地址,而代碼和數據放在物理地址中,CPU要運行程序就要將邏輯地址轉換爲物理地址。物理地址 = 段值 X 16 + 偏移量
在實模式下,存儲器的尋址範圍 220B=1MB ,通常狀況下,各段在存儲器中的位置分配是由操做系統負責的,除非專門指定。每一個段能夠獨佔1個段,段也可重疊。實際使用中,每一個段的大小(尺寸)能夠根據須要肯定,可使任意不超過64KB的範圍,另外,段的起始位置必須從16的整數倍地址單元開始。
2.保護模式
保護模式的特色:
①採用虛擬技術,支持虛擬存儲器
②採用保護措施,實現存儲器內容的保護與隔離
③採用分段與分頁機制,實現虛擬存儲器的管理
④採用分段與分頁機制,實現虛擬存儲器管理
⑤基於虛擬機,支持多任務
在保護模式下,程序中所使用的地址是虛擬地址而不是實地址,存儲器也是虛擬存儲器。實際的物理存儲器是由存儲器芯片所組成的一個存儲器實體,它的最 大容量取決於地址總線的位數,20位地址有1MB空間,32位地址線可達4GB的空間。虛擬存儲器是採用虛擬技術設計出來的一種比實際存儲器容量大得多 的,而並不是實際存在的存儲器。固然,虛擬存儲器空間也不可能無限大,從32位微處理器段式管理方式的段+偏移可知,尋址目標地址最多46位(選擇子14 位,偏移量32位),可見32位處理器的虛擬地址空間可達246=64TB,這個空間比實際中的4GB大了16000倍。
實現虛擬存儲的方法:
首先,虛擬存儲器由存儲器管理器(MMU)及1個大容量硬盤(HD)支持。操做系統的存儲器管理器控制物理存儲器的分配和施放,以及硬盤和 物理存儲器之間的數據交換。當程序訪問的一個段或頁已在存儲器(內存)時,操做正常;若是不在,就產生異常,並轉入異常處理程序,異常處理程序則將該段或 者頁從硬盤裝入內存。這樣,在編程中看來全部段和頁都是在存儲器中,這就是虛擬存儲技術。
保護模式下的保護機制
存儲器的保護措施大體可分爲特權級保護和條件保護兩類
①特權級保護措施:
是對各段人爲的附加一個特權級別,而且規定低級別的程序不能訪問,更不能修改高級別程序與數據。每當一個程序試圖訪問一個段時,就把它的特權級(CPL)與要訪問的段的特權級(DPL)進行比較,以決定是否容許訪問。從而實現保護的目的。
特權級保護也叫訪問權限保護,可分爲兩個層次:同一任務內的保護和不一樣任務之間的保護。
②條件保護性措施:
是針對那些不夠條件而進行的違規操做,用以包拯系統的安全。這類違規操做會引發異常,異常處理程序會處理他們並重啓操做。
在保護模式下I/O地址空間也屬於訪問保護範圍。可是端口地址與存儲器地址不一樣,它既不是分段的,也不是分頁的,故它的尋址不須要段寄存器,於是對存儲器所採用的那些保護措施就不適用於I/O端口了。所以採用IOPL特權級與I/O許可位圖進行保護。
保護模式下的存儲器管理
在保護模式下,存儲器空間用虛擬地址空間、線性地址空間和物理地址空間三種方式來描述。採用擴充的分段和可選的分頁管理方式,並由CPU中的存儲器不見MMU實現
保護模式下存儲器的管理方式
在保護模式下有兩種存儲器管理方式:即段式管理和頁式管理。
①段式管理:
段式管理將存儲器空間劃分爲任意長度的段,並採用段+偏移量造成物理地址,在名稱和形式上與16位微處理器相同,可是含義徹底不一樣,它對段的描述已經添加了許多標誌爲保護的屬性,而把「段」擴展爲「段描述符」,所以,把保護模式下的段式管理稱爲擴展段式管理。
②頁式管理:
頁式管理將存儲空間劃分爲固定大小的頁,而且採用頁表將線性地址頁轉換爲物理頁,再將物理頁+頁內偏移量造成物理地址。
虛擬地址空間到物理地址空間的轉換
在保護模式下,用戶在程序中使用的地址都是虛擬地址,而代碼和數據是存放在物理地址中的,所以,微處理器要運行程序就要將虛擬地址轉換(映射)到物理地址。
①段式管理的地址轉換
在段式管理下,仍然採用 段+偏移量的方案來表示,在形式上也是 段寄存器:偏移量 ,如代碼段的虛擬地址CS:EIP。可是,這裏的段寄存器裏裝的並非真正的段基址,而是1個指向某段描述符的選擇子,真正的段基址放在段描述符中。因 此,要從虛擬地址轉換(映射)物理地址,必須利用段選擇子到描述符表中找到相應的描述符,從描述符中取出段基址,再把 段基地址+偏移量,最後獲得物理地址(線性地址),(反過來,線性地址不必定是物理地址,只有在頁式管理被禁止使用是,現行地址纔等於物理地址)。
之因此不直接把段基址放在段寄存器中,是由於在保護模式下,對段的描述除了段基址外,還加入了段的特權級屬性和段限長等保護信息(64位的段描述符),使得16位的段寄存器不夠存放這麼多信息。
②頁式管理的地址轉換
在頁式管理下,存儲器線性地址不等於物理地址,要獲得物理地址還必須將線性地址再進行一次轉換(映射)。爲了實現這種轉換,分頁機制將32 位存儲空間劃分爲大小固定爲4KB/4MB的物理頁,並提供兩級轉換表:頁表目錄和頁表。利用兩級轉換表創建線性地址和物理地址的對應關係。
其中:
線性地址的高10位(22~31位)對應頁表目錄項;
線性地址的次高10位(12~21位)對應頁表項;
線性地址的低12位(0~11位)對應頁內的偏移量;
即:
要訪問存儲器單元。經過對兩級轉換表的頁表目錄項和頁表項的兩次查表,就能夠產生與線性地址相對應的物理頁,這叫作頁變換。將也變換所獲得的物理頁加上線性地址低12位(0~11位)所肯定的頁內偏移量,就是要訪問的存儲單元。
3. 虛擬8086模式(V86模式)
V86模式是在32位微處理器中模擬運行16位微處理器的一種工做模式,是在保護模式下由保護機制控制運行的8086工做模式。在V86模式下, 段寄存器的用法跟實模式的同樣,用來保存段起始地址的高16位;可尋址地址空間爲1MB;20位的物理地址的計算也是段寄存器內左移4位加段內偏移地址。 所以,32位微處理器處理就好像是一個快速的808六、8088微處理器。
V86模式和實模式的區別
V86模式和實模式都是爲了與8086/8088兼容而設置的16位操做模式。可是V86是在保護模式下運行8086的工做模式,因此V86模式跟真正的8086模式有很大的區別。
①在V86模式下可尋址的存儲空間雖然爲1MB,可是能夠採用存儲器分頁管理機制,將1MB的存儲空間分爲256個頁面,每頁4KB。
在V86模式下中斷處理不是採用實模式下的中斷向量表,而是採用保護模式下的中斷描述符表,即採用保護模式下的中斷處理機制。
②實模式是整個微處理器的工做模式,而V86模式是在保護模式下一個任務內的代碼段、數據段和堆棧段的工做模式。所以,在32位微處理器的任務系統中,可以使用其中的一個或多個任務同事工做於V86模式,運行在V86模式下的任務被稱虛擬86任務,簡稱V86任務。
因而可知,V86模式即保持了與8086/8088工做模式的兼容,又支持了保護模式下的保護機制、存儲分頁管理機制和多任務機制。另外,在V86模式下,各段的特權級均爲3級,而在實模式下,各段的特權級都爲0級。所以,V86模式限制了一些特權指令的執行。
虛擬8086機
在V86模式下,V86任務的執行是由一個被稱爲V86監控程序的系統軟件控制的。V86任務和V86監控程序以及微處理器的硬件組成了一個「虛擬 8086機」,其中V86監控程序控制V86任務的外部界面、中斷和輸入/輸出,微處理器硬件提供該任務運行所需的1MB的虛擬地址空間,並執行V86任 務中的指令。
32位微處理器可在保護模式和V86模式之間切換。windows操做系統和windows應用程序運行在保護模式下,若是要運行DOS操做系統和DOS應用程序,微處理器就切換到V86模式,而且由虛擬機管理器VMM負責這種切換。
1、 基於微處理器的微機系統軟件模型
所謂微機系統軟件模型,就是從軟件編程的角度去看待微型計算機系統,也就是從編程使用的角度來考量危急中的微處理器、存儲器及I/O系統,而不深究其內部電路結構的硬件細節。
微機系統軟件模型所描述的對象包括微處理器的寄存器模型、存儲器模型和I/O地址空間模型。這些都是用戶能夠用程序的方法訪問和使用的危機系統資源,而那些用戶不能夠用程序的方法訪問和使用的硬件資源(如微處理器的運算部件,流水線等)則不屬於微機系統軟件模型的範圍。
微機系統軟件模型概述
①從編程的觀點來看待微機系統的硬件資源,能夠簡化對內部硬件細節的瞭解。例如,對微處理器,就只需着重瞭解他的可編程的寄存器的功能、使用方法,而對微處理器內部電路結構沒必要在乎。
②使用微處理器的彙編語言編程,也必須從軟件的觀點去了解微處理器及其存儲器子系統和I/O子系統的操做。掌握軟件模型中寄存器的功能和使用方法、存儲器的分段與分頁機制和訪問方法,以及I/O端口的讀、寫方法,對彙編語言程序設計相當重要。
③因爲微處理器的活動(操做)都是靠軟件來驅動的,用戶編寫什麼樣的程序就可使微處理器產生什麼樣的活動(操做)。因此,用戶對微機的應用,實際上就是用過本身的程序來實現。
④,從兼容性來看,強調功能上、邏輯上兼容,而不強調物理上的兼容即內部電路細節上的兼容,採用軟件模型也是合適的。
2、實模式下微處理器的寄存器模型
先來看看下面圖片:
圖中不打陰影的部分表示在實模式下能夠編程使用的寄存器,包括:
4個通用寄存器:AX、BX、CX、DX
6個段寄存器:CS、DS、SS、ES、FS、GS
2個指針寄存器:BP、SP
2個變址寄存器:SI、DI
1個指令指針:IP
1個標緻寄存器:ELAGS
1個控制寄存器:CR0
下面來介紹個寄存器的做用和格式
①通用寄存器
實模式下的4個通用寄存器是:累加器(A)、基址寄存器(B)、計數寄存器(C)、數據寄存器(D)
做爲16位使用時在寄存器名後面加X,如AX、BX、CX、DX等
做爲32位使用是,則在16位的基礎上加E,如:EAX、EBX、ECX、EDX。
4個寄存器各自具備不一樣的功能:
A寄存器豬腰用於存放程序執行過程當中的一些中間結果,以及存放I/O數據
C寄存器在串、循環、循環移位、移位等操做中做計數寄存器
D寄存器也能存放地址信息,如存放I/O端口地址等
②段寄存器
段寄存器是爲了存儲器分段的須要而設置的,用於存放段基址,全部段寄存器都是16位的。所以段基址必須是16B的整數倍,而且段與段之間能夠是連續的、相鄰的、獨立的或者是部分重合的。系統中能夠同時有6個段被激活而處於工做狀態,即:
1個代碼段
1個堆棧段
4個數據段(D、E、F、G)
這些寄存器中保存的值被稱爲當前段寄存器值。
段寄存器內的數值能夠由程序員經過軟件加以改變。所以程序要訪問存儲器的哪一個段,只須要將該段的段基址寫入相關寄存器。例如:
要選用存儲器中不一樣數據段空間的數據,只要改變數據段寄存器(DS、ES、FS和GS)中的數值便可。
一樣的,當執行段間調用指令使程序發生轉移時,就須要改變代碼段寄存器CS的數值。
一段內存是否能夠用來作代碼的存儲空間、數據的存儲空間、仍是作堆棧空間,主要是由微處理器中的段寄存器來指定。例如:
由CS與IP置頂爲代碼的存儲空間
由DS與偏移置頂數據的存儲空間
由SS與SP置頂爲堆棧存儲空間
③指令指針
實模式的指令指針IP爲16位,它只是存儲器中當前代碼段內的偏移量,即代碼與代碼段段基址的距離。在實模式下,由微處理器把IP的偏移量和CS的 當前值組合爲指令代碼的地址,故要訪問代碼的地址爲CS:IP。可見,指令指針是存放程序代碼的偏移地址的,而不是存放數據的。
④指針和變址寄存器
因爲有些指令(算術、邏輯指令)的操做數在數據寄存器中,另外一些指令(串指令)的操做數不在數據寄存器中,而在存儲器內,所以,須要一些可以肯定操 做數在寄存器中的位置的寄存器。指針寄存器和變址寄存器就是用於存放偏移量地址,而不是存放數據的寄存器。他們分別以指針方式或變址方式選中存儲器的 64KB段內的具體存儲單元。
指針寄存器(SP、BP)用於選取堆棧段內的具體存儲單元,即指針寄存器的值指向堆棧段的棧頂或者棧內的具體存儲單元;
變址寄存器(SI、DI)用於選取數據段內的具體存儲單元,即變址寄存器的值指向存儲器數據段或附加段內的存儲單元。
因此,若是要訪問存儲器堆棧存儲區,只要把SP或BP內的數值與堆棧段寄存器SS中內容合併成存儲器物理地址便可。其中,棧頂指針SP或BP內的數 值與堆棧段寄存器SS中內容合併成爲存儲器物理地址便可。其中棧頂指針SP與SS組合起來(SS:BP)造成20位地址指針,指向堆棧內的存儲單元。
實模式下,BP常常用於讀取堆棧內一些參數,傳遞給子程序,於是稱爲子程序參數傳遞的一種經常使用方法。爲此,子程序內應包括使用基址尋址的指令,該指令將從堆棧裏讀取參數值。
另外兩個變址寄存器SI和DI用於存放數據段的偏移地址。在指令中包含變址時,SI用於保存源操做數的偏移量地址,DI用於保存目標操做數的偏移地址。
⑤標誌寄存器
先來看看標誌寄存器的圖片:
標誌寄存器(ELAGS)是一個32位的寄存器,用於指示微處理器的狀態並控制他的工做。標誌寄存器在實模式下只使用9位,即下圖:
它包括狀態標誌與控制標誌兩類。狀態標誌的邏輯狀態取決於指令執行的結果,是自動產生的,其餘指令可使用這些標誌來決定是否使用程序發生轉移。控制寄存器是在程序中使用專門指令設置的,不是自動產生的,用來控制一些操做,如中斷的開和關、地址的加與減的方向等。
⑴6位狀態標誌的做用
●進位標誌位CF(Carry Flag)
當執行算術指令時,若其結果的最高位有進位或借位,則將CF置1;不然復位
●奇偶標誌位PF(Parity Flag)
當操做結果中有偶數個1時,置1;不然,置0。
●輔助進位標誌位AF(Auxlliary Carry Flag)
在8位、16位、32位二進制數內,若其較低字節中有低位半字節向高位半字節進位,
或者高位半字節借位給低位半字節,則將AF置1;不然,AF復位
●零標誌位ZF(Zero Flag)
若是算術或者邏輯運算結果爲零,則將ZF置1;不然,ZF復位
●符號標誌位SF(Sign Flag)
記錄運算結果的符號,若結果爲負,則SF置1;不然,置0
●溢出標誌位OF(Overflow Flag)
在運算時,若帶符號的結果超出機器可以表示的範圍,則OF置1;不然,置0
⑵3位控制標誌的做用
●陷阱標誌位TF(Trap Flag)
用於設置陷阱中斷,若TF置1時,則在執行指令時產生單補中斷,即CPU進入單步方式:
它執行一條指令後就跳到一個專用服務器程序上去,檢查指令執行狀況,用於程序調試。
●中斷容許標誌IF(Interrupt Flag)
當IF置1時,容許中斷請求;當IF置0時,禁止中斷請求
●方向標誌位DF(Direction Flag)
決定串操做的方向。當DF置1時,串指令自動按減地址執行,即串數據傳輸過程是從高地址到低地址;
當DF置0時,串指令按增長地址執行,即串數據傳輸過程是從低地址到高地址。即:
在串處理時控制變址寄存器SI和DI遞增或遞減方式。
至於每次遞增或者遞減多少,取決於每次傳輸的是字節、字、雙字
如果字節,則加/減1;
如果字,則加/減2;
如果雙字,則加/減4;
3、 保護模式下微處理器的寄存器模型
先來看看下面的圖片:
對比前面實模式下寄存器的圖片能夠發現:
保護模式寄存器模型是實模式寄存器模型集的一個超集,保護模式模型除了實模式中使用過的寄存器以外,新增了4個系統地址寄存器GDTR、IDTR、LDTR、TR和4個控制寄存器CR0~CR3。另外,一些寄存器的功能也獲得了擴展,例如:指令指針爲EIP,長度爲32位;標誌寄存器EFLAGS的更多位獲得了利用。
系統地址寄存器
在保護模式下,微處理器內部新增了4個寄存器 GDTR、IDTR、LDTR和TR,這些寄存器是爲了提供地址信息在肯定全局描述符表GDT、中斷描述符表IDT、局部描述符表LDT和任務狀態段TSS等4種表格在存儲器中的位置,故把他們叫作系統地址寄存器。
①全局描述符表寄存器GDTR用來在存儲器地址空間定位一個全局描述符表GDT。GDTR的格式以下圖:
從圖中能夠看出,GDTR長48位,由這個48位地址做爲指針,直接指定GDT表在存儲空間的位置。其中GDTR的高32位基地址Base,指示GDT在存儲器中的開始位置。32爲基址容許把GDT定位在線性地址空間的任何地方。
GDTR的低16位指示GDT的段限長Limit,它規定了GDT按字節計算的大小(Limit的值要比實際表小1。例如,若是 Limit=00FFH,則表長爲256B)。16位段限長容許GDT表最大可達65536B,於是最多能容納8192個描述符(每一個描述符長8B),實 際應用中根據須要來肯定GDT的長度。
中斷描述符表寄存器
中斷描述符表寄存器IDTR用來在存儲器中定位一箇中斷描述符表IDT。IDTR也是48位長,由這個48位地址指針,直接指定IDT在存儲器空間 的位置。其中IDTR的高4個字節基地址Base,用於表示IDT在存儲器中的起始地址,32位基地址容許IDT定位在線性地址空間的任何地方。
IDTR的低2個字節表示IDT的段限長Limit,以定義表的大小(表實際的大小等於Limit+1個字節)。可定義IDT的最大長度爲65536字節長,但系統只支持256箇中斷和異常,因此,實際上IDT最大長度是2KB,以字節爲單位的段界限爲7FFH。
局部描述符表寄存器
局部描述符表寄存器LDTR並不直接指示局部描述符表LDT在寄存器中的位置,所以,他的格式與GDTR和IDTR都不一樣,LDTR的格式以下:
LDTR是16位長。這個16位的值是一個選擇子,他指向存放GDT中的LDT的描述符。選擇子不能直接定位LDT,只有描述符才能定位LDT。因 此,當向LDTR中裝入一個選擇子是,相應的LDT的描述符就自動從GDT中讀出來並裝入LDTR的高速緩衝寄存器中(如上圖中虛線框部分)。真正的 LDT描述符就在這個高速緩衝寄存器中。它是64位的,其中32位的Base值只是LDT在存儲器的起始地址,16位的Limit值指示LDT的大小,還 有12位的Attribute值說明LDT的屬性。
可見,LDT須要2次定位。首先利用LDTR中的選擇子,在GDT中找到LDT的描述符,而後利用LDT的描述符,來定位LDT在存儲器中的位置。
任務狀態段寄存器
任務狀態寄存器TR與LDTR相似,也不能直接指定任務狀態段TSS在存儲器空間的位置。
TR是16位長。這個16位的值也是一個選擇子,不過這個選擇子用來指示TSS段的描述符在GDT表中的位置的。找到了TSS段描述符,經過描述符 就可以指定TSS段在存儲器空間的位置了。所以,當選擇子裝入TR時,相應的TSS段的描述符就自動從全局描述符表GDT中讀取並裝入TR的高速緩衝寄存 器中(如上圖右側虛線框部分)。這個高速緩衝寄存器爲64位,它提供了TSS段的32位起始地址Base和TSS段的16位Limit以及TSS段的12 位屬性Attributte。
可見,TSS段也須要2次定位。首先,利用TR中的選擇子,在GDT中找到TSS段的描述符,而後,利用TSS段的描述符,來定位TSS段在存儲器中的位置。
控制寄存器
保護模式新增的4個32位控制寄存器CR0、CR1、CR2、CR3 ,是爲了控制微處理器的工做方式和分段管理機制以及分頁管理機制,以下圖:
①控制寄存器CR0
CR0的主要功能是選擇微處理器的工做方式和存儲器的管理模式。各位的含義以下:
⑴保護模式容許置PE位
PE位控制微處理器是進入是模式仍是進入保護模式,所以由叫作微處理器工做模式控制位。
PE置0,爲實模式
PE置1,爲保護模式
系統開機或者重啓時PE清零,微處理器處於實模式。若是要進入保護模式,必須經過程序將PE置1
⑵分頁管理啓用位PG
PG控制禁止仍是啓用分頁管理機制。
PG置0,禁止使用分頁機制,此時由分段機制造成的線性地址做爲物理地址;
PG置1,啓用分頁機制,此時線性地址還不是物理地址,線性地址必須通過分頁轉換後
才能造成物理地址。
以下圖:
因爲PG=1且PE=0是非法組合,即實模式下不能使用分頁管理,只有保護模式下才能分頁,所以,當用PG爲1和PE爲0的值裝入CR0寄存器將引發通用保護異常。
⑶協處理器操做控制位(MP、EM、TS、ET)
CR0中的位1~位4分別標記爲MP(算術存在位)、EM(模擬位)、TS(任務切換位)和ET(擴展類型位),他們控制浮點協處理器的操做。
②控制寄存器CR2
CR2 由分頁管理機制使用,用於報告發生頁故障時的出錯信息。若是某頁不在存儲器中,則在頁轉換時會發生缺頁故障,此時,微處理器把引發頁故障的線性地址保存在CR2 中。操做系統中的頁故障處理程序經過檢查CR2 的內容,就能夠查出是線性地址空間中的哪一頁引發的故障。
③控制寄存器CR3
CR3 也是由業管理機制使用的,用於保存頁表目錄的起始物理地址。在肯定頁表目錄在存儲器空間的位置時,須要使用頁表目錄的基地址,CR3的高20位就是提供頁表目錄的基地址的,故稱頁表目錄的基地址寄存器PDBR。因爲基地址僅高2位有效,低12位不用,因此,向CR3中裝入一個頁表目錄的其實物理地址(基地址)時,低12位必須爲0;而從CR3中取值時,低12位被忽略。
改變功能的寄存器
一些在實模式和保護模式下均可以使用的寄存器,在切換到保護模式時,其功能會發生變化。
①段寄存器
段寄存器在保護模式下稱爲段選擇子寄存器,仍然是16位,其值不在是段基址而是選擇子。選擇子並不直接置頂存儲器地址,它選擇一個定義存儲器段的段基址、大小和屬性的描述符。其具體格式以及做用到之後再研究。
值得指出的是,在保護模式下,每一個段寄存器都是一個相應的高速緩衝寄存器,他對通常編程人員是不可見的。
②標誌寄存器
在保護模式下標誌寄存器EFLAGS長度擴充到32位,新增長了5位。如圖:
這些新增的5位標誌位只有在保護模式下使用。例如:輸入/輸出特權級碼IOPL、嵌套任務標誌NT、恢復標誌RF,以及V86模式標誌VM。
●IOPL(2位) 用來指定最大輸入/輸出特權級。
若是IOPL值爲00,則只有在特權級0級才能訪問I/O操做。
若是IOPL值爲11,則I/O容許較低特權級訪問。
●NT 指明當前任務是否嵌套,便是否被別的任務調用。該位在發生任務嵌套時自動設置,而且只能用軟件復位。
●VM 指明VM位爲1時,微處理器就處於V86模式。此時,其當前特權級由微處理器自動設置爲3。
因爲微處理器沒有提供直接改變VM標誌位的指令,而且只有當前特權級CPL=0時,對VM的改變纔有效,
因此V86模式與保護模式的切換不能簡單地經過改變VM位而進行。
●RF 恢復標誌,與調試寄存器斷點或單步操做一塊兒使用。
●AC 對準檢查標誌,當AC=1時,且程序運行特權級爲3時,對存儲器訪問邊界進行對準檢查。
●VIF 虛擬中斷標誌,在虛擬方式下中斷標誌只對Pentium機有效。
●VIP 虛擬中斷暫掛標誌,爲Pentium微處理器提供有關虛擬模式中斷的信息。它用於多任務環境下,
給操做系統提供虛擬中斷標誌和中斷暫掛信息。
●ID 標識標誌,指示Pentium微處理器支持CPUID指令。CPUID指令爲系統提供有關Pentium微處理器的信息,
如:版本、製造商等。
程序不可見寄存器
32位微處理器中包含了一些不直接被應用程序訪問的「程序不可見的寄存器」,又叫程序不可見高速緩衝寄存器(並非微處理器中的一級或者二級高速 緩衝存儲器Cache),是用來保存描述符的。一個描述符包含段基址、段限長和段屬性共8個字節64位長,所以,程序不可見高速緩衝寄存器也是8個字節。
6個段寄存器和任務寄存器TR,以及局部描述符表寄存器LDTR都分配了一個程序不可見高速緩衝寄存器,以下圖虛線部分所示:
原來,每當用戶在程序中向段寄存器(或TR、LDTR寄存器)裝入一個新的選擇子時,微處理器就會自動訪問描述符表,從表中讀取一個描述符,並把描 述符裝入該寄存器對應的程序不可見高速緩衝寄存器中。這個描述符一直保存在這裏,並在訪問存儲器段時使用,知道段的選擇子再次變化爲止。這就使得微處理器 在重複訪問一個內存段時,沒必要每次都花時間到存儲器中查找描述符表,而是直接快速地從程序不能夠見寄存器中讀取和使用描述符,所以稱之爲高速緩衝寄存器。
可見,程序不可見寄存器是用來提供描述符,以便指定存儲段(代碼段、數據段和堆棧段)、TSS段以及LDT段在存儲器空間的具體位置的重要資源。雖然他們在程序中不出現,而由微處理器在內部直接操做,可是它們對定位與訪問保護模式存儲器的做用是不可忽視的。例如:
爲了定位與訪問任務狀態段,在程序中只須要將TSS的選擇子裝入任務寄存器TR,如同選擇子裝入段寄存器同樣。這個選擇子會自動訪問全局描述符表,從中讀取TSS的描述符,而且將任務狀態段TSS的基地址、段界限和訪問權限裝入LDTR高速緩衝寄存器。
至於爲何要把描述符以隱藏的方式存放在程序不可見告訴緩衝寄存器中,而不是放在顯示的段寄存器中,其緣由也許是爲了使32位微處理器在 保護模式下指令書寫與在實模式下指令書寫格式保持一致,都是向段寄存器寫16位數據。雖然在16位數據的含義不一樣,在保護模式下入選擇子時,也就同事向高 速緩衝寄存器寫入描述符,有了描述符也就等於有了段基址。
告訴緩衝寄存器是64位長,分3個字段(域),包括32位段基址,20位段限長和12位段屬性。高速緩衝寄存器各字段的定義域格式以下圖:
4、實模式存儲器模型
存儲器軟件模型是從軟件編程的角度去看存儲器是什麼樣子的,也就是用戶在編程時只考慮如何使用存儲器,而不考慮它的硬件細節。存儲器軟件模型的內容包括:存儲器空間、存儲器的分段與分頁、存儲器的尋址和存儲器物理地址的造成等。
實模式下存儲器地址空間和數據組織
①實模式下存儲地址空間
32位微處理器在實模式下,支持1MB存儲器,從軟件觀點看這1MB的存儲器是由00000H~FFFFFH地址編碼(編號)的空間。數據以字節爲單位存儲在連續的地址碼所組織的空間內,但能夠連續兩個字節(字長)和連續4個字節(雙字長)來訪問存儲空間。
實模式的1MB存儲空間均可以被用戶訪問,不過根據安排有些地址空間有專門用途,專用存儲空間不能存儲程序中的數據或者指令,如:00000H~003FFH區域專門用於存放中斷向量表。通用區域能夠存儲程序的指令或者數據,通用區域的範圍是400H~FFFFFH。
②實模式下存儲器的數據組織
存儲單元能夠存放數字、字符和指令等信息。一個存儲單元中存放的信息稱爲該存儲單元的內容。以下圖:
若是數據是以字節爲單位存入存儲器的,如上圖中 0004H中存放的信息爲34H,則表示爲(0004)=34H。
若是數據是以字爲單位存入存儲器的,如上圖中表示爲(0004)=1234H。
因此,同一個地址便可看做是字節單元的地址,又可看做是字單元的地址,這要根據使用狀況而定。
實模式存儲器地址的分段
①實模式存儲器地址的分段
實模式採用分段的辦法來管理和使用存儲器,每一個段爲64KB。所以,程序員在編寫程序時要把存儲器分紅段,並在程序的開頭設置各段寄存器的值,以定義所須要用到的幾個段。通常狀況下,各段的地址在存儲器中的分配是由操做系統負責的。
值得注意的是: 實模式下的段不能起始於任意地址,而必須從字節地址的16的整數倍的任意一小段開始。
微處理器規定:從0開始,每16個字節爲一小段,下面列出了存儲器最低地址區的三個小段
的地址區間,每行爲一小段。
其中,第一列就是每一個小段的首地址。能夠看出這個首地址是字節地址的16整數倍,若以十六進制表示,則最低位爲0(即20位地址的低4位爲0)。在1MB的地址空間裏,共有64KB個小段首地址。
每一個段能夠獨立佔用64KB存儲區,以下圖:
同時,各個段也能夠重疊,以下圖:
下面說明段重疊的含義:
假設有一個存儲區,包括一個代碼段、數據段和堆棧段。代碼段的首地址是2000H,代碼長度爲8KB,數據段的數長度只有256B。此時段 的分配如上圖所示。從上圖能夠看出來,代碼段的最大區域能夠是02000H~11FFFH,但因爲代碼長度只用了8KB,因此代碼段結束後的第一個小段的 首地址4000H就能夠做爲數據段的起始地址。也就是說,在這裏,代碼段和數據段能夠重疊一塊兒。同理,數據段的最大區域能夠是 04000H~13FFFH,但因爲數據段只須要2KB,因此數據段結束後的第一個小段的首地址4800H就做爲堆棧段起始地址。在這裏,數據段和堆棧段 又重疊在一塊兒了。固然,每一個存儲單元的內容是不容許發生衝突的。在這裏所謂的段重疊只是指每一個段實際佔用的大小能夠根據實際須要來分配,而不必定佔有 64KB的最大段空間。
實際上,段區的分配工做是由操做系統完成的。可是系統也容許程序員在必要時指定需佔用的內存區,例如:可由程序員指定代碼段的起始位置(從100H地址開始)。
②實模式存儲器邏輯地址
存儲器邏輯地址也就是編程時所使用的地址,實模式的邏輯地址由段基址和偏移地址兩部分組成,在程序中,段基址值用16位的段寄存器(CS、DS、 SS、ES、FS、GS)表示,偏移量用16位的指令指針IP、基址寄存器BX、指針寄存器BP或變址寄存器SI/DI表示。例如:代碼段邏輯地址表示爲 CS:IP,數據段邏輯地址表示爲 DS:BX,也可用其中幾個寄存器的內容組合成一個偏移量。
段基址與偏移量的關係以下圖:
其中,數據段寄存器DS中的段基址表示存儲器中64KB的段的起始位置,即段中的最低位地址。BX寄存器中的偏移量是要訪問的存儲單元的位置與起始地址的距離。所以,段的最低地址的偏移量是0000H,最高地址的偏移量是FFFFH。
實模式下存儲器尋址
實模式下只容許微處理器尋址第一個1MB存儲器空間,所以第一個1MB存儲器稱爲實模式存儲器或者常規內存。
①段+偏移的尋址方案
這個不寫了,太熟悉不過了,看下圖:
②段+偏移的尋址組合的潛在規則
段+偏移的尋址組合,實際上就是段寄存器和偏移寄存器組合。微處理器對此有一套規則,用於訪問不一樣的存儲器段。這套規則既適用於實模式也適用於保護模式,該規則定義了各類尋址方式中,段地址寄存器和偏移地址存儲器的組合方式。例如:
代碼段寄存器老是和指令指針組合成 CS:IP用於尋址程序的下一條指令。
另一種默認的組合用於堆棧。經過棧指針(SP)或基址針(BP)尋址寄存器堆棧段中的數據。這些組合用SS:SP或SS:BP表示。例如:
若是SS=2000h,BP=3000h,則微處理器尋址堆棧段寄存器的23000h單元。
實模式下,微處理器默認的段寄存器與偏移寄存器的組合以下圖:
另外,微處理器內有一個叫「段超越前綴」的裝置,能夠改變上述寄存器和偏移寄存器的默認組合,
例如:
數據訪問時可以讓ES寄存器做爲數據段寄存器。
③段+偏移尋址方案容許重定位
可重定位的程序是一個能夠放入存儲器的任何區域且不加修改仍然能執行的程序,可重定位的數據是能夠放在存儲器的任何區域,且不須要修改就能夠被程序引用的數據。
各類PC微型計算機系統的存儲器結構可能不一樣,若是沒有這個特性,若想要在不一樣的機子上運行程序,可能要大範圍的重寫或者更改,這將會是可怕的噩夢。
存儲器用偏移地址在段內尋址,若是咱們將整個存儲器段移到存儲器系統內的任何地方,只要將段寄存器內容改變爲程序所移到的新存儲器的地址,而不準改變其偏移地址。
例如:
一條指令位於距段首地址8個字節的位置,則它的偏移地址是8;整個程序一到新的存儲器後,這個偏移地址8仍然指向距離段首地址8個字節的位置。
實模式下存儲器物理地址的造成
①存儲器物理地址的計算
不想多說,看下圖:
②不一樣的邏輯地址能夠映射成同一個物理地址
不解釋。
5、保護模式存儲器模型
①保護模式下虛擬存儲器的地址空間
保護模式下,程序中使用的地址都是虛擬地址,所以虛擬地址也就是邏輯地址。32爲微處理器支持虛擬地址空間爲64TB。
在32位微處理器的存儲器分段模型中,將存儲器空間分紅了全局和局部地址,各佔32TB,而且各包含8192個段,每一個段4GB,如圖:
圖中表示的是虛擬存儲空間的最大值,但因爲在實際應用中不是全部的描述符都在使用,因此實際使用的虛擬地址並無這麼大。
把虛擬地址空間分紅全局和局部地址的目的是:
32位微處理器的多任務環境中,防止任務之間的相互干擾及破壞。當微處理器啓動一個任務時,它能夠訪問全局存儲器段也能夠訪問局部存儲器 段。全局地址空間,一般包含能被全部任務共享的資源和數據。局部地址空間的數據和代碼只能被相應的任務訪問,而不能被其餘的任務訪問,這就爲防止任務之間 的相互干擾及破壞提供了條件。
②保護模式下虛擬地址空間的分段
在保護模式下虛擬地址空間也採用分段方式,並使用48位存儲器指針來表示虛擬地址空間,即在程序中用48位的存儲器指針來訪問存儲器的地址單元。48位存儲器指針包含16位選擇子和32位偏移量,如圖:
其中,選擇子用來選擇虛擬地址空間中的一個段,選擇子爲16位,只有14位用於選擇存儲器段,最多可達214=16K個段。偏移量是32位長,段最大可達232B=4GB。所以,正好能夠表達整個虛擬地址空間16K x 4GB =64TB。
在實際應用中,一個程序所包含的段的個數是有限的,每一個段的大小也不會大到4GB。所以大多數程序所佔用的地址空間要比64TB小得多。
保護模式下的段能夠從任意地址開始,而不像實模式下的段必須從字節地址16整數倍的地址開始。
保護模式下存儲器尋址
①保護模式下存儲器尋址方案
保護模式下存儲器尋址既能夠訪問1MB的存儲區(常規內存),又能夠訪問1MB以上的存儲區(擴展內存)的數據和程序。可是尋址這個擴展段,須要修改用於實模式存儲器尋址方案。
在尋址擴展內存裏的數據和程序時,仍然使用段+偏移地址的尋址方案,而且偏移地址仍然用於訪問存儲器段內的存儲單元。區別是,保護模式下的段基址不 再像實模式那樣由段寄存器直接提供,而是一種間接的方式,即在原來放段基址的段寄存器裏放一個選擇子,由選擇子選擇描述符表內的一個描述符,而後從描述符 中得到段基址。由於描述符中包含了存儲器段的基地址、長度和屬性。
因爲段+偏移地址仍然用於訪問1MB存儲器內的數據和程序,因此保護模式指令和實模式指令是徹底相同的。事實上,不少在實模式下編寫的程序,不用更改便可在保護模式下運行。
如今來對比一下保護模式下「段+偏移」尋址組合 和 實模式下 「段+偏移」尋址組合:
保護模式下「段+偏移」尋址組合:
實模式下 「段+偏移」尋址組合:
②段+偏移地址尋址組合的潛在規則
和實模式差很少,只是32位微處理器可使用32位寄存器,顯然保護模式下的選擇範圍更大。
保護模式下段式地址的轉換
保護模式下虛擬地址使用48位地址指針表示。而保護模式下的物理地址是32位共4GB的地址空間。所以,在保護模式下,將虛擬地址轉變成爲物理地址,實際上就是將48位的虛擬地址轉變爲32位物理地址。
保護模式下也採用與實模式相同的「段+偏移地址」的尋址方案,轉變過程以下:
選擇子--->描述符表中的段描述符--->從段描述符中讀取32位段基地址--->再加上偏移量--->獲得32位線性地址
保護模式下存儲器地址空間的分頁
①分頁方式
保護模式下分頁方式中,物理地址被劃分紅1048496頁,每頁4096B長,以下圖:
分頁管理器的頁的大小固定爲4KB,與分段管理器的段的大小不固定不一樣。分頁大大簡化了存儲管理的實現。須要提到的是CR0中的PE位和PG位及CR3中的頁表目錄基址寄存器(PDBR)是實現分頁管理的關鍵,這些將在存儲器管理中討論。
②保護模式下頁式地址轉換
頁式地址轉換是把32位線性地址轉換爲32位物理地址。這裏的線性地址和物理地址都是以頁爲單位的,每頁4KB,4GB的線性地址和物理地址空間,均可分爲1M頁。線性地址空間的頁稱爲虛頁,物理地址空間的頁稱爲實頁,爲此,採用頁表進行映射。
6、實模式下I/O地址空間模型
32位微處理器實模式下的16位I/O地址範圍是0000h~FFFFh,共64KB的地址,但在實模式下實用實際應用中只用了低10位地址,即1024個I/O端口地址。每一個地址對應一個字節寬的I/O端口。
I/O地址空間的分佈如圖:
地址0000h~00FFh是0頁空間。0頁是I/O地址空間的第一個256B尋址空間。0頁內的I/O地址空間指定爲系統板上接口芯片的輸入或輸出數據傳輸操做。其餘頁內I/O地址空間指定爲擴展卡的輸入或輸出數據傳輸操做。
7、保護模式下I/O地址空間模型
保護模式下I/O地址也是16位的,從0000h到FFFFh,共64KB的地址,能尋址64個8位端口,或32K個16位端口,或16K個64位端口。與實模式下I/O地址空間模型不一樣之處有兩點:
①保護模式的I/O數據傳輸有字節寬度、字寬度和雙字寬度,而且存儲器空間能夠獨立編址,也能夠統一編址;
②保護模式的I/O地址空間有保護措施,採用標誌寄存器中的IOPL標誌位和利用任務狀態段TSS中的I/O容許位圖兩種措施來實現對I/O地址空間的保護。
基於微處理器的微機系統的硬件結構
任何一個基於微處理器的微機系統都是微處理器、存儲器系統和I/O系統3個部分經過總線相互鏈接而成的。以下圖:(圖中的各部份內容是將要討論的內容)
如下內容從應用的角度出發,着重瞭解微處理器、存儲器和I/O端口和外部鏈接特性,即外部引腳的功能、邏輯定義和信息的傳輸方向等,而不在乎他們的內部電路細節。
1、微處理器
微處理器在微機系統中的做用
微機系統的核心是微處理器,他是微機系統的控制單元,也稱爲中央處理器CPU。如上圖中所示,微處理器經過總線來鏈接存儲器系統和I/O系統,經過執行存儲在存儲器中的指令,實現對存儲器和I/O的訪問與控制。
微處理器在微機系統中的主要工做有:
①在微處理器與存儲器或者I/O之間傳輸數據;
②進行簡單的算術和邏輯運算;
③經過簡單的邏輯斷定,控制程序的流向;
(微處理器正式經過這樣一系列看似簡單的工做,來完成很複雜的操做或者任務的)
32位微處理器家族,已擁有從iA80386開始到如今的Pentium一大批成員,其功能愈來愈強,處理速度愈來愈高。但他們的基本功能和對存儲器空間及I/O空間的支持差異不大。因此,有時把iA80386做爲32位微處理器的一個實例進行討論。
因爲不一樣微處理器內部結構的差別和所採用的新技術不一樣,因此微處理器的硬件兼容性不像軟件兼容性那樣強。
微處理器外部特性
微處理器的外部特性體如今它的信號線引腳上,32位微處理器的基本信號引腳,按功能及鏈接的對象不一樣,可劃分紅4組,分別叫作存儲器及I/O接口信號、中斷接口信號、DMA接口信號和協處理器接口信號,以下圖:
值得指出的是,從80386到Pentium的外部引腳在數量上愈來愈多,但對用戶來講,更感興趣的仍是微處理器面向存儲器和I/O設備的有關信號引腳。圖中所示的引腳顯然作了簡化以後的基本信號引腳。
上述個信號線的名稱、功能、I/O及有效電平以下表:
微處理器面向存儲器和I/O的接口信號
微處理器面向存儲器和I/O的接口信號,包括地址、數據和控制信號。
①地址信號線
⑴A0和A1不出如今地址線上
在實模式下,地址線A2~A19有效;在保護模式下,地址線A2~A31有效。可是實際上,實模式的地址長度有20位,保護模式的地址長度有32位。那麼還有2位地址線A0和A1到哪裏去了呢?原來這兩位地址被微處理器內部譯碼,與數據傳輸的字節數(數據寬度)一塊兒產生字節容許信號用以支持按4個獨立的字節寬度的存儲體(Bank0~Bank3)來組織32位存儲器地址空間和I/O地址空間了。
對32位微處理器來講,地址信號線就是A2~A31.他們用於傳輸從微處理器到存儲器和I/O設備的地址信息。
⑵CPU和存儲器之間的地址線
在實模式下,20位地址給出了微處理器尋址1MB物理地址空間的能力。在尋址時,須要使用地址線A2~A31和字節容許線。
另外,在保護模式下,經過軟件提供的虛擬地址,能夠尋址64TB的虛擬存儲地址空間。
⑶CPU與I/O之間的地址線
不管是在實模式下仍是在保護模式下,32位微處理器均具備獨特的64KB的I/O地址空間。因此,在尋址I/O設備時,只須要使用地址線A2~A15和字節容許線。
⑷存儲器地址線與I/O地址線的區分
微處理器的地址信號線既鏈接到存儲器,又鏈接到I/O設備接口芯片,那麼,如何來識別從微處理器送出的地址信號是發給存儲器的,仍是發給I/O設備的呢?爲此,微處理器設置了信號=0時,代表是I/O總線週期,地址信號發給I/O設備。
②數據信號線
⑴32位微處理器的數據總線
32位微處理器的數據總線由32條數據線D0~D31構成,D31爲最高位,D0爲最低位。微處理器經過這些數據線與存儲器及I/O設備之間進行並行通訊。傳輸的信息有:對存儲器的 讀/寫 數據與指令,對I/O設備的輸入或輸出數據、命令代碼及狀態,以及讀取來自中斷控制器的中斷號等。
⑵字節容許信號在數據傳輸中的做用
在一個總線週期內,微處理器經過數據總線能夠傳輸一個字節,也能夠傳輸一個字或一個雙字。所以,微處理器必須告訴外部電路數據將經過數據總線的那一部分進行傳輸,微處理器是經過激活相應的字節容許信號來作到這一點。其中:
對應於數據線D0~D7
對應於數據線D8~D15
對應數據線D16~D23
對應數據線D24~D31
若是從存儲器或I/O設備 讀/寫 一個數據字節,則使用1個;讀/寫 一個數據字,使用2個
;讀寫一個數據雙字使用4個
。字節容許信號與數據總線的關係以下圖:
假設:字節容許代碼,將會產生多少字節的數據寬度?數據傳輸通過哪些數據線?
從上表能夠知道,它傳輸一個數據字,而且是通過數據線D16~D31傳輸的。
③控制信號線
⑴總線週期指示信號
總線週期指示信號是指。總線週期指示信號並非直接對存儲器和I/O設備接口的控制信號,而是在每一個總線週期開始時發出總線週期指示碼,而後,在微處理器外部的總線控制邏輯電路中,對三個總線週期指示信號所組成的總線週期指示碼進行譯碼,產生對存儲器和I/O設備接口的控制信號
。下面先來看看兩個名詞。
●總線週期
總線週期是微處理器完成一次對存儲器或I/O設備端口讀/寫操做的過程。
所以,總線週期是處理器與外部交換數據的基本過程,而且,總線週期有不一樣的類型。
●總線週期類型
總線週期類型是由微處理器的總線週期指示信號及有關控制信號通過譯碼產生的存儲器
讀/寫信號、I/O讀/寫信號和中斷回答信號等不一樣控制信號類型。
可見,總線週期指示信號與微處理器的其餘控制信號配合,才能產生存儲器和I/O設備接口的控制信號。
3個總線週期只是信號能夠有8種組合,即有8種總線週期指示碼來給出8種不一樣類型的總線週期。總線週期指示信號與總線週期類型的關係以下圖:
例如:若總線週期指示碼=010,則將產生什麼類型的總線週期?
經過查表,咱們能夠知道,總線週期類型是:I/O數據讀。於是產生,
它從I/O設備讀取數據。
⑵地址線A20屏蔽信號
A20屏蔽信號使處理器把地址限制在00000000h~000FFFFFh之間,就像8086處理器同樣。這使得處理器系統能夠像8086微處理器的1MB模式存儲器系統同樣工做。當訪問1MB之內的存儲空間時,屏蔽地址A20,
置=0;當訪問1MB以上的存儲空間時,則開放地址線A20,置
=1.
⑶其餘控制信號
●地址狀態信號邏輯0有效。
當它有效時,表示總線週期指示碼()、
字節容許碼()以及地址信號碼(
)全爲穩定狀態,
代表總線週期指示碼和地址信號碼有效的。
●準備好信號邏輯0有效。
當它無效時,表示存儲器或I/O設備還沒有準備好,要求在當前總線週期中插入等待狀態。
只有當它變爲有效時,即慢速存儲器或I/O設備準備好時,才容許與微處理器交換數據。
●總線封鎖信號邏輯0有效。
當它有效時,封鎖共享資源,以獨佔使用。此信號用於支持多處理器結構。
④微處理器面向外部中斷的接口信號
面向外部硬件中斷的信號有兩種:可屏蔽中斷請求和不可屏蔽中斷請求
。
⑴可屏蔽中斷請求
INTR邏輯1有效。當它有效時,代表I/O設備須要獲得服務。微處理器識別出一個有效的中斷請求後,
在條件容許時,啓動一箇中斷響應總線週期,其總線週期指示碼爲000.這個總線週期指示碼被送
到總線控制邏輯電路譯碼,產生一箇中斷響應信號,通知I/O設備中斷請求已經獲得贊成,
並經過數據線從外部中斷控制器讀取中斷類型號。這樣就完成了中斷請求與中斷響應的握手過程。
可見,中斷響應信號,並非由微處理器直接發出的。
⑵不可屏蔽中斷請求
上述可屏蔽中斷請求能夠經過對標誌寄存器的IF位置1或者置0來予以容許或禁止。
而不可屏蔽中斷請求則不能。只要在
端出現0到1的跳變,一箇中斷服務請求就
被封鎖在微處理器以內,而與IF位的狀態無關。
⑤微處理器面向的接口信號
面向外部DMA控制器的信號只有兩個:和
。
當外部的DMA控制器要求佔用總線控制權時,它就經過HOLD信號向微處理器或者仲裁器提出申請。在當前總線週期完成後,微處理器就進入保持狀態, 使總線信號處於高阻態,並經過HLDA信號線通知外部DMA控制器它已經交出了總線控制權。這樣就完成了保持請求/保持響應的握手過程。
至於DMA控制器什麼時候要求佔用總線控制權,這是由I/O設備決定的,即當I/O設備須要與存儲器進行DMA方式數據傳輸時,由I/O設備向DMA控制器提出請求DREQ,而後才由DMA控制器向微處理器發總線保持請求HOLD,申請佔用總線控制權。
2、存儲器系統
①存儲器的分類
存儲器可分爲主存儲器和輔助存儲器。而主存儲器包括只讀存儲器ROM和隨機存儲器RAM。輔助存儲器有閃盤、硬盤等。
(一)ROM存儲器
ROM存儲器是將程序或者數據已經寫入,可是用戶只能讀取,故稱爲只讀存儲器。好比:系統配置的BIOS程序就是存放在ROM存儲器中的,而且不會由於停電而丟失,所以,開機就能夠運行其中的引導程序。
由於只讀不寫,故ROM存儲器只設置輸出容許和芯片容許
控制信號。
當存儲在ROM中的程序或者數據須要改變,並且又要長期保存,而且在關機停電後不會丟失時,能夠採用另一種ROM,他們是EPROM和 EEPROM,前者叫作可擦除可編程只讀存儲器,如:2716EPROM。後者叫電可擦除可編程只讀存儲器,它不須要經過專用的工具(編程器)來擦除,然 後再重寫。
此外,快閃存儲器與下面將要討論的SRAM存儲器的惟一區別是快閃存儲器須要12V編程電壓來擦除原有的數據和寫新的數據。
(二)RAM存儲器
RAM存儲器能夠隨時從中讀取或者寫入程序與數據,故稱爲隨機存取存儲器。因此,RAM存儲器除了設置輸出容許和輸入容許
控制信號外,還須要設置寫容許信號線。一旦關機或者停電,就會丟失全部數據。
RAM存儲器可分爲靜態SRAM和動態DRAM。其差異在因而否要求RAM中的信息進行定時刷新(週期性地讀取或者寫入),靜態SRAM在信息寫入以後,不須要額外進行刷新就能維持,而動態RAM要維持寫入的信息不小時,就必須不斷地刷新。
②存儲器件的外部特性
爲了與微處理器鏈接而且交換信息,存儲器件一半均可以有如下(引腳)信號線:
●地址線(輸入)
用來選擇存儲器件中的存儲單元。地址線老是被標爲從最低位A0到An。
●數據線(雙向)
用來從存儲單元讀寫數據。一般標爲D0~Dn
●選擇線(輸入)
用於選擇或容許存儲器件芯片,稱爲片選或者片容許
。若是
或者
有效,
則存儲器件執行一次讀/寫操做;若無效,則存儲器件被關閉,也就是不能執行讀/寫操做。
●控制線(輸入)
用來控制存儲器件數據的輸入或者輸出。ROM與RAM的控制線稍微有不一樣:
a:ROM使用輸出容許控制信號,若
有效,且
有效,則容許輸出;
b:RAM使用一條或者兩條控制線,使用一條控制線時就是。
當=1時,容許讀(輸入);
當=0時,容許寫(輸出);
③存儲器地址空間的存儲體組織
(一)存儲器地址空間的存儲體組織
32位微處理器,在保護模式下32位地址線能夠造成4GB的物理存儲器地址空間。
從軟件的觀點來看,存儲器能夠按字節來尋址,其地址範圍是從00000000h~FFFFFFFFh。
從硬件的觀點來看,此物理地址空間由4個獨立的字節寬度的存儲體(Bank0~Bank3)組成32位寬度的存儲器,以下圖:
這種32位寬度的存儲器組織結構容許以字節、字或者雙字爲單位訪問存儲器。
(二)存儲器地址空間的訪問格式
雖然32位存儲器地址空間在硬件上是以雙字存儲單元組織的,但在軟件上實際訪問存儲器時,不必定都是固定以雙字存儲單元進行存取,而是有3中不一樣寬度,即3中訪問格式:
a:訪問雙字的1個字節
能夠訪問雙字中4個字節的任何一個字節,具體訪問哪個字節,取決於
哪個字節容許信號有效,以下圖:
只有,其餘的字節容許都無效,表示訪問保存在Bank1中的字節數據D8~D15.
b:訪問雙字中的一個字
能夠訪問雙字中2個字的任何一個字,具體訪問哪個字,取決於哪2個字節容許信號同時有效。
以下圖:
圖中表示訪問保存在Bank0和Bank1中的字數據D0~D15。
c:同理,訪問一個雙字的道理也是同樣的,以下圖:
I/O系統
①I/O 的地址空間
32位微處理器的I/O子系統的地址空間與早期的8086微處理器的I/O系統徹底兼容。I/O地址線都是16根,故系統中的I/O空間都是64KB,而且都採用IN和OUT指令在微處理器和I/O設備間傳輸I/O數據。
I/O接口一般鏈接的是8位的I/O設備,如打印機和鍵盤。不過如今已經有16位甚至32位的I/O設備,如圖像顯示器接口等。這些更寬的I/O通道提升了微處理器到I/O設備間的數據傳輸率。
對32位的I/O設備,I/O地址線A0~A1不出現,端口地址線是A2~A15,而且用來選擇傳輸一個字節、字、雙字的I/O數據。
以上是獨立編址的I/O空間,對存儲器映射的I/O系統就有所不一樣,若是採用存儲器映射的I/O,那麼I/O空間的大小能夠比64KB大得多。對存儲器映射的I/O,由於I/O設備被當成存儲器,故用於在微處理器與存儲器系統之間傳輸數據的指令均可用來進行I/O傳輸。
②微處理器與I/O系統的接口
(一)I/O系統接口的任務
I/O系統接口的任務是,把微處理器的地址、數據和控制信號線轉換成外圍支持接口芯片相應的信號線。具體任務以下:
(1)提供外圍接口芯片的選擇信號,這個由I/O地址譯碼電路完成;
(2)提供I/O讀/寫控制信號,這個由總線控制邏輯電路實現;
(3)提供I/O數據傳輸方向控制信號,這個由數據總線收發器執行;
(4)提供I/O寫數據寬度的控制信號,這個由I/O存儲器寫控制邏輯電路完成;
③總線
(一)地址總線
用於尋址存儲器的一個存儲單元或者I/O設備的一個I/O端口(寄存器)。
若是尋址I/O,則地址總線包含0000h~FFFFh的16位I/O地址。16位I/O地址能夠選擇64K個不一樣的8位I/O設備。
若是尋址存儲器,則地址總線包含存儲器地址,地址總線寬度隨着微處理器的不一樣而變化。16位微處理器尋址1MB存儲器,使用20位地址選擇 00000H~FFFFFH之間的單元。32位微處理器尋址4GB存儲器,用32位地址選擇00000000h~FFFFFFFFh之間的單元。
(二)數據總線
用於在微處理器與它的存儲器和I/O地址空間之間傳輸信息。Inter微處理器系列各個成員傳輸數據的寬度各不相同,從8位到64位寬。全部微處理器的存儲器容量都按字節計算。
8088有8位數據總線,一次傳輸8位數據;
8086有16位數據總線,一次傳輸16位數據;
32位微處理器一次傳輸32爲數據;
較寬數據總線的優點在與可以提升數據傳輸的速度。
(三)控制總線
用於控制存儲器或者I/O設備完成讀/寫操做,大多數微機系統都是有4條控制線:存儲器讀控制、
存儲器寫控制、I/O寫控制
。控制信號是低電平有效。
例如:
若是=0,則微處理器將經過數據總線向一個I/O設備寫數據,而且該設備的地址出如今地址總線上。
微處理器讀取一個存儲單元的內容時,線經過地址總線發出一個存儲器地址,而後發出存儲器控制信號(),便從目的存儲器讀取數據,最後將從存儲器讀出的數據經過數據總線送到微處理器。當向存儲器寫時,按同理一次進行,區別是發出的是寫操做控制信號,而數據則是經過數據總線從微處理器傳出。