[CA] 計算機的抽象化與科技
計算機的抽象化與科技 1.1 簡介 有賴於科技高速的成長,計算機工業出現了嶄新的型態,計算機導致了文明的第三次革命-資訊革命,與農業革命和工業革命並駕齊驅。如科幻電影般的生活應用,也如雨後出筍般的出現。 汽車 手機 人類基因組計劃(Human genome project) 全球網路(World Wide Web) 搜尋引擎 計算機的應用分類與其特性 個人電腦(Personal Computer, PCs) 伺服器(Servers) 通過網路連接其它的工作站或電腦,通常面向單一且複雜大型的科學或工程應用,也可能是多而小的工作。 成本和功能的差異性也最廣,可以是沒有螢幕沒有鍵盤的桌電,也可以是如超級計算機(supercomputers)這樣的極端。 嵌入式計算機(Embedded Computers) 最大的計算機類別,也涵蓋最廣泛的應用和性能。 通常具有獨特的應用要求,這些要求將最低效能發揮的淋漓盡致,使成本與功耗成為很重要的指標。 後PC時代 個人行動裝置(Poersonal Mobile Device, PMD) 如智慧型手機與平板的出現,取代的 PC 的地位。 雲端計算(Cloud Computing) 取代了傳統伺服器,這些雲端計算建構在「倉庫規模計算機」(Warehouse Scale Computer, WSC)。 企業如Google、Amazon,提供了 WSC 的租借服務,這類通過雲端佈署的「軟體即服務」(Software as a Service, SaaS),正在改變軟體業。 學習目標 過去在硬體的限制下,程式設計師需要嚴格的考慮程式的效能:減少記憶體空間以使程式更快。 在計算機設計與記憶體科技的進步下,取而代之程式設計師要考量的事情變成:處理器的並行性和記憶體的分層,或諸如在 PMD 或雲端上運行的程式的能源效率問題。 以下是我們將要學習的目標: 用高級語言編寫的程式如何翻譯成硬體語言,以及硬體如何執行生成的程式?藉此可以理解硬體與軟體的關係,也與程式的性能有關聯。 軟體和硬體間的介面是什麼,軟體如何指示硬體執行所需的工作?這些概念對於理解如何編寫多種軟體至關重要。 什麼決定了一個程式的性能,程式設計師如何提高性能?這關係了源始碼編譯成電腦的語言時,硬體執行程式的效率。 硬體設計人員可以使用哪些技術來提高性能(Performance)? 硬體設計人員可以使用哪些技術來提升能源效率(Energy Efficiency)?程式設計師又如何協助改善? 什麼理由導致了循序處理(Sequential processing)轉變成了平行處理(Parallel processing)? 自第一台商用計算機問世以來,計算機架構師提出了哪些想法來奠定現代計算的基礎? 1.2 計結中八個重要的思想 摩爾定律(Moore’s Law)之於設計 摩爾定律源於 Intel 創辦人之一的 Gordon Moore 對 IC 容量增長的預測。 由於計算機設計需耗時數年,而晶片的成長使得計算機架構師在設計時,必須將眼光放到設計完成時的技術狀態,而非當下。 用抽象化(Abstraction)來簡化設計 程式設計師與計算機架構師都必須要不斷發明新的技術以面對日益更新的科技, 抽象化是一種分層設計的概念。對程式設計師而言,低階的細節被忽略,只需要遵從簡單的模型或規範去進行設計。而硬體工程師則是要去實現出這個定義好的模型的硬體、細節部分。 快速處理常見情況 將常使用的指令進行優化(common case fast),比起其它不常使用的指令,更能提升效能。 何者為最常使用的指令,必須透過嚴密的實驗與測量才以得知。 平行處理(parallelism) Pipeline 預測 某些情況下,將硬體的效能預測的高一點,好過於等到效能滿足才開始設計。 記憶體的結構化(hierarchy) 透過將記憶體分層,將最快、最小、最昂貴的部分置於層狀結構的頂層;而最慢、最大、最便宜的記憶體置於層狀結構的底層。 用多餘創造可靠性(dependability) 計算機不只要速度快,還要具有可靠性。任何物理設備都可能發生故障,此時可以透過引入冗餘的元件來使系統變的更可靠,這些冗餘的元件可以在發生故障時接管工作並協助檢測故障。 1.3 抽象化 ...