計算機是什麼

2021-09-26 22:59:22 字數 4259 閱讀 1487

越是大眾的讀物越容易有錯誤。

本文也是如此。

計算機的設計初衷是為了做計算。以前的人們也需要計算。在《談音律》這篇文章中,朱載堉利用乙個八十一位的超大算盤,計算了這個值,並精確到小數點後第二十五位,計算出12√2,由此得出十二平均律。但是在計算機出現之後,我們可以更快,更容易的計算了。

你的智慧型手機中有數十億個電晶體,看起來好像很複雜,但實際上它是很簡單的機器,通過一層層的抽象來做出複雜操作。在這篇文章中,我們會一層層講解,從最底層的1和0,到邏輯門,cpu。

計算機最早是機電裝置,一般用十進位制計數,比如用齒輪數來代表十進位制。

在計算中,只有兩種狀態,true/false(或者說開/關)。實際上是收到硬體的制約,比如電壓有高低兩種電平。你也可以說,我偏要弄0v、1v、2v…9v十種電平行不行呢?是可以的。沒有這麼做是因為不穩定,電壓有波動就亂掉了。

true/false的運算也叫「布林代數」。布林代數是一套數學模型。我們十進位制有加減乘除,布林邏輯運算有與、或、非、同或、異或、「if-then」、「then-if」、「if-and-only-if」。通過邏輯運算,就可以計算了。

非(not)操作把布林值反轉,把 true 進行 not 就會變成 false,反之亦然。

與(and)操作接受兩個布林值,比如 true+true 進行 and 就會變成 true;true+false 進行 and 就會變成 false;false+false 進行 and 就會變成 false;

或(or)操作接受兩個布林值,比如 true+true 進行 or 就會變成 true;true+false 進行 or 就會變成 true;false+false 進行 and 就會變成 false;

完整的應該是乙個**,英文叫做「truth table」,中文翻譯做真值表。我覺得布林運算應該是計算機世界中的「真理」。

你手機中的數十億個電晶體就是為了能實現這種「真理」的存在,怎麼實現呢?

嗯,要從pn結(pn junction)說起。

一塊半導體晶體一側摻雜成p型半導體,另一側摻雜成n型半導體,中間二者相連的接觸面稱為pn結。

n型半導體:摻入少量雜質磷元素(或銻元素)的矽晶體(或鍺晶體)中,由於半導體原子(如矽原子)被雜質原子取代,磷原子外層的五個外層電子的其中四個與周圍的半導體原子形成共價鍵,多出的乙個電子幾乎不受束縛,較為容易地成為自由電子。於是,n型半導體就成為了含自由電子濃度較高的半導體,其導電性主要是因為自由電子導電。

p型半導體:摻入少量雜質硼元素(或銦元素)的矽晶體(或鍺晶體)中,由於半導體原子(如矽原子)被雜質原子取代,硼原子外層的三個外層電子與周圍的半導體原子形成共價鍵的時候,會產生乙個「空穴」,這個空穴可能吸引束縛電子來「填充」,使得硼原子成為帶負電的離子。這樣,這類半導體由於含有較高濃度的「空穴」(「相當於」正電荷),成為能夠導電的物質。

電子與空穴的移動:上面敘述的兩種半導體在外加電場的情況下,會作定向運動。這種運動成為電子與空穴(統稱「載流子」)的「漂移運動」,並產生「漂移電流」。

根據靜電學,電子將作與外加電場相反方向的運動,並產生電流(根據傳統定義,電流的方向與電子運動方向相反,即和外加電場方向相同);而空穴的運動方向與外加電場相同,由於其可被看作是「正電荷」,將產生與電場方向相同的電流。

兩種載流子的濃度越大,所產生的漂移電流越大。

上面的東西我都是查資料的,你看不懂也沒關係,小結一下,pn結就是只能單向導電。為了執行布林運算,需要在組合一下,npn、pnp,也就是雙極結型電晶體(bipolar junction transistors,2023年的諾貝爾物理學獎)。以npn為例子。

ps:這個可以自己接一下去驗證的。比如這樣接。

可以想象,布林運算真正的目標是計算,有意義的處理數字。比如把兩個數字相加。這些操作由計算機的 "算術邏輯單元(arithmetic and logic unit)"處理。alu 是計算機的數學大腦,等你理解了alu 的設計和功能之後,你就理解了現代計算機的基石。alu有2個單元,1個算術單元和1個邏輯單元。「算術單元」,它負責計算機裡的所有數字操作,比如加減法,比如給某個數字+1。加法怎麼做的呢,看上面的圖,就是與門+異或門做成半加器,多個半加器拼接成全加器。

在資料1的介紹中,alu是「沒有乘法和除法」,其實這個說法有誤,有乘法和除法,怎麼做的呢?通過位移。比如(1000)右移一位,變成(0100),那麼就是原數除以2了,左移一位,就是乘以二了。負數是通過符號位來標示的。這裡鋪開講,就變成《數位電路》的課了。

小結一下,我整理了布林運算運算的方法、電晶體實現布林運算物理基礎和動手驗證的方法。這些現在都整合在乙個模組中,就是arithmetic and logic unit(alu)。alu弄懂了,cpu也就不遠了。:)

alu的結果算出來之後如果扔掉就沒什麼意義了,得找個方法存起來,可能還要進行多個連續操作,這就用到計算機記憶體了。如果你在主機上打過一場長時間的對局,或玩困難模式的 「掃雷」,然後狗跑過來,被電源線絆倒,把插頭拔了出來,你知道失去進度的痛苦。你損失資料的原因是電腦用的是"隨機訪問儲存器(random access memory)",簡稱"ram"。它只能在有電的情況下儲存東西,比如遊戲狀態。另一種儲存 叫持久儲存(persistent memory),電源關閉時資料也不會丟失。

停下來想一想,有沒有方法能儲存一位資料呢?

我們拿乙個 or 門試試,把輸出連回輸入,看看會發生什麼。

首先,兩個輸入(a、b)都設為 0,「0 or 0」 是 0,所以電路輸出0;

如果將 a 變成1,「1 or 0」 為 1,所以輸出 1;

輸出連回輸入b,所以a不管怎麼改變,輸出永遠是1;

我們換成 and 門看看會怎樣?

開始時,a 和 b 都設 1,「1 and 1」 永遠輸出 1;

如果之後 a 設為 0,由於是 and 門,輸出會變成 0;

這個電路能記錄 0,和之前那個相反;

為了做出有用的儲存器,我們把兩個電路結合起來。這叫and-or latch。

從圖中可以看到,有兩個輸入,乙個是重置,乙個是資料輸入,乙個是輸出。這樣就能暫時的存1bit的資料了。如果我們並排放8個鎖存器,可以存8位資訊,比如乙個8bit數字,一組這樣的鎖存器叫 「暫存器」,暫存器能存乙個數字,這個數字有多少位,叫"位寬",早期電腦用 8 位暫存器,然後是 16 位,32位,如今許多計算機都有64位寬的暫存器,寫入暫存器前,要先啟用裡面所有鎖存器,我們可以用一根線連線所有 「允許輸入線」, 把它設為1,然後用 8 條資料線發資料,然後將 「允許寫入線」 設回 0,現在 8 位的值就存起來了。

如果只有很少的位(bits),把鎖存器併排放置,也勉強夠用了,但是要存多一點怎麼辦?

64位暫存器要64根資料線,64根連到輸出端。1根線啟用所有鎖存器,加起來也有129條線了;如果存256位要513 條線!解決方法是矩陣,在矩陣中,我們不並列排放鎖存器,而是做成網格,存256位,我們用16x16網格的鎖存器,有16行16列,要啟用某個鎖存器,就開啟相應的「行線」和「列線」。這就是ram。

小結一下,我們已經介紹了乙個算術邏輯單元(alu),輸入二進位制,它會執行計算;我們介紹兩種記憶體,1,暫存器,很小的一塊記憶體,能存乙個值,2,ram是一大塊記憶體,能在不同位址存大量數字。現在是時候把這些放在一起,組建計算機的 「心臟」 了。計算機的心臟是"**處理單元(central processing unit)",簡稱 「cpu」,cpu負責執行程式。程式由乙個個操作組成,這些操作叫"指令"(instruction)因為它們"指示"計算機要做什麼。如果是數學指令,比如加/減,cpu 會讓 alu 進行數**算,也可能是記憶體指令,cpu 會和記憶體通訊,然後讀/寫值,也可能是記憶體指令,cpu 會和記憶體通訊,然後讀/寫值。

我們用前四位存 「操作**」 (operation code),後四位代表資料來自**,我們還需要兩個暫存器,來完成cpu,乙個暫存器追蹤程式執行到**了,我們叫它 「指令位址暫存器」,存當前指令的記憶體位址。另乙個暫存器存當前指令,叫 「指令暫存器」。當啟動計算機時,所有暫存器從 0 開始。

舉個例子,我們在 ram 裡放了乙個程式。

cpu 的第乙個階段叫 「取指令階段」,負責拿到指令。首先,將 「指令位址暫存器」 連到 ram。暫存器的值為 0,因此 ram 返回位址 0 的值。0010 1110 會複製到 「指令暫存器」 裡。

要弄清是什麼指令,才能執行,假如我們定義0010是load a指令(把資料1110移動到a暫存器中)。那麼我們需要乙個電路,識別運算元和0010是否相等,相等的話,就執行移動。

執行結束之後,再取下乙個指令。由此迴圈。

ps1:1、2、3這幾個步驟由計算機中的時鐘來控制。比如第乙個時鐘週期,取指令,第二個時鐘週期,解析指令,第三個時鐘週期,執行指令。

ps2:指令,例如0010是硬體中設定的,為了方便人類約定,才給它命名為「load a」。

ps3:指令暫存器很重要,它決定了下乙個指令要從**執行。

馮·諾伊曼結構

布林代數

pn結

計算機是什麼

目錄工具,用來打遊戲 泡妞 看 看書 看電影,計算機幫你完成了需求 掃地機械人 計算機 掃地 機械手臂 計算機 加工產品 人 高貴的人 奴隸 來做。生產奴隸 機器 計算機 計算機對於我們人類而言 奴隸,完成我們的需求,1946,軍事用途,破譯密碼 設計飛彈的路程 如果什麼都沒有,計算機就是廢銅爛鐵 ...

計算機底層是什麼東西?

寫著寫著,突然特別想知道計算機底層到底是什麼東西。最近特意看了一些文章,謹以此文章記錄一下自己的想法。首先先大概描述一下 資料傳輸過程 a計算機 伺服器 網路傳輸服務 各種協議和軟硬體配合 b計算機 伺服器 資訊傳遞 a計算機想往外傳輸 就要把資料變成可傳輸型別,首先會把傳遞的資訊通過ascii碼表...

計算機的字長是什麼意思

宣告 本人現在在江蘇省太倉一家企業上班,本部落格發的內容僅代表本人的觀點,不代表公司,僅 僅是一些技術分享,如果有和公司相衝突的保密性技術,本人會處理掉,同時也感謝公司給我機會,業 餘在網上寫一些技術文章,本人也會更加珍惜現在的工作機會,努力回報公司。1 位 bit 來自英文 bit,音譯為 位元 ...