水則

[拼音]:jisuanji xitong jiegou

[英文]:computer architecture

從程式設計的角度研究的計算機的概念性結構和功能特性。G.M.亞當等人為了說明和研究從程式設計角度所看到的計算機的屬性(外特性),在1964年最先提出計算機系統結構的概念。一種計算機系統結構可以用多種計算機組織來實現。

計算機系統層次結構

包括軟體和硬體的計算機系統可被看成是按功能劃分的多級層次結構。表中每一級各對應一類機器,各有自己的機器語言。在這裡,“機器”的定義是能儲存、執行程式的演算法和資料結構的集合體。各級機器的演算法和資料結構的實現方法不同:M0由硬體實現,M1由微程式(韌體)實現,M2~M5由軟體實現。由軟體實現的機器稱為虛擬機器器,以區別由硬體或韌體實現的實際機器。各級的程式被翻譯成比它低一級的語言的程式,或由低一級的程式解釋。

概念性結構與功能特性

這是從程式設計者角度所看到的計算機屬性。它包括機器內的資料表示、定址方式,以及對這些資料的運算和控制這些運算的執行等(即指令系統)。不過,它並非僅包括與中央處理器有關的部分,而應是工作於機器級的程式設計者所看到的機器的所有部分,也就是包括處理機、儲存系統、輸入-輸出聯結方法和中斷機構等。對於通用型機器,一般包括:資料表示(能由硬體直接辨認的資料型別,如定點、浮點數、邏輯數等);定址方式(指令是如何訪問到其運算元的,包括最小編址單元和地址運算等);暫存器定義(包括運算元暫存器、變址暫存器、控制暫存器的定義);指令系統(包括機器指令的操作型別和格式,指令間的排序和控制機構等);中斷機構;機器工作狀態(如管態和自態等)的定義和狀態切換;機器級的輸入-輸出結構(包括對輸入-輸出裝置的訪問方式,輸入-輸出資料的源、目的與資料傳送的控制,輸入-輸出操作的結束與出錯指示)以及對資訊保護的支援等。

學科內容

計算機系統結構作為學科,主要研究軟體、硬體功能分配和對軟體、硬體介面的確定。70年代以來,在計算機軟體方面有了顯著的進展。在計算機組織和實現技術上,最顯著的是器件技術的進展,其次是微程式技術、並行技術、專用部件和運算方法等方面的進展。計算機在效能、速度、價格、可靠性和組織、實現技術上雖比50年代末60年代初有了巨大的突破,然而,它們的系統結構卻並沒有什麼明顯的、突破性的進展。從程式設計者的角度所看到的計算機的屬性和60年代初相比,變化很小。例如,對於指令系統,程式設計者基本上仍然立足於60年代初的計算機系統結構觀點來設計複雜得多的軟體。

絕大多數機器的計算機系統結構,仍然沒有脫離諾伊曼型(見計算機組織)的範圍。但是,J.諾伊曼設計其系統結構時,既沒有考慮到要採用高階語言,也沒有顧及有作業系統和許多應用領域的各種要求,由此引起的矛盾日益突出。

計算機系統結構的設計要求,經歷了從面向彙編程式設計,到面向編譯程式設計和作業系統設計,直至增加面向應用軟體研製的幾個階段。

計算機系統結構落後於其設計要求的狀況,可以用語義差距來說明。這包括高階語言與機器語言的語義差距、作業系統與計算機系統結構的語義差距,以及程式設計環境與計算機系統結構的語義差距。

高階語言與機器語言的語義差距

這個差距表現在很多方面。從運算子和資料型別的關係來看,二者的用法甚至是相反的。在高階語言中,由說明語句指明資料的型別,使型別直接與資料本身相聯絡,但其運算子卻是通用的,並無資料型別的含義;而機器語言則正相反,它是由操作碼指明的運算子來決定運算元的型別。因此,在編譯過程中就需要把高階語言程式中的資料型別說明語句變換成機器語言的不同資料型別操作,而且要保證運算子兩邊的運算元型別確實與運算子所要求的相等。

採用帶標誌符的資料表示,即由每個資料的標誌位指明資料是二進位制整數、十進位制整數、浮點數、字串,還是地址等,可以顯著縮小這方面的語義差距,從而有兩方面的好處。

(1)簡化程式設計:標誌符資料表示能提高指令的通用性。例如,加法指令只需一種,而不必分為二進位制加、十進位制加、浮點加、邏輯加等,可減少指令種類,簡化彙編程式設計。

(2)為應用軟體的研製提供支援:採用標誌符技術,可由機器硬體直接檢測出多種程式設計錯誤,例如運算元錯誤定義、不相容、有未被定義的運算元等,從而提供了“型別安全環境”。由於每一字都可以有“軟體定義捕捉標誌符”而有助於程式跟蹤和除錯。此外,還能簡化編譯過程,由硬體直接執行資料變換,並有利於資料庫系統去實現與資料型別的無關性。

標誌符技術的缺點是使字長增加,每條指令所需的操作和拍數增加。從計算機的微觀效能,如從機器的運算速度來看,標誌符的引入是不利的;但從巨集觀效能,如從程式的編制、除錯和執行的總開銷來看,卻是有利的。標誌符技術已應用於一些微、小型機,很可能被下一代計算機所採用。另外,採用堆疊、向量資料表示也有利於縮小語義差距。

諾伊曼型計算機系統結構的定址方式是對應於一維、線性、順序編址的儲存空間的。這和資料結構的要求並不一致,如資料結構往往是多維離散結構,就是名稱變數也多是離散分佈,因而須由軟體進行映像和變換。要研究高階定址方式以縮短資料結構與資料表示、定址方式的語義差距。

人們早就提出應縮小高階語言與機器語言的語義差距,但一直沒有根本改變,原因是多方面的。高階語言本身是多樣化的,不穩定的,而且各種語言的語義結構也有較大差別。如果計算機系統結構被設計成語義結構儘量接近於某一種語言,則實現這種語言的效率必然很高;然而對語義結構與該語言差別較大的另一種高階語言來說,實現效率就可能比一般機器還低。對於需要設定多種高階語言的機器,只按一種高階語言來縮小語義差距,從整體來看往往是害多利少。因此,人們只得把計算機系統結構設計成比較通用的,使各種常用高階語言在語義差距上儘可能相近。這就是一般機器的計算機系統結構難以真正面向縮短語義差距的一個主要原因。當然,絕不是語義差距不能有任何縮小。人們已提出多種方案,也構成了一些實際機器,它們可按圖分類。

編譯中主要是採用翻譯技術。採用微程式控制的機器,則是通過解釋來實現機器語言的。因此,語義差距的縮小意味著增大解釋的比重,減少翻譯的比重。計算機系統要設定對應多種語言的多個編譯系統,為縮小語義差距所需增大的解釋部分,可以為多個編譯系統用以簡化翻譯過程,這從總體上看是合理的。

圖中傳統機器的計算機系統結構是典型的諾伊曼型結構,它的語義差距最大,解釋的分量比翻譯的少得多。面向高階語言的機器採用多種縮小語義差距的措施,它的解釋的分量明顯增大。

進一步增大解釋的比重,直至幾乎沒有語義差距,則可達到使高階語言成為機器的組合語言,這種機器被稱為高階語言機器。它用匯編的方法把高階語言源程式翻譯成機器語言程式。高階語言機器本身也可以沒有機器語言,而直接由硬體和韌體對高階語言源程式的語句逐條進行解釋。它既沒有編譯程式,也不用匯程式設計序,這種機器被稱為直接執行高階語言機器。已有的高階語言機器還沒有較好的效能價格比。隨著超大規模積體電路的發展,高階語言機器必然會得到發展。

縮小語義差距,改進指令系統、定址方式和資料表示的目的遠不限於簡化編譯程式的設計和提高程式碼生成的效率。對於計算機系統來說,編譯程式只是軟體中很小的一部分,而且它是由專門的、熟練的軟體人員來設計的,又往往只須1~2年設計一次。然而,應用軟體的開發卻要天天進行,而且設計人員的水平相對比較低。應用軟體的除錯和排錯開銷很大,因而,應從計算機系統結構方面來改善軟體的開發,如由硬體發現高階語言程式的語法、語義和詞法上的錯誤,指明其錯誤所在,並將它返回映像到源程式,以及對安全性和程式的模組化提供更好的條件等,其意義遠比改進編譯程式的設計大得多。

作業系統與計算機系統結構的語義差距

作業系統與計算機系統結構間的語義差距較大。例如,程序的概念是作業系統的重要基礎,但是計算機系統結構對於程序的生成與撤銷、程序的切換、程序間的相互控制、進行間的同步與通訊等提供的條件很少,幾乎沒有相應的機器指令。又如,計算機系統結構提供的儲存保護是對連續、定長儲存塊的保護,這和作業系統所要求的對子程式或變數的保護和共享,在語義上差別較大。還有,對作業系統中用得很多的表格和隊等也沒有反映。

人們對於儘可能縮小計算機系統結構和作業系統的語義差距,已有幾乎一致的認識,而不象對高階語言機器有不同的看法。但這並不意味著應把整個作業系統的全部功能硬化或固化,宜於硬化的是“機構型”的功能,而不是“策略型”的功能。機構型功能是指基本的、通用的功能,如程序管理、資訊保護和儲存管理等,它們是穩定的,能夠確切定義的,是常用的,因而宜於實現硬化。典型的策略型功能有上機費用計算、作業排隊、使用者標識、資源管理等。這些功能隨環境不同而異,而且使用者能夠修改,所以是不穩定的,在作業系統的生存期內可能會不斷變化,因而適於用軟體實現。硬體實現利於提高作業系統的執行效率和速度,減少開銷;軟體實現利於提供應有的靈活性。

隨著超大規模積體電路的發展,必然會縮小語義差距。不過語義差距也非越小越好,因為語義差距的大小實質上取決於軟、硬體功能分配,而這主要應從實現費用、對速度的影響和其他效能要求來考慮,亦即考慮如何分配能提高效能價格比。

實現費用包括研製費用和重複生產費用。硬體的設計費用和重複生產費用都比軟體大,宜於硬體實現的功能應該是穩定的、常用的、比較小的、而且是軟體實現的速度下降會對計算機系統性能有較大影響的那些功能。硬體實現只是對產量大的計算機系統才有經濟效益。如果硬體實現不能給使用者帶來明顯的好處,則不論硬體比例多高也不會有生命力。