5.1 CPU的功能和基本結(jié)構(gòu)
5.1.1 CPU的功能
CPU由運(yùn)算器和控制器構(gòu)成剥懒°迤控制器負(fù)責(zé)協(xié)調(diào)并控制計(jì)算機(jī)各部件執(zhí)行程序的指令序列,基本功能包括取指令播赁、分析指令颂郎、執(zhí)行指令吼渡;運(yùn)算器的功能是對(duì)數(shù)據(jù)進(jìn)行加工容为。CPU的具體功能有
- 指令控制。完成取指令寺酪、分析指令和執(zhí)行指令的操作坎背,即程序的順序控制。
- 操作控制寄雀。一條指令的功能往往是由若干操作信號(hào)的組合來實(shí)現(xiàn)的得滤。CPU管理并產(chǎn)生由內(nèi)存取出的每條指令的操作信號(hào),把各種操作信號(hào)送往相應(yīng)的部件盒犹,從而控制這些部件按指令的要求進(jìn)行動(dòng)作懂更。
- 時(shí)間控制。對(duì)各種操作加以時(shí)間上的控制急膀。時(shí)間控制要為每條指令按時(shí)間順序提供應(yīng)有的控制信號(hào)沮协。
- 數(shù)據(jù)加工。對(duì)數(shù)據(jù)進(jìn)行算術(shù)和邏輯運(yùn)算卓嫂。
- 中斷處理慷暂。對(duì)計(jì)算機(jī)運(yùn)行過程中出現(xiàn)的異常情況和特殊請(qǐng)求進(jìn)行處理。
5.1.2 CPU的基本結(jié)構(gòu)
5.1.2.1 運(yùn)算器
運(yùn)算器主要由以下這些組成
- 算術(shù)邏輯單元:主要功能是進(jìn)行算術(shù)/邏輯運(yùn)算晨雳。
- 通用寄存器組:如AX行瑞、BX、CX餐禁、DX血久、SP等,用于存放操作數(shù)(包括源操作數(shù)帮非、目的操作數(shù)及中間結(jié)果)和各種地址信息等氧吐。SP是堆棧指針,用于指示棧頂?shù)牡刂贰?/li>
- 暫存寄存器:用于暫存從主存讀來的數(shù)據(jù)喜鼓,這個(gè)數(shù)據(jù)不能存放在通用寄存器中副砍,否則會(huì)破壞其原有內(nèi)容。
- 累加寄存器:它是一個(gè)通用寄存器庄岖,用于暫時(shí)存放ALU運(yùn)算的結(jié)果信息豁翎,用于實(shí)現(xiàn)加法運(yùn)算。
- 程序狀態(tài)字寄存器:保留由算術(shù)邏輯運(yùn)算指令或測(cè)試指令的結(jié)果而建立的各種狀態(tài)信息隅忿,如溢出標(biāo)志(OP)心剥、符號(hào)標(biāo)志(SF)邦尊、零標(biāo)志(ZF)、進(jìn)位標(biāo)志(CF)等优烧。PSW中的這些位參與并決定微操作的形成蝉揍。
- 移位器:對(duì)運(yùn)算結(jié)果進(jìn)行移位運(yùn)算。
- 計(jì)數(shù)器:控制乘除運(yùn)算的操作步數(shù)畦娄。
5.1.2.2 控制器
控制器由以下這些部分組成
- 程序計(jì)數(shù)器:用于指出下一條指令在主存中的存放地址又沾。CPU就是根據(jù)PC的內(nèi)容去主存中取指令的。因程序中指令(通常)是順序執(zhí)行的熙卡,所以PC有自增功能杖刷。
- 指令寄存器:用于保存當(dāng)前正在執(zhí)行的那條指令。
- 指令譯碼器:僅對(duì)操作碼字段進(jìn)行譯碼驳癌,向控制器提供特定的操作信號(hào)滑燃。
- 微操作信號(hào)發(fā)生器:根據(jù)IR的內(nèi)容(指令)、PSW的內(nèi)容(狀態(tài)信息)及時(shí)序信號(hào)颓鲜,產(chǎn)生控制整個(gè)計(jì)算機(jī)系統(tǒng)所需的各種控制信號(hào)表窘,其結(jié)構(gòu)有組合邏輯型和存儲(chǔ)邏輯型兩種。
- 時(shí)序系統(tǒng):用于產(chǎn)生各種時(shí)序信號(hào)甜滨,它們都是由統(tǒng)一時(shí)鐘(CLOCK)分頻得到乐严。
- 存儲(chǔ)器地址寄存器:用于存放所要訪問的主存單元的地址。
- 存儲(chǔ)器數(shù)據(jù)寄存器:用于存放向主存寫入的信息或從主存中讀出的信息艳吠。
對(duì)用戶可見的寄存器有PSW,程序寄存器PC,ACC,各種通用寄存器等
對(duì)用戶不可見的寄存器有移位寄存器,暫存寄存器,OP,Ad,IR,存儲(chǔ)器地址寄存器MAR,存儲(chǔ)器數(shù)據(jù)寄存器MDR等
5.2 指令執(zhí)行過程
指令周期:CPU從主存中取出并執(zhí)行一條指令的時(shí)間稱為指令周期麦备。指令周期常常用若干機(jī)器周期來表示,機(jī)器周期又叫CPU周期昭娩。一個(gè)機(jī)器周期又包含若干時(shí)鐘周期(也稱為節(jié)拍凛篙、T周期或CPU時(shí)鐘周期,它是CPU操作的最基本單位)栏渺。
一個(gè)完整的指令周期應(yīng)該包括取址呛梆、間址、執(zhí)行和中斷四個(gè)周期磕诊,為了區(qū)別不同的工作周期填物,可以設(shè)置四個(gè)標(biāo)志觸發(fā)器FE,IND,EX和INT來代表哪個(gè)周期是有效的,各個(gè)周期的數(shù)據(jù)流向如下
- 取址周期
- 當(dāng)前指令地址送至存儲(chǔ)器地址寄存器霎终,記做:(PC) → MAR
- CU發(fā)出控制信號(hào)滞磺,經(jīng)控制總線傳到主存,這里是讀信號(hào)莱褒,記做:1 → R
- 將MAR所指主存中的內(nèi)容經(jīng)數(shù)據(jù)總線送入MDR击困,記做:M(MAR) → MDR
- 將MDR中的內(nèi)容(此時(shí)是指令)送入IR,記做:(MDR) → IR
- CU發(fā)出控制信號(hào)广凸,形成下一條指令地址,記做:(PC)+1 → PC
- 間址周期
- 將指令的地址碼送入MAR,記做:Ad(IR) → MAR或Ad(MDR) → MAR
- CU發(fā)出控制信號(hào)雌澄,啟動(dòng)主存做讀操作,記做:1 → R
- 將MAR所指主存中的內(nèi)容經(jīng)數(shù)據(jù)總線送入MDR蹦浦,記做:M(MAR) → MDR
- 將有效地址送至指令的地址碼字段,記做:(MDR)→ Ad(IR)
- 執(zhí)行周期:執(zhí)行周期的任務(wù)是根據(jù)IR中的指令字的操作碼和操作數(shù)通過ALU操作產(chǎn)生執(zhí)行結(jié)果撞蜂。不同指令的執(zhí)行周期操作不同盲镶,因此沒有統(tǒng)一的數(shù)據(jù)流向。
- 中斷周期
- CU控制將SP減1谅摄,修改后的地址送入MAR徒河,記做:(SP)-1 → SP系馆,(SP) → MAR
- CU發(fā)出控制信號(hào)送漠,啟動(dòng)主存做寫操作,記做:1 → W
- 將斷點(diǎn)(PC內(nèi)容) 送入MDR由蘑,記做:(PC) → MDR
- CU控制將中斷服務(wù)程序的入口地址(由向量地址形成部件產(chǎn)生)送入PC闽寡,記做:向量地址→ PC
中斷:暫停當(dāng)前任務(wù)去完成其他任務(wù)。為了能夠恢復(fù)當(dāng)前任務(wù)尼酿,需要保存斷點(diǎn)爷狈。一般使用堆棧來保存斷點(diǎn),這里用SP表示棧頂?shù)刂飞亚妫僭O(shè)SP指向棧頂元素涎永,進(jìn)棧操作是先修改指針,后存入數(shù)據(jù)鹿响。
一個(gè)指令周期通常要包括幾個(gè)時(shí)間段(執(zhí)行步驟)羡微,每個(gè)步驟完成指令的一部分功能,幾個(gè)依次執(zhí)行的步驟完成這條指令的全部功能惶我。
- 單指令周期:對(duì)所有指令都選用相同的執(zhí)行時(shí)間來完成妈倔。指令之間串行執(zhí)行;指令周期取決于執(zhí)行時(shí)間最長(zhǎng)的指令的執(zhí)行時(shí)間绸贡。對(duì)于那些本來可以在更短時(shí)間內(nèi)完成的指令盯蝴,要使用這個(gè)較長(zhǎng)的周期來完成,會(huì)降低整個(gè)系統(tǒng)的運(yùn)行速度听怕。
- 多指令周期:對(duì)不同類型的指令選用不同的執(zhí)行步驟來完成捧挺。指令之間串行執(zhí)行;可選用不同個(gè)數(shù)的時(shí)鐘周期來完成不同指令的執(zhí)行過程尿瞭。需要更復(fù)雜的硬件設(shè)計(jì)闽烙。
- 流水線方案:在每一個(gè)時(shí)鐘周期啟動(dòng)一條指令,盡量讓多條指令同時(shí)運(yùn)行筷厘,但各自處在不同的執(zhí)行步驟中鸣峭。指令之間并行執(zhí)行宏所。
5.3 數(shù)據(jù)通路的功能和基本結(jié)構(gòu)
數(shù)據(jù)通路:數(shù)據(jù)在功能部件之間傳送的路徑。
- CPU內(nèi)部單總線模式:將所有寄存器的輸入端和輸出端都連接到一條公共通路上摊溶,這種結(jié)構(gòu)比較簡(jiǎn)單爬骤,但數(shù)據(jù)傳輸存在較多的沖突現(xiàn)象,性能較低莫换。連接各部件的總線只有一條時(shí)霞玄,稱為單總線結(jié)構(gòu);CPU中有兩條或更多的總線時(shí),構(gòu)成雙總線結(jié)構(gòu)或多總線結(jié)構(gòu)拉岁。
內(nèi)部總線是指同一部件坷剧,如CPU內(nèi)部連接各寄存器及運(yùn)算部件之間的總線;
系統(tǒng)總線是指同一臺(tái)計(jì)算機(jī)系統(tǒng)的各部件喊暖,如CPU惫企、內(nèi)存、通道和各類I/O接口間互相連接的總線陵叽。
-
寄存器之間數(shù)據(jù)傳送
- 比如把PC內(nèi)容送至MAR狞尔,實(shí)現(xiàn)傳送操作的流程及控制信號(hào)為:
- (PC)→Bus PCout有效,PC內(nèi)容送總線
- Bus→MAR MARin有效巩掺,總線內(nèi)容送MAR
-
主存與CPU之間的數(shù)據(jù)傳送
- 比如CPU從主存讀取指令偏序,實(shí)現(xiàn)傳送操作的流程及控制信號(hào)為:
- (PC)→Bus→MAR PCout和MARin有效,現(xiàn)行指令地址→MAR
- 1→R CU發(fā)讀命令(通過控制總線發(fā)出胖替,圖中未畫出)
- MEM(MAR)→MDR MDRin有效
- MDR→Bus→IR MDRout和IRin有效研儒,現(xiàn)行指令→IR
-
執(zhí)行算術(shù)或邏輯運(yùn)算
- 比如一條加法指令,微操作序列及控制信號(hào)為:
- Ad(IR)→Bus→MAR MDRout和MARin有效
- 1→R CU發(fā)讀命令
- MEM(MAR)→數(shù)據(jù)線→MDR MDRin有效
- MDR→Bus→Y MDRout和Yin有效独令,操作數(shù)→Y
CPU內(nèi)部三總線方式
專用數(shù)據(jù)通路方式:根據(jù)指令執(zhí)行過程中的數(shù)據(jù)和地址的流動(dòng)方向安排連接線路端朵,避免使用共享的總線,性能較高记焊,但硬件量大逸月。
5.4 控制器的功能和工作原理
5.4.1 硬布線控制器的設(shè)計(jì)
根據(jù)指令操作碼、目前的機(jī)器周期遍膜、節(jié)拍信號(hào)碗硬、機(jī)器狀態(tài)條件,即可確定現(xiàn)在這個(gè)節(jié)拍下應(yīng)該發(fā)出哪些“微命令”
微操作控制信號(hào)由組合邏輯電路根據(jù)當(dāng)前的指令碼瓢颅、狀態(tài)和時(shí)序恩尾,即時(shí)產(chǎn)生
每個(gè)輸出的控制信號(hào)對(duì)應(yīng)一個(gè)微命令,也就是對(duì)應(yīng)一個(gè)微操作
如:要讓C1對(duì)應(yīng)微操作(PC)->MAR挽懦,則將其接到PCout翰意、MARin即可
設(shè)計(jì)步驟:
- 分析每個(gè)階段的微操作序列(取值、間址、執(zhí)行冀偶、中斷四個(gè)階段)
- 取指周期(所有指令都一樣)
PC→MAR
1 →R
M ( MAR ) →MDR
MDR →IR
OP ( IR ) →ID
( PC ) + 1→PC
- 間址周期(所有指令都一樣)
Ad(IR) →MAR
1→R
M ( MAR )→MDR
MDR→Ad(IR)
- 執(zhí)行周期(各不相同)
CLA(ACC清零)
COM(ACC取反)
SHR(算術(shù)右移)
CSL(循環(huán)左移)
STP(停機(jī))
ADD X(加法指令)
STA X(存數(shù)指令)
LDA X(取數(shù)指令醒第,把X所指內(nèi)容取到ACC)
JMP X(無條件轉(zhuǎn)移)
BAN X(條件轉(zhuǎn)移,當(dāng)ACC為負(fù)時(shí)轉(zhuǎn)移)
安排微操作時(shí)序的原則:
- 微操作的先后順序不得隨意更改
- 被控對(duì)象不同的微操作盡量安排在一個(gè)節(jié)拍內(nèi)完成
- 占用時(shí)間較短的微操作盡量安排在一個(gè)節(jié)拍內(nèi)完成并允許有先后順序
選擇CPU的控制方式(采用定長(zhǎng)機(jī)器周期還是不定長(zhǎng)機(jī)器周期进鸠?每個(gè)機(jī)器周期安排幾個(gè)節(jié)拍稠曼?)
安排微操作時(shí)序(如何用3個(gè)節(jié)拍完成整個(gè)機(jī)器周期內(nèi)的所有微操作?)
- 電路設(shè)計(jì)(確定每個(gè)微操作命令的邏輯表達(dá)式客年,并用電路實(shí)現(xiàn))
硬布線控制器一般用于RISC(精簡(jiǎn)指令集系統(tǒng))
此擴(kuò)充指令較困難霞幅,執(zhí)行速度很快.
5.4.2 微程序控制器
5.4.2.1 微程序控制器的基本概念
微程序:一個(gè)微程序由微指令序列組成,每一種指令對(duì)應(yīng)一個(gè)微程序
微命令:在微程序控制的計(jì)算機(jī)中量瓜,將控制部件向執(zhí)行部件發(fā)出的各種控制命令稱為微命令
微指令:微指令是若干微命令的集合司恳,一條微指令通常包括
- 操作控制字段,用于產(chǎn)生某一步操作所需的各個(gè)操作控制信號(hào)绍傲。
- 順序控制字段扔傅,用于控制產(chǎn)生下一條要執(zhí)行的微指令地址
微命令與微操作一一對(duì)應(yīng)
微指令中可能包含多個(gè)微命令
5.4.2.2 微程序控制器的基本結(jié)構(gòu)
- 控制存儲(chǔ)器CM:用于存放各指令對(duì)應(yīng)的微程序,控制存儲(chǔ)器可用只讀存儲(chǔ)器ROM構(gòu)成唧取。
- 微指令寄存器CMDR:用于存放從CM中取出的微指令铅鲤,它的位數(shù)同微指令字長(zhǎng)相等。
- 微地址形成部件:產(chǎn)生初始微地址和后繼微地址枫弟,以保證微指令的連續(xù)執(zhí)行。
- 微地址寄存器CMAR:微地址寄存器鹏往,接收微地址形成部件送來的微地址淡诗,為在CM中讀取微指令作準(zhǔn)備。
- 地址譯碼:將地址碼轉(zhuǎn)化為存儲(chǔ)單元控制信號(hào)伊履。
5.4.2.3 微程序控制器的工作原理
指令周期=取值周器→間址周期→執(zhí)行周期→中斷周期韩容。其中間址、中斷周期可有可無
處理取指周期唐瀑、間址周期群凶、中斷周期的微指令序列通常是公用的。執(zhí)行周期的微指令序列各不相同
取指周期的微指令序列固定從#0開始存放哄辣。執(zhí)行周期的微指令序列的存放根據(jù)指令操作碼確定
取指周期微程序通常是公用的请梢,故如果某指令系統(tǒng)中有n條機(jī)器指令,則CM中微程序的個(gè)數(shù)至少是n+1個(gè)
一些早期的CPU力穗、物聯(lián)網(wǎng)設(shè)備的CPU可以不提供間接尋址和中斷功能毅弧,因此這類CPU可以不包含間址周期、中斷周期的微程序段
物理上当窗,取指周期够坐、執(zhí)行周期看起來像是兩個(gè)微程序,但邏輯上應(yīng)該把它們看作一個(gè)整體。因此元咙,“一條指令對(duì)應(yīng)一個(gè)微程序”的說法是正確的
5.4.2.4 微指令的格式
- 水平型微指令:一條微指令能定義多個(gè)可并行的微命令梯影。
優(yōu)點(diǎn):微程序短,執(zhí)行速度快庶香;
缺點(diǎn):微指令長(zhǎng)光酣,編寫微程序較麻煩。
- 垂直型微指令:一條微指令只能定義一個(gè)微命令脉课,由微操作碼字段規(guī)定具體功能
優(yōu)點(diǎn):微指令短救军、簡(jiǎn)單、規(guī)整倘零,便于編寫微程序唱遭;
缺點(diǎn):微程序長(zhǎng),執(zhí)行速度慢呈驶,工作效率低拷泽。
- 混合型微指令:在垂直型的基礎(chǔ)上增加一些不太復(fù)雜的并行操作。
微指令較短袖瞻,仍便于編寫司致;微程序也不長(zhǎng),執(zhí)行速度加快聋迎。
5.4.2.5 微指令的編碼方式
- 直接編碼(直接控制)方式
在微指令的操作控制字段中脂矫,每一位代表一個(gè)微操作命令,某位為“1”表示該控制信號(hào)有效
優(yōu)點(diǎn):簡(jiǎn)單霉晕、直觀庭再,執(zhí)行速度快,操作并行性好牺堰。
缺點(diǎn):微指令字長(zhǎng)過長(zhǎng)拄轻,n個(gè)微命令就要求微指令的操作字段有n位,造成控存容量極大伟葫。
- 字段直接編碼方式
將微指令的控制字段分成若干“段”恨搓,每段經(jīng)譯碼后發(fā)出控制信號(hào)
微命令字段分段的原則:
互斥性微命令分在同一段內(nèi),相容性微命令分在不同段內(nèi)筏养。
每個(gè)小段中包含的信息位不能太多斧抱,否則將增加譯碼線路的復(fù)雜性和譯碼時(shí)間。
一般每個(gè)小段還要留出一個(gè)狀態(tài)撼玄,表示本字段不發(fā)出任何微命令夺姑。因此,當(dāng)某字段的長(zhǎng)度為3位時(shí)掌猛,最多只能表示7個(gè)互斥的微命令盏浙,通常用000表示不操作眉睹。
【2012年真題】某計(jì)算機(jī)的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接編碼法废膘,共有33個(gè)微命令竹海,構(gòu)成5個(gè)互斥類,分別包含7丐黄、3斋配、12、5和6個(gè)微命令灌闺,則操作控制字段至少有多少位艰争?
第1個(gè)互斥類有7個(gè)微命令,要留出1個(gè)狀態(tài)表示不操作桂对,所以需要表示8種不同的狀態(tài)甩卓,故需要3個(gè)二進(jìn)制位。
以此類推蕉斜,后面4個(gè)互斥類各需要表示4逾柿、13、6宅此、7種不同的狀態(tài)机错,分別對(duì)應(yīng)2、4父腕、3弱匪、3個(gè)二進(jìn)制位。故操作控制字段的總位數(shù)為3+2+4+3+3 = 15 位
- 字段間接編碼方式
一個(gè)字段的某些微命令需由另一個(gè)字段中的某些微命令來解釋侣诵,由于不是靠字段直接譯碼發(fā)出的微命令痢法,故稱為字段間接編碼,又稱隱式編碼杜顺。
優(yōu)點(diǎn):可進(jìn)一步縮短微指令字長(zhǎng)。
缺點(diǎn):削弱了微指令的并行控制能力蘸炸,故通常作為字段直接編碼方式的一種輔助手段躬络。
5.4.2.6 微指令的地址形成方式
- 微指令的下地址字段指出
微指令格式中設(shè)置一個(gè)下地址字段,由微指令的下地址字段直接指出后繼微指令的地址搭儒,這種方式又稱為斷定方式穷当。
- 根據(jù)機(jī)器指令的操作碼形成
當(dāng)機(jī)器指令取至指令寄存器后,微指令的地址由操作碼經(jīng)微地址形成部件形成淹禾。
- 增量計(jì)數(shù)器法
( CMAR ) + 1 → CMAR
- 分支轉(zhuǎn)移
轉(zhuǎn)移方式:指明判別條件馁菜;轉(zhuǎn)移地址:指明轉(zhuǎn)移成功后的去向。
- 通過測(cè)試網(wǎng)絡(luò)
- 由硬件產(chǎn)生微程序入口地址
第一條微指令地址由專門硬件產(chǎn)生(用專門的硬件記錄取指周期微程序首地址)
中斷周期由硬件產(chǎn)生中斷周期微程序首地址(用專門的硬件記錄)
【2014年真題】某計(jì)算機(jī)采用微程序控制器铃岔,共有32條指令汪疮,公共的取指令微程序包含2條微指令,各指令對(duì)應(yīng)的微程序平均由4條微指令組成,采用斷定法(下地址字段法)確定下條微指令地址智嚷,則微指令中下地址字段的位數(shù)至少是多少位卖丸?
總共需要存儲(chǔ)多少條微指令?
32×4+2 = 130條
標(biāo)注出130個(gè)不同的位置至少需要多少個(gè)二進(jìn)制位盏道?
27= 128稍浆,28 = 256
下地址字段的位數(shù)至少是8位
5.4.2.7 微程序控制單元的設(shè)計(jì)步驟
設(shè)計(jì)步驟:
分析每個(gè)階段的微操作序列(參照硬布線)
寫出對(duì)應(yīng)機(jī)器指令的微操作命令及節(jié)拍安排
(1) 寫出每個(gè)周期所需要的微操作(參照硬布線)
(2)補(bǔ)充微程序控制器特有的微操作:
a. 取指周期:
Ad ( CMDR ) → CMAR
OP ( IR ) → 微地址形成部件→ CMAR-
b. 執(zhí)行周期:
Ad(CMDR)→ CMAR
取指周期的最后一條微指令完成后,要根據(jù)指令操作碼確定其執(zhí)行周期的微程序首地址
- 確定微指令格式
根據(jù)微操作個(gè)數(shù)決定采用何種編碼方式猜嘱,以確定微指令的操作控制字段的位數(shù)衅枫。根據(jù)CM中存儲(chǔ)的微指令總數(shù),確定微指令的順序控制字段的位數(shù)朗伶。最后按操作控制字段位數(shù)和順序控制字段位數(shù)就可確定微指令字長(zhǎng)弦撩。
- 編寫微指令碼點(diǎn)
根據(jù)操作控制字段每一位代表的微操作命令,編寫每一條微指令的碼點(diǎn)腕让。
5.5 指令流水線
5.5.1 指令流水線的基本概念
一條指令的執(zhí)行過程可以分為如下三個(gè)過程
- 取指:根據(jù)PC內(nèi)容訪問主存儲(chǔ)器孤钦,取出一條指令送到IR中。
- 分析:對(duì)指令操作碼進(jìn)行譯碼纯丸,按照給定的尋址方式和地址字段中的內(nèi)容形成操作數(shù)的有效地址EA偏形,并從有效地址EA中取出操作數(shù)。
- 執(zhí)行:根據(jù)操作碼字段觉鼻,完成指令規(guī)定的功能俊扭,即把運(yùn)算結(jié)果寫到通用寄存器或主存中。
當(dāng)多條指令在處理器中執(zhí)行時(shí)坠陈,可以采用以下兩種方式
- 順序執(zhí)行方式
傳統(tǒng)馮·諾依曼機(jī)采用順序執(zhí)行方式萨惑,又稱串行執(zhí)行方式。前一條指令完后仇矾,才啟動(dòng)下一條指令
優(yōu)點(diǎn):控制簡(jiǎn)單庸蔼,硬件代價(jià)小。
缺點(diǎn):執(zhí)行指令的速度較慢贮匕,在任何時(shí)刻姐仅,處理機(jī)中只有一條指令在執(zhí)行,各功能部件的利用率很低刻盐。
總耗時(shí)T = n×3t = 3nt
- 流水線執(zhí)行方式
為了提高指令的執(zhí)行速度掏膏,可以把取k+1條指令提前到分析第k條指令的期間完成,而將分析第k+1條指令與執(zhí)行第k條指令同時(shí)進(jìn)行
優(yōu)點(diǎn):程序的執(zhí)行時(shí)間縮短了1/3敦锌,各功能部件的利用率明顯提高馒疹。
缺點(diǎn):需要付出硬件上較大開銷的代價(jià),控制過程也比順序執(zhí)行復(fù)雜了乙墙。
5.5.2 流水線的表示方法
- 指令執(zhí)行過程圖颖变,如上小節(jié)提到的圖
- 時(shí)空?qǐng)D
指令執(zhí)行過程圖主要用于分析指令執(zhí)行過程以及影響流水線的因素
時(shí)空?qǐng)D主要用于分析流水線的性能
5.5.3 流水線的性能指標(biāo)
- 吞吐率
吞吐率是指在單位時(shí)間內(nèi)流水線所完成的任務(wù)數(shù)量生均,或是輸出結(jié)果的數(shù)量。
設(shè)任務(wù)數(shù)為n悼做;處理完成n個(gè)任務(wù)所用的時(shí)間為Tk疯特,則吞吐率(TP)計(jì)算公式為
當(dāng)各段執(zhí)行時(shí)間均相等、任務(wù)連續(xù)的理想情況下肛走,設(shè)為時(shí)鐘周期漓雅,流水線的實(shí)際吞吐率為
連續(xù)輸入的任務(wù)數(shù)趨向于∞時(shí),最大吞吐率
- 加速比
加速比定義為完成同樣一批任務(wù)朽色,不使用流水線所用的時(shí)間與使用流水線所用的時(shí)間之比邻吞。
設(shè)T0表示不使用流水線時(shí)的執(zhí)行時(shí)間,即順序執(zhí)行所用的時(shí)間葫男;Tk表示使用流水線時(shí)的執(zhí)行時(shí)間則計(jì)算流水線加速比(S)的基本公式為
當(dāng)各段執(zhí)行時(shí)間均相等抱冷、任務(wù)連續(xù)的理想情況下,梢褐,而不使用流水線旺遮,所需時(shí)間,實(shí)際加速比為
連續(xù)輸入的任務(wù)數(shù)趨向于∞時(shí)盈咳,
- 效率
流水線的設(shè)備利用率稱為流水線的效率(E)耿眉。在時(shí)空?qǐng)D上,流水線的效率定義為完成n個(gè)任務(wù)占用的時(shí)空區(qū)有效面積與n個(gè)任務(wù)所用的時(shí)間與k個(gè)流水段所圍成的時(shí)空區(qū)總面積之比鱼响。
連續(xù)輸入的任務(wù)數(shù)趨向于∞時(shí)鸣剪,
5.5.4 影響流水線的因素
- 結(jié)構(gòu)相關(guān)(資源沖突)
由于多條指令在同一時(shí)刻爭(zhēng)用同一資源而形成的沖突稱為結(jié)構(gòu)相關(guān)。
解決辦法:
- 后一相關(guān)指令暫停一周期
- 資源重復(fù)配置:數(shù)據(jù)存儲(chǔ)器+指令存儲(chǔ)器
- 數(shù)據(jù)相關(guān)(數(shù)據(jù)沖突)
數(shù)據(jù)相關(guān)指在一個(gè)程序中丈积,存在必須等前一條指令執(zhí)行完才能執(zhí)行后一條指令的情況筐骇,則這兩條指令即為數(shù)據(jù)相關(guān)
解決辦法:
- 把遇到數(shù)據(jù)相關(guān)的指令及其后續(xù)指令都暫停一至幾個(gè)時(shí)鐘周期,直到數(shù)據(jù)相關(guān)問題消失后再繼續(xù)執(zhí)行江滨☆跷常可分為硬件阻塞(stall)和軟件插入“NOP”兩種方法。
- 數(shù)據(jù)旁路技術(shù)唬滑。
- 編譯優(yōu)化:通過編譯器調(diào)整指令順序來解決數(shù)據(jù)相關(guān)饺鹃。
- 控制相關(guān)(控制沖突)
當(dāng)流水線遇到轉(zhuǎn)移指令和其他改變PC值的指令而造成斷流時(shí),會(huì)引起控制相關(guān)间雀。
解決辦法:
- 盡早判別轉(zhuǎn)移是否發(fā)生,盡早生成轉(zhuǎn)移目標(biāo)地址
- 預(yù)取轉(zhuǎn)移成功和不成功兩個(gè)控制流方向上的目標(biāo)指令
- 加快和提前形成條件碼
- 提高轉(zhuǎn)移方向的猜準(zhǔn)率
5.5.5 流水線的分類
- 部件功能級(jí)镊屎、處理機(jī)級(jí)和處理機(jī)間級(jí)流水線
根據(jù)流水線使用的級(jí)別的不同惹挟,流水線可分為部件功能級(jí)流水線、處理機(jī)級(jí)流水線和處理機(jī)間流水線缝驳。
部件功能級(jí)流水就是將復(fù)雜的算術(shù)邏輯運(yùn)算組成流水線工作方式连锯。例如归苍,可將浮點(diǎn)加法操作分成求階差、對(duì)階运怖、尾數(shù)相加以及結(jié)果規(guī)格化等4個(gè)子過程拼弃。
處理機(jī)級(jí)流水是把一條指令解釋過程分成多個(gè)子過程,如前面提到的取指摇展、譯碼吻氧、執(zhí)行、訪存及寫回5個(gè)子過程咏连。
處理機(jī)間流水是一種宏流水盯孙,其中每一個(gè)處理機(jī)完成某一專門任務(wù),各個(gè)處理機(jī)所得到的結(jié)果需存放在與下一個(gè)處理機(jī)所共享的存儲(chǔ)器中祟滴。
- 單功能流水線和多功能流水線
按流水線可以完成的功能振惰,流水線可分為單功能流水線和多功能流水線。
單功能流水線指只能實(shí)現(xiàn)一種固定的專門功能的流水線垄懂;
多功能流水線指通過各段間的不同連接方式可以同時(shí)或不同時(shí)地實(shí)現(xiàn)多種功能的流水線骑晶。
- 動(dòng)態(tài)流水線和靜態(tài)流水線
按同一時(shí)間內(nèi)各段之間的連接方式,流水線可分為靜態(tài)流水線和動(dòng)態(tài)流水線草慧。
靜態(tài)流水線指在同一時(shí)間內(nèi)桶蛔,流水線的各段只能按同一種功能的連接方式工作。
動(dòng)態(tài)流水線指在同一時(shí)間內(nèi)冠蒋,當(dāng)某些段正在實(shí)現(xiàn)某種運(yùn)算時(shí)羽圃,另一些段卻正在進(jìn)行另一種運(yùn)算。這樣對(duì)提高流水線的效率很有好處抖剿,但會(huì)使流水線控制變得很復(fù)雜朽寞。
- 線性流水線和非線性流水線
按流水線的各個(gè)功能段之間是否有反饋信號(hào),流水線可分為線性流水線與非線性流水線斩郎。
線性流水線中脑融,從輸入到輸出,每個(gè)功能段只允許經(jīng)過一次缩宜,不存在反饋回路肘迎。
非線性流水線存在反饋回路,從輸入到輸出過程中锻煌,某些功能段將數(shù)次通過流水線妓布,這種流水線適合進(jìn)行線性遞歸的運(yùn)算。
5.5.6 流水線的多發(fā)技術(shù)
- 超標(biāo)量技術(shù)
每個(gè)時(shí)鐘周期內(nèi)可并發(fā)多條獨(dú)立指令宋梧,即以并行操作方式將兩條或多條指令編譯并執(zhí)行匣沼,為此需配置多個(gè)功能部件。
超標(biāo)量計(jì)算機(jī)不能調(diào)整指令的執(zhí)行顧序捂龄,因此通過編譯優(yōu)化技術(shù)释涛,把可并行執(zhí)行的指令搭配起來加叁,挖掘更多的指令并行性
- 超流水技術(shù)
在一個(gè)時(shí)鐘周期內(nèi)再分段,在一個(gè)時(shí)鐘周期內(nèi)一個(gè)功能部件使用多次唇撬。不能調(diào)整指令的執(zhí)行順序它匕,靠編譯程序解決優(yōu)化問題
- 超長(zhǎng)指令字
由編譯程序挖掘出指令間潛在的并行性,將多條能并行操作的指令組合成一條具有多個(gè)操作碼字段的超長(zhǎng)指令字(可達(dá)幾百位)窖认,為此需要采用多個(gè)處理部件豫柬。