《計算機系統:系統架構與作業系統的高度整合》——第2章處理器體系結構

華章計算機發表於2017-07-03

本節書摘來自華章計算機《計算機系統:系統架構與作業系統的高度整合》一書中的第2章,作者:(美)拉姆阿堪德蘭(Ramachandran, U.)(美)萊希(Leahy, W. D.)著, 更多章節內容可以訪問雲棲社群“華章計算機”公眾號檢視。

第2章 處理器體系結構

處理器設計圍繞兩個體系結構的問題:指令集和機器結構。在計算機發展的早期(大約是20世紀60年代和70年代),曾有一段時間處理器設計完全被看作電子工程師的工作。計算機上大規模地使用匯編語言程式設計,因此,指令集越是花哨,應用程式就越趨向簡單。這是當時流行的傳統觀念。隨著現代程式語言的出現—如20世紀60年代的Algol語言—以及編譯技術的快速發展,處理器設計顯然不再僅僅是一項關於硬體的工作。特別地,指令集的設計與編譯器如何有效地為處理器生成程式碼密切相關。在這個意義上,程式語言對於指令集的設計有相當大的影響。
讓我們來了解程式語言是如何影響指令集設計的。高階語言中諸如賦值語句和表示式這樣的結構會對映到算術/邏輯指令和載入/儲存指令。高階語言支援的資料抽象需要指令集提供不同精度的運算元以及定址模式。條件語句和迴圈結構需要條件和無條件跳轉指令。更進一步來說,高階語言中像過程這樣的模組化結構需要從處理器體系結構中獲得附加的抽象支援。
應用對於指令集設計也有著重要的影響。例如,科學計算和工程計算在早期計算中佔據主導地位。相應地,20世紀70年代和80年代的高階系統在指令集上支援浮點運算。當前某些時候,手機和其他嵌入式系統的計算佔了主導地位,隨著計算融入社會的各個層面,毫無疑問這個趨勢將持續下去。音訊和視訊這樣的流媒體應用在手持裝置上變得很平常。自然地,這些應用的需求(例如,單獨一條指令對許多資料進行操作)開始影響指令集的設計。
在硬體上直接支援一個具體的系統軟體或應用的需求並非總是可行或划算的。例如,在計算機發展的早期,低端的計算機通過軟體庫使用指令集中可用的整數運算來實現浮點運算。直到今天,複雜的操作(例如求餘弦)依然不應該由通用處理器的指令集直接支援。替代的方法是,一些專門的系統軟體(稱為數學庫)通過將這些複雜操作對映為指令集中的簡單指令來實現它們。
作業系統對於指令集的設計也有影響。一個處理器可能會同時執行多個程式。想想你的桌上型電腦或掌上電腦,上面執行著若干個程式,但是卻沒有多個處理器。因此,在我們切換到另一個程式之前,需要記住一個程式正在做什麼。你可以想象一個動作麻利的廚師在4口鍋裡炒4個不同的菜,她記住了每道菜做到了哪個階段並適時加入調料。作業系統是這樣的一個軟體實體(即是它自身的一個程式),它像廚師處理不同的菜一樣,安排不同的程式在處理器上執行。作業系統自身也對處理器設計有影響,在後面討論程式不連續性和記憶體管理的章節中這會變得很顯而易見。


相關文章