官术网_书友最值得收藏!

1.4 計算機的基本工作原理

1.4.1 存儲程序工作原理

存儲程序工作原理是馮·諾依曼(von Neumann)在1945年領(lǐng)導(dǎo)設(shè)計EDVAC計算機的過程中提出的。實際上就是計算機執(zhí)行程序的方式,采用這種方式,要事先編制程序,并將程序(包含指令和數(shù)據(jù))存入主存儲器中,計算機在運行程序時,要能自動、連續(xù)地從主存儲器中依次取出指令并執(zhí)行。存儲程序是計算機能高速自動運行的基礎(chǔ)。

存儲程序工作方式,可稱為指令流驅(qū)動方式。即按照指令的執(zhí)行序列,依次讀取指令;根據(jù)指令所含的控制信息,調(diào)用數(shù)據(jù)進行處理。為了控制指令序列的執(zhí)行順序,設(shè)置一個程序計數(shù)器(Program Counter,PC),讓它存放當(dāng)前指令所在的存儲單元的地址。如果程序是順序執(zhí)行的,那么每取出一條指令后,PC內(nèi)容自動增1(在大多數(shù)情況下,程序的執(zhí)行都是順序的,即按照指令的先后順序執(zhí)行),指示下一條指令該從何處取得。如果程序?qū)嵤┺D(zhuǎn)移,則將轉(zhuǎn)移目標(biāo)地址送入PC,以便按新地址讀取后繼指令。PC就像一個指針,一直指示著程序的執(zhí)行進程,也就是指示指令流的形成。

存儲程序工作原理奠定了現(xiàn)代計算機的基本結(jié)構(gòu)思想,到目前為止,絕大多數(shù)計算機仍沿用這一結(jié)構(gòu),稱為馮·諾依曼機結(jié)構(gòu)。

馮·諾依曼機結(jié)構(gòu)從本質(zhì)有什么缺點,如何改進?

馮·諾依曼機結(jié)構(gòu)從本質(zhì)上講是采取串行順序處理的工作機制,即使有關(guān)數(shù)據(jù)已經(jīng)準(zhǔn)備好,也必須逐條執(zhí)行指令序列。提高計算機性能的根本方向之一是并行處理,因此,人們一直在謀求突破馮·諾依曼機結(jié)構(gòu)的束縛,這主要表現(xiàn)在以下兩個方面。

①在馮·諾依曼機結(jié)構(gòu)范疇內(nèi),對傳統(tǒng)馮·諾依曼機進行改造。例如,采用多個處理部件,形成流水處理,依靠時間上的重疊提高處理效率;組成陣列機結(jié)構(gòu),形成單指令流多數(shù)據(jù)流,提高處理速度。這些改造已比較成熟,成為標(biāo)準(zhǔn)的計算機結(jié)構(gòu)。比較活躍的研究是用多個馮·諾依曼機組成多機系統(tǒng),支持并行算法結(jié)構(gòu)。

②從根本上改變馮·諾依曼機的控制流驅(qū)動方式。例如,采用數(shù)據(jù)流驅(qū)動工作方式的數(shù)據(jù)流計算機,只要數(shù)據(jù)已經(jīng)準(zhǔn)備好,有關(guān)指令就可并行執(zhí)行。這是真正非馮·諾依曼的計算機,它為并行處理開辟了新的前景。但由于控制的復(fù)雜性,仍處于實驗探索之中。

1.4.2 計算機的工作過程

計算機的工作過程是執(zhí)行程序的過程。程序是為求解特定問題而設(shè)計的指令序列,所以計算機的工作過程就是按照給定次序執(zhí)行一系列指令的過程。按照存儲程序工作原理,執(zhí)行一條指令可以分為兩個階段進行:取指令和執(zhí)行指令。于是計算機的工作過程也就是反復(fù)取指和執(zhí)指的過程。

例如,求兩個正整數(shù)a,b的較大值,即f=max(a,b),下面以虛擬機M5 層,C語言為例來編寫程序。先看解題步驟如下:

①輸入a和b這兩個數(shù);

②執(zhí)行a賦值給f;

③判斷,如果b>a,則執(zhí)行b賦值給f;

④輸出f;

⑤結(jié)束。

上述步驟用指令表達出來就是程序。在編寫程序時,需要考慮給程序、數(shù)據(jù)分配存儲單元。C語言的處理方式是以函數(shù)名對應(yīng)程序段的首地址(注意馮·諾依曼機的工作特點之一就是程序存儲在存儲器中,而程序是包括指令和數(shù)據(jù)),函數(shù)對應(yīng)的程序段就存放在以該地址開始的連續(xù)區(qū)域中。用C語言編寫的程序如下:

            main()
            {int a,b,f;                //此指令的執(zhí)行將在內(nèi)存可用區(qū)域分配存儲單元,用來裝載
                                       //相應(yīng)數(shù)據(jù)
            scanf(″% d% d″,&a,&b);  //CPU執(zhí)行此指令的過程是:從輸入設(shè)備(鍵盤)輸入兩個整數(shù)
                                      //通過數(shù)據(jù)總線傳輸給內(nèi)存,按照分配的存儲單元地址存入
            f=a;                      //CPU從內(nèi)存中讀取該指令執(zhí)行,從a所對應(yīng)的存儲單元中讀
                                      //取數(shù)據(jù),再存入f所對應(yīng)的存儲單元中
            if(b<a)f=b;
            printf(″% d″,f);       //CPU執(zhí)行此指令的過程是:把f所對應(yīng)存儲單元中的數(shù)據(jù)
                                     //輸出到輸出設(shè)備(如顯示器)上
            }

可以看出,馮·諾依曼體系的計算機執(zhí)行程序的過程。這一過程結(jié)合匯編語言程序的執(zhí)行就更加清楚了。

數(shù)據(jù)a存放在主存300AH單元,數(shù)據(jù)b存放在主存300BH單元,運算結(jié)果f存放在主存300CH單元。用匯編語言編寫的程序如下(這里沒有考慮輸入/輸出):

            單元地址           單元內(nèi)容
            2000H       MOV Al,[300AH]
            2001H       MOV BL,[300BH]
            2002H       MOV [300CH],AL
            2003H       CMP BL,AL
            2004H       JG 2005H
            2005H       HLT
            2006H       MOV [300CH],BL
            2007H       HLT
            300AH       a
            300BH       b
            300CH      存結(jié)果f

上述匯編語言源程序匯編為二進制代碼形式的目標(biāo)程序后,順序存放到主存儲器中。數(shù)據(jù)也以二進制代碼形式存放在主存儲器中。將程序首地址2000H送程序計數(shù)器PC,便啟動了該程序的執(zhí)行。

設(shè)數(shù)據(jù)b<a,程序的執(zhí)行過程如下:

①取指令——PC的內(nèi)容(2000H)送地址總線,主存2000H單元內(nèi)容讀入控制器。PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所讀取的指令(MOV AL,[300AH]),發(fā)出控制信號,完成取300AH單元中的內(nèi)容a送寄存器AL的操作。

②取指令——PC的內(nèi)容(2001H)送地址總線,主存2001H單元內(nèi)容讀入控制器,PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所取指令(MOV BL,[300BH]),發(fā)出控制信號,完成取300BH單元中的內(nèi)容b送寄存器BL的操作。

③取指令——PC的內(nèi)容(2002H)送地址總線,主存2002H單元內(nèi)容讀入控制器,PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所取指令(MOV [300CH],AL),發(fā)出控制信號,完成將寄存器AL的內(nèi)容傳送至300CH單元中的操作。

④取指令——PC的內(nèi)容(2003H)送地址總線,主存2003H單元內(nèi)容讀入控制器,PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所取指令(CMP BL,AL),發(fā)出控制信號,完成操作:S=0,Z=0(b>a)。

⑤取指令——PC的內(nèi)容(2004H)送地址總線,主存2004H單元內(nèi)容讀入控制器,PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所取指令(JG 2005H),發(fā)出控制信號,完成操作:S=0,Z=0(b>a),條件滿足,轉(zhuǎn)移,地址2006H送PC。注意,如果條件不滿足,就不會執(zhí)行“轉(zhuǎn)移,地址2006H送PC”的操作了。

⑥取指令——PC的內(nèi)容(2006H)送地址總線,主存2006H單元內(nèi)容讀入控制器,PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所取指令(MOV [300CH],BL),發(fā)出控制信號,完成將寄存器BL的內(nèi)容傳送至300CH單元中的操作。

⑦取指令——PC的內(nèi)容(2007H)送地址總線,主存2007H單元內(nèi)容讀入控制器,PC的內(nèi)容自動增1。

執(zhí)行指令——控制器譯碼所取指令(HLT),發(fā)出控制信號,停機,程序執(zhí)行結(jié)束。

主站蜘蛛池模板: 香河县| 曲靖市| 林周县| 阿勒泰市| 镇原县| 美姑县| 新乡市| 安平县| 开江县| 通河县| 大厂| 黄山市| 同德县| 凤凰县| 古交市| 丹阳市| 中卫市| 云和县| 宜良县| 和龙市| 镇沅| 华安县| 道孚县| 明星| 宜州市| 崇义县| 乐陵市| 阿坝县| 镇沅| 保定市| 姜堰市| 吉林市| 绥滨县| 仪征市| 花莲市| 石渠县| 栖霞市| 饶河县| 彰化市| 正安县| 阿拉尔市|