在《三體》的第一部中,作者描寫在虛擬游戲中牛頓和馮.諾伊曼拜訪秦始皇,說服秦王用三千萬秦兵組成人列計(jì)算機(jī)。歷史上馮.諾伊曼發(fā)明了奠定現(xiàn)代計(jì)算機(jī)基礎(chǔ)的馮.諾伊曼體系,在小說中,作者利用馮.諾伊曼向秦始皇介紹他的計(jì)劃巧妙地科普了一些計(jì)算機(jī)原理,只不過構(gòu)成計(jì)算機(jī)的不是半導(dǎo)體或晶體管,而是紀(jì)律嚴(yán)明的大秦士兵。
值得一提的是,這個(gè)情節(jié)在劉慈欣以前的短篇科幻小說《荊軻刺秦王》出現(xiàn)過,在《荊軻刺秦王》中,是荊軻而不是馮.諾伊曼向秦王推銷他的計(jì)劃。
那么,小說中的這個(gè)人列計(jì)算機(jī)是怎么回事呢?請看下面這段:
秦始皇揮手召來了三名士兵,他們都很年輕,與秦國的其他士兵一樣,一舉一動(dòng)像聽從命令的機(jī)器。
"我不知道你們的名字,"馮?諾伊曼拍拍前兩個(gè)士兵的肩,"你們兩個(gè)負(fù)責(zé)信號(hào)輸入,就叫‘入1’、‘入2’吧,"他又指指最后一名士兵,"你,負(fù)責(zé)信號(hào)輸出,就叫 ‘出’吧,”他伸手撥動(dòng)三名士兵,"這樣,站成一個(gè)三角形,出是頂端,入l和入2是底邊,"
"哼,你讓他們成楔形攻擊隊(duì)形不就行了?"秦始皇輕蔑地看著馮?諾伊曼。
牛頓不知從什么地方掏出六面小旗,三白三黑,馮?諾伊曼接過來分給三名士兵,每人一白一黑,說:
白色代表0,黑色代表1。好,現(xiàn)在聽我說,出,你轉(zhuǎn)身著著入1和入2,如果他們都舉黑旗,你就舉黑旗,其他的情況你都舉白旗,這種情況有三種:入1白,入2黑;入1黑,入2白;入1、入2都是白。"
"我覺得你應(yīng)該換個(gè)顏色,白旗代表投降。"秦始皇說。
興奮中的馮?諾伊曼沒有理睬皇帝,對三名士兵大聲命令:"現(xiàn)在開始運(yùn)行!入1入2,你們每人隨意舉旗,好,舉!好,再舉!舉!"
入1和入2同時(shí)舉了三次旗,第一次是黑黑,第二次是白黑,第三次是黑白。出都進(jìn)行了正確反應(yīng),分別舉起了一次黑和兩次白。
"很好,運(yùn)行正確,陛下,您的士兵很聰明!"
“這事兒傻瓜都會(huì),你能告訴朕,他們在干什么嗎?"秦始皇一臉困惑地問。
"這三個(gè)人組成了一個(gè)計(jì)算系統(tǒng)的部件,是門部件的一種,叫‘與門'。"馮?諾伊曼說完停了一會(huì)兒,好讓皇帝理解。
馮所介紹的,是計(jì)算機(jī)的基本構(gòu)件——‘與門’,在文中加粗的那一段,描述了與門的特點(diǎn):當(dāng)兩個(gè)輸入都為1時(shí),輸出為1,其余情況輸出為0。用符號(hào)表示如下:
與門
而除了與門以外,還有或門,和非門,馮也用相似的手段,利用大秦士兵組成,他們用符號(hào)分別表示為:
或門
非門
與、或、非,這三種基本邏輯運(yùn)算是整個(gè)計(jì)算機(jī)的基礎(chǔ)。在這三種運(yùn)算的基礎(chǔ)上,我們得以構(gòu)建出一臺(tái)精密的計(jì)算機(jī)。
我們可以想象出來,由三千萬大秦士兵組成的一臺(tái)“計(jì)算機(jī)”,黑色和白色的棋子此起彼伏,而計(jì)算機(jī)的運(yùn)算速度就取決于士兵們的反應(yīng)速度。
那么我們現(xiàn)實(shí)中的計(jì)算機(jī)是怎樣組成的呢?很簡單,原理同上,但是那些部件不是人,而是電子元器件,畢竟,電子的速度要比人快多了,同時(shí)它還很小。
雖然電子元器件相對于人來說很小,但是世界上第一臺(tái)電子計(jì)算機(jī)還是像一間屋子一樣大(但是相比于三千萬人來說,好多了不是嗎)。以我們今天對計(jì)算機(jī)(電腦)的印象來說很難理解,不僅是因?yàn)樗捏w積,而是它沒有顯示器,沒有鍵盤,沒有鼠標(biāo),并且,它能用來干什么?
計(jì)算機(jī)的功能本質(zhì)上來說只有一個(gè)——計(jì)算,而我們今天用電腦做的所有事情,上網(wǎng),玩游戲,看視頻,從本質(zhì)上來說都是計(jì)算機(jī)的計(jì)算過程,只不過是信息的表示模式不一樣罷了。
有了顯示器,我們可以更好地閱讀計(jì)算機(jī)計(jì)算的結(jié)果;有了鼠標(biāo)和鍵盤,我們可以更加方便地輸入信息和指令。當(dāng)你在玩游戲時(shí),計(jì)算機(jī)接受你的鍵盤的摁鍵和鼠標(biāo)的移動(dòng)所產(chǎn)生的信號(hào),從而計(jì)算出你的人物的移動(dòng),生命值的變化,通過圖像處理以后顯示在屏幕上,這一切,都是計(jì)算。
現(xiàn)代電子計(jì)算機(jī)已經(jīng)無數(shù)的更新?lián)Q代,我們在有了晶體管后由發(fā)明了半導(dǎo)體,通過集成電路技術(shù)制成的芯片,使得我們的計(jì)算機(jī)越來越小,操作系統(tǒng)和軟件的發(fā)展使得功能越來越豐富,但電子計(jì)算機(jī)結(jié)構(gòu)依然遵循馮.諾伊曼體系。
讓我們拋開顯示器,鍵盤,鼠標(biāo),半導(dǎo)體,芯片這些現(xiàn)代計(jì)算機(jī)的標(biāo)志,我們以最原始的手段實(shí)現(xiàn)最簡單的計(jì)算過程為例,希望可以幫助大家更好地理解計(jì)算機(jī)。
(參考自《編碼:隱匿在計(jì)算機(jī)軟硬件背后的語言》,作者:Charles Petzold)
我們用電路來實(shí)現(xiàn)信號(hào)的傳遞,用電路的通和斷來表示1和0,相信大家都了解計(jì)算機(jī)中的信息是以二進(jìn)制存儲(chǔ)的。我們用最簡單原始的方法,看下圖:
與門
上圖是一個(gè)電路圖,左邊連個(gè)開關(guān)控制著兩個(gè)繼電器,當(dāng)開關(guān)閉合時(shí),繼電器通電產(chǎn)生磁力,通過吸引金屬片使得連個(gè)串聯(lián)在燈泡電路上的連個(gè)開關(guān)閉合,燈泡通電發(fā)光。
左邊兩個(gè)開關(guān)就是我們的“鼠標(biāo)和鍵盤”,而燈泡就是“顯示器”,他們就是輸入和輸出設(shè)備,我們通過開關(guān)的閉合表明我們想輸入的是1還是0,而觀察燈泡,來閱讀計(jì)算結(jié)果。
在上述電路中,進(jìn)行的是一個(gè)與的運(yùn)算,只有連個(gè)開關(guān)同時(shí)閉合時(shí),燈泡才會(huì)發(fā)光。
同理,我們也可以構(gòu)建或門和非門:
或門
非門
我們現(xiàn)在已經(jīng)通過原始的手段組建了基本的邏輯運(yùn)算功能,接下來我們用這三種基本運(yùn)算實(shí)現(xiàn)一個(gè)二進(jìn)制的加法機(jī)。
他的控制面板如下,兩排開關(guān),可以讓我們輸入2個(gè)八位的二進(jìn)制形式的加數(shù),而第三排的9個(gè)燈泡顯示的運(yùn)算結(jié)果。
然我們想一下二進(jìn)制的加法過程,假如這兩個(gè)數(shù)都只有一位,那么運(yùn)算過程為:
我們把它分解為連個(gè)運(yùn)算,一種是和運(yùn)算,一種是關(guān)于是否進(jìn)位的運(yùn)算:
對于進(jìn)位運(yùn)算我們可以發(fā)現(xiàn)他就是與門,而和運(yùn)算似乎不屬于三種基本運(yùn)算,但是我們可以通過基本運(yùn)算構(gòu)造出這種運(yùn)算:
它由2個(gè)與門,1個(gè)或門和1個(gè)非門構(gòu)成,圖中與門上加上一個(gè)小圓圈表示在與門的輸出位置加上一個(gè)非門,組成與非門。
為了方便表示,我們將異或門表示為:
現(xiàn)在,我們將和運(yùn)算和進(jìn)位運(yùn)算組合起來,組成為半加器,并將它符號(hào)化:
半加器只能計(jì)算1位二進(jìn)制數(shù)的加法,為了進(jìn)行更多位的運(yùn)算,需要將半加器的進(jìn)位輸出傳遞給下一位數(shù)的運(yùn)算。在此基礎(chǔ)上,我們構(gòu)建出全加器,并符號(hào)化:
現(xiàn)在我們將這些全加器組裝起來,首先是最右邊的全加器,由于它是最低位,所以不接受進(jìn)位輸入:
然后從右往左數(shù)第2位到第7位的全加器的進(jìn)位輸入連接到比他第一位的全加器的進(jìn)位輸出:
最左邊的全加器,他的進(jìn)位輸出連接到另一個(gè)燈泡上:
最終,我們的8位二進(jìn)制加法器就完成了,雖然它的功能很簡單,但是這向我們證明了計(jì)算機(jī)的可行。
現(xiàn)代計(jì)算機(jī)的功能可遠(yuǎn)不止這些基礎(chǔ)的運(yùn)算,通過這些與門,或門,非門的組合,我們可以構(gòu)造出存儲(chǔ)器,地址選擇器,等等。
遺憾的是,在這里我們無法將其介紹清楚,因?yàn)樗麄儽燃臃ㄟ\(yùn)算更加復(fù)雜。
感興趣的同學(xué)可以去看Charles Petzold的著作《編碼:隱匿在計(jì)算機(jī)軟硬件背后的語言》,上文中以電子元器件構(gòu)造加法機(jī)的這一令人興奮的想法便來自此書。
理論上,我們完全可以用這種凡是制造出一臺(tái)計(jì)算機(jī),事實(shí)上,早期的電子計(jì)算機(jī)就是用繼電器組成的,這也是它的體形如此巨大的原因,他的輸出就是一排排的指示燈。同時(shí)以繼電器構(gòu)造計(jì)算機(jī)也會(huì)導(dǎo)致計(jì)算機(jī)的運(yùn)算速度受到限制,因?yàn)槿绻饘倨_關(guān)的擺動(dòng)速度影響了信號(hào)的傳遞。
我們反觀人列計(jì)算機(jī)這一設(shè)想,就會(huì)發(fā)現(xiàn)它比繼電器組成的計(jì)算機(jī)還要慘,因?yàn)槿顺鲥e(cuò)的機(jī)率要遠(yuǎn)遠(yuǎn)大于機(jī)器,而且計(jì)算機(jī)的運(yùn)行成本(三千萬人的吃喝住宿)也過于昂貴。
不過,不管是人列計(jì)算機(jī),還是繼電器計(jì)算機(jī),或者是現(xiàn)代大規(guī)模集成電路計(jì)算機(jī),他們背后所依據(jù)的計(jì)算原理都是一樣的,其基本構(gòu)件就是:與門,或門,非門。