重學電腦組成原理(一)- 馮·諾依曼體繫結構

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

1 電腦的基本硬體組成 早期,DIY一臺電腦,要先有三大件 CPU 記憶體 主板 1.1 CPU 電腦最重要的核心配件,中央處理器(Central Processing Unit)。 電腦的所有“計算”都是由CPU來進行的。 CPU是一個超級精細的印刷電路版 1.2 記憶體(Memory) 你撰 ...


1 電腦的基本硬體組成

早期,DIY一臺電腦,要先有三大件

  • CPU
  • 記憶體
  • 主板

1.1 CPU

電腦最重要的核心配件,中央處理器(Central Processing Unit)。

電腦的所有“計算”都是由CPU來進行的。

  • CPU是一個超級精細的印刷電路版

1.2 記憶體(Memory)

你撰寫的程式、打開的瀏覽器、運行的游戲,都要載入到記憶體里才能運行。

程式讀取的數據、計算得到的結果,也都要放在記憶體里。記憶體越大,能載入的東西自然也就越多。

記憶體通常直接可以插在主板上,存放在記憶體里的程式和數據,需要被CPU讀取,CPU計算完之後,還要把數據寫回到記憶體。然而CPU不能直接插到記憶體上,反之亦然。於是,就帶來了最後一個大件——主板(Motherboard)。

  • 記憶體通常直接可以插在主板上

1.3 主板

主板是一個有著各種各樣,有時候多達數十乃至上百個插槽的配件。

我們的CPU要插在主板上,記憶體也要插在主板上。

主板的晶元組(Chipset)和匯流排(Bus)解決了CPU和記憶體之間如何通信的問題。

  • 晶元組控制了數據傳輸的流轉,也就是數據從哪裡到哪裡的問題
  • 匯流排則是實際數據傳輸的高速公路。匯流排速度(Bus Speed)決定了數據能傳輸得多快。
  • 電腦主板上通常有著各種各樣的插槽

有了三大件,只要配上電源供電,電腦差不多就可以跑起來了。

但是現在還缺少各類輸入(Input)/輸出(Output)設備,也就是我們常說的I/O設備

如果你用的是自己的個人電腦,那顯示器肯定必不可少,只有有了顯示器我們才能看到電腦輸出的各種圖像、文字,這也就是所謂的輸出設備

同樣的,滑鼠和鍵盤也都是必不可少的配件。這樣我才能輸入文本,寫下這篇文章。它們也就是所謂的輸入設備

最後,你自己配的個人電腦,還要配上一個硬碟。這樣各種數據才能持久地保存下來。

絕大部分人都會給自己的機器裝上一個機箱,配上風扇,解決灰塵和散熱的問題。

不過機箱和風扇,算不上是電腦的必備硬體,我們拿個紙板或者外面放個電風扇,也一樣能用。

顯示器、滑鼠、鍵盤和硬碟這些東西並不是一臺電腦必須的部分。

其實只需要有I/O設備,能讓我們從電腦里輸入和輸出信息就可以了。

很多網吧的電腦就沒有硬碟,而是直接通過區域網,讀寫遠程網路硬碟裡面的數據。

各類雲伺服器,只要讓電腦能通過網路,SSH遠程登陸訪問就好了,因此也沒必要配顯示器、滑鼠、鍵盤這些東西。

這樣不僅能夠節約成本,還更方便維護。

還有一個很特殊的設備,就是顯卡(Graphics Card)。

現在,使用圖形界面操作系統的電腦,無論是Windows、Mac OS還是Linux,顯卡都是必不可少的。

有人可能要說了,我裝機的時候沒有買顯卡,電腦一樣可以正常跑起來啊!那是因為,現在的主板都帶了內置的顯卡。

如果你用電腦玩游戲,做圖形渲染或者跑深度學習應用,你多半就需要買一張單獨的顯卡,插在主板上。

顯卡之所以特殊,是因為顯卡裡有除了CPU之外的另一個“處理器”,也就是GPU(Graphics Processing Unit,圖形處理器),GPU一樣可以做各種“計算”的工作。

滑鼠、鍵盤以及硬碟都是插在主板上的。作為外部I/O設備,它們是通過主板上的南橋(SouthBridge)晶元組,來控制和CPU之間的通信的。

“南橋”晶元的名字很直觀

  • 它在主板上的位置,通常在主板的“南面”
  • 它的作用就是作為“橋”,來連接滑鼠、鍵盤以及硬碟這些外部設備和CPU之間的通信。

有了南橋,自然對應著也有“北橋”。

是的,以前的主板上通常也有“北橋”晶元,用來作為“橋”,連接CPU和記憶體、顯卡之間的通信。

不過,隨著時間的變遷,現在的主板上的“北橋”晶元的工作,已經被移到了CPU的內部,所以你在主板上,已經看不到北橋晶元了。

2 馮·諾依曼體繫結構

剛纔我們講了一臺電腦的硬體組成,這說的是我們平時用的個人電腦或者伺服器。那我們平時最常用的智能手機的組成,也是這樣嗎?

我們手機里只有SD卡(Secure Digital Memory Card)類似硬碟功能的存儲卡插槽,並沒有記憶體插槽、CPU插槽這些東西。

沒錯,因為手機尺寸的原因,手機製造商們選擇把

CPU、記憶體、網路通信,乃至攝像頭晶元,都封裝到一個晶元,然後再嵌入到手機主板上。

這種方式叫SoC,也就是System on a Chip(系統晶元)。

看起來,個人電腦和智能手機的硬體組成方式不太一樣。

可是,我們寫智能手機上的App,和寫個人電腦的客戶端應用似乎沒有什麼差別,都是通過“高級語言”這樣的編程語言撰寫、編譯之後,一樣是把代碼和數據載入到記憶體里來執行。

無論是個人電腦/伺服器/智能手機,還是Raspberry Pi這樣的微型卡片機,都遵循著同一個“電腦”的抽象概念。

這是怎麼樣一個“電腦”呢?這其實就是,電腦鼻祖馮·諾依曼提出的馮·諾依曼體繫結構(Von Neumann architecture),也叫存儲程式電腦

什麼是存儲程式電腦呢?這裡面其實暗含了兩個概念

  • “可編程”電腦
  • “存儲”電腦

什麼是“不可編程”???

電腦是由各種門電路組合而成的,然後通過組裝出一個固定的電路版,完成一個特定的計算程式。

一旦需要修改功能,就要重新組裝電路。這樣的話,電腦就是“不可編程”的,因為程式在電腦硬體層面是“寫死”的。

最常見的就是老式計算器,電路板設好了加減乘除,做不了任何計算邏輯固定之外的事情。

  • 計算器的本質是一個不可編程的電腦

我們再來看“存儲”電腦。

程式本身是存儲在電腦的記憶體里,可以通過載入不同的程式來解決不同的問題。

有“存儲程式電腦”,自然也有不能存儲程式的電腦。

典型的就是早年的“Plugboard”這樣的插線板式的電腦。整個電腦就是一個巨大的插線板,通過在板子上不同的插頭或者介面的位置插入線路,來實現不同的功能。這樣的電腦自然是“可編程”的,但是編寫好的程式不能存儲下來供下一次載入使用,不得不每次要用到和當前不同的“程式”的時候,重新插板子,重新“編程”。

  • 著名的Engima Machine就用到了Plugboard來進行“編程”

    可以看到,無論是“不可編程”還是“不可存儲”,都會讓使用電腦的效率大大下降。
    而這個對於效率的追求,也就是“存儲程式電腦”的由來。

馮,基於當時在秘密開發的EDVAC寫了一篇報告First Draft of a Report on the EDVAC,描述了他心目中的一臺電腦應該長什麼樣。這篇報告在歷史上有個很特殊的簡稱,叫First Draft。這樣,現代電腦的發展就從祖師爺寫的一份草案開始了。

First Draft裡面說了一臺電腦應該有哪些部分組成

首先是一個包含

  • 算術邏輯單元(Arithmetic Logic Unit,ALU)
  • 處理器寄存器(Processor Register)

處理器單元(Processing Unit),用來完成各種算術和邏輯運算。

因為它能夠完成各種數據的處理或者計算工作,因此也有人把這個叫作數據通路(Datapath)或者運算器。

然後是一個包含

  • 指令寄存器(Instruction Reigster)
  • 程式計數器(Program Counter)

控制器單元(Control Unit/CU),用來控製程序的流程,通常就是不同條件下的分支和跳轉。

在現在的電腦里,上面的算術邏輯單元和這裡的控制器單元,共同組成了我們說的CPU。

接著是用來存儲數據(Data)和指令(Instruction)的記憶體。以及更大容量的外部存儲,在過去,可能是磁帶、磁鼓這樣的設備,現在通常就是硬碟。

最後就是各種輸入和輸出設備,以及對應的輸入和輸出機制。

我們現在無論是使用什麼樣的電腦,其實都是和輸入輸出設備在打交道。

  • 個人電腦的滑鼠鍵盤是輸入設備,顯示器是輸出設備
  • 我們用的智能手機,觸摸屏既是輸入設備,又是輸出設備
  • 跑在各種雲上的伺服器,則是通過網路來進行輸入和輸出。這個時候,網卡既是輸入設備又是輸出設備

任何一臺電腦的任何一個部件都可以歸到運算器、控制器、存儲器、輸入設備和輸出設備中,而所有的現代電腦也都是基於這個基礎架構來設計開發的

而所有的電腦程式,也都可以抽象為從輸入設備讀取輸入信息,通過運算器控制器來執行存儲在存儲器里的程式,最終把結果輸出到輸出設備中。而我們所有撰寫的無論高級還是低級語言的程式,也都是基於這樣一個抽象框架來進行運作的。

  • 馮·諾依曼體繫結構示意圖

3 總結

馮·諾依曼體繫結構確立了我們現在每天使用的電腦硬體的基礎架構。

因此,學習電腦組成原理,其實就是學習和拆解馮·諾依曼體繫結構。

具體來說,其實就是

  • 學習控制器、運算器的工作原理,也就是CPU是怎麼工作的,以及為何這樣設計
  • 學習記憶體的工作原理,從最基本的電路,到上層抽象給到CPU乃至應用程式的介面是怎樣的
  • 學習CPU是怎麼和輸入設備、輸出設備打交道的。=

學習組成原理,就是在理解從控制器、運算器、存儲器、輸入設備以及輸出設備,從電路這樣的硬體,到最終開放給軟體的介面,是怎麼運作的,為什麼要設計成這樣,以及在軟體開發層面怎麼儘可能用好它。

4 推薦閱讀

  • First Draft of a Report on the EDVAC
    對於工程師來說,直接讀取英文論文的原文,既可以搞清楚、弄明白對應的設計及其背後的思路來源,還可以幫你破除對於論文或者核心技術的恐懼心理。

5 思考

電腦行業的兩大祖師爺之一,除了馮·諾依曼機之外,還有一位就是著名的圖靈(Alan Mathison Turing)。對應的,我們現在的電腦也叫圖靈機(Turing Machine)。那麼圖靈機和馮·諾依曼機是兩種不同的電腦麽?圖靈機是一種什麼樣的電腦抽象呢?

歡迎留言分享你的思考和疑惑,也可以把本文分享給你的朋友,一起學習和進步!

參考

深入淺出電腦組成原理


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

-Advertisement-
Play Games
更多相關文章
  • 簡介: 磁碟設備之上是文件系統,測試磁碟的工具往往就是調用塊設備驅動的介面進行讀寫測試。而文件系統的測試軟體就是針對文件系統層提供的功能進行測試,包括文件的打開關閉速度以及順序讀寫隨機位置讀寫的速度。以及進程併發數目等各個方面進行詳細的測試。 IOZone是目前應用非常廣泛的文件系統測試標準工具,它 ...
  • 方法一:通過修改.bashrc或.bash_profile文件來實現  通過修改home目錄下的.bashrc或.bash_profile文件來實現。這兩個文件選擇其中一個在末尾加入如下一行,具體操作如下: [GeekDevOps@GeekDevOps /]$ cd ~ [GeekDevOps@G... ...
  • 1、下載docker源碼包 docker官網地址: https://download.docker.com/linux/static/stable/ 選擇.tgz的包下載,例如:https://download.docker.com/linux/static/stable/x86_64/docker... ...
  • #!/bin/bash fileNum=`ls /bin/testShell/apiCheck_shell/logs/ | grep $(date "+%Y-%m-%d") | wc -w`day=$(date "+%Y-%m-%d")-${fileNum}# 設置併發的進程數thread_num= ...
  • 前段時間工作中需要將經過我司平臺某些信息核驗數據提取後上傳到客戶的FTP伺服器上,以便於他們進行相關的信息比對核驗。由於包含這些信息的主機只有4台,採取的策略是將生成的4個文件彙集到一個主機上,然後在這台主機上將文件上傳的目標ftp伺服器。 1,建立主機A到其他三台主機之間的信任關係,以便於遠程拷貝 ...
  • 一、多命令順序執行 && || 相當於其他高級語言中的 ? : 二、管道符 [命令1] | [命令2] 命令1的正確輸出作為命令2的操作對象 分屏顯示結果 netstat -an 命令可查看系統所有的網路連接 可使用管道符,netstat -an | grep ESTABLISHED查看正在連接系統 ...
  • 使用 unzip XXX.zip 方式解壓的時候會出現中文亂碼 很多人推薦以下方式: 但是unzip已經不支持了 親測有效的方式為: 7z安裝參考:https://www.cnblogs.com/crazytata/p/10235812.html 相關參考鏈接:https://www.cnblogs ...
  • 剛開始學習linux操作系統是總是很茫然,無所適從,以下是自己總結的工作經驗,僅供參考! 一、準備資源 安裝前需要準備的資源有linux系統centos7.6發行版系統鏡像,vmware workstations15 模擬安裝虛擬機工具。 二、安裝步驟 1, 安裝VMware workstation ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...