讓電代替人工去計算——機電時期的權宜之計

機電時期(19世紀末~20世紀40年代)

我們難以理解計算機,也許主要并不由于它復雜的機理,而是根本想不明白,為什么一通上電,這坨鐵疙瘩就突然能飛速運轉,它安安靜靜地到底在干些啥。

經過前幾篇的探索,我們已經了解機械計算機(準確地說,我們把它們稱為機械式桌面計算器)的工作方式,本質上是通過旋鈕或把手帶動齒輪旋轉,這一過程全靠手動,肉眼就能看得一清二楚,甚至用現在的樂高積木都能實現。麻煩就麻煩在電的引入,電這樣看不見摸不著的神物(當然你可以摸摸試試),正是讓計算機從笨重走向傳奇、從簡單明了走向令人費解的關鍵。

技術準備

19世紀,電在計算機中的應用主要有兩大方面:一是提供動力,靠電動機(俗稱馬達)代替人工驅動機器運行;二是提供控制,靠一些電動器件實現計算邏輯。

我們把這樣的計算機稱為機電計算機

電動機

漢斯·克里斯欽·奧斯特(Hans Christian ?rsted 1777-1851),丹麥物理學家、化學家。邁克爾·法拉第(Michael Faraday 1791-1867),英國物理學家、化學家。

1820年4月,奧斯特在實驗中發現通電導線會造成附近磁針的偏轉,證明了電流的磁效應。第二年,法拉第想到,既然通電導線能帶動磁針,反過來,如果固定磁鐵,旋轉的將是導線,于是解放人力的偉大發明——電動機便誕生了。

電動機其實是件很不稀奇、很笨的發明,它只會一個勁不停地轉圈,而機械式桌面計數器的運轉本質上就是齒輪的轉圈,兩者簡直是天造地設的一雙。有了電動機,計算員不再需要吭哧吭哧地手搖,做數學也終于少了點體力勞動的模樣。

電磁繼電器

約瑟夫·亨利(Joseph Henry 1797-1878),美國科學家。愛德華·戴維(Edward Davy 1806-1885),英國物理學家、科學家、發明家。

電磁學的價值在于摸清了電能和動能之間的轉換,而從靜到動的能量轉換,正是讓機器自動運行的關鍵。而19世紀30年代由亨利和戴維所分別發明的繼電器,就是電磁學的重要應用之一,分別在電報和電話領域發揮了重要作用。

電磁繼電器(原圖來自維基「Relay」詞條)

其結構和原理十分簡單:當線圈通電,產生磁場,鐵質的電樞就被吸引,與下側觸片接觸;當線圈斷電,電樞就在彈簧的作用下上揚,與上側觸片接觸。

在機電設備中,繼電器主要發揮兩方面的作用:一是通過弱電控制強電,使得控制電路可以控制工作電路的通斷,這一點放張原理圖就能一目了然;二是將電能轉換為動能,利用電樞在磁場和彈簧作用下的往返運動,驅動特定的純機械結構以完成計算任務。

繼電器弱電控制強電原理圖(原圖來自網絡)

制表機(tabulator/tabulating machine/unit record equipment/electric accounting machine)

從1790年開始,美國的人口普查基本每十年進行一次,隨著人口繁衍和移民的增多,人口數量那是一個爆炸。

前十次的人口普查結果(圖片截自維基「United States Census」詞條)
我做了個折線圖,可以更直觀地感受這洪水猛獸般的增長之勢。

不像現在這個的互聯網時代,人一出生,各種信息就已經電子化、登記好了,甚至還能數據挖掘,你無法想象,在那個計算設備簡陋得基本只能靠手搖進行四則運算的19世紀,千萬級的人口統計就已經是當時美國政府所不能承受之重。1880年開始的第十次人口普查,歷時8年才最終完成,也就是說,他們休息上兩年之后就要開始第十一次普查了,而這一次普查,需要的時間恐怕要超過10年。本來就是十年統計一次,如果每次耗時都在10年以上,還統計個鬼啊!

當時的人口調查辦公室(1903年才正式成立美國人口調查局)方了,趕緊征集能減輕手工勞動的發明,就此,霍爾瑞斯帶著他的制表機完虐競爭對手,在方案招標中脫穎而出。

赫爾曼·霍爾瑞斯(Herman Hollerith 1860-1929),美國發明家、商人。

霍爾瑞斯的制表機首次將穿孔技術應用到了數據存儲上,一張卡片記錄一個居民的各項信息,就像身份證一樣一一對應。聰明如你一定能聯想到,通過在卡片對應位置打洞(或不打洞)記錄信息的方式,與現代計算機中用0和1表示數據的做法簡直一毛一樣。確實這可以看作是將二進制應用到計算機中的思想萌芽,但那時的設計還不夠成熟,并未能如今這般巧妙而充分地利用寶貴的存儲空間。舉個例子,我們現在一般用一位數據就可以表示性別,比如1表示男性,0表示女性,而霍爾瑞斯在卡片上用了兩個位置,表示男性就在標M的地方打孔,女性就在標F的地方打孔。其實性別還湊合,表示日期時浪費得就多了,12個月需要12個孔位,而真正的二進制編碼只需要4位。當然,這樣的局限與制表機中簡單的電路實現有關。

1890年用于人口普查的穿孔卡片,右下缺角是為了避免不小心放反。(圖片來自《Hollerith 1890 Census Tabulator》)
有專門的打孔員使用穿孔機將居民信息戳到卡片上,操作面板放大了孔距,方便打孔。(原圖來自維基「Herman Hollerith」詞條)
細心如你有沒有發現操作面板居然是彎的(圖片來自《Hollerith 1890 Census Tabulator》)

有沒有一點熟悉的趕腳?

沒錯,簡直就是現在的人體工程學鍵盤啊!(圖片來自網絡)

這的確是當時的人體工程學設計,目的是讓打孔員每天能多打點卡片,為了節省時間他們也是蠻拼的……

在制表機前,穿孔卡片/紙帶在各類機器上的作用主要是存儲指令,比較有代表性的,一是賈卡的提花機,用穿孔卡片控制經線提沉(詳見《現代計算機真正的鼻祖》),二是自動鋼琴(player piano/pianola),用穿孔紙帶控制琴鍵壓放。

賈卡提花機
之前很火的美劇《西部世界》中,每次循環開始都會給一個自動鋼琴的特寫,彈奏起看似寧靜安逸、實則詭異違和的背景樂。
為了彰顯霍爾瑞斯的開創性應用,人們直接把這種存儲數據的卡片叫做「Hollerith card」。(截圖來自百度翻譯)

打好了孔,下一步就是將卡片上的信息統計起來。

讀卡裝置(原圖來自專利US395781)

制表機通過電路通斷識別卡上信息。讀卡裝置底座中內嵌著與卡片孔位一一對應的管狀容器,容器里盛有水銀,水銀與導線相連。底座上方的壓板中嵌著同樣與孔位一一對應的金屬針,針抵著彈簧,可以伸縮,壓板的上下面由導電材料制成。這樣,當把卡片放在底座上,按下壓板時,卡片有孔的地方,針可以通過,與水銀接觸,電路接通,沒孔的地方,針就被擋住。

讀卡原理示意圖,圖中標p的針都穿過了卡片,標a的針被擋住。(圖片來自《Hollerith 1890 Census Tabulator》)

如何將電路通斷對應到所需要的統計信息?霍爾瑞斯在專利中給出了一個簡單的例子。

涉及性別、國籍、人種三項信息的統計電路圖,虛線為控制電路,實線為工作電路。(圖片來自專利US395781,下同。)
實現這一功能的電路可以有多種,巧妙的接線可以節省繼電器數目。這里我們只分析上頭最基礎的接法。

圖中有7根金屬針,從左至右標的分別是:G(類似于總開關)、Female(女)、Male(男)、Foreign(外國籍)、Native(本國籍)、Colored(有色人種)、White(白種人)。好了,你終于能看懂霍爾瑞斯龍飛鳳舞的字跡了。

這個電路用于統計以下6項組合信息(分別與圖中標M的6組電磁鐵對應):

① native white males(本國的白種男)

② native white females(本國的白種女)

③ foreign white males(外國的白種男)

④ foreign white females(外國的白種女)

⑤ colored males(非白種男)

⑥ colored females(非白種女)

以第一項為例,如果表示「Native」、「White」和「Male」的針同時與水銀接觸,接通的控制電路如下:

描死我了……

這一示例首先展示了針G的作用,它把控著所有控制電路的通斷,目的有二:

1、在卡片上留出一個專供G通過的孔,以防止卡片沒有放正(照樣可以有部分針穿過錯誤的孔)而統計到錯誤的信息。

2、令G比其他針短,或者G下的水銀比其他容器里少,從而確保其他針都已經接觸到水銀之后,G才最終將整個電路接通。我們知道,電路通斷的瞬間容易產生火花,這樣的設計可以將此類元器件的損耗集中在G身上,便于后期維護。

不得不感慨,這些發明家做設計真的特別實用、細致。

上圖中,橘黃色箭頭標識出3個相應的繼電器將閉合,閉合之后接通的工作電路如下:

上標為1的M電磁鐵完成計數工作

通電的M將產生磁場, 牽引特定的杠桿,撥動齒輪完成計數。霍爾瑞斯的專利中沒有給出這一計數裝置的具體結構,可以想象,從十七世紀開始,機械計算機中的齒輪傳動技術已經發展到很成熟的水平,霍爾瑞斯無需重新設計,完全可以使用現成的裝置——用他在專利中的話說:「any suitable mechanical counter」(任何合適的機械計數器都OK)。

M不單控制著計數裝置,還控制著分類箱蓋子的開合。

分類箱側視圖,簡單明了。

將分類箱上的電磁鐵接入工作電路,每次完成計數的同時,對應格子的蓋子會在電磁鐵的作用下自動打開,統計員瞟都不用瞟一眼,就可以左手右手一個快動作將卡片投到正確的格子里。由此完成卡片的快速分類,以便后續進行其他方面的統計。

跟著我右手一個快動作(圖片來自《Hollerith 1890 Census Tabulator》,下同。)
每天工作的最后一步,就是將示數盤上的結果抄下來,置零,第二天繼續。

1896年,霍爾瑞斯創立了制表機公司(The Tabulating Machine Company),1911年與另外三家公司合并成立Computing-Tabulating-Recording Company(CTR),1924年更名為International Business Machines Corporation(國際商業機器公司),就是現在大名鼎鼎的IBM。IBM也因此在上個世紀風風火火地做著它拿手的制表機和計算機產品,成為一代霸主。

制表機在當時成為與機械計算機并存的兩大主流計算設備,但前者通常專用于大型統計工作,后者則往往只能做四則運算,無一具有通用計算的能力,更大的變革將在二十世紀三四十年代掀起。

祖思機

康拉德·祖思(Konrad Zuse 1910~1995),德國土木工程師、發明家。

有些天才注定成為大師,祖思便是其一。讀大學時,他就不安分,專業換來換去都覺得無聊,工作之后,在亨舍爾公司參與研究風對機翼的影響,對繁復的計算更是忍無可忍。

一天到晚就是在搖計算器,中間結果還要手抄,簡直要瘋。(截圖來自《Computer History》)

祖思一面抓狂,一面相信還有好多人跟他一樣抓狂,他看到了商機,覺得這個世界迫切需要一種可以自動計算的機器。于是一不做二不休,在亨舍爾才呆了幾個月就瀟灑辭職,搬到父母家里啃老,一門心思搞起了發明。他對巴貝奇一無所知,憑一己之力做出了世界上第一臺可編程計算機——Z1。

Z1

祖思從1934年開始了Z1的設計與實驗,于1938年完成建造,在1943年的一場空襲中炸毀——Z1享年5歲。

我們早已無法見到Z1的原貌,零星的一些照片顯得彌足珍貴。(圖片來自http://history-computer.com/ModernComputer/Relays/Zuse.html)

從照片上可以發現,Z1是一坨龐大的機械,除了靠電動馬達驅動,沒有任何與電相關的部件。別看它原始,里頭可有好幾項甚至沿用至今的開創性理念:

■ 將機器嚴格劃分為處理器和內存兩大部分,這正是如今馮·諾依曼體系結構的做法。

■ 不再同前人一樣用齒輪計數,而是采用二進制,用穿過鋼板的釘子/小桿的來回移動表示0和1。

■ 引入浮點數,相比之下,后文將提到的一些同時期的計算機所用都是定點數。祖思還發明了浮點數的二進制規格化表示,優雅至極,后來被納入IEEE標準。

■ 靠機械零件實現與、或、非等基礎的邏輯門,靠巧妙的數學方法用這些門搭建出加減乘除的功能,最出彩的要數加法中的并行進位——一步完成所有位上的進位。

與制表機一樣,Z1也用到了穿孔技術,不過不是穿孔卡,而是穿孔帶,用廢棄的35毫米電影膠卷制成。和巴貝奇所見略同,祖思也在穿孔帶上存儲指令,有輸入輸出、數據存取、四則運算共8種。

簡化得不能再簡化的Z1架構示意圖

每讀一條指令,Z1內部都會牽動一大串部件完成一系列復雜的機械運動。具體如何運動,祖思沒有留下完整的描述。有幸的是,一位德國的計算機專家——Raul Rojas對有關Z1的圖紙和手稿進行了大量的研究和分析,給出了較為完善的闡述,主要見其論文《The Z1: Architecture and Algorithms of Konrad Zuse’s First Computer》,而我一時抽風把它翻譯了一遍——《Z1:第一臺祖思機的架構與算法》。如果你讀過幾篇Rojas教授的論文就會發現,他的研究工作可謂壯觀,當之無愧是世界上最了解祖思機的人。他成立了一個網站——Konrad Zuse Internet Archive,專門搜集整理祖思機的資料。他帶的某個學生還編寫了Z1加法器的仿真軟件,讓我們來直觀感受一下Z1的精巧設計:

從轉動三維模型可見,光一個基本的加法單元就已經非常復雜。(截圖來自《Architecture and Simulation of the Z1 Computer》,下同。)
此例演示二進制10+2的處理過程,板帶動桿,桿再帶動其他板,桿處于不同的位置決定著板、桿之間是否可以聯動。平移限定在前后左右四個方向(祖思稱為東南西北),機器中的所有鋼板轉完一圈就是一個時鐘周期。
上面的一堆零件看起來可能仍然比較混亂,我找到了另外一個基本單元的演示動畫。(圖片來自《talentraspel simulator für mechanische schaltglieder zuse》)

幸運的是,退休之后,祖思在1984~1989年間憑著自己的記憶重繪Z1的設計圖紙,并完成了Z1復制品的建造,現藏于德國技術博物館。盡管它跟原本的Z1并不完全一樣——多少會與事實存在出入的記憶、后續設計經驗可能帶來的思維進步、半個世紀之后材料的發展,都是影響因素——但其大框架基本與原Z1一致,是后人研究Z1的寶貴財富,也讓吃瓜的游客們得以一睹純機械計算機的風采。

在Rojas教授搭建的網站(Konrad Zuse Internet Archive)上,提供著Z1復制品360°的高清展示。

當然,這臺復制品和原Z1一樣不靠譜,做不到長時間無人值守的自動運行,甚至在揭幕儀式上就掛了,祖思花了幾個月才修好。1995年祖思去世后,它就沒再運行,成了一具鋼鐵尸體。

Z1的不可靠,很大程度上歸咎于機械材料的局限性。用現今的眼光看,計算機內部是無比復雜的,簡單的機械運動一方面速度不快,另一方面無法靈活、可靠地傳動。祖思早有采用電磁繼電器的想法,無奈那時的繼電器不但價格不低,體積還大。到了Z2,祖思靈機一動,最占零件的不過是機器的存儲部分,何不繼續使用機械式內存,而改用繼電器來實現處理器呢?

Z2是緊跟著Z1的第二年誕生的,其設計資料一樣難逃被炸毀的命運(不由感慨那個動亂的年代啊)。Z2的資料不多,大體可以認為是Z1到Z3的過渡品,它的一大價值是驗證了繼電器和機械件在實現處理器方面的等效性,也相當于驗證了Z3的可行性,二大價值是為祖思贏得了建造Z3的一些贊助。

Z3

Z3的壽命比Z1還短,從1941年建造完成,到1943年被炸毀(是的,又被炸毀了),就活了兩年。好在戰后到了60年代,祖思的公司做出了完美的復制品,比Z1的復制品靠譜得多,藏于德意志博物館,至今還能運行。

德意志博物館展出的Z3復制品,內存和CPU兩個大柜子里裝滿了繼電器,操作面板儼如今天的鍵盤和顯示器。(原圖來自維基「Z3 (computer)」詞條)

由于祖思一脈相承的設計,Z3和Z1有著一毛一樣的體系結構,只不過它改用了電磁繼電器,內部邏輯不再需要靠復雜的機械運動來實現,只要接接電線就可以了。我搜了一大圈,沒有找到Z3的電路設計資料——因著祖思是德國人,研究祖思的Rojas教授也是德國人,更多詳盡的資料均為德文,語言不通成了我們接觸知識的壁壘——就讓我們簡單點,用一個YouTube上的演示視頻一睹Z3芳容。

以12+17=19這一算式為例,用二進制表示即:1100+10001=11101。

先通過面板上的按鍵輸入被加數12,繼電器們萌萌噠一陣擺動,記錄下二進制值1100。(截圖來自《Die Z3 von Konrad Zuse im Deutschen Museum》,下同。)
繼電器閉合為1,斷開為0。
以同樣的方式輸入加數17,記錄二進制值10001。
按下+號鍵,繼電器們又是一陣萌萌噠擺動,計算出了結果。
在原本存儲被加數的地方,得到了結果11101。

當然這只是機器內部的表示,如果要用戶在繼電器上查看結果,分分鐘都成老花眼。

最終,機器將以十進制的形式在面板上顯示結果。

除了四則運算,Z3比Z1還新增了開平方的功能,操作起來都相當方便,除了速度稍微慢點,完全頂得上現在最簡單的那種電子計算器。

(圖片來自網絡)

值得一提的是,繼電器的觸點在開閉的瞬間容易引起火花(這跟我們現在插插頭時會出現火花一樣),頻繁通斷將嚴重縮短使用壽命,這也是繼電器失效的主要原因。祖思統一將所有線路接到一個旋轉鼓,鼓表面交替覆蓋著金屬和絕緣材料,用一個碳刷與其接觸,鼓旋轉時即產生電路通斷的效果。每一周期,確保需閉合的繼電器在鼓的金屬面與碳刷接觸之前閉合,火花便只會在旋轉鼓上產生。旋轉鼓比繼電器耐用得多,也容易更換。如果你還記得,不難發現這一做法與霍爾瑞斯制表機中G針的安排如出一轍,不得不感嘆這些發明家真是英雄所見略同。

除了上述這種「隨輸入隨計算」的用法,Z3當然還支持運行預先編好的程序,不然也無法在歷史上享有「第一臺可編程計算機器」的名譽了。

Z3提供了在膠卷上打孔的設備
輸入輸出、內存讀寫、算術運算——Z3共識別9類指令。其中內存讀寫指令用6位標識存儲地址,即尋址空間為64字,和Z1一樣。(截圖來自《Konrad Zuse's legacy: the architecture of the Z1 and Z3》)
由穿孔帶讀取器讀出指令

1997~1998年間,Rojas教授將Z3證明為通用圖靈機(UTM),但Z3本身沒有提供條件分支的能力,要實現循環,得粗暴地將穿孔帶的兩頭接起來形成環。到了Z4,終于有了條件分支,它使用兩條穿孔帶,分別作為主程序和子程序。Z4連上了打字機,能將結果打印出來。還擴充了指令集,支持正弦、最大值、最小值等豐富的求值功能。甚而至于,開創性地應用了堆棧的概念。但它回歸到了機械式存儲,因為祖思希望擴大內存,繼電器還是體積大、成本高的老問題。

總而言之,Z系列是一代更比一代強,除了這里介紹的1~4,祖思在1941年成立的公司還陸續生產了Z5、Z11、Z22、Z23、Z25、Z31、Z64等等等等產品(當然后面的系列開始采用電子管),共251臺,一路高歌,如火如荼,直到1967年被西門子吞并,成為這一國際巨頭體內的一股靈魂之血。

貝爾Model系列

同一時期,另一家不容忽視的、研制機電計算機的機構,便是上個世紀叱咤風云的貝爾實驗室。眾所周知,貝爾實驗室及其所屬公司是做電話起家、以通信為主要業務的,雖然也做基礎研究,但為什么會涉足計算機領域呢?其實跟他們的老本行不無關系——最早的電話系統是靠模擬量傳輸信號的,信號隨距離衰減,長距離通話需要用到濾波器和放大器以保證信號的純度和強度,設計這兩樣設備時需要處理信號的振幅和相位,工程師們用復數表示它們——兩個信號的疊加是兩者振幅和相位的分別疊加,復數的運算法則正好與之相符。這就是一切的起因,貝爾實驗室面臨著大量的復數運算,全是簡單的加減乘除,這哪是腦力活,分明是體力勞動啊,他們為此甚至專門雇傭過5~10名婦女(當時的廉價勞力)全職來做這事。

從結果來看,貝爾實驗室發明計算機,一方面是源于自身需求,另一方面也從自身技術上得到了啟發。電話的撥號系統由繼電器電路實現,通過一組繼電器的開閉決定誰與誰進行通話。當時實驗室研究數學的人對繼電器并不熟悉,而繼電器工程師又對復數運算不盡了解,將兩者聯系到一起的,是一名叫喬治·斯蒂比茲的研究員。

喬治·斯蒂比茲(George Stibitz 1904-1995),貝爾實驗室研究員。

Model K

1937年,斯蒂比茲察覺到繼電器的開閉狀態與二進制之間的聯系。他做了個實驗,用兩節電池、兩個繼電器、兩個指示燈,以及從易拉罐上剪下來的觸片組成一個簡單的加法電路。

(圖片來自http://www.vcfed.org/forum/showthread.php?5273-Model-K)
按下右側觸片,相當于0+1=1。(截圖來自《AT&T Archives: Invention of the First Electric Computer》,下同。)
按下左側觸片,相當于1+0=1。
同時按下兩個觸片,相當于1+1=2。

有簡友問到具體是怎么實現的,我沒有查到相關資料,但經過與同事的探討,確認了一種可行的電路:

開關S1、S2分別控制著繼電器R1、R2的開閉,出于簡化,這里沒有畫出開關對繼電器的控制線路。繼電器可以視為單刀雙擲的開關,R1默認與上觸點接觸,R2默認與下觸點接觸。單獨S1閉合則R1在電磁作用下與下觸點接觸,接通回路,A燈亮;單獨S2閉合則R2與上觸點接觸,A燈亮;S1、S2同時閉合,則A燈滅,B燈亮。誠然這是一種粗糙的方案,僅僅在表面上實現了最終效果,沒有體現出二進制的加法過程,有理由相信,大師的原設計可能精妙得多。

因為是在廚房(kitchen)里搭建的模型,斯蒂比茲的妻子稱之為Model K。Model K為1939年建造的Model I——復數計算機(Complex Number Computer)做好了鋪墊。

Model I

Model I的運算部件(圖片來自《Relay computers of George Stibitz》,實在沒找到機器的全身照。)

這里不深究Model I的具體實現,其原理簡單,可線路復雜得要命。讓我們把重點放到其對數字的編碼上。

Model I只用于實現復數的乘除運算,甚至連加減都沒有考慮,因為貝爾實驗室認為加減法口算就夠了。(當然后來他們發現,只要不清空寄存器,就可以通過與復數±1相乘來實現加減法。)當時的電話系統中,有一種擁有10個狀態的繼電器,可以表示數字0~9,鑒于復數計算機的專用性,其實沒有引入二進制的必要,直接利用這種繼電器即可。但斯蒂比茲實在舍不得,便引入了二進制和十進制的雜種——BCD編碼(Binary-Coded Decimal?,二-十進制碼),用四位二進制表示一位十進制:

0 → 0000
1 → 0001
2 → 0010
3 → 0011
……
9 → 1001
10 → 00010000(本來10的二進制表示是1010)

為了直觀一點,我作了個圖。

BCD碼既擁有二進制的簡潔表示,又保留了十進制的運算模式。但作為一名出色的設計師,斯蒂比茲仍不滿足,稍做調整,給每個數的編碼加了3:

0 → 0011 (0 + 3 = 3)
1 → 0100 (1 + 3 = 4)
2 → 0101 (2 + 3 = 5)
3 → 0110 (3 + 3 = 6)
……
9 → 1100 (9 + 3 =12)

為了直觀,我繼續作圖嗯。

是為余3碼(Excess-3),或稱斯蒂比茲碼。為什么要加3?因為四位二進制原本可以表示0~15,有6個編碼是多余的,斯蒂比茲選擇使用中間10個。

這么做當然不是因為強迫癥,余3碼的智慧有二:其一在于進位,觀察1+9,即0100+1100=0000,觀察2+8,即0101+1011=0000,以此類推,用0000這一特殊的編碼表示進位;其二在于減法,減去一個數相當于加上此數的反碼再加1,0(0011)的反碼即9(1100),1(0100)的反碼為8(1011),以此類推,每個數的反碼恰是對其每一位取反。

不管你看沒看懂這段話,總之,余3碼大大簡化了線路設計。

套用現在的術語來說,Model I采用C/S(客戶端/服務端)架構,配備了3臺操作終端,用戶在任意一臺終端上鍵入要算的式子,服務端將收到相應信號并在解算之后傳回結果,由集成在終端上的電傳打字機打印輸出。只是這3臺終端并不能同時使用,像電話一樣,只要有一臺「占線」,另兩臺就會收到忙音提示。

Model I的操作臺(客戶端)(圖片來自《Relay computers of George Stibitz》)
操作臺上的鍵盤示意圖,左側開關用于連接服務端,連接之后即表示該終端「占線」。(圖片來自《Number, Please-Computers at Bell Labs》)
鍵入一個式子的按鍵順序,看看就好。(圖片來自《Number, Please-Computers at Bell Labs》)
計算一次復數乘除法平均耗時半分鐘,速度是使用機械式桌面計算器的3倍。

Model I不但是第一臺多終端的計算機,還是第一臺可以遠程操控的計算機。這里的遠程,說白了就是貝爾實驗室利用自身的技術優勢,于1940年9月9日,在達特茅斯學院(Dartmouth College)和紐約的本部之間搭起線路,斯蒂比茲帶著小小的終端機到學院演示,不一會就從紐約傳回結果,在與會的數學家中引起了巨大轟動,其中就有日后大名鼎鼎的馮·諾依曼,個中啟迪不言而喻。

我用谷歌地圖估了一下,這條線路全長267英里,約430公里,足夠縱貫江蘇,從蘇州火車站連到連云港花果山。
從蘇州站開車至花果山430余公里(截圖來自百度地圖)

斯蒂比茲由此成為遠程計算第一人。

然而,Model I只能做復數的四則運算,不可編程,當貝爾的工程師們想將它的功能擴展到多項式計算時,才發現其線路被設計死了,根本改動不得。它更像是臺巨型的計算器,準確地說,仍是calculator,而不是computer。

Model II

二戰期間,美國要研制高射炮自動瞄準裝置,便又有了研制計算機的需求,繼續由斯蒂比茲負責,便是于1943年完成的Model II——Relay Interpolator(繼電器插值器)。

Model II開始使用穿孔帶進行編程,共設計有31條指令,最值得一提的還是編碼——二-五編碼。

把繼電器分成兩組,一組五位,用來表示0~4,另一組兩位,用來表示是否要加上一個5——算盤既視感。(截圖來自《計算機技術發展史(一)》)

你會發現,二-五編碼比上述的任一種編碼都要浪費位數,但它有它的強大之處,便是自校驗。每一組繼電器中,有且僅有一個繼電器為1,一旦出現多個1,或者全是0,機器就能立馬發現問題,由此大大提高了可靠性。

Model II之后,一直到1950年,貝爾實驗室還陸續推出了Model III、Model IV、Model V、Model VI,在計算機發展史上盤踞一席之地。除了戰后的VI返璞歸真用于復數計算,其余都是軍事用途,可見戰爭確實是技術革新的催化劑。

Harvard Mark系列

稍晚些時候,踏足機電計算領域的還有哈佛大學。當時,有一名正在哈佛攻讀物理PhD的學生——艾肯,和當年的祖思一樣,被手頭繁復的計算困擾著,一心想建臺計算機,于是從1937年開始,抱著方案四處尋找合作。第一家被拒,第二家被拒,第三家終于伸出了橄欖枝,便是IBM。

霍華德·艾肯(Howard Hathaway Aiken 1900-1973),美國物理學家、計算機科學先驅。

1939年3月31日,IBM和哈佛草簽了最后的協議:

1、IBM為哈佛建造一臺自動計算機器,用于解決科學計算問題;

2、哈佛免費提供建造所需的基礎設施;

3、哈佛指定一些人員與IBM合作,完成機器的設計和測試;

4、全體哈佛人員簽訂保密協議,保護IBM的技術和發明權利;

5、IBM既不接受補償,也不提供額外經費,所建計算機為哈佛的財產。

乍一看,砸了40~50萬美元,IBM似乎撈不到任何好處,事實上人家大公司才不在意這點小錢,主要是想借此彰顯自己的實力,提高公司聲譽。然而世事難料,在機器建好之后的慶典上,哈佛新聞辦公室與艾肯私自準備的新聞稿中,對IBM的功勞沒有給予足夠的認可,把IBM的總裁沃森氣得與艾肯老死不相往來。

事實上,哈佛這邊由艾肯主設計,IBM這邊由萊克(Clair D. Lake)、漢密爾頓(Francis E. Hamilton)、德菲(Benjamin Durfee)三名工程師主建造,按理,雙方單位的貢獻是對半的。

1944年8月,(從左至右)漢密爾頓、萊克、艾肯、德菲站在Mark I前合影。(圖片來自http://www-03.ibm.com/ibm/history/exhibits/markI/markI_album.html)

于1944年完成了這臺Harvard Mark I, 在娘家叫做IBM自動順序控制計算機(IBM Automatic Sequence Controlled Calculator),ASCC。

Mark I長約15.5米,高約2.4米,重約5噸,撐滿了整個實驗室的墻面。(圖片來自《A Manual of Operation for the Automatic Sequence Controlled Calculator》,下同。)

同祖思機一樣,Mark I也通過穿孔帶獲得指令。穿孔帶每行有24個空位,前8位標識用于存放結果的寄存器地址,中間8位標識操作數的寄存器地址,后8位標識所要進行的操作——結構已經非常類似后來的匯編語言。

Mark I的穿孔帶讀取器以及織布機一樣的穿孔帶支架
給穿孔帶來個彩色特寫(圖片來自維基「Harvard Mark I」詞條)
這樣小心翼翼地架好(截圖來自CS101《Harvard Mark I》,下同。)
場面之壯觀,猶如掛面制作現場,這就是70年前的APP啊。

至于數據,Mark I內有72個累加寄存器,對外不可見。可見的是另外60個24位的常數寄存器,通過開關旋鈕置數,于是就有了這樣蔚為壯觀的60×24旋鈕陣列:

別數了,這是兩面30×24的旋鈕墻無誤。
在如今哈佛大學科學中心陳列的Mark I上,你只能看到一半旋鈕墻,那是因為這不是一臺完整的Mark I,其余部分保存在IBM及史密森尼博物院。(截圖來自CS50《Harvard Mark I》)

同時,Mark I還可以通過穿孔卡片讀入數據。最終的計算結果由一臺打孔器和兩臺自動打字機輸出。

用于輸出結果的自動打字機(截圖來自CS101《Harvard Mark I》)
po張哈佛館藏在科學中心的真品(截圖來自CS50《Harvard Mark I》)

下面讓我們來大致瞅瞅它里頭是怎么運作的。

這是一副簡化了的Mark I驅動機構,左下角的馬達帶動著一行行、一列列縱橫嚙合的齒輪不停轉動,最終靠左上角標注為J的齒輪去帶動計數齒輪。(原圖來自《A Manual of Operation for the Automatic Sequence Controlled Calculator》,下同。)

當然Mark I不是用齒輪來表示最終結果的,齒輪的旋轉是為了接通表示不同數字的線路。

我們來看看這一機構的塑料外殼,其內部是,一個由齒輪帶動的電刷可分別與0~9十個位置上的導線接通。

齒輪和電刷是可離合的,若它們不接觸,任齒輪不停旋轉,電刷是不動的。艾肯將300毫秒的機器周期細分為16個時間段,在一個周期的某一時間段,靠磁力吸附使齒輪和電刷發生關系齒輪通過軸帶動電刷旋轉。吸附之前的時間是空轉,從吸附開始,周期內的剩余時間便用來進行實質的旋轉計數和進位工作。

其余復雜的電路邏輯,則理所當然是靠繼電器來完成。

艾肯設計的計算機并不局限于一種材料實現,在找到IBM之前,他還向一家制造傳統機械式桌面計算器的公司提出過合作請求,如果這家公司同意合作了,那么Mark I最終極可能是純機械的。后來,1947年完成的Mark II也證明了這一點,它大體上僅是用繼電器實現了Mark I中的機械式存儲部分,是Mark I的純繼電器版本。1949年和1952年,又分別誕生了半電子(二極管繼電器混合)的Mark III和純電子的Mark IV。

末了,關于這一系列值得一提的,是日后常拿來與馮·諾依曼結構做對比的哈佛結構,與馮·諾依曼結構統一存儲的做法不同,它把指令和數據分開存儲,以獲得更高的執行效率,相對的,付出了設計復雜的代價。

兩種存儲結構的直觀對比(圖片來自《ARMv4指令集嵌入式微處理器設計》)

就這樣趟過歷史,漸漸地,這些遙遠的東西也變得與我們親近起來,歷史與現在從來沒有脫節,脫節的是我們局限的認知。往事并非與現今毫無關系,我們所熟知的偉大創造都是從歷史一次又一次的更迭中脫胎而出的,這些前人的智慧串聯著,匯聚成流向我們、流向未來的璀璨銀河,我掀開它的驚鴻一瞥,陌生而熟悉,心里頭熱乎乎地涌起一陣難以言表的驚艷與欣喜,這便是研究歷史的樂趣。


更多詳細內容,見新版連載:《計算機發展史趣談》


參考文獻

胡守仁. 計算機技術發展史(一)[M]. 長沙: 國防科技大學出版社, 2004.

Wikipedia. Hans Christian ?rsted[EB/OL]. https://en.wikipedia.org/wiki/Hans_Christian_%C3%98rsted, 2016-12-10.

Wikipedia. Michael Faraday[EB/OL]. https://en.wikipedia.org/wiki/Michael_Faraday, 2016-11-27.

Wikipedia. Relay[EB/OL]. https://en.wikipedia.org/wiki/Relay#cite_note-adb-6, 2016-12-20.

Wikipedia. Joseph Henry[EB/OL]. https://en.wikipedia.org/wiki/Joseph_Henry, 2016-12-03.

Wikipedia. Edward Davy[EB/OL]. https://en.wikipedia.org/wiki/Edward_Davy, 2016-11-04.

Wikipedia. Unit record equipment[EB/OL]. https://en.wikipedia.org/wiki/Unit_record_equipment, 2016-12-29.

陳厚云, 王行剛. 計算機發展簡史[M]. 北京: 科學出版社, 1985.

吳為平, 嚴萬宗. 從算盤到電腦[M]. 長沙: 湖南教育出版社, 1986.

Wikipedia. United States Census[EB/OL]. https://en.wikipedia.org/wiki/United_States_Census, 2017-01-15.

Wikipedia. United States Census Bureau[EB/OL]. https://en.wikipedia.org/wiki/United_States_Census_Bureau, 2017-01-20.

Wikipedia. Herman Hollerith[EB/OL]. https://en.wikipedia.org/wiki/Herman_Hollerith, 2017-01-08.

Herman Hollerith. Art of Compiling Statistics[P]. 美國專利: 395781, 1889-01-08.

Frank da Cruz. Hollerith 1890 Census Tabulator[EB/OL]. http://www.columbia.edu/cu/computinghistory/census-tabulator.html, 2011-03-28.

Wikipedia. Player piano[EB/OL]. https://en.wikipedia.org/wiki/Player_piano, 2017-01-20.

Wikipedia. Konrad Zuse[EB/OL]. https://en.wikipedia.org/wiki/Konrad_Zuse, 2017-01-30.

Largest Dams. Computer History[EB/OL]. https://www.youtube.com/watch?v=HEmFqohbQCI, 2013-12-23.

Wikipedia. Z1 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z1_(computer), 2017-04-27.

Rojas R. The Z1: Architecture and Algorithms of Konrad Zuse's First Computer[J]. Eprint Arxiv, 2014.

逸之. Z1:第一臺祖思機的架構與算法[EB/OL]. http://www.lxweimin.com/p/cb2ed00dd04f, 2017-04-07.

柏林自由大學. Architecture and Simulation of the Z1 Computer[EB/OL]. http://zuse-z1.zib.de/.

talentraspel. talentraspel simulator für mechanische schaltglieder zuse[EB/OL]. https://www.youtube.com/watch?v=4Xojcw3FVgo, 2013-11-12.

Wikipedia. Z2 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z2_(computer), 2017-02-23.

Wikipedia. Z3 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z3_(computer), 2017-04-14.

Rojas R. Konrad Zuse's legacy: the architecture of the Z1 and Z3[J]. Annals of the History of Computing IEEE, 1997, 19(2):5-16.

Rojas R. How to make Zuse's Z3 a universal computer[J]. IEEE Annals of the History of Computing, 1998, 20(3):51-54.

DeutschesMuseum. Die Z3 von Konrad Zuse im Deutschen Museum[EB/OL]. https://www.youtube.com/watch?v=aUXnhVrT4CI, 2013-10-23.

Wikipedia. Z4 (computer)[EB/OL]. https://en.wikipedia.org/wiki/Z4_(computer), 2017-05-10.

Wikipedia. George Stibitz[EB/OL]. https://en.wikipedia.org/wiki/George_Stibitz, 2017-04-24.

Paul E. Ceruzzi. Number, Please-Computers at Bell Labs[EB/OL]. http://ed-thelen.org/comp-hist/Reckoners-ch-4.html.

AT&T Tech Channel. AT&T Archives: Invention of the First Electric Computer[EB/OL]. https://www.youtube.com/watch?v=a4bhZYoY3lo, 2011-10-19.

history-computer.com. Relay computers of George Stibitz[EB/OL]. http://history-computer.com/ModernComputer/Relays/Stibitz.html.

Wikipedia. Howard H. Aiken[EB/OL]. https://en.wikipedia.org/wiki/Howard_H._Aiken, 2017-07-21.

Wikipedia. Harvard Mark I[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_I, 2017-07-04.

Comrie L J. A Manual of Operation for the Automatic Sequence Controlled Calculator[J]. Nature, 1946, 158:567-568.

CS101. Harvard Mark I[EB/OL]. https://www.youtube.com/watch?v=SaFQAoYV1Nw, 2014-09-13.

CS50. Harvard Mark I[EB/OL]. https://www.youtube.com/watch?v=4ObouwCHk8w, 2014-02-21.

Wikipedia. Harvard Mark II[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_II, 2017-08-03.

Wikipedia. Harvard Mark III[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_III, 2017-08-03.

Wikipedia. Harvard Mark IV[EB/OL]. https://en.wikipedia.org/wiki/Harvard_Mark_IV, 2017-08-03.

陳明敏, 易清明, 石敏. ARMv4指令集嵌入式微處理器設計[J]. 電子技術應用, 2014, 40(12):23-26.


相關閱讀

01改變世界:沒有計算器的日子怎么過——手動時期的計算工具

01改變世界:機械之美——機械時期的計算設備

01改變世界:現代計算機真正的鼻祖——超越時代的偉大思想

01改變世界:讓電代替人工去計算——機電時期的權宜之計

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。

推薦閱讀更多精彩內容

  • 巴貝奇領先全人類一個世紀提出了可編程機械計算機的設想,但最終沒能將其轉換為現實——分析機的建造甚至迄今都沒有人能完...
    逸之閱讀 4,063評論 1 3
  • 稍晚些時候,踏足機電計算領域的還有哈佛大學。當時,一名在校的物理學博士生——霍華德·艾肯(Howard Hatha...
    逸之閱讀 3,849評論 1 4
  • 當祖思憑一己之力開啟德國現代計算機的歷史,大西洋彼岸的美國也毫不示弱地完成了本土的設備升級。和前者的孤軍奮戰不同,...
    逸之閱讀 1,754評論 0 6
  • ? 歡迎來到神奇的01世界 ? 機械計算的歷史在齒輪的轉動下推進了兩個世紀。齒輪要工作,必須給它一個旋轉的動力,無...
    逸之閱讀 2,667評論 0 5
  • 范七 2Jae Chapter 6:花店初遇 崔榮宰掩著有點發熱的臉,將耳機取了下來放回原處。關瀏覽器,關電...
    亦木辛閱讀 258評論 0 2