馮 ? 諾依曼體系結構
- 一、馮 ? 諾依曼體系結構推導
- 階段 1:初始計算機體系結構(僅輸入、運算、輸出)
- 階段 2:加入控制功能,初步形成 CPU 概念
- 階段 3:性能瓶頸與引入內存
- 階段 4:最終馮·諾依曼體系結構
- 內存提高效率的機制:局部性原理
- 二、深入理解
- 1.使用 QQ 聊天時數據的流動過程
- 1.1 你的電腦(發送端)
- 1.2 網絡傳輸(簡略)
- 1.3 朋友的電腦(接收端)
- 2.馮·諾依曼體系結構在其中的體現
- 3.為什么要有這樣的設計?
一、馮 ? 諾依曼體系結構推導
馮·諾依曼結構也稱普林斯頓結構,是一種將程序指令存儲器和數據存儲器合并在一起的存儲器結構。程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數據的寬度相同,如英特爾公司的8086中央處理器的程序指令和數據都是16位寬。
數學家馮·諾依曼提出了計算機制造的三個基本原則,即采用二進制邏輯、程序存儲執行以及計算機由五個部分組成(運算器、控制器、存儲器、輸入設備、輸出設備),這套理論被稱為馮·諾依曼體系結構。
我們常見的計算機,如筆記本。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系。
存儲器:內存
外設:
輸入設備:鼠標、鍵盤、攝像頭、話筒、磁盤、網卡…
輸出設備:顯示器、播放器硬件、磁盤、網卡…
有的設備是純輸入、輸出,也有既是輸入又是輸出的設備
CPU:
運算器:對我們的數據進行計算任務(算術運算,邏輯運算) 控制器:對我們的計算硬件流程進行一定的控制
以上這些都是獨立的個體!各個硬件單元必須用“線”鏈接起來
- 系統總線
- IO總線
截至目前,我們所認識的計算機,都是有一個個的硬件組件組成
輸入單元:包括鍵盤, 鼠標,掃描儀, 寫板等
中央處理器(CPU):含有運算器和控制器等
輸出單元:顯示器,打印機等
關于馮諾依曼,必須強調幾點:
- 這里的存儲器指的是內存
- 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問 外設(輸入或輸出設備)
- 外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。
- 一句話,所有設備都只能直接和內存打交道。
馮·諾依曼體系結構的工作流程
馮·諾依曼體系結構的工作基于“存儲程序”和“順序執行”的原則,其基本流程如下:
- 取指令(Fetch):控制器從存儲器中讀取下一條指令(根據程序計數器的地址)。
- 解碼(Decode):控制器解析指令,確定需要執行的作。
- 執行(Execute):運算器執行指令(可能涉及從存儲器讀取數據、計算、或將結果寫回存儲器)。
- 更新程序計數器:程序計數器加1,指向下一條指令,循環上述步驟。
階段 1:初始計算機體系結構(僅輸入、運算、輸出)
描述:計算機最初的作用是解決問題,需要輸入數據、進行運算并輸出結果。因此,體系結構包括輸入設備、運算功能和輸出設備。
推導:
- 計算機通過輸入設備獲取數據或問題。
- 數據經過算術運算和邏輯運算后,通過輸出設備顯示結果。
- 然而,僅靠運算功能不足以協調數據流,缺乏控制機制。
階段 2:加入控制功能,初步形成 CPU 概念
描述:為了協調輸入、運算和輸出的時機,引入控制功能(對應 C 語言中的判斷、循環、函數跳轉等)。將運算功能和控制功能整合,稱為中央處理器(CPU)。
推導:
- CPU 整合了算術運算(加減乘除)、邏輯運算(與、或等)和控制功能。
- 但輸入設備和輸出設備相對于 CPU 速度極慢(木桶原理),導致整體性能受限。
階段 3:性能瓶頸與引入內存
描述:由于輸入/輸出設備與 CPU 速度差異巨大,體系結構效率低下。引入內存作為緩沖,位于慢設備(輸入/輸出)和快設備(CPU)之間,緩解速度不匹配問題。
推導:
- 輸入設備將數據存入內存,CPU 從內存讀取數據處理后寫回內存。
- 內存再將數據傳輸給輸出設備。
- 內存速度介于輸入/輸出設備和 CPU 之間,起到緩沖作用,避免 CPU 因等待慢設備而閑置。
階段 4:最終馮·諾依曼體系結構
描述:結合存儲器(僅指內存,不包括外存)、CPU、輸入設備和輸出設備,形成經典的馮·諾依曼體系結構。數據在內存和 CPU 之間流動,輸入輸出通過內存緩沖。
推導:
- 內存成為數據傳輸的中介,CPU 與內存之間的高速交互是體系核心。
- 輸入設備和輸出設備通過內存與 CPU 間接通信,減少直接交互的瓶頸。
內存提高效率的機制:局部性原理
描述:內存通過局部性原理提高效率。當 CPU 訪問某數據時,內存預加載其附近數據(空間局部性),并利用處理與加載并行進行(時間局部性),形成緩沖區效果。
推導:
- 空間局部性:內存加載一行數據時,預加載后續數據,減少 CPU 等待。
- 時間局部性:CPU 處理數據時,內存同時加載下一批數據,二者并行提高效率。
- 緩沖區:如 C 語言的
fflush
函數,內存存儲數據直到緩沖區滿,再輸出到設備。
馮·諾依曼體系結構的推導是從簡單輸入-運算-輸出的模型開始,逐步引入控制功能和內存,最終形成以內存和 CPU 為核心的結構。內存通過局部性原理和緩沖機制有效緩解了輸入/輸出設備與 CPU 速度不匹配的問題,成為現代計算機設計的基礎。
二、深入理解
對馮諾依曼的理解,不能停留在概念上,要深入到對軟件數據流理解上,請解釋,從你登錄上qq開始和某位朋友聊天開始,數據的流動過程。 從你打開窗口,開始給他發消息,到他的到消息之后的數據流動過程。如果是在qq上發送文件呢?
1.使用 QQ 聊天時數據的流動過程
以下是從你敲擊鍵盤到朋友看到消息的完整數據流動過程,結合馮·諾依曼體系結構和網絡通信的視角:
1.1 你的電腦(發送端)
-
輸入階段(鍵盤 → 內存):
- 你在鍵盤上輸入消息(例如“Hello”)。
- 鍵盤作為輸入設備,將按鍵信號轉換為電信號,存儲到鍵盤控制器的寄存器中。
- 通過 I/O 總線,鍵盤控制器將數據寫入內存(通常由操作系統的中斷機制完成)。
- 馮·諾依曼特性:外設(如鍵盤)不直接與 CPU 交互,而是通過內存作為中介。
-
顯示階段(內存 → 顯示器):
- 輸入的消息被加載到內存后,QQ 客戶端程序從內存讀取數據。
- CPU 執行客戶端代碼,將消息渲染到顯示緩沖區(內存中的一塊區域)。
- 顯示器(輸出設備)通過 I/O 總線 從內存獲取渲染數據,顯示在你的屏幕上。
-
封裝與發送階段(內存 → 網卡):
- CPU 從內存讀取消息,按照網絡協議棧(TCP/IP)進行封裝:
- 應用層:QQ 協議添加消息頭。
- 傳輸層:TCP 添加端口號、序列號等。
- 網絡層:IP 添加源和目標 IP 地址。
- 數據鏈路層:以太網幀封裝。
- 封裝后的數據寫回內存。
- 網卡(輸出設備)通過 I/O 總線 從內存讀取數據,發送到網絡。
- CPU 從內存讀取消息,按照網絡協議棧(TCP/IP)進行封裝:
1.2 網絡傳輸(簡略)
- 數據經過路由器、交換機等網絡設備,從你的網卡傳輸到朋友的網卡。
- 具體過程涉及物理層信號轉換、數據鏈路層幀傳遞、網絡層路由等(按你的要求忽略細節)。
1.3 朋友的電腦(接收端)
-
接收階段(網卡 → 內存):
- 朋友的網卡(輸入設備)接收到網絡數據,存儲到網卡的寄存器中。
- 通過 I/O 總線,網卡將數據寫入內存。
- 馮·諾依曼特性:網卡作為外設,依然通過內存與 CPU 交互。
-
解包階段(內存 → CPU → 內存):
- CPU 從內存讀取數據,按協議棧逆向解包:
- 數據鏈路層:剝離以太網幀。
- 網絡層:解析 IP 地址。
- 傳輸層:處理 TCP 頭部。
- 應用層:提取 QQ 消息內容。
- 解包后的消息寫回內存。
- CPU 從內存讀取數據,按協議棧逆向解包:
-
顯示階段(內存 → 顯示器):
- QQ 客戶端從內存讀取解包后的消息。
- CPU 執行渲染邏輯,將消息寫入顯示緩沖區。
- 顯示器(輸出設備)通過 I/O 總線 從內存獲取數據,顯示在朋友的屏幕上。
2.馮·諾依曼體系結構在其中的體現
馮·諾依曼體系結構的核心是 存儲程序概念 和 CPU-內存-外設 的分工協作。以下是它在 QQ 聊天過程中的體現:
-
內存作為數據中轉站:
- 所有外設(鍵盤、網卡、顯示器)都通過內存與 CPU 交互。
- 原因:CPU 的處理速度遠高于外設,直接交互會導致效率低下;內存作為緩沖區,解耦了 CPU 和外設的操作。
-
程序必須加載到內存:
- QQ 客戶端的可執行文件存儲在硬盤上,運行時加載到內存。
- 原因:CPU 只能從內存取指令和數據,硬盤(外設)的數據訪問需要通過內存中轉。
-
總線連接硬件:
- 系統總線:連接 CPU 和內存,傳輸指令和數據。
- I/O 總線:連接內存和外設(如鍵盤、網卡),負責數據輸入輸出。
-
寄存器的作用:
- 外設(如鍵盤、網卡)內部的寄存器暫存數據,再通過總線寫入內存。
- 原因:寄存器速度快,適合緩沖瞬時數據,減少內存直接訪問的壓力。
3.為什么要有這樣的設計?
-
為什么 CPU 只與內存打交道?
- 效率:CPU 的速度(GHz 級別)遠超外設(MHz 或更低),直接與外設交互會浪費 CPU 時間。
- 解耦:通過內存中轉,CPU 可以專注于計算,外設可以獨立完成 I/O 操作。
-
為什么程序要加載到內存?
- 速度:內存的訪問速度(納秒級)比硬盤(毫秒級)快幾個數量級,CPU 需要快速獲取指令(但也會出現“內存墻”的問題)。
- 控制:內存由操作系統管理,便于分配和保護程序運行環境。
-
為什么外設需要寄存器?
- 緩沖:外設的處理速度慢,寄存器作為臨時存儲,避免數據丟失。
- 同步:寄存器與外設硬件直接相連,確保數據按序傳輸到內存。
-
為什么數據要經過封裝和解包?
- 可靠性:網絡協議(如 TCP)通過頭部信息保證數據順序和完整性。
- 通用性:分層封裝(如 TCP/IP)讓不同設備和軟件能夠協同工作。