贝尔机:带你领略编码的魅力
當(dāng)祖思憑一己之力開啟德國現(xiàn)代計(jì)算機(jī)的歷史,大西洋彼岸的美國也毫不示弱地完成了本土的設(shè)備升級(jí)。和前者的孤軍奮戰(zhàn)不同,后者主體是上世紀(jì)叱咤風(fēng)云的貝爾實(shí)驗(yàn)室。
眾所周知,貝爾實(shí)驗(yàn)室及其所屬公司是做電話起家、以通信為主要業(yè)務(wù)的,雖然也做基礎(chǔ)研究,但為什么會(huì)涉足計(jì)算機(jī)領(lǐng)域呢?其實(shí)跟他們的老本行不無關(guān)系——最早的電話系統(tǒng)是靠模擬量傳輸信號(hào)的,信號(hào)隨距離衰減,長距離通話需要用到濾波器和放大器以保證信號(hào)的純度和強(qiáng)度,設(shè)計(jì)這兩樣設(shè)備時(shí)需要處理信號(hào)的振幅和相位,工程師們用復(fù)數(shù)表示它們——兩個(gè)信號(hào)的疊加是兩者振幅和相位的分別疊加,復(fù)數(shù)的運(yùn)算法則正好與之相符。這就是一切的起因,貝爾實(shí)驗(yàn)室所面臨的大量的復(fù)數(shù)運(yùn)算,全是簡單的加減乘除,工程師們不堪重負(fù),并開始雇傭文化程度不高的婦女(當(dāng)時(shí)的廉價(jià)勞力)全職輔助計(jì)算。
從結(jié)果來看,貝爾實(shí)驗(yàn)室發(fā)明計(jì)算機(jī),一方面是源于自身需求,另一方面也從自身技術(shù)上得到了啟發(fā)。電話的撥號(hào)系統(tǒng)由繼電器電路實(shí)現(xiàn),通過一組繼電器的開閉決定誰與誰進(jìn)行通話。當(dāng)時(shí)實(shí)驗(yàn)室研究數(shù)學(xué)的人對(duì)繼電器并不熟悉,而繼電器工程師又對(duì)復(fù)數(shù)運(yùn)算不盡了解,將兩者聯(lián)系到一起的,是一名叫喬治·斯蒂比茨(George Stibitz)的研究員。
喬治·斯蒂比茨(George Stibitz),1904-1995,貝爾實(shí)驗(yàn)室研究員。(圖片來自維基百科)Model K
斯蒂比茨畢業(yè)于康奈爾大學(xué)數(shù)學(xué)物理專業(yè),1930~1941年就職于貝爾實(shí)驗(yàn)室。1937年的某一天,他覺察到繼電器的開閉狀態(tài)與二進(jìn)制之間的聯(lián)系。他找來兩節(jié)電池、兩個(gè)繼電器和兩個(gè)小燈泡,然后從易拉罐上剪下一個(gè)U形觸片,用電線把它們連成了一個(gè)最簡單的二進(jìn)制加法電路。
Model K(原圖來自https://history-computer.com/ModernComputer/Relays/Stibitz.html)實(shí)現(xiàn)的效果是:按下觸片B,燈泡L2亮;按下觸片A,燈泡L2亮;同時(shí)按下A和B,燈泡L1亮。所實(shí)現(xiàn)的加法邏輯如下:
因?yàn)槭窃趶N房(kitchen)里搭建的模型,斯蒂比茲的妻子稱之為Model K。Model K看似簡單,卻為斯蒂比茨驗(yàn)證了制造二進(jìn)制計(jì)算機(jī)的可行性。
Model I
1939年,斯蒂比茨帶領(lǐng)貝爾實(shí)驗(yàn)室的團(tuán)隊(duì)僅花了6個(gè)月就完成了專門用于進(jìn)行復(fù)數(shù)運(yùn)算的復(fù)數(shù)計(jì)算機(jī)(Complex Number Computer),后人也稱之為Model I。Model I只支持復(fù)數(shù)的乘除運(yùn)算,而沒有實(shí)現(xiàn)最基本的加減,因?yàn)樨悹枌?shí)驗(yàn)室認(rèn)為加減法足夠簡單,只需要口算就夠了,再不濟(jì)也可以直接使用現(xiàn)成的機(jī)械計(jì)算器。不過后來他們驚喜地發(fā)現(xiàn),只要不清空前一個(gè)數(shù),在此基礎(chǔ)上把新的數(shù)和1(或-1)相乘,就相當(dāng)于與前一個(gè)數(shù)求和(或求差)。
Model I(圖片來自https://history-computer.com/ModernComputer/Relays/Stibitz.html)編碼
當(dāng)時(shí)的電話系統(tǒng)中,有一種擁有10個(gè)狀態(tài)的繼電器,可以表示數(shù)字0~9,鑒于Model I的專用性,其實(shí)沒有引入二進(jìn)制的必要,直接利用這種繼電器即可。斯蒂比茨實(shí)在不愿放棄在數(shù)學(xué)上極簡至美的二進(jìn)制,便引入了二進(jìn)制和十進(jìn)制的“雜種”—— 二-十進(jìn)制編碼(binary-coded decimal?),簡稱BCD碼,將十進(jìn)制數(shù)的每個(gè)數(shù)位都用4位二進(jìn)制碼表示:
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
| 10 | 0001 0000 |
| 23 | 0010 0011 |
| 45 | 0100 0101 |
可見,0~9的BCD碼和二進(jìn)制碼一樣,但10的BCD碼成了1和0的二進(jìn)制碼的拼接,更大的數(shù)亦然。
那么這種編碼是如何實(shí)現(xiàn)的呢?有了邏輯門,一切好辦。輸入端的10個(gè)開關(guān)電路D0~D9分別表示十進(jìn)制的數(shù)字0~9,每次導(dǎo)通其中一個(gè)電路,即輸入了相應(yīng)的數(shù)字;輸出端的4個(gè)開關(guān)電路BCD0~BCD3分別表示BCD碼的4位二進(jìn)制數(shù)字。D0~D9與BCD0~BCD3的對(duì)應(yīng)關(guān)系如下:
BCD編碼真值表這一邏輯非常簡單,用4組或門就可以實(shí)現(xiàn):
BCD編碼邏輯電路BCD碼既擁有二進(jìn)制的簡潔表示,又保留了十進(jìn)制的運(yùn)算模式。但至此,斯蒂比茲仍不滿足,他完成了一次絕頂聰明的調(diào)整——在每個(gè)BCD碼的基礎(chǔ)上+3,成為余3碼(Excess-3):
| 0 | 0011 |
| 1 | 0100 |
| 2 | 0101 |
| 3 | 0110 |
| 4 | 0111 |
| 5 | 1000 |
| 6 | 1001 |
| 7 | 1010 |
| 8 | 1011 |
| 9 | 1100 |
為什么要+3呢?因?yàn)?位二進(jìn)制共有16個(gè)編碼,原本可以表示數(shù)字0~15,在BCD中后6個(gè)編碼(1010~1111)是多余的,通過+3,斯蒂比茨讓前3個(gè)(0000~0010)和后3個(gè)(1101~1111)成為多余編碼:
4位二進(jìn)制碼在BCD和余3碼中的含義這么做是為了追求平衡,還是為了滿足斯蒂比茨的強(qiáng)迫癥心理呢?當(dāng)然都不是。余3碼的智慧有二:
相比BCD,余3碼大大簡化了線路設(shè)計(jì)。
客戶端/服務(wù)器架構(gòu)
除了編碼,Model I的另一大亮點(diǎn)是它首次采用了操作終端和后臺(tái)計(jì)算明確分離的架構(gòu),用現(xiàn)在的行話講,就是C/S(客戶端/服務(wù)器)架構(gòu)。
斯蒂比茨為Model I配備了3臺(tái)操作終端,用戶在任意一臺(tái)終端上鍵入要算的式子,后臺(tái)將收到相應(yīng)信號(hào)并在解算之后傳回結(jié)果,由集成在終端上的打字機(jī)打印輸出。只是這3臺(tái)終端并不能同時(shí)使用,像電話一樣,只要有一臺(tái)“占線”,另兩臺(tái)就會(huì)收到忙音提示。
Model I的操作終端(圖片來自https://history-computer.com/ModernComputer/Relays/Stibitz.html)終端集成了數(shù)據(jù)輸入(鍵盤)和結(jié)果輸出(打印機(jī)),用戶使用十進(jìn)制輸入數(shù)據(jù),并在打印紙上得到十進(jìn)制的計(jì)算結(jié)果,內(nèi)部線路自動(dòng)完成十進(jìn)制與余3碼的相互轉(zhuǎn)換。
鍵盤的按鍵不多,左側(cè)為一個(gè)連接/斷開后臺(tái)的開關(guān),M鍵和D鍵分別表示乘法和除法運(yùn)算,C鍵表示清零。為了便于電路實(shí)現(xiàn),Model I采用定點(diǎn)運(yùn)算,要求輸入的數(shù)據(jù)都是純小數(shù),由使用者自行做好縮放,因此表示加減操作符(包括實(shí)數(shù)部分和虛數(shù)部分)的4個(gè)按鍵上都直接標(biāo)注了小數(shù)點(diǎn)。
Model I操作終端按鍵布局示意圖舉個(gè)例子,如計(jì)算(10+24i)×(20-48i),按鍵的順序如下圖所示,在按下等號(hào)鍵之后,機(jī)器將在約45后打印出結(jié)果。由于機(jī)器接收的公式是經(jīng)過縮放之后的(0.10+0.24i)×(0.20-0.48i),所有數(shù)據(jù)被縮小了100倍,需人工將機(jī)器給出的答案放大10000倍才是正確結(jié)果。
Model I按鍵操作示例Model I不但是第一臺(tái)多終端的計(jì)算機(jī),還是第一臺(tái)可以遠(yuǎn)程操控的計(jì)算機(jī)。貝爾實(shí)驗(yàn)室利用自身的技術(shù)優(yōu)勢,在達(dá)特茅斯學(xué)院(Dartmouth College)和400多公里開外的紐約本部之間搭起線路。1940年9月9日,斯蒂比茨帶著一臺(tái)小小的終端來到學(xué)院演示,不一會(huì)就從紐約傳回結(jié)果,在與會(huì)的數(shù)學(xué)家中引起了巨大轟動(dòng),他們紛紛上臺(tái)親自驗(yàn)證,其中有很多計(jì)算機(jī)史上鼻祖級(jí)的人物,包括日后大名鼎鼎的馮·諾依曼、“控制論之父”諾伯特·維納(Norbert Wiener)、“人工智能之父”約翰·麥卡錫(John McCarthy)和“ENIAC之父”約翰·莫奇利(John Mauchly)等。
斯蒂比茲由此成為遠(yuǎn)程計(jì)算第一人。
然而,Model I只能做復(fù)數(shù)的四則運(yùn)算,不可編程,當(dāng)貝爾的工程師們想將它的功能擴(kuò)展到多項(xiàng)式計(jì)算時(shí),才發(fā)現(xiàn)其線路幾乎不具備升級(jí)的可能性。盡管名為Complex Number Computer,從能力上看,叫Complex Number Calculator似乎更合適。
Model II
1941年底美國加入二戰(zhàn)之后,貝爾實(shí)驗(yàn)室開始為軍方研制高科技作戰(zhàn)設(shè)備,便有了建造可編程計(jì)算機(jī)的需求。該項(xiàng)目繼續(xù)交由斯蒂比茨負(fù)責(zé),1943年年底,Model II問世。盡管是臺(tái)通用計(jì)算機(jī),但由于主要用于靠插值法計(jì)算M9高炮射擊前的參數(shù),Model II有個(gè)十分“專用”的名字——繼電器插值器(Relay Interpolator)。
Model II開始使用穿孔帶進(jìn)行編程,共設(shè)計(jì)有31種指令,最值得一提的還是編碼——二-五編碼(bi-quinary coded decimal)。
| 0 | 01 00001 |
| 1 | 01 00010 |
| 2 | 01 00100 |
| 3 | 01 01000 |
| 4 | 01 10000 |
| 5 | 10 00001 |
| 6 | 10 00010 |
| 7 | 10 00100 |
| 8 | 10 01000 |
| 9 | 10 10000 |
不難發(fā)現(xiàn),這種編碼和算盤的示數(shù)方式極其形似。實(shí)現(xiàn)起來很簡單,把繼電器分成兩組:一組5位,表示0~4;另一組2位,表示是否要加上5。
然而比起余3碼,二-五編碼似乎既缺乏高級(jí)感,又浪費(fèi)位數(shù),斯蒂比茨之所以選擇它,是因?yàn)樗袕?qiáng)大的自校驗(yàn)?zāi)芰Α2捎枚?五編碼時(shí),每一組繼電器中,有且僅有一個(gè)繼電器為1,一旦出現(xiàn)多個(gè)1,或者全是0的情況,機(jī)器就能立馬發(fā)現(xiàn)問題,由此大大提高了可靠性。
后話
相比祖思,斯蒂比茨是幸運(yùn)的,貝爾實(shí)驗(yàn)室為他提供了足夠大展身手的平臺(tái)。他擁有出色的技術(shù)團(tuán)隊(duì),擁有現(xiàn)成的零件資源(繼電器),也擁有更安全穩(wěn)定的研究環(huán)境。Model系列不是斯蒂比茨的個(gè)人功勞,而是整個(gè)貝爾實(shí)驗(yàn)室的集體成就。1941年斯蒂比茨離職后,貝爾實(shí)驗(yàn)室依然與他保持著緊密合作,并相繼推出了Model III~Model VI,在計(jì)算機(jī)發(fā)展史上盤踞一席之地,同時(shí)為美國的軍事力量做出了不小的貢獻(xiàn)。其中,Model V是戰(zhàn)時(shí)的最后一型,可處理的數(shù)據(jù)范圍達(dá)到了10-64~1064,戰(zhàn)后的Model VI則“返璞歸真”再度用于復(fù)數(shù)計(jì)算。
參考文獻(xiàn)
- Wikipedia. George Stibitz[EB/OL].
- Paul E. Ceruzzi. Number, Please-Computers at Bell Labs[EB/OL].
- AT&T Tech Channel. AT&T Archives: Invention of the First Electric Computer[EB/OL].
- history-computer.com. Relay computers of George Stibitz[EB/OL].
- 崔林, 吳鶴齡. IEEE計(jì)算機(jī)先驅(qū)獎(jiǎng)(1980-2014)(第三版):計(jì)算機(jī)科學(xué)與技術(shù)中的發(fā)明史[M]. 北京: 高等教育出版社, 2014.
- 岳怡. 數(shù)字電路與數(shù)字電子技術(shù)[M]. 西安: 西北工業(yè)大學(xué)出版社, 2004.
所謂反碼,就是二進(jìn)制串中的所有位都取反。 ?
總結(jié)
以上是生活随笔為你收集整理的贝尔机:带你领略编码的魅力的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iSCSI存储技术全攻略【存储部落】云存
- 下一篇: Java word转pdf 精确获取文件