先行控制的處理機(jī)結(jié)構(gòu)(如圖1所示)1包括三個(gè)獨(dú)立的控制器和四個(gè)緩沖棧。其中,控制器分別為:存儲(chǔ)控制器、指令分析器、運(yùn)算控制器;緩沖棧分別為:先行指令緩沖棧、先行讀數(shù)棧、先行操作棧、后行寫數(shù)棧。
先行控制是指在處理機(jī)內(nèi)部設(shè)置一定容量的指令緩沖棧,把指今分折器所需要的指令事先取到指令緩沖棧中,而不必訪問主存儲(chǔ)器。這樣,就能夠使取指令、分析指令和執(zhí)行指令重疊起來執(zhí)行。如果指令分析器每次都能夠在先行指令緩沖棧中得到,則取指令只需要很短的時(shí)間就能夠完成,因此,可以把指令與分析指令合并到一起,從而構(gòu)成圖2所示的一次重疊執(zhí)行方式。
如果分析指今和執(zhí)行指今所需要的時(shí)間都是t,則采用一次重疊執(zhí)行方式連續(xù)執(zhí)行n條指令所需要的時(shí)間為:T=(1+n)t。
先行指令緩沖棧作為主存儲(chǔ)器與指令分析器之間的一個(gè)緩沖部件,用它來平滑主存儲(chǔ)器和指令分析器的工作。當(dāng)指令分析器分析某一條指令所需要的時(shí)間比較長(zhǎng),或者主存儲(chǔ)器有空閑時(shí),就從主存儲(chǔ)器中多取出幾條指令存放在先行指令緩沖棧中。而當(dāng)指令分析器分析指令很快,或者主存儲(chǔ)器比較忙時(shí),指令分析器也能夠從先行指令緩沖棧中得到所需要的指令。
指令分析器指令分析器對(duì)已經(jīng)存放在先行指令緩沖棧里的指令進(jìn)行預(yù)處理,把處理機(jī)后的指令送入先行操作棧。對(duì)于無(wú)條件轉(zhuǎn)移及條件轉(zhuǎn)移等程序控制指令,一般在指令分析器中就能夠直接執(zhí)行。各種運(yùn)算型指令、移位指令、數(shù)據(jù)傳送指令等都要先處理成寄存器-寄存器型(RR型指令),然后送入先行操作棧。為了與指令系統(tǒng)中原有的RR型指令相區(qū)別,通常把送入先行操作棧中的指令稱為RR*型指令。
先行操作棧先行操作棧是指令分析器和運(yùn)算控制器之間的一個(gè)緩沖存儲(chǔ)器。指令分析器每預(yù)處理完一條指令,就把形成的RR*型指令送入先行操作棧,使得指令分析器能夠繼續(xù)對(duì)后續(xù)的指令進(jìn)行預(yù)處理。每當(dāng)運(yùn)算器執(zhí)行完一條RR*型指令,就由運(yùn)算控制器從先行操作棧中取出下一條RR*型指令。有了這個(gè)緩沖存儲(chǔ)器,指令分析器和運(yùn)算器就能夠各自完成獨(dú)立的工作。先行操作棧采用先進(jìn)先出方式工作,它由一個(gè)先行指令寄存器堆和有關(guān)控制邏輯等組成。先行讀數(shù)棧是主存儲(chǔ)器與運(yùn)算器之間的一個(gè)緩沖存儲(chǔ)器,用來平滑運(yùn)算器與主存儲(chǔ)器的工作。
先行讀數(shù)棧先行讀數(shù)棧由一個(gè)緩沖寄存器和有關(guān)控制邏輯等組成。每一個(gè)緩沖寄存器由三個(gè)部分組成,包括先行地址緩沖寄存器、先行操作數(shù)緩沖寄存器和標(biāo)志字段。每當(dāng)先行地址緩沖寄存器收到從指令分析器中送來的有效地址,就把地址的有效標(biāo)志置位,并開始向主存儲(chǔ)器申請(qǐng)讀操作數(shù)。從主存儲(chǔ)器讀出的操作數(shù)可以存放在先行讀數(shù)棧的操作數(shù)緩沖寄存器中,也可以覆蓋掉原來的先行地址寄存器中的地址,同時(shí)要置位數(shù)據(jù)有效標(biāo)志。先行讀數(shù)棧一般也采用先進(jìn)先出方式工作。設(shè)置了先行讀數(shù)棧后,運(yùn)算器能夠直接從先行讀數(shù)棧中取得所需要的操作數(shù),而不必等待訪問主存儲(chǔ)器。這樣,指令的執(zhí)行速度就能夠大大加快。
后行寫數(shù)棧后行寫數(shù)棧是主存儲(chǔ)器與運(yùn)算器之間的一個(gè)緩沖存儲(chǔ)器。如果在指令分析器中遇到向主存儲(chǔ)器的“寫數(shù)”指令,則把形成的有效地址送入后行寫數(shù)棧的后行地址緩沖寄存器中,并把預(yù)處理好的RR*型指令送入先行操作棧。當(dāng)然,這條RR*型指令中的目標(biāo)寄存器就是后行寫數(shù)棧的緩沖寄存器編號(hào)。當(dāng)運(yùn)算器執(zhí)行這條RR*型寫數(shù)指令時(shí),只要把寫到主存中去的數(shù)據(jù)送到后行寫數(shù)棧的后行數(shù)據(jù)緩沖寄存器中即可,由后行寫數(shù)棧負(fù)責(zé)把數(shù)據(jù)寫回到主存儲(chǔ)器。這樣,運(yùn)算器不必等待數(shù)據(jù)寫回到主存,就可以繼續(xù)執(zhí)行后行的指令。
原理1、在主存空閑時(shí),即從主存中取出指令放入先行指令緩沖棧,以供指令分析器使用。預(yù)取先行指令緩沖棧遵循先進(jìn)先出。指令分析器對(duì)緩沖棧中的指令進(jìn)行預(yù)處理,并送入先行操作棧。
2、對(duì)于運(yùn)算類的指令--則要處理成RR型的指令。如果指令本身就是RR型,則不作任何處理;如果是RS型,則分析器計(jì)算出操作數(shù)有效地之后送入先行讀數(shù)?;蚝笮袑憯?shù)棧的地址寄存器,并將對(duì)應(yīng)的地址寄存器的編號(hào)代替指令中的主存地址后送入先行操作棧;如果是RI型,則將立即數(shù)送入先行讀數(shù)棧的操作數(shù)寄存器,并用此寄存器的編號(hào)代替指令中的立即數(shù)字段。這樣,所有的運(yùn)算類指令執(zhí)行時(shí)都將訪問寄存器,加快運(yùn)算速度。
3、每當(dāng)先行讀數(shù)棧收到分析器送來的有效地之后,即將地址有效標(biāo)志位置位,并向主存申請(qǐng)讀操作數(shù),取得的操作數(shù)放入對(duì)應(yīng)的先行操作數(shù)緩沖寄存器中,并置數(shù)據(jù)有效標(biāo)志位,做廢剛才的地址有效標(biāo)志位,以供相應(yīng)的指令使用操作數(shù)。
4、每當(dāng)后行寫數(shù)棧收到分析器送來的有效地之后,即將地址有效標(biāo)志位置位;這樣,當(dāng)相應(yīng)的運(yùn)算類指令執(zhí)行完畢后不再馬上寫主存,而是先送入相應(yīng)的后行寫數(shù)據(jù)緩沖寄存器中,并置數(shù)據(jù)有效標(biāo)志位??刂破髯詣?dòng)根據(jù)相應(yīng)的后行寫地址緩沖寄存器中的地址向主存發(fā)出寫請(qǐng)求。
采用先行控制技術(shù)的關(guān)鍵是緩沖技術(shù)和預(yù)處理技術(shù)。
1、緩沖技術(shù):在工作速度不固定的兩個(gè)功能部件之間設(shè)置緩沖棧,用以平滑功能部件之間的工作速度。
2、預(yù)處理技術(shù):將進(jìn)入運(yùn)算器的指令均處理成RR型指令,而某些棧為其提供所需的操作數(shù)(先行讀數(shù)棧、后續(xù)寫數(shù)棧),這樣運(yùn)算器在進(jìn)行預(yù)算時(shí)無(wú)需訪問存儲(chǔ)器,從而加快速度。
先行控制程序執(zhí)行情況在采用先行控制方式的處理機(jī)中,一個(gè)程序的執(zhí)行情況如下表所示。
指令地址 | 指令執(zhí)行情況 |
…… k-i-1 | 已經(jīng)執(zhí)行完成的指令 |
k-i …… k-1 | 在“后行寫數(shù)?!敝械却呀Y(jié)果寫到主存儲(chǔ)器中的指令 |
k | 正在“指令執(zhí)行部件”中執(zhí)行的指令 |
k+1 …… k+j | 已經(jīng)由“指令分析器”預(yù)處理完成,被存放在“先行操作棧”中的RR*型指令,指令所需要的操作數(shù)也已經(jīng)讀到“先行讀數(shù)棧”中 |
k+j+1 …… k+j+n | 指令已經(jīng)由“指令分析器”預(yù)處理完成,存放在“先行操作棧”中,指令所需要的操作數(shù)還沒有讀到“先行讀數(shù)?!敝?/td> |
k+j+n+1 | 正在“指令分析器”中進(jìn)行分析和預(yù)處理的指令 |
k+j+n+2 …… k+j+n+m | 已經(jīng)從主存儲(chǔ)器中預(yù)取到“先行指令緩沖?!敝械闹噶?/td> |
k+j+n+m+1 …… | 還沒有進(jìn)入處理機(jī)的指令 |