跳至內容

計算機科學/計算機制基礎

來自華夏公益教科書,一個開放的世界中的開放書籍

計算機制

[編輯 | 編輯原始碼]

我們已經學習了一些計算的基本原理,並看到了這些原理在強大的技術中展現出的計算能力。一開始我們想象,如果我們可以構建一個能夠執行一些簡單任務的簡單裝置,那麼計算可以透過純粹的機械方式和盲目的符號操作來完成。在本課中,我們將學習計算機的發展歷史以及所有現代計算機硬體執行的原理。我們將看到,在物理層面上,計算機只不過是一個遵循簡單規則來操縱兩個符號的簡單裝置。

計算機硬體

[編輯 | 編輯原始碼]

能夠自動執行計算的計算機硬體已經存在了很長時間。從早期計算機到我們今天擁有的現代計算機,都有一個簡短的歷史。

機械計算機

[編輯 | 編輯原始碼]

查爾斯·巴貝奇在 19 世紀初發明瞭可程式設計計算機的概念,並設計了第一臺機械計算機。他的差分機分析機是用於製表多項式函式的機械裝置。機器的輸入是穿孔卡片上的程式和資料,輸出數字可以穿孔在卡片上,或者傳送到印表機、曲線繪圖儀和鈴聲裝置。這些機器使用普通基數 10 定點算術。查爾斯·巴貝奇的機器是第一臺通用計算機的設計,它是圖靈完備的。

模擬計算機

[編輯 | 編輯原始碼]

在 20 世紀早期,機械模擬計算機被設計用來執行越來越複雜的計算,例如透過積分來求解微分方程。模擬計算機使用物理現象(如電氣、機械或液壓量)的連續可變方面來模擬/量化計算,它們缺乏現代數字計算機的精度。

數字計算機

[編輯 | 編輯原始碼]

世界上第一臺全自動數字計算機是 1941 年康拉德·楚澤製造的機電可程式設計計算機Z3。Z3 使用驅動機械繼電器的電開關來執行計算。它用二進位制系統代替了十進位制系統,並率先使用了浮點數。程式和資料儲存在穿孔膠片上。數字裝置和模擬裝置的區別在於值表示是離散的還是連續的。例如,黑色和白色是離散值,但它們有無限數量的灰色(灰度級)。

電子數字計算機

[編輯 | 編輯原始碼]

世界上第一臺電子數字可程式設計計算機是 Colossus,它是在 1943 年用大量電子管(真空管)建造的。該設計完全是電子化的,用於破譯德國的 Enigma 密碼。

電晶體計算機

[編輯 | 編輯原始碼]

從 1955 年起,真空管在計算機設計中被電晶體取代,從而產生了更小、更可靠、更節能的第二代計算機,催生了計算機的“第二代”。

積體電路計算機

[編輯 | 編輯原始碼]

1952 年積體電路的發明開創了計算機機械的新紀元——微型計算機。使用積體電路的微處理器被用來構建你今天看到的通用計算裝置:臺式計算機、筆記型電腦、手機和賀卡。

數字計算原理

[編輯 | 編輯原始碼]

數字計算的數學基礎是喬治·布林發明的布林邏輯。克勞德·夏農在 20 世紀 30 年代證明了電子電路可以使用布林邏輯以二進位制方式進行計算,這成為所有現代計算裝置背後的基本原理/思想。

布林代數

[編輯 | 編輯原始碼]

布林代數對兩個值執行三種運算:AND、OR 和 NOT:真和假。評估這三種運算的規則如圖所示。

The truth table showing the rules for the three basic Boolean operations.

布林運算對布林值進行運算,並始終返回布林值。對於 AND 運算,只有當兩個運算元都為真時結果才為真。另一方面,OR 運算只有當兩個運算元中任何一個為假時,結果才為假。NOT 運算接受一個運算元,並簡單地對其取反。我們將看到,如果我們可以構建實現這三種運算的電子電路,我們就可以構建能夠執行各種算術和邏輯函式的電路。

可以使用電晶體物理地實現這三種布林運算。電晶體本質上是一個微小的開關,如圖所示。

A transistor is fundamentally a tiny switch with three pins. When a logical 1 is applied to the control pin the switch is closed connecting in to out.

當在控制引腳上施加高電壓(邏輯 1)時,開關閉合,將輸入引腳直接連線到輸出引腳。電晶體工作在兩種電壓下:高電壓和低電壓,這可以用來表示兩個不同的邏輯值:真和假,或者兩個二進位制值:1 和 0。我們將使用高電壓來物理地表示邏輯 1,使用低電壓來表示邏輯 0。

電晶體和邏輯閘

[編輯 | 編輯原始碼]

電晶體是簡單的裝置,尺寸很小,但它是電子電路的基本構建塊。例如,我們可以使用一個電晶體構建一個名為 NOT 門的裝置,如圖所示。

A NOT gate constructed using a single transistor.

如果我們將紅色框內的部分視為一個單元,它就像一個反相器,在數字邏輯設計中被稱為非門。如該器件的真值表(圖旁邊)所示,當輸入為邏輯 1 時,開關閉合,將輸出連線到地,將輸出電壓拉低,表示邏輯 0。另一方面,當輸入為邏輯 0 時,開關保持開啟,導致輸出線上出現高電壓,因為它透過電阻連線到電源,並且在沒有電流的情況下,電阻不會導致電源下降。一旦這個器件被構建,我們就可以用它作為構建塊來構建更復雜的電路。我們將使用以下符號來表示非門。

NOT gate

利用電晶體和非門,我們可以構建一個執行與操作的器件。

An AND gate built using two transistors and a NOT gate.

如圖所示,該器件執行精確的與操作。只有當兩個輸入都為邏輯 1 時,輸出才為邏輯 1(高電壓),這會導致兩個開關都閉合,將非門之前的輸出拉低。然後,非門將輸出取反,使其成為高電壓或邏輯 1。

類似地,我們可以構建一個執行或操作的器件。

An OR gate built using two transistors and a NOT gate.

如圖所示,這種並聯結構保證只要任何一個電晶體閉合,輸出就是高電壓。換句話說,兩個輸入和輸出之間的關係是一個或邏輯函式。

門到電路

[編輯 | 編輯原始碼]

利用三個基本門(與、或、非),我們可以構建任何組合邏輯電路。電路由輸入線、由線連線的門和輸出線組成。一旦電路被設計,它就可以被看作是一個黑盒,它實現了一些將輸入對映到輸出的邏輯。以下是用標準電路構建演算法

  1. 從所需的邏輯構建真值表
  2. 以積之和的形式構建邏輯表示式
  3. 使用門將表示式轉換為電路設計

我們想要構建一個測試兩個位是否相等的電路。這兩個輸入是兩個位,它們用高電壓(邏輯 1)或低電壓(邏輯 0)物理表示。根據電路所需的邏輯,我們可以繪製以下真值表

This logic tests whether two bits are the same/equal.

前兩列枚舉了兩個輸入線的全部可能值組合。只有當兩個輸入相同時,輸出才是邏輯 1(真)。根據真值表,我們可以推匯出以下邏輯表示式(積之和形式)

(a AND b) OR ((NOT a) AND (NOT b))

為了推匯出積之和形式,我們檢查真值表中輸出為邏輯 1 的行。我們知道這些行中顯示的輸入組合應該導致輸出變為邏輯 1。我們可以用邏輯表示式表示這些行中的每一個,例如,(a AND b) 表示最後一行,因為當 a 和 b 都為邏輯 1 時,該表示式根據與操作的定義評估為邏輯 1。類似地,((NOT a) AND (NOT b)) 表示第一行。如果我們將這兩個情況組合起來,我們可以用一個表示式來表示所需的邏輯:(a AND b) OR ((NOT a) AND (NOT b))。如果我們將真值表中情況的輸入代入,這個表示式應該在相應情況下評估為相同所需的輸出值。因為我們知道如何構建實現與、或、非操作的器件(門),所以我們可以構建一個能夠比較兩個位是否相等的器件。這個器件將能夠完全機械地(盲目地)執行這種操作,因為它不知道操作的含義。

使用相同的方法,我們可以逐漸構建越來越複雜的電路。例如,我們可以構建一個能夠將兩個二進位制數相加的器件:一位加法器。這只是一個弄清楚所需邏輯並使用我們已經知道如何製作的構建塊來構建器件的問題。

An adder circuit that adds two binary bits.

一旦我們從真值表中得到邏輯表示式的積之和形式,我們就可以直接構建電路,因為我們只需要三種類型的邏輯閘和線連線。下圖顯示了使用三個基本邏輯閘構建一位加法器(帶進位)電路的設計。

The circuit for producing the sum bit of a one bit adder.

我們可以透過連線多個一位加法器來構建多位加法器。下圖顯示了一個兩位加法器可以透過將第一個一位加法器的進位輸出連線到第二個一位加法器的進位輸入來形成。

A 2-bit adder circuit constructed from two 1-bit adders.


燈診斷演算法的簡單流程圖
計算 N!(N 的階乘)的演算法的流程圖

計算機資料儲存

華夏公益教科書