天天看點

《計算機組成原理》----1.3 計算機的發展

本節書摘來自華章出版社《計算機組成原理》一書中的第1章,第1.3節, 作 者 computer organization and architecture: themes and variations[英]艾倫·克萊門茨(alan clements) 著,沈 立 王蘇峰 肖曉強 譯, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

計算機的發展曆史豐富而複雜,遠比許多人想象得久遠。計算機的發展曆史告訴我們技術是如何發展的,并使我們了解那些推動計算機發展的力量。今天的計算機是一條受到奇思妙想、商業考量以及良好工程實踐共同影響的發展道路的産物。計算機的曆史很悠久,并且還将朝着未來走去。

了解計算機的發展曆史是非常重要的,因為要想充分利用今天的資源,我們必須了解過去的成功與失敗。例如,個人計算機發展中的角色向後相容就是從計算機發展曆程中獲得的一條重要經驗。向後相容既指為了使使用者能夠容易地更新計算機,需要新技術與老技術相容,也指未來的計算機需要與現有的大量代碼相容。

而且,随着技術的進步,一些已經出現在過去卻隻有被抛棄的想法在未來可能更加可行。我認為從普遍的計算機發展曆史開始介紹可能是個好辦法。由于一些學生可能會覺得大段曆史很難消化,本章将介紹計算機發展曆程中一些重要的裡程碑事件,本書後面還将補充更為詳細的介紹。

人類是會計算的生物。穴居人發明數學也許不是為了在濕冷的天氣裡玩數獨遊戲,而是為了丈量土地、建造房屋和報稅。羅馬人将鵝卵石放在小托盤上表示數字。後來,他們沿着線滑動鵝卵石輔助進行加法或減法,進而完成計算。我甚至還參觀過中亞的一些商店,那裡的人們用算盤快速地進行計算。

1642年,法國數學家布萊士·帕斯卡(blaise pascal)設計了一個原始的機械加減法計算裝置,能夠借助發條完成加減法。1694年,德國數學家弗裡德·威廉·萊布尼茨(gottfried wilhelm leibnite)制作了一台複雜的機械電腦,能夠完成加減乘除運算。這些裝置都不能稱作現代意義上的計算機,因為它們都是不可程式設計的。

可程式設計這個概念産生于工業革命時期,出于工業化控制的需要。1801年,人們發明了提花織機,能夠自動地将預先設計好的圖案織在布上——以前這一工作隻能由熟練的勞工完成。提花織機使用穿孔的木制卡片控制織在紡織品上的圖案,卡片上的一個位置上有沒有洞決定水準方向的線是在垂直方向的線之前還是之後。每個打了孔的卡片就是一個程式,因為每個孔的圖案指定了一個唯一的操作序列。雖然是由這些操作在布上織出圖案,但一些人不可避免地會認為這些操作可以看作數學計算。

《計算機組成原理》----1.3 計算機的發展
《計算機組成原理》----1.3 計算機的發展

19世紀早期,為了建構導航所需的表格,人們确實産生了對計算機的需求。計算機在19世紀也的确出現過。那時候,“計算機”就是一個專門雇來的,完成諸如三角函數等數學計算的人。1882年,查爾斯·巴貝奇(charles babbage)在英格蘭設計了一台叫作差分機(difference engine)的計算裝置,能夠自動地計算構造數學表所需的多項式的值。巴貝奇沒有完成他的差分機,1855年per georg scheutz在瑞典制造出差分機。

巴貝奇設計的機器叫作分析機(analytical engine),在1871年巴貝奇去世之前,他隻來得及制作出其中的一部分,以測試他的概念是否可行。分析機是一個完全的機械裝置,擁有完成計算的處理單元,輸入和輸出資料的手段,以及一個基于穿孔木片的存儲器能夠儲存資料和程式。

巴貝奇分析機在計算機發展史上具有非常重要的地位,因為它在電子時代之前很久就設想了計算機,而且一些早期的計算機先驅都受到了巴貝奇工作的啟迪(另一些并不了解巴貝奇的工作,是以他們重新發明了計算機)。實際上,一些人認為巴貝奇分析機比20世紀40年代的早期電子計算機更先進,更加接近現代計算機。

奧古斯塔·阿達·金(augusta ada king)是一位英國作家、數學家,她曾與巴貝奇一起制作分析機。1842年,她翻譯了意大利數學家路易吉·蒙博(luigi menabrea)所撰寫的關于分析機的備忘錄。作為這一工作的一部分,她重寫了包括用分析機計算伯努利數的一系列注釋。由于這一工作,阿達通常被認為是編寫計算機程式的第一人。阿達之後經過大約100年的技術進步,人們才能真正地編寫和運作程式。

《計算機組成原理》----1.3 計算機的發展

19世紀末期電報和電話的發展導緻了自動電話交換機和通信網絡的出現。電話交換裝置使用一種叫作繼電器的機電開關,它很像今天的二進制邏輯開關元件,可以用來制造機電式計算機。術語機電(electromechanical)指那些有活動件但卻由電控制的零件。例如,繼電器利用線圈磁化鐵芯進而控制開關。

1867年發明的打字機和1879年發明的穿孔制表機(穿孔卡片輸入機)都促進了機電式計算機的發展。機電式計算機是連接配接機械時代與以真空管、半導體和內建電路為代表的電子時代的紐帶。一些人将康拉德·楚澤(konrad zuse)視作電子計算機的發明者。20世紀40年代他在德國制造出自己設計的計算機,在第二次世界大戰期間該計算機用來設計飛機。不過他的大部分工作都毀于盟軍轟炸,在很長一段時間裡,楚澤的工作都不為計算機界所知。楚澤的計算機是第一台可程式設計計算機;而同時代的其他機器都不是軟體可程式設計的,隻能算作是自動電腦。楚澤還設計了世界上第一種程式設計語言,叫作plankalkül。

1944年,為了計算炮彈軌迹,霍華德·艾肯(howard aiken)在哈佛大學設計了馬克i号機電式計算機。馬克i号是一台早期的可程式設計電子電腦,但不支援條件操作,是以不能算作是今天意義上的計算機。

直到真空管放大器取代了速度極慢的繼電器,高速、自動的計算才成為可能。1937年~1942年,約翰·文森特·阿塔那索夫(john v. atanasoff)制造出第一台電子計算機(abc),用于解線性方程。1944年制造的巨像計算機(colossus)是另一台早期計算機,它安放于布萊切利園,二戰期間用來破譯德軍的恩格瑪密文。巨像計算機使用真空管,是一台真正的電子計算機,但它不能存儲程式,因而隻能完成專門的任務。

1945年,j.莫奇利(j. mauchly)和j.埃克特(j. eckert)設計了eniac,一台能夠處理10位10進制數的真空管計算機,但它不能像今天我們編寫程式那樣程式設計。eniac隻能執行預定的操作,操作資訊通過硬連線發送到電路中。即使使用了接線電纜和開關,eniac的程式設計也隻能通過重新連線完成。

《計算機組成原理》----1.3 計算機的發展

埃克特和莫奇利還設計了一台更先進的計算機——edvac,具有存儲程式的特征。在英格蘭,曼徹斯特大學的研究人員于1948年設計出世界上第一台可操作的存儲程式計算機——曼徹斯特寶寶。存儲程式或馮·諾依曼計算機是今天的計算機的基礎,其特點是将指令和資料都儲存在存儲器中。ferranti公司随後對曼徹斯特寶寶進行了改進,設計出edsac——歐洲第一台存儲程式計算機。

at&t貝爾實驗室在1948年發明了半導體,之後發展出了半導體,它在功能上與真空管等效,但體積更小,功耗更低。半導體的發明,使将多個半導體放在一塊矽片上構成一個完整的電路成為可能。

到20世紀60年代中期,ibm設計出system/360體系結構,在從商用的小型機到科學計算的大型機的産品線上實作了相容和互操作性。正是ibm system/360導緻了計算機體系結構這一概念的出現(即指令集體系結構)。

大型機體積龐大,價格昂貴,隻能由大型組織機構購買,并需要一個專門的團隊來操作它。內建電路技術為微型計算機(如dec公司制造的pdp-8)的出現鋪平了道路。20世紀70年代,大學的系或小型組織機構都能買得起并運作一台小型機(微機)了。

微機是向前發展的自然的一步。內建度的提高使得人們可以将計算機的所有部件(除了外設和存儲器)內建到一塊晶片上。到20世紀70年代,intel公司和摩托羅拉公司都釋出了8位微處理器。第一台可用的微機altair 8800是由mits公司于1975年推向市場的。随後不久蘋果i(1976年)和蘋果ii(1977年)上市,它們是最早擁有可用軟體和外設的可用的商用微機。

摩托羅拉公司設計了68000(32位微機),以此為基礎,蘋果公司在20世紀80年代早期推出了新的mac計算機。atari(預示了遊戲技術)和commodore(amiga是多媒體計算機的先驅)制造了另一些基于68000的計算機。不管是好還是壞,ibm選擇采用intel體系結構戰勝了摩托羅拉的處理器。摩托羅拉曾與intel在工業界并駕齊驅。如果ibm采用的是68000而不是8086,摩托羅拉可能成為今天的intel。摩托羅拉68000(和它的8位微處理器)并沒有消失,飛思卡爾公司接管了摩托羅拉微處理器,并以coldfire的名字推上市場。現在摩托羅拉處理器依然存在,但更多地應用于雷射列印機和汽車等嵌入式領域。

《計算機組成原理》----1.3 計算機的發展

基于intel的技術和微軟的作業系統軟體,ibm在20世紀80年代推出了個人電腦(pc機)。由于它的開放式體系結構,pc機在第三方軟、硬體開發者中流行起來。intel将8080微處理器擴充為包括16位80286(1982年)和32位80386(1985年),以及含有64位資料總線的pentium(1990年)。到2000年,intel憑借其富有想象力的設計、技術革新和積極的市場營銷,成功地從競争者中脫穎而出,統治了pc機市場。

有趣的是,amd和之後薄命的transmeta等一些廠商推出了與intel處理器相容的産品。這些晶片能夠執行與intel處理器相同的機器代碼,但它們是通過在執行自己的本地指令之前将intel機器語言轉換為自己的機器語言來做到這一點的。一些人可能會說就連intel的晶片也不再執行intel機器碼了,因為指令在晶片内部被轉換為更原始的操作(這是一個被簡化的實際情況,因為并非所有指令都被會翻譯)。第6章将詳細介紹處理器的内部操作。

“摩爾定律”一詞是卡沃·米德(carver mead)于1975年根據戈登·摩爾(gordon moore)所觀察到內建電路的內建度每兩年翻一番的現象而創造的。摩爾定律當然是一個經驗性的觀測結果,但在過去的40年裡,技術的進步的确導緻晶片内半導體數量呈指數式增長。這一增長還伴随着內建電路速度的相應提升。內建電路内半導體數量的增加還導緻體系結構複雜度的急劇增加以及一些極其聰明的性能提升方法的出現。

《計算機組成原理》----1.3 計算機的發展

20世紀90年代,計算機指令集體系結構沒有特别顯著的改進——pentium系列處理器的指令集與intel 80386差别不大。pc機的成功要求未來的計算機必須提供與舊機器之間的向後相容,以維護不同代機器之間的軟體相容。然而,intel處理器的微體系結構絕不是一成不變的。微體系結構領域産生了相當驚人的進展。

20世紀80年代見證了計算機組成的一個變化——risc革命,設計者試圖設計出更加合理的處理器。指令流水線是risc處理器的一個關鍵特征,它将處理器變成一個用自動生産線執行指令的工廠,4條或更多的指令可以在流水線的不同階段同時執行。risc處理器被定位于高端工作站市場,它們從未獲得完全的成功,因為與pc市場相比工作站市場要小得多。

intel公司以極大的熱情投入到性能更高的處理器的研制中,并将經典risc處理器的不少特征融入它自己的新處理器産品中(ia32體系結構的pentium系列處理器)。

超标量處理和亂序執行的出現是計算機組成的另一個重要變化。後文将讨論這些内容。這裡需要介紹的就是超标量處理包括從存儲器中讀出幾條指令且并行執行這些指令;亂序執行則是指以不同于程式中順序的順序執行指令,以避免等待某條指令的執行,進而加快指令的執行速度。亂序執行允許在目前指令等待正被使用的資源時執行程式中靠後的指令。用菜單做類比,亂序執行就相當于在烹饪主菜的時候準備甜點。intel在它的pentium系列處理器中引入了亂序執行機制。

盡管20世紀80年代展開了risc和cisc的大辯論,但随着risc技術應用于cisc處理器中、cisc的特點展現在risc處理器中,原本存在巨大分歧的risc和cisc逐漸融合,20世紀90年代計算機科學家們已經不再讨論這一問題了。

高速處理對今天的計算機應用來說非常重要,但是如果沒有用來儲存程式和資料所必需的速度快、體積小、功耗低、容量大的存儲器,我們所知道的計算機就不會出現。數字資料記錄的先驅之一阿爾伯特·霍格蘭(albert hoagland)在1982年曾說,“為了向磁盤盤片上覆寫的基本材料表示敬意,矽谷應改名為鐵氧化物谷(iron oxide valley)”。我贊成這個觀點;正是磁盤使得pc革命成為可能。

20世紀30年代,約翰·文森特·阿塔納索夫(john v. atanasoff)發明出一種最早的儲存設備,這是一個覆寫着電容的旋轉的磁鼓,能夠充電并存儲1和0。磁鼓旋轉時,電容從一排觸點下通過,它們的值會被讀出。20世紀40年代,汞超聲延遲線被用來存放資料,就像一串超聲脈沖沿着一條充滿水銀的細管傳播一樣。當脈沖信号從一端傳遞到另一端時,它會被放大并再次循環。這是真正的動态存儲。

第一個快速資料儲存設備是由英國曼徹斯特大學的弗雷德裡克·威廉姆斯(frederick williams)發明的。陰極射線管(最初用于雷達顯示器,後來用于電視機)通過用電子束照射某個點進行充電,進而将資料存放在其表面(這是阿塔那索夫旋轉磁鼓的電子版本)。第一代威廉姆斯管隻能存儲1024比特,後來翻倍為2048比特。

1949年,佛瑞斯特(forester)在美國為旋風計算機(whirlwind computer)設計了鐵氧體磁芯存儲器。磁芯是一個很小的磁材料環,能夠沿順時針或逆時針方向磁化。到20世紀70年代,鐵氧體磁芯存儲器已成為大型機的主流存儲器。實際上,鐵氧體磁芯存儲器帶給我們磁芯存儲器(core store)這個名詞,現在描述大容量外存儲器時偶爾還會用到它。20世紀70年代,人們發明了半導體動态存儲器用作磁芯存儲器的替代品,現在已成為資料存儲的标準手段。今天,我們可以很容易地用容量較小的dram子產品(在一個小的電路闆上內建幾個存儲晶片)實作8g位元組的存儲容量。從1024比特的威廉姆斯存儲管開始,人們經曆了漫長的曆程(226=6400萬)。

磁盤一直用來存放程式和資料。ibm于1956年在它的統計控制随機存取方法(ramac)上引入了一種磁盤存儲機制,将資料儲存在一個旋轉的磁盤的表面。ramac 305磁盤能夠存儲大約5mb的資料,轉速為1200 rpm。自那時起,磁盤性能開始提升。現在,磁盤的最大容量約為4t(242)位元組,容量為1tb的可移動外部硬碟可以很容易地裝進口袋中(而不像冰箱那麼大的ramac)。由于磁盤的機械特性,其典型轉速為7200 rpm,僅有最初ramac的6倍快。讓我們再次說一次:現代磁盤的容量是ramac的數百萬倍,但其速度卻僅是ramac的6倍。這一細節指出了計算機發展過程中的瓶頸:計算機各個組成部分的發展速度是不均衡的。不過,現在用來替代硬磁盤的固态盤技術具有非常快的、完全電子化的驅動器(見《計算機存儲與外設》第3章)。

今天,個人計算機使用光存儲器(dvd或藍光CD光牒)導入程式或存儲資料。光存儲技術将資訊存放在透明聚碳酸酯盤上的螺旋軌道上。人們利用雷射技術從可重寫CD光牒上讀出資訊,或将資訊寫入可重寫CD光牒。cd技術是在1958年(發明雷射)~1978年(可用的光存儲器)間發明的。dvd(1997年發明)是改進的cd,藍光CD光牒(2006年)是改進的dvd。幾年之間,光存儲技術就從每片容量600m位元組擴充到25gb。本書後面會詳細讨論光存儲技術。

普适(ubiquitous)計算或泛在(pervasive)計算的發展是當今世界的一大特點。這個概念的簡單含義是計算是無處不在的。例如,一輛現代汽車中含有超過50台不同的計算機,控制着從複雜的衛星導航系統到簡單的門鎖機制。

普适計算在手機、mp3播放器、數位相機和遊戲終端上展現得最為明顯。普适計算的一個特征就是趨同性(convergence)這個概念,功能穿越了不同移動裝置之間的界限。例如,手機被設計為通信裝置,而由于它含有計算機、存儲器、鍵盤和顯示器,它能夠很容易地實作如mp3播放器和個人備忘錄等其他功能。通過內建更多的硬體(其價格也越來越便宜),可以進一步融合,将gps或數位相機的功能內建到手機中。

普适計算也被稱作功耗感覺(power-aware)的計算。術語功耗感覺與低功耗計算的含義相同。如果系統真的是很小的便攜的,它們無法連接配接到電網上,隻能依靠電池或其他手段為其充電。功耗限制導緻低功耗電路設計和減少處理器功耗等方面的研究不斷增加。多核處理技術也受到功耗感覺的驅動,因為與增加時鐘頻率相比,使用多個處理器核可以更加高效地提高計算能力。

ebook或電子書是功耗感覺計算的一個産品,它允許人們将成百上千本書放在一個平裝書大小的裝置中。盡管ebook依賴低功耗cpu技術進行資料處理,以及體積小的非易失性高速flash存儲器存放這些書,但還是新型功耗感覺顯示技術的進步使ebook成為可能。電子墨水(e-ink)使用大量細小含有透明液體的微膠囊。每個微膠囊内都有細小的白色和黑色顆粒代表着相反的電荷。通過施加一個穿過微膠囊的靜态電壓,白色顆粒将移動到微膠囊頂端,黑色顆粒移動到底部,或者按照相反方向移動。這會分别使微膠囊看起來是白色或黑色的。

一旦充電完畢,電子墨水操作時無需耗電(即僅在翻頁時才會消耗電量)。傳統的lcd技術(可以在ipad中看到)在彩色顯示方面具有一定的優勢,可以在光照條件較差的情況下使用,但由于其背光,lcd的功耗較高,并且在明亮的光照條件下可視性較差。

多媒體處理能力是現代計算機(包括普适的和傳統的個人計算機)的一個重要特征。多媒體處理(處理和存儲音頻/視訊資料)需要很大的存儲容量以及完成大量簡單重複操作的實時處理聲音樣本和圖像像素的能力。不斷改進的存儲技術和不斷提高的計算能力最初使得在桌面pc機上處理多媒體成為可能,之後又使價格便宜、品質輕的個人裝置(比如ipad)具備了進行多媒體處理的能力。

本書将介紹現代計算機是如何利用音頻/視訊資料的特點來增強性能的。我們将專門介紹intel的多媒體擴充(mmx)指令。之是以選擇mmx,是因為它是最早在ia32系列處理器上實作的擴充指令集。後續的intel處理器還支援更多的擴充指令(比如sse和sse-2),amd處理器也有類似的擴充指令。

随着時間的推移,體系結構設計的收斂程度随着多媒體播放器的引入而不斷增加,這使得個人計算機與高分辨率視訊娛樂系統之間幾乎沒有多大的差别了。