聊聊開關和CPU之間故事

来源:https://www.cnblogs.com/xiaoniuhululu/archive/2023/04/28/17361603.html
-Advertisement-
Play Games

作者:小牛呼嚕嚕 | https://xiaoniuhululu.github.io 大家好,我是呼嚕嚕,在先前的一篇文章電腦中數值和字元串怎麼用二進位表示?中,我們知道了電腦為什麼會採用 0 和 1 組成的二進位,來表示所有的信息,比如機器指令、數字、字元串、聲音、圖片、視頻等等。 我們本篇文 ...


目錄

作者:小牛呼嚕嚕 | https://xiaoniuhululu.github.io

大家好,我是呼嚕嚕,在先前的一篇文章電腦中數值和字元串怎麼用二進位表示?中,我們知道了電腦為什麼會採用 0 和 1 組成的二進位,來表示所有的信息,比如機器指令、數字、字元串、聲音、圖片、視頻等等。

我們本篇文章來看看電腦在硬體層面究竟是怎麼表示二進位的,CPU究竟是怎麼實現的?通過本文的學習,我們也可以反過來明白為什麼電腦會採用二進位了。

開關

我們在生活中,處處都是開關,比如控制燈的開關

image

我們可以發現一個很簡單的現象:

  1. 串聯的開關,只有2個開關都閉合,燈泡才亮。這也就是布爾代數中"邏輯運算與"
  2. 並聯的開關,只要有1個開關閉合,燈泡就會亮。這也就是布爾代數中"邏輯運算或"

我們以最簡單的2個數,0和1來舉個例子,寫出其布爾代數的真值表:

image

電報和繼電器

在人類信息傳遞發展的歷史上,長途信息傳遞一直是非常困難的時,當時常見的方式有,比如人騎馬送信,訓練信鴿、點燃烽火,但信息傳遞的效率都非常低效。直到電報的出現,電報思想的正式成形是在19世紀早期,它的讓人類傳遞信息的效率得到極大的提升。

電報利用電的特性來傳遞信息,早期設計複雜且不穩定,傳遞的信息複雜度又比較低,1837年美國人摩爾斯通過電磁感應改良了發報機,併發明瞭摩爾斯電碼。他將電報劃分為2種信號,短促的"點信號"和長一點的"劃信號", 將把“點”當成“1”,把“劃”當成“0”(這不就是二進位嘛),並編寫了個“字典”將字母及數字編碼一一對應,這樣就能傳遞複雜的信息,在未來產生了巨大影響力,意味著現代通信的開始。

由於早期的電報傳輸,需要鋪設電線,但是隨著電線越長,其電阻就越大,電信號常常傳輸過程中被消耗點,這樣接受方就無法接收到信息了。幸運的是,工程師發明瞭繼電器,其原理就是接收微弱的信號,然後不斷地通過新的電源重新放大已經開始衰減的原有信號,最後把它增強後發送出去

image

當開關是打開的話,燈泡是不亮的;但當開關是閉合的話, 電流流過圍繞在鐵棒上的線圈,會發生電磁效應,鐵棒就具有了磁性,會將彈簧片吸下來,右邊電路就通了,燈泡就會亮了。這樣通過繼電器,一段段放大信號,電報就能長距離傳輸信息了。

雖然繼電器有放大信號的作用,但和開關一樣繼電器也可以串聯或並聯以執行邏輯中的簡單任務,繼電器比起普通的開關的優勢在於繼電器無需直接被輸入者控制,可以被其他繼電器控制,這樣就可以組合完成更複雜的操作。比如我們可以通過繼電器實現: 當我們閉合開關時,燈泡關閉;當我們打開開關時,燈泡去點亮這種燈泡的狀態和開關的閉合狀態相反的操作,普通開關是無法實現這種操作的。這些電路物理的表象下隱藏的邏輯關係,一直沒有被人發現。

直到1938年,克勞德·香農在麻省理工學院所寫的碩士論文《A Symbolic Analysis of Relay and Switching Circuits》中闡述了繼電器和開關電路中的符號分析之間的關係,他將開關、繼電器、二進位、布爾代數聯繫起來。也就是發現人類可以通過開關和繼電器這些普通的電路,直接就能實現布爾代數各種邏輯運算操作。這些繼電器的組合被稱為邏輯門,他們構造基本的邏輯電路,也叫門電路

門電路

image

上面是3種最最基本的門:

  1. 與門,兩個開關只有同時打開,電流才會通過,燈泡才會亮
  2. 非門,當開關閉合時,電流會通過,燈泡會亮;開關打開,電流不能通過反而,燈泡熄滅
  3. 或門,兩個開關中只要有一個打開電流就能通過,燈就會點亮

這些門其實就是一個個"開關"的抽象, 以後我們需要的各種複雜的邏輯都可以通過這3個門來實現,真的是非常奇妙
我們再來看一個常見的門:異或門XOR

image

我們先寫出其真值表(真值表是在邏輯中使用的一類數學表,用來確定一個表達式是否為真或有效):

A B X(輸出)
0 0 0
0 1 1
1 1 0
1 0 1

其表達式也就是:
image

通過表達式我們就能知道,把非A與B的值 和非B與A的值 通過或門加起來就能得到異或門

image

材料學的發展

上世紀材料學的發展也大力推動了電腦的蓬勃發展,電腦的硬體出現了3次大的更新換代

繼電器與哈佛Mark1號

在1944年,為了給美國曼哈頓計劃跑模擬,IBM建造出來首台自動按序控制電腦哈弗Mark1號,有76萬五千個組件,300萬個連接點和500英里長的導線,重達4500公斤,占地面積有房間那麼大。其大腦是由繼電器組成的,其一秒能做3次加或減,乘法花費6秒,除法花費15秒

image

由於繼電器的金屬臂有“質量”,無法快速開關,1940年一個好的繼電器一秒鐘可以翻轉50次,但是任何會動的機械都會隨著時間出現物理磨損,部件會損壞,隨著繼電器數量增加,故障概率也會增加。真的是又慢又容易壞的大家伙,但瑕不掩瑜,其依舊具有跨時代的意義。

真空管與巨人一號

在1904年,英國物流學家弗萊明就已經開發了一種新的電子組件,叫做真空管,也就是把兩個電極裝在一個氣密的玻璃燈泡里,但弗萊明的這個電子部件,電流只能單向流動,俗稱稱為 "二極體"。要想製作電腦,需要能夠控制電子的流動的東西。

在 1906 年,美國發明家"李·德富雷斯特"在"弗萊明"設計的兩個電極之間,加入了第三個"控制"電極(一 種柵欄式的金屬網,形成電子管的第三個極),向"控制"電極施加正電荷,它會允許電子流動;但如果施加負電荷,它會阻止電子流動。被命名為真空三極體,這樣就能形成一個"開關",可以“斷開或閉合電路”。

由於真空管內沒有會動的組件,想較於機械裝置,磨損更少,又沒有金屬臂的限制,每秒可以開閉數千次,繼電器一秒鐘只能翻轉50次左右,效率大大的提升。

第一個大規模使用真空管的電腦是"巨人1號",標志著電腦從機電轉向電子,電子電腦的大門自此打開。由工程師Tommy Flowers設計,完工於1943年12月,用於二戰時破解德國軍事通訊密碼。

image

晶體管與IBM608

雖然真空管做電腦的大腦,解決了繼電器許多缺陷,但是其還是容易損壞,就像燈泡一樣燒壞。到1950年代,真空管電腦都達到了極限。

1947年,貝爾實驗室發明瞭晶體管,其成為了新的"開關",也標志著一個全新的電腦時代到來。晶體管不僅體積小,響應速度快(每秒切換開關能達到上百萬次),而且使用壽命也非常悠遠,準確 性高,穩定性好,不易損壞。關鍵它可以做得非常小,一塊集成電路即可容納十幾億到幾十億 個晶體管。

晶體管泛指一切以半導體材料為基礎的單一元件,半導體顧名思義,可導電也可不導電,是常溫下導電性能介於導體與絕緣體之間的材料,一般有硅、鍺、砷化鎵等

IBM608第一個完全用晶體管,消費者也可以買的起電腦。該電腦有3000個晶體管,每秒執行4500次加法,80次左右的乘除法。

image

電腦2大特性:計算能力和記憶能力

通過本文的閱讀,我們知道了開關是一個生活中很普通的東西,但香農將開關、布爾代數聯繫的一起後,產生了化學反應。可以用一個個開關組合起來,成為門電路,從而能夠造成CPU。

隨著材料學等發展,開關也從繼電器到真空管,再到晶體管,相應速度,提交,使用壽命,成本都得到了明顯的改善。他們製造出來的電腦也慢慢的變成了我們現在熟悉的電腦。

電腦的大腦就是CPU,我們知道CPU內最重要的2個部件是寄存器和計算單元那麼如何用開關來讓電腦擁有計算能力和記憶能力?大家可以思考一下,後面的文章讓我們拋開硬體,通過抽象出來的邏輯門來一步步設計和實現一個CPU。


參考資料:
《深入理解電腦系統》
《編碼:隱匿在電腦軟硬體背後的語言》
《深入淺出電腦組成原理》
《數字電子技術基礎》
《穿越電腦的迷霧》
百度百科


全文完,感謝您的閱讀,如果我的文章對你有所幫助的話,還請點個免費的,你的支持會激勵我輸出更高質量的文章,感謝!

原文鏡像:聊聊開關和CPU之間故事

電腦內功、源碼解析、科技故事、項目實戰、面試八股等更多硬核文章,首發於公眾號「小牛呼嚕嚕」,我們下期再見!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • SpringBoot 集成 SpringSecurity + MySQL + JWT 附源碼,廢話不多直接盤 SpringBoot已經為用戶採用預設配置,只需要引入pom依賴就能快速啟動Spring Security。 目的:驗證請求用戶的身份,提供安全訪問 優勢:基於Spring,配置方便,減少大 ...
  • 哈嘍大家好,我是鹹魚 之前寫了一篇關於文獻爬蟲的文章Python爬蟲實戰(5) | 爬取知網文獻信息 文章發佈之後有很多小伙伴給出了一些反饋和指正,在認真看了小伙伴們的留言之後,鹹魚對代碼進行了一些優化 優化的代碼在文末,歡迎各位小伙伴給出意見和指正 問題 pycharm 設置 Edge 驅動器的環 ...
  • 中間件基礎: 在.net6.0在請求在響應給請求者之前會通過請求管道再處理服務端的邏輯然後再響應給請求者,而請求管道則是由一系列中間件組成的有點類似於過濾器,為了更直觀的瞭解,我們請看下圖: 它可以決定是否將請求傳遞給請求管道中下一個中間件,也可以處理下一個中間件之前的邏輯也可以處理下一個中間件之後 ...
  • 隨著技術的發展,ASP.NET Core MVC也推出了好長時間,經過不斷的版本更新迭代,已經越來越完善,本系列文章主要講解ASP.NET Core MVC開發B/S系統過程中所涉及到的相關內容,適用於初學者,在校畢業生,或其他想從事ASP.NET Core MVC 系統開發的人員。 經過前幾篇文章... ...
  • dotnet ef是Entity Framework Core(EF Core)的一個命令行工具,用於管理EF Core應用程式的資料庫和代碼。除了提供管理資料庫的命令之外,dotnet ef還可以生成和管理實體和上下文代碼。本文將介紹如何使用dotnet ef動態生成代碼。 一、環境準備 1、項目 ...
  • 上位機開發過程中,格式轉換是必不可少的重要環節,經常是十進位轉十六進位、十六進位轉`byte`數組又轉換回來來迴轉換,最然進位轉換很基礎同時 C# 也提供了很多直接方便進行格式轉換的方法,但是封裝一個工具類會方便很多,不用每次都手寫代碼邏輯,之前一直都是簡單的自己寫,稍複雜的就用前輩寫好的直接調用,... ...
  • PDF邊距是頁面主要內容區域和頁面邊緣之間的距離。與Word頁邊距不同,PDF文檔的頁邊距很難更改。因為Adobe沒有提供操作頁邊距的直接方法。但是,您可以通過縮放頁面內容來改變頁邊距。本文將介紹如何在不更改頁面大小的情況下使用C#/VB.NET 代碼調整PDF文檔的頁邊距。 增加PDF文檔的頁邊距 ...
  • 我習慣性使用OData,它的$expand與層級查詢非常好用,這個功能非常依賴於資料庫的導航屬性,也就是外鍵結構。最近想著把一個單體的系統拆分為多個小系統,首先需要處理外鍵依賴的問題。 多個服務各自有各自的資料庫,資料庫層面並不互通,也就無法使用外鍵約束。 我使用EF Core來描述資料庫的結構,有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...