重學電腦組成原理(十一)- 門電路的"千里傳音"

来源:https://www.cnblogs.com/JavaEdge/archive/2019/08/18/11374322.html
-Advertisement-
Play Games

人用紙和筆來做運算,都是用十進位,直接用十進位和我們最熟悉的符號不是最簡單麽? 為什麼電腦里我們最終要選擇二進位呢? 來看看,電腦在硬體層面究竟是怎麼表示二進位的,你就會明白,為什麼電腦會選擇二進位。 1 怎麼做到“千里傳書” 馬拉松的故事相信你聽說過。公元前490年,在雅典附近的馬拉松海邊, ...


人用紙和筆來做運算,都是用十進位,直接用十進位和我們最熟悉的符號不是最簡單麽?

為什麼電腦里我們最終要選擇二進位呢?

來看看,電腦在硬體層面究竟是怎麼表示二進位的,你就會明白,為什麼電腦會選擇二進位。

1 怎麼做到“千里傳書”

馬拉松的故事相信你聽說過。公元前490年,在雅典附近的馬拉松海邊,發生了波斯和希臘之間的希波戰爭。雅典和斯巴達領導的希臘聯軍勝利之後,雅典飛毛腿菲迪皮德斯跑了歷史上第一個馬拉松,回雅典報喜。這個時候,人們在遠距離報信的時候,採用的是派人跑腿,傳口信或者送信的方式。

但是,這樣靠人傳口信或者送信的方式,實在是太慢了

在軍事用途中,信息能否更早更準確地傳遞出去經常是事關成敗的大事

所以我們看到中國古代的軍隊有“擊鼓進軍”和“鳴金收兵”,通過打鼓和敲鉦發出不同的聲音,來傳遞軍隊的號令。

如果我們把軍隊當成一臺電腦,那“金”和“鼓”就是這台電腦的“1”和“0”

我們可以通過不同的編碼方式,來指揮這支軍隊前進、後退、轉向、追擊等等。

“金”和“鼓”比起跑腿傳口信,固然效率更高了,但是能夠傳遞的範圍還是非常有限,超出個幾公裡恐怕就聽不見了。於是,人們發明瞭更多能夠往更遠距離傳信的方式,比如海上的燈塔、長城上的烽火臺。因為光速比聲速更快,傳的距離也可以更遠。

  • 亞歷山大港外的法羅斯燈塔,位列世界七大奇跡之一,可惜現在只剩下遺跡了。可見人類社會很早就學會使用類似二進位信號的方式來傳輸信息

    但是,這些傳遞信息的方式都面臨一個問題,就是受限於只有“1”和“0”這兩種信號,不能傳遞太複雜的信息,那電報的發明就解決了這個問題。

從信息編碼的角度來說,金、鼓、燈塔、烽火臺類似電報的二進位編碼

電報傳輸的信號有兩種,一種是短促的點信號(dot信號),一種是長一點的劃信號(dash信號)

我們把“點”當成“1”,把“劃”當成“0”。這樣一來,我們的電報信號就是另一種特殊的二進位編碼了

電影里最常見的電報信號是“SOS”,這個信號表示出來就是 “點點點劃劃劃點點點”。

比起燈塔和烽火臺這樣的設備,電報信號有兩個明顯的優勢

  • 信號的傳輸距離迅速增加
    電報本質上是通過電信號來進行傳播的,所以從輸入信號到輸出信號基本上沒有延時
  • 輸入信號的速度加快了很多
    電報機只有一個按鈕,按下就是輸入信號,按的時間短一點,就是發出了一個“點”信號
    按的時間長一些,就是一個“劃”信號
    一個手指,就能快速發送電報。
  • 一個摩爾斯電碼的電報機

製造一臺電報機也非常容易

電報機本質上就是一個“蜂鳴器+長長的電線+按鈕開關”

蜂鳴器裝在接收方手裡,開關留在發送方手裡。雙方用長長的電線連在一起。當按鈕開關按下的時候,電線的電路接通了,蜂鳴器就會響。短促地按下,就是一個短促的點信號;按的時間稍微長一些,就是一個稍長的劃信號。

有了電池開關和鈴鐺,你就有了最簡單的摩爾斯電碼發報機

2 理解繼電器,給跑不動的信號+1s

有了電報機,只要鋪設好電報線路,就可以傳輸我們需要的訊息了

但是這裡面又出現了一個新的挑戰,就是隨著電線的線路越長,電線的電阻就越大

當電阻很大,而電壓不夠的時候,即使你按下開關,蜂鳴器也不會響。

你可能要說了,我們可以提高電壓或者用更粗的電線,使得電阻更小,這樣就可以讓整個線路鋪得更長一些

但是這個再長,也沒辦法從北京鋪設到上海吧

要想從北京把電報發到上海,我們還得想些別的辦法。

對於電報來說,電線太長了,使得線路接通也沒有辦法讓蜂鳴器響起來

那麼,我們就不要一次鋪太長的線路,而把一小段距離當成一個線路,也和驛站建立一個小電報站。我們在小電報站裡面安排一個電報員,他聽到上一個小電報站發來的信息,然後原樣輸入,發到下一個電報站去

這樣,我們的信號就可以一段段傳輸下去,而不會因為距離太長,導致電阻太大,沒有辦法成功傳輸信號。為了能夠實現這樣接力傳輸信號,在電路裡面,工程師們造了一個叫作繼電器(Relay) 的設備。

  • 中繼,其實就是不斷地通過新的電源重新放大已經開始衰減的原有信號

事實上,這個過程中,我們需要在每一階段原樣傳輸信號,是不是可以設計一個設備來代替這個電報員?

相比使用人工聽蜂鳴器的聲音,來重覆輸入信號,利用電磁效應和磁鐵,來實現這個事情會更容易。

我們把原先用來輸出聲音的蜂鳴器,換成一段環形的螺旋線圈,讓電路封閉通上電。因為電磁效應,這段螺旋線圈會產生一個帶有磁性的電磁場。我們原本需要輸入的按鈕開關,就可以用一塊磁力稍弱的磁鐵把它設在“關”的狀態。這樣,按下上一個電報站的開關,螺旋線圈通電產生了磁場之後,磁力就會把開關“吸”下來,接通到下一個電報站的電路。

如果我們在中間所有小電報站都用這個“螺旋線圈+磁性開關”的方式,來替代蜂鳴器和普通開關,而只在電報的始發和終點用普通的開關和蜂鳴器,我們就有了一個拆成一段一段的電報線路,接力傳輸電報信號。這樣,我們就不需要中間安排人力來聽打電報內容,也不需要解決因為線纜太長導致的電阻太大或者電壓不足的問題了。我們只要在終點站安排電報員,聽寫最終的電報內容就可以了。這樣是不是比之前更省事了?

事實上,繼電器還有一個名字就叫作電驛,這個“驛”就是驛站的驛,可以說非常形象了

這個接力的策略不僅可以用在電報中,在通信類的科技產品中其實都可以用到。

比如說,你在家裡用WiFi,如果你的屋子比較大,可能某些房間的信號就不好。你可以選用支持“中繼”的WiFi路由器,在信號衰減的地方,增加一個WiFi設備,接收原來的WiFi信號,再重新從當前節點傳輸出去。這種中繼對應的英文名詞和繼電器是一樣的,也叫Relay。

再比如說,我們現在互聯網使用的光纜,是用光信號來傳輸數據。隨著距離的增長、反射次數的增加,信號也會有所衰減,我們同樣要每隔一段距離,來增加一個用來重新放大信號的中繼。

有了繼電器之後,我們不僅有了一個能夠接力傳輸信號的方式,更重要的是,和輸入端通過開關的“開”和“關”來表示“1”和“0”一樣,我們在輸出端也能表示“1”和“0”了。

輸出端的作用,不僅僅是通過一個蜂鳴器或者燈泡,提供一個供人觀察的輸出信號,通過“螺旋線圈 + 磁性開關”,使得我們有“開”和“關”這兩種狀態,這個“開”和“關”表示的“1”和“0”,還可以作為後續線路的輸入信號,讓我們開始可以通過最簡單的電路,來組合形成我們需要的邏輯。

通過這些線圈和開關,我們也可以很容易地創建出 “與(AND)”“或(OR)”“非(NOT)”這樣的邏輯。我們在輸入端的電路上,提供串聯的兩個開關,只有兩個開關都打開,電路才接通,輸出的開關也才能接通,這其實就是模擬了電腦裡面的“與”操作。

我們在輸入端的電路,提供兩條獨立的線路到輸出端,兩條線路上各有一個開關,那麼任何一個開關打開了,到輸出端的電路都是接通的,這其實就是模擬了電腦中的“或”操作。

當我們把輸出端的“螺旋線圈+磁性開關”的組合,從預設關掉,只有通電有了磁場之後打開,換成預設是打開通電的,只有通電之後才關閉,我們就得到了一個電腦中的“非”操作。輸出端開和關正好和輸入端相反。這個在數字電路中,也叫作反向器(Inverter)

反向器的電路,其實就是開關從預設關閉變成預設開啟而已

與、或、非的電路都非常簡單,要想做稍微複雜一點的工作,我們需要很多電路的組合。不過,這也彰顯了現代電腦體系中一個重要的思想,就是通過分層和組合,逐步搭建起更加強大的功能。

回到我們前面看的電報機原型,雖然一個按鈕開關的電報機很“容易”操作,但是卻不“方便”操作。因為電報員要熟記每一個字母對應的摩爾斯電碼,並且需要快速按鍵來進行輸入。一旦輸錯很難糾正。但是,因為電路之間可以通過與、或、非組合完成更複雜的功能,我們完全可以設計一個和打字機一樣的電報機,每按下一個字母按鈕,就會接通一部分電路,然後把這個字母的摩爾斯電碼輸出出去。

雖然在電報機時代,我們沒有這麼做,但是在電腦時代,我們其實就是這樣做的。我們不再是給電腦“0”和“1”,而是通過千萬個晶體管組合在一起,最終使得我們可以用“高級語言”,指揮電腦去乾什麼。

3 總結延伸

可以說,電報是現代電腦的一個最簡單的原型。它和我們現在使用的現代電腦有很多相似之處。我們通過電路的“開”和“關”,來表示“1”和“0”。就像晶體管在不同的情況下,表現為導電的“1”和絕緣的“0”的狀態。

我們通過電報機這個設備,看到瞭如何通過“螺旋線圈+開關”,來構造基本的邏輯電路,我們也叫門電路

  • 一方面,我們可以通過繼電器或者中繼,進行長距離的信號傳輸
  • 另一方面,我們也可以通過設置不同的線路和開關狀態,實現更多不同的信號表示和處理方式,這些線路的連接方式其實就是我們在數字電路中所說的門電路。而這些門電路,也是我們創建CPU和記憶體的基本邏輯單元。我們的各種對於電腦二進位的“0”和“1”的操作,其實就是來自於門電路,叫作組合邏輯電路。

4 推薦閱讀

《編碼:隱匿在電腦軟硬體背後的語言》第6~11章,是一個很好的入門材料,可以幫助深入理解數字電路,值得你花時間好好讀一讀


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

-Advertisement-
Play Games
更多相關文章
  • title: manjaro的美化 date: 2019 04 24 22:59:57 tags: manjaro categories: manjaro <! more 切換源 加入arch源 blackarch源(可以選擇加入) 面對高校的源 ck源 設置國內源 選擇前三個 快的 全局更新 數據 ...
  • 下麵我們來學習Windows Server 2008文件伺服器,文件伺服器對於企業是相當重要的,所有的資料都保存在文件伺服器上面,對於整個企業來說數據算得上是最重要的東西,下麵介紹一下文件伺服器的搭建以及管理,包括共用許可權,以及多次共用一個文件夾,還有預設共用及隱藏共用,還有分散式文件系統搭建,怎樣 ...
  • 背景 By 魯迅 By 高爾基 說明: 1. Kernel版本:4.14 2. ARM64處理器 3. 使用工具:Source Insight 3.5, Visio 1. 介紹 Linux Kernel支持四種 : 純軟體,輕量級的Suspend操作,它會 ,`suspend the timekee ...
  • https://github.com/yaowenxu/Workplace/blob/master/timer/getrusagetimer.c 關鍵結構體: 程式: 保持更新,如果對您有幫助請點擊推薦!更多關於Linux 相關的知識,請關註 cnblogs.com/xuyaowen ...
  • c 標準庫中,有time 函數,可以返回 1970年1月1日 開始到現在的秒數,我們可以調用兩次的時間差來計算程式運行時間: https://github.com/yaowenxu/Workplace/blob/master/timer/timetimer.c NAME time -- get ti ...
  • 我們運行程式的時候,可以簡單使用clock函數測試程式的運行時間:(本示例中以微秒為單位輸出) https://github.com/yaowenxu/Workplace/blob/master/timer/clocktimer.c 保持更新,更多文章,請關註cnblogs.com/xuyaowen ...
  • 用過Laravel的小伙伴一開始安裝完框架後可能都遇到過daily 日誌文件寫入失敗的問題,接下來我們就來詳細說下日誌文件寫入失敗的原因以及對應的解決方案。 在講這個問題之前可能需要簡單介紹下Linux系統下的文件的Ownership和Permission。 Ownership User User是 ...
  • 資料庫 進入資料庫 mysql -u用戶名 -p密碼 資料庫層次 資料庫的創建 create database 資料庫的名 character set 字元集 collate 校對規則 資料庫的刪除 drop database 資料庫名 資料庫的修改 alter database 資料庫 chara ...
一周排行
    -Advertisement-
    Play Games
  • 基於.NET Framework 4.8 開發的深度學習模型部署測試平臺,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等應用場景,同時支持圖像與視頻檢測。模型部署引擎使用的是OpenVINO™、TensorRT、ONNX runti... ...
  • 十年沉澱,重啟開發之路 十年前,我沉浸在開發的海洋中,每日與代碼為伍,與演算法共舞。那時的我,滿懷激情,對技術的追求近乎狂熱。然而,隨著歲月的流逝,生活的忙碌逐漸占據了我的大部分時間,讓我無暇顧及技術的沉澱與積累。 十年間,我經歷了職業生涯的起伏和變遷。從初出茅廬的菜鳥到逐漸嶄露頭角的開發者,我見證了 ...
  • C# 是一種簡單、現代、面向對象和類型安全的編程語言。.NET 是由 Microsoft 創建的開發平臺,平臺包含了語言規範、工具、運行,支持開發各種應用,如Web、移動、桌面等。.NET框架有多個實現,如.NET Framework、.NET Core(及後續的.NET 5+版本),以及社區版本M... ...
  • 前言 本文介紹瞭如何使用三菱提供的MX Component插件實現對三菱PLC軟元件數據的讀寫,記錄了使用電腦模擬,模擬PLC,直至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1. PLC開發編程環境GX Works2,GX Works2下載鏈接 https:// ...
  • 前言 整理這個官方翻譯的系列,原因是網上大部分的 tomcat 版本比較舊,此版本為 v11 最新的版本。 開源項目 從零手寫實現 tomcat minicat 別稱【嗅虎】心有猛虎,輕嗅薔薇。 系列文章 web server apache tomcat11-01-官方文檔入門介紹 web serv ...
  • 1、jQuery介紹 jQuery是什麼 jQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之後又一個優秀的JavaScript代碼庫(或JavaScript框架)。jQuery設計的宗旨是“write Less,Do More”,即倡導寫更少的代碼,做更多的事情。它封裝 ...
  • 前言 之前的文章把js引擎(aardio封裝庫) 微軟開源的js引擎(ChakraCore))寫好了,這篇文章整點js代碼來測一下bug。測試網站:https://fanyi.youdao.com/index.html#/ 逆向思路 逆向思路可以看有道翻譯js逆向(MD5加密,AES加密)附完整源碼 ...
  • 引言 現代的操作系統(Windows,Linux,Mac OS)等都可以同時打開多個軟體(任務),這些軟體在我們的感知上是同時運行的,例如我們可以一邊瀏覽網頁,一邊聽音樂。而CPU執行代碼同一時間只能執行一條,但即使我們的電腦是單核CPU也可以同時運行多個任務,如下圖所示,這是因為我們的 CPU 的 ...
  • 掌握使用Python進行文本英文統計的基本方法,並瞭解如何進一步優化和擴展這些方法,以應對更複雜的文本分析任務。 ...
  • 背景 Redis多數據源常見的場景: 分區數據處理:當數據量增長時,單個Redis實例可能無法處理所有的數據。通過使用多個Redis數據源,可以將數據分區存儲在不同的實例中,使得數據處理更加高效。 多租戶應用程式:對於多租戶應用程式,每個租戶可以擁有自己的Redis數據源,以確保數據隔離和安全性。 ...