CPU 的結構和功能
文章目錄
- CPU 的結構和功能
- 8.1 CPU的結構
- 8.1.1 CPU的功能
- 8.1.2 CPU結構框圖
- 8.1.3 CPU的寄存器
- 8.1.4 控制單元CU和中斷系統
- 8.2 指令周期
- 8.2.1 指令周期的基本概念
- 8.2.2 指令周期的數據流
- 8.3 指令流水
- 8.3.1 指令流水原理
- 8.3.2 影響流水線性能的因素
- 8.3.3 流水線性能
- 8.3.4 流水線中的多發技術
- 8.3.5 流水線結構
- 8.4 中斷系統
- 8.4.1 概述
- 8.4.1.1 引發中斷的因素
- 8.4.1.2 中斷系統需解決的問題(功能)
- 8.4.2 中斷請求標記和中斷判優邏輯
- 8.4.2.1 中斷請求標記
- 8.4.2.2 中斷判優邏輯
- 8.4.3 中斷服務程序入口地址的尋找
- 8.4.4 中斷響應
- 8.4.4.1 響應中斷的條件
- 8.4.4.2 響應中斷的時間
- 8.4.4.3 中斷隱指令
- 8.4.5 保護現場和恢復現場
- 8.4.6 中斷屏蔽技術 - 多重中斷
- 8.4.6.1 多重中斷的概念
- 8.4.6.2 實現多重中斷的條件
- 8.4.6.3 (中斷)屏蔽技術
- 8.4.6.4 多重中斷的斷點保護
8.1 CPU的結構
8.1.1 CPU的功能
- 控制器的功能
- 取指令:把指令從內存中取出
- 分析指令:分析指令包括兩部分內容:其一,分析此指令要完成什么操作,即控制器需發出什么操作命令;其二,分析參與這次操作的操作數地址,即操作數的有效地址。
- 執行指令:根據分析指令產生的“操作命令"和“操作數地址”的要求,形成操作控制信號序列(不同的指令有不同的操作控制信號序列),通過對運算器、存儲器以及I/O設備的操作,執行每條指令。
- 控制程序的輸入以及結果的輸出
- 總線的管理
- 處理異常情況和特殊請求
- 運算器的功能:實習算術運算和邏輯運算
- CPU的功能需求:
- 具有控制程序的順序執行(稱指令控制)
- 產生完成每條指令所需的控制命令(稱操作控制)
- 對各種操作加以時間上的控制(稱時間控制)
- 對數據進行算術運算和邏輯運算(數據加工)
- 處理中斷
8.1.2 CPU結構框圖
- CPU與系統總線
8.1.3 CPU的寄存器
-
用戶可見寄存器
-
通用寄存器
存放操作數,如8086系統中的AX、BX…
也可以做某種尋址方式所需要的專用寄存器。 -
數據寄存器
存放操作數,滿足各種數據類型,如整型數據的寄存器、浮點數類型的寄存器…
兩個寄存器拼接存放雙倍字長數據,例如在乘法操作時,就將ACC與MQ拼接在一起,保存相乘后的積。 -
地址寄存器
存放地址,其位數應滿足最大的地址范圍。如8086系統中的段寄存器,如段基址、棧指針。
-
條件碼寄存器
存放條件碼,可作程序分支依據。如正、負、零、溢出、進位等。
-
-
用戶不可見寄存器
-
控制寄存器
-
狀態寄存器
反映指令執行結果的情況、計算機軟件硬件狀態。
狀態寄存器和條件碼寄存器類似 —— 用于存放條件碼
PSW寄存器:程序狀態字寄存器,用于存放程序狀態字。
程序狀態字:在中斷或者是子程序調用過程當中,為了能夠使程序正確的返回斷點,返回斷點后能夠繼續執行給定的程序,在中斷或者轉子程序之前,就要保存主程序的運行現場和程序斷點,這些運行現場和斷點包括了程序運行的軟件信息和硬件信息,這些信息保存在寄存器當中,有些表示程序運行狀態的寄存器可以通過指令集當中的指令進行讀/寫,有一些不能通過指令集中的指令進行讀,因為涉及到的狀態比較多,如果為每一個狀態都設計一條指令來進行讀,則指令集會變得非常龐大。
為了完成程序現場和程序斷點的保存,就將這些軟硬件狀態相關的寄存器集合成一個大的寄存器,這個寄存器就是程序狀態字,程序狀態字比較長,有些程序狀態字可以達到幾千位。
可以通過交換程序狀態字的方式,來完成程序現場的切換,使得程序中斷當中,保存程序斷點以及恢復程序斷點比較容易。
-
8.1.4 控制單元CU和中斷系統
-
控制單元CU
- 產生全部指令的微操作命令序列。任何一條指令,要在CPU上執行,CPU要對指令進行譯碼,根據這是什么樣的指令,完成對應的功能,要產生完成這些功能需要的微操作命令,并且保證這些命令的順序。
- CU有兩種設計方式
- 組合邏輯設計,完全由組合邏輯硬件(硬連線邏輯)來實現,這種方式速度快,如RISC計算機控制器的實現都是采用硬連線邏輯。
- 微程序設計,采用存儲邏輯進行設計,設計簡單,適用于復雜功能的指令的設計。
-
中斷系統
詳細內容在8.4節
8.2 指令周期
8.2.1 指令周期的基本概念
-
指令周期
取出并執行一條指令所需的全部時間(解釋一條指令需要的全部時間)
8.2.2 指令周期的數據流
-
取值周期的數據流
-
間址周期的數據流
-
執行周期的數據流
不同指令的執行周期的執行數據流不同。詳細見第九章。
-
中斷周期的數據流
8.3 指令流水
-
提高機器速度
-
提高訪存速度
- 使用高性能/高速度芯片
- 使用Cache
- 使用多體并行:對多個存儲體進行交叉訪問,在一個存儲周期當中,有多個存儲體可以向CPU提供數據(CPU可以向同時取得多個存儲體數據)。
-
提高I/O與主機之間的傳送速度
- 程序查詢方式(CPU 和 I/O 串行工作 )→ 程序中斷方式 → DMA → 通道 → I/O處理機
- 使用多總線方式進行傳送
-
提高運算器的速度
- 使用高性能芯片
- 改進算法
- 快速進位鏈
-
為了提高整機處理能力,除了使用高速部件之外,還可以改進系統結構(處理器的體系結構),開發系統的并行性。
-
-
系統的并行性
-
并行 - 時間上互相重疊
- 并發 兩個或兩個以上事件在同一時間段發生
- 同時兩個或兩個以上事件在同一時刻發生
-
并行性的等級
- 過程級(程序、進程) 粗粒度 軟件實現
- 指令級ILP 細粒度 硬件實現
- (指令之間) 兩條或多條指令之間,在同一時刻都處于被解釋的狀態
- (指令內部) 指令內部的操作、微操作之間并行的操作。
-
8.3.1 指令流水原理
8.3.2 影響流水線性能的因素
-
結構相關 —— 不同指令爭用同一功能部件產生資源沖突。
-
數據相關 —— 不同指令因重疊操作,可能改變操作數的讀/寫訪問順序。
-
控制相關 —— 由轉移指令引起
8.3.3 流水線性能
單位時間內流水線所完成的指令或者輸出結果的數量。
? 設 m 段流水線各段時間為 Δt
-
最大吞吐率
流水線滿負荷運轉,沒有各種阻礙流水線性能因素的影響(結構相關、數據相關、轉移等)所能達到的最大的吞吐率是多少,即流水線在連續流動達到穩定狀態后所獲得的吞吐率。
T p m a x = 1 Δ t \mathrm{T}_{pmax} = \frac{1}{\Delta{t}} Tpmax?=Δt1?
-
實際吞吐率
實際上由于流水線在開始時有一段建立時間、結束時有一段排空時間以及各種相關因素使流水線無法連續流動,所以實際吞吐率總是小于最大吞吐率。
流水線滿負荷運轉,一段時間內,完成的指令條數n除以完成這些指令花費的時間。
T p = n m ? Δ t + ( n ? 1 ) ? Δ t = 1 Δ t ? [ 1 + m ? 1 n ] = T p m a x 1 + m ? 1 n \mathrm{T}_{p} = \frac{n}{{m}\cdot\Delta{t} + (n-1)\cdot\Delta{t}} = \frac{1}{\Delta{t}\cdot\left[ 1 + \frac{m-1}{n}\right]} = \frac{\mathrm{T}_{pmax}}{1 + \frac{m-1}{n}} Tp?=m?Δt+(n?1)?Δtn?=Δt?[1+nm?1?]1?=1+nm?1?Tpmax??例如 一條指令分為 m = 6 段,總共 n = 9 條指令 第一條指令花費時間是 6Δt,總共是 6 Δ t + ( 9 ? 1 ) Δ t = 14 Δ t 6\Delta{t} + (9-1)\Delta{t} = 14\Delta{t} 6Δt+(9?1)Δt=14Δt 那么實際吞吐率為 9 14 Δ t \frac{9}{14 \Delta{t}} 14Δt9?
僅當 n ? m n \gg m n?m (n 遠大于m)時,才會有 T p ≈ T p m a x \mathrm{T}_{p} \approx \mathrm{T}_{pmax} Tp?≈Tpmax?
lim ? n ? m → + ∞ T p = lim ? n ? m → + ∞ n m ? Δ t + ( n ? 1 ) ? Δ t = T p m a x \lim_{n-m \to +\infty}\mathrm{T}_{p} = \lim_{n-m \to +\infty} \frac{n}{m\cdot\Delta{t} + (n-1)\cdot\Delta{t}} = \mathrm{T}_{pmax} n?m→+∞lim?Tp?=n?m→+∞lim?m?Δt+(n?1)?Δtn?=Tpmax? -
加速比 Sp
m段流水線采用流水線技術和不采用流水線技術兩種方法速度的比值,用來衡量流水線的效果。
完成n條指令在m段流水線上共需
T = m ? Δ t + ( n ? 1 ) ? Δ t T = {m}\cdot\Delta{t} + (n-1)\cdot\Delta{t} T=m?Δt+(n?1)?Δt
完成n條指令在等效的非流水線上共需
T ′ = n ? m ? Δ t T' = {n}\cdot{m}\cdot\Delta{t} T′=n?m?Δt
則加速比
S p = T ′ T = n ? m ? Δ t m ? Δ t + ( n ? 1 ) ? Δ t = n ? m m + ( n ? 1 ) = m 1 + m ? 1 n S_p = \frac{T'}{T} = \frac{{n}\cdot{m}\cdot\Delta{t}}{{m}\cdot\Delta{t} + (n-1)\cdot\Delta{t}} = \frac{{n}\cdot{m}}{m + (n-1)} = \frac{m}{1 + \frac{m-1}{n}} Sp?=TT′?=m?Δt+(n?1)?Δtn?m?Δt?=m+(n?1)n?m?=1+nm?1?m?
可以看出, 在 n ? m n \gg m n?m (n 遠大于m)時, Sp 接近于m, 即當流水線各段時間相等時,其最大加速比等于流水線的段數。
lim ? n ? m → + ∞ S p = lim ? n ? m → + ∞ n ? m ? Δ t m ? Δ t + ( n ? 1 ) ? Δ t = m \lim_{n-m \to +\infty}\mathrm{S}_{p} = \lim_{n-m \to +\infty} \frac{{n}\cdot{m}\cdot\Delta{t}}{m\cdot\Delta{t} + (n-1)\cdot\Delta{t}} = m n?m→+∞lim?Sp?=n?m→+∞lim?m?Δt+(n?1)?Δtn?m?Δt?=m -
效率 E
E = n ? m ? Δ t m ? ( m + n ? 1 ) = n m + n ? 1 = S p m = T p ? Δ t E = \frac{{n} \cdot {m} \cdot \Delta {t}}{{m} \cdot {(m+n-1)}} = \frac{n}{m+n-1} = \frac{S_p}{m} = T_p \cdot \Delta{t} E=m?(m+n?1)n?m?Δt?=m+n?1n?=mSp??=Tp??Δt
8.3.4 流水線中的多發技術
-
超標量技術
-
超流水線技術
-
超長指令字技術
在數字信號處理,多媒體信號處理中,用的非常廣泛,由編譯程序挖掘出指令間潛在的并行性(根據計算機當中執行部件的種類和數量來決定), 另外指令之間不能有相關性,編譯器找到了這些可以并行執行的指令,然后將這些指令組合成 一條具有多個操作碼字段的超長指令字(可達幾百位,包括多個操作碼字段,多個操作數字段),這條指令被從計算機的內存中取出,多個操作碼字段進行譯碼,多個并行的部件分別執行相應的操作。
這種方式減少了取指時間,因為每次取出多條指令 -
對比
8.3.5 流水線結構
-
指令流水線
-
運算流水線
?
8.4 中斷系統
8.4.1 概述
8.4.1.1 引發中斷的因素
8.4.1.2 中斷系統需解決的問題(功能)
- 各中斷源如何向CPU提出中斷請求
- 有多個中斷源同時提出請求怎么辦
- 有中斷源提出中斷請求,CPU什么條件、什么時間、以什么方式響應中斷
- 如何保護斷點、現場
- 如何尋找中斷服務程序入口地址
- 如何恢復現場、斷點
- 如果在處理中斷的過程當中又出現了新的中斷怎么辦
? 用軟件+硬件的方式來實現中斷系統需要的功能
? 不同的計算機對中斷系統的軟硬件功能的劃分是不一樣的主要依據于要設計的中斷系統的速度、設計的復雜度和設計的靈活性這三個方面考量折中。
8.4.2 中斷請求標記和中斷判優邏輯
8.4.2.1 中斷請求標記
每一個中斷源設計一個觸發器INTR,用這個觸發器來標記這個中斷源是否提出了中斷請求,每一個中斷源對應都一個中斷請求標志觸發器,多個中斷源對應的多個中斷請求標志觸發器從邏輯上組成中斷請求標志寄存器。
8.4.2.2 中斷判優邏輯
如果有多個中斷源同時提出中斷請求,需要響應最重要的那個,所以要把中斷源根據重要性進行分級,即中斷源的優先級。用中斷判優邏輯來確定在現有的的中斷請求源當中哪個優先級最高,就響應哪個中斷。
-
硬件實現(排隊器)
在現代計算機當中,大部分CPU都是用硬件來實現中斷判優邏輯
-
軟件實現(程序查詢)
8.4.3 中斷服務程序入口地址的尋找
-
硬件向量法
硬件實現速度快,但是設計的靈活性比較低。
-
軟件查詢法
軟件的方法顯然更加靈活,如果想改變中斷服務的優先級,就改變中斷識別程序的順序即可
8.4.4 中斷響應
8.4.4.1 響應中斷的條件
并不是中斷源提出中斷服務請求CPU就要立即響應,為了表示CPU是否允許響應中斷請求,CPU內部有一個EINT允許中斷觸發器,只有EINT = 1的時候,才會響應中斷請求。
CPU只能支持單重中斷
單重中斷在CPU執行中斷服務程序的過程中不能被打斷。當有新的更高優先級的中斷發生時,正在執行的中斷服務程序不會被暫停,轉而執行新的中斷服務程序。
8.4.4.2 響應中斷的時間
不是任何時間
- 一般的機器CPU只有在指令執行階段結束以后才能響應中斷請求。
- 有些計算機某些指令比較復雜,執行時間可能比較長,為了能夠及時處理異常事件,允許CPU在執行指令的過程中進行中斷響應。通常情況下在指令執行結束之后
在指令執行時中斷,破壞執行狀態,需要保存的現場數據更多,而且恢復現場后還需要重新執行指令,浪費之前指令的執行時間。
8.4.4.3 中斷隱指令
隱指令是指以下面的三個步驟是由硬件完成的的,并不是在某一條具體指令的驅動下完成的
隱指令并不是計算機指令集中的一條,但是在執行響應中斷的時候,這些硬件操作都要進行。
CPU響應中斷后,即進入中斷周期。在中斷周期內,CPU要自動完成一系列操作,具體如下:
-
保護程序斷點
程序斷點就是中斷服務程序結束之后,返回的源程序要執行指令的地址,就是一個地址。
有兩種辦法保護斷點:
- 斷點存于特定地址(比如0號地址)內,這個地址是內存的一塊存儲單元
- 斷點進棧,返回的時候出棧即可
-
尋找服務程序入口地址
有兩種辦法形成服務程序入口地址:
- 向量地址 → PC(硬件向量法),向量地址包含了中斷服務程序的入口地址,或者跳轉指令
- 中斷識別程序 入口地址 M → PC(軟件查詢法)
-
硬件關中斷
為了避免在單重中斷的計算機中,在執行中斷服務程序的過程中,有新的中斷源發出中斷請求,打斷當前中斷服務程序的執行。
即使在多重中斷中 也要在 保護程序斷點和現場的時候關中斷。關中斷就是將 EINT(中斷允許觸發器) 置為0
8.4.5 保護現場和恢復現場
-
保護現場
- 保存斷點 —— 中斷隱指令完成
- 保存寄存器內容 —— 中斷服務程序完成 (CPU中的寄存器在執行中斷服務程序的時候也會用到,這些內容在將來進行中斷返回的時候主程序還要用到)
-
恢復現場 —— 中斷服務程序完成
8.4.6 中斷屏蔽技術 - 多重中斷
8.4.6.1 多重中斷的概念
CPU在執行中斷服務程序的過程中,有新的中斷源提出請求并且新的中斷請求的優先級大于當前請求,就要進行響應
?
8.4.6.2 實現多重中斷的條件
8.4.6.3 (中斷)屏蔽技術
- 屏蔽
使用屏蔽技術,通過設置中斷屏蔽字,來改變優先級,從而提高系統設計和響應的靈活性。中斷屏蔽字就分散保存在中斷屏蔽觸發器中(硬件保存)。所有屏蔽觸發器組合在一起,便構成一個屏蔽字寄存器,屏蔽字寄存器的內容即中斷屏蔽字。屏蔽字與中斷源的優先級別是一一對應的。
-
屏蔽字
-
屏蔽技術可改變處理優先等級
中斷的優先級分為響應優先級和處理優先級:
-
響應優先級:中斷響應優先級是針對同時到達的中斷請求先處理誰的規定。比如A、B同時向CPU發出中斷請求,而中斷響應優先級是A>B,那么CPU就會先處理A,再處理B。不能改變,這是由硬件電路決定的。
-
處理優先級:處理優先級是指CPU 實際對各中斷源請求的處理優先次序。如果不采用屏蔽技術,響應的優先次序就是處理的優先次序。比如A、B兩個中斷的中斷處理優先級是B>A,如果當CPU正在處理中斷請求A時,B向CPU發送了中斷請求,那么CPU會先暫停處理A,轉而處理B,B結束后再繼續處理A。可改變,通過設置中斷屏蔽字,讓一些響應高優先級的中斷源的請求不能參與排隊來重新設置處理優先級。
-
-
新屏蔽字的設置
8.4.6.4 多重中斷的斷點保護
-
斷點可以保存到兩種地方
- 斷點進棧。
- 斷點存入“0”地址,此處的0打引號,并不是真正的物理地址的0地址,而是指定的一個地址
這兩個都是由中斷隱指令完成
-
在中斷周期(也就是解釋指令周期的最后一個階段),要做以下工作
- 保存斷點 0 → MAR(假設保存到到0地址,將0送到MAR)
- 命令存儲器寫
- PC → MDR;PC中保存著斷點,將斷點給MDR
- (MDR) → 存入存儲器
-
在多重中斷中,存在問題:后面的斷點會把前面保存的斷點覆蓋掉
參考:
教材:計算機組成原理 (唐朔飛).pdf
博客:https://blog.csdn.net/weixin_51825055/article/details/133531876
視頻:https://www.bilibili.com/video/BV1t4411e7LH?p=116&vd_source=a89593e8d33b31a56b894ca9cad33d33