1. 程式人生 > >2.6 計算機輸入和輸出

2.6 計算機輸入和輸出

退役 丟失 蘋果公司 部分 他在 計算器 CP cpu 計算

計算機組成

2 計算機基本結構

2.6 計算機輸入和輸出

技術分享圖片

如果無法與外界進行聯系,計算機的CPU,存儲器再強大也沒有任何的用處。因此我們需要在我們的模型機上加上輸入與輸出,這才能構成一個完整的計算機模型。

技術分享圖片

這就是馮·諾依曼計算機的五大組成部分。分別是運算器、控制器、存儲器、輸入設備和輸出設備。現在我們就主要來介紹輸入設備和輸出設備。根據馮·諾依曼結構的要求,計算機要執行的程序首先需要通過輸入設備傳送到存儲器中。那麽這個過程是如何完成的呢?就讓我們來看一看馮·諾依曼這個時代所用的計算機。

技術分享圖片

當時編寫程序並不像我們現在這樣方便,程序員需要在長長的紙帶上打上小孔,若幹個小孔就代表一條指令。那麽將這樣穿孔的紙帶送入計算機後,計算機可以通過有孔或者沒孔的區別轉換成0和1的二進制信息。從而識別出程序員所表達的指令。經過運算以後,計算機將通過電傳打字機將輸出的結果打印在紙帶上。這樣人們就可以通過觀察,分析紙帶上的穿孔情況來判斷輸出的結果。那這樣的計算機的輸入和輸出與馮諾依曼結構又是如何對應呢?

技術分享圖片

我們先來想,這個穿孔紙帶應該對應著什麽。是對應著輸入設備嗎?其實紙帶上的信息還是要通過特定設備才能被識別,所以穿孔紙帶應該是作為輸入設備的來源。其實在馮·諾依曼結構中,對此也進行了規定,除了輸入設備I,輸出設備O,馮·諾依曼結構中還規定了外部的記錄介質,稱為R。實際上穿孔紙帶就是這種外部記錄介質,它可以靜態的存儲計算機所需的信息,不會因為計算機斷電而丟失。那好,剛才提到了電傳打字機又屬於哪個類別呢? 其實電傳打字機應該屬於輸出設備的一種。電傳打字機會將計算機的運行結果打印到紙帶上,所以電傳打印機輸出的紙張也可以認為是外部記錄介質R。

技術分享圖片

除了紙張,還可以用帶磁性的材料存儲信息。類似於我們現在使用的硬盤,那麽硬盤應該屬於輸入設備、輸出設備?還是外部記錄介質?首先我們看硬盤是可讀又可寫的,所以我們至少應該是這麽連接的。而硬盤中的信息在斷電之後是不會丟失的,所以硬盤也具有外部記錄介質R的特性。所以嚴格說來,硬盤裏記錄信息的磁片才是真正的外部記錄介質。而硬盤當中還會有其他的控制芯片,可以認為是輸入或者輸出設備的一部分。在通常情況下我們沒有必要劃分的這麽苛刻。可以認為硬盤就是屬於外部記錄介質R這種類型。那麽現在的計算機當中,很多設備都會既有輸入的功能又有輸出的功能,所以通常我們會這麽來畫這個結構圖 。

技術分享圖片

將輸入設備和輸出設備畫成一個部件,既有輸入的功能又有輸出的功能。

技術分享圖片

現在,我們就來看,如何在我們的模型機上添加這樣一個輸入輸出設備。如果直接考慮硬盤這樣的設備,就太過復雜了。我們希望現在模型機上添加一個簡單的輸入輸出設備。說到簡單的設備,我們先來看一個小故事。

技術分享圖片

這是愛德華·羅伯茨,當他60年代從軍隊退役之後,開了一個小公司,制造和銷售臺式的計算器。但是後來由於德州儀器這樣的大公司進軍計算機的市場,采用了低價銷售的策略,羅伯茨這樣的小公司自然無法抵抗,很快就到了破產的邊緣。為了挽救這樣的局面,羅伯茨也苦苦廝守了很多辦法。其中一個辦法就是設計制造面向個人的計算機。雖然那時計算機已經開始小型化了,但是那時所謂小型計算機的體積仍然很大,不是個人能夠輕易搬動的。而且動輒上萬美元的價格,更不是個人所能承受的。而大眾電子雜誌的編輯跟羅伯茨說,如果你能做出400美元以下的計算機,我就在雜誌封面上給你做推薦。後來羅伯茨真的造出了這樣的計算機,這就是牛郎星8800。它內部主要有兩塊集成電路,一是intel8080微處理器,第二是一塊256字節的存儲器。

技術分享圖片

那麽他在面板上提供了簡單的輸入輸出,靠手來上下撥動一些開關進行編程輸入,計算機在經過運算之後,會將計算的結果通過這些小燈泡進行顯示。雖然構造簡單,但這確實是一臺設計精巧,而且有實用價值的計算機,更重要的是它價格非常便宜,真的做到了400美元以下。於是,大眾電子雜誌就在1975年1月真的為他做了封面的推薦。此後,訂單像雪片一樣地飛來。挽救了羅伯茨的公司。當時,很多電子計算機的愛好者和團體都爭相采購牛郎星8800型計算機以進行分析研究。

技術分享圖片

其中就有喬布斯和他的搭檔沃茲尼亞克。他們一方面認真學習了這臺計算機精巧的內部結構,另一方面,他們也對如此簡陋的輸入輸出感到非常不滿意。在這樣的影響下,同一年,他們就很快設計完成了自己的產品,就是蘋果I型個人計算機。這臺計算機有鍵盤的輸入,並且可以連接電視機作為顯示器輸出,這也是蘋果公司的第一個產品。

技術分享圖片

那好,我們回來看如何在模型機上添加輸入輸出設備。

技術分享圖片

我們不需要那麽復雜的輸入輸出。現在,我們只想添加一個類似於牛郎星8800型計算機的輸入和輸出,也就是手動的開關和小燈泡的顯示。我們可以設想有一個類似於存儲器結構的輸入輸出芯片,它內部有兩個單元,每個單元都有自己的地址。我們這裏設定的是1110和1111這兩個地址,他們和存儲器裏面的地址都不相同,因此可以相互區分。那這個輸入輸出如何與計算機的其他部分相連呢?我們知道CPU是通過控制總線,地址總線和數據總線與存儲器相連的,現在我們就來對此做一個簡單的改造。將控制總線分別連接到存儲器和輸入輸出芯片的控制邏輯,地址總線分別連到存儲器和輸入輸出芯片的MAR,數據總線也同樣分別連到存儲器和輸入輸出芯片的MDR。然後我們將輸入輸出設備中其中一個單元連接到手動的開關,這個單元中有8個比特,每個比特連接一個開關。當開關撥到上方時,對應的位就會被設置為1,開關撥動倒下方時,對應的位就會被設置為0。另外一個存儲單元接到8個小燈泡,當這個單元中的比特為高電頻時,對應的小燈泡就會亮起,如果這個比特是低電頻時,對應的小燈泡就會熄滅。那現在我們就有一個非常簡單的輸入輸出。這個輸入輸出在計算機上是如何工作的呢? 我們通過一個簡單的輸入的場景來進行學習。

技術分享圖片

我們假設這時候CPU和存儲器已經開始工作了。其中一條指令就是要讀取這8個手動開關的狀態。假設現在8個手動開關的狀態是前三個開關被撥到高位,後五個開關被撥到低位,那地址為1111這個單元中所保存的2進制信息就是 1110 0000。那CPU如何能讀取到這個輸入信息呢?我們首先來看地址總線。CPU會將地址發送到地址總線上去,地址總線上所發的地址是1111,那麽在總線上會有一些簡單的電路進行地址的識別,可以發現這個地址應該發到輸入輸出部件,而不是存儲器。與此同時,我們來看控制總線,CPU會發出讀的信號,從而告知輸入輸出設備目前是要進行一個讀操作,那輸入輸出設備的控制邏輯和地址譯碼器就會從地址為1111的單元中讀出相關的信息,送到數據總線上,數據總線會將這個數據最終送回到CPU中,這樣就完成了輸入信息的讀取工作。此後,CPU可以對這個輸入的數據進行運算,或者根據這個數據調整後面的執行的行為,也可以把這個數暫時保存到存儲器中以備後來的使用。那這樣就是一個輸入的簡單場景。然後我們再來看一個輸出的簡單場景。

技術分享圖片

既然是輸出,我們就要給出輸出單元對應的地址,在這裏是1110。與剛才一樣,地址總線會將這個地址傳送到輸入輸出設備,同時,控制總線上回給出寫的控制信號,然後在數據總線上,會給出我們想輸出的數據,這裏設為 1100 1100。然後輸入輸出設備就會根據來自總線的信息判斷出,要向地址為1110的單元寫入數據 1100 1100,此後就可以完成寫入的操作。當寫入操作完成後,對應的小燈泡就接收到了高低不同的電壓,我們就會發現1所對應的燈泡亮起,0所對應的燈泡熄滅。這就是一個輸出的簡單場景。

技術分享圖片

這樣我們就將CPU、存儲器、輸入輸出設備,通過系統總線連接了起來。但僅僅如此肯定是不夠的,我們還會想增加更多的輸入輸出設備。比如說打印機,比如說硬盤,有了這些其實就很像早期計算機的構造,計算機作為一個整體已經可以開始運行了。當然我們還可以通過網絡將計算機內部的信息與其他設備或其他計算機進行交互,我們還可以增加更多的輸入輸出設備,進行更為豐富的人機交互。現在看到的這些就是在個人計算機中常見的輸入輸出設備了。早期的個人計算機中幾乎每一個設備都需要通過對應的輸入輸出芯片或者板卡進行連接,例如我們會需要單獨的網卡,單獨的聲卡等等。

技術分享圖片

在現在的個人計算機當中,大多數的輸入輸出設備的控制芯片都會集中在主板上的南橋芯片中,例如我們剛才提到的這些設備。那麽對於一些比較復雜的輸入輸出的需求,比如高性能的顯示,還是需要獨立的板卡(顯卡)與外部的設備進行相連。這就是以個人計算機為例所展示的輸入輸出設備相關的情況。

技術分享圖片

運算器,控制器,存儲器再加上輸入和輸出,我們通過模型機的構建已經掌握了馮·諾伊曼結構的基本原理。但是這個基本原理和真實的計算機之間是否能夠一一對應呢?我們下一節來探討這個問題。

2.6 計算機輸入和輸出