馮 ? 諾依曼體系結構

馮 ? 諾依曼體系結構

  • 一、馮 ? 諾依曼體系結構推導
    • 階段 1:初始計算機體系結構(僅輸入、運算、輸出)
    • 階段 2:加入控制功能,初步形成 CPU 概念
    • 階段 3:性能瓶頸與引入內存
    • 階段 4:最終馮·諾依曼體系結構
    • 內存提高效率的機制:局部性原理
  • 二、深入理解
    • 1.使用 QQ 聊天時數據的流動過程
      • 1.1 你的電腦(發送端)
      • 1.2 網絡傳輸(簡略)
      • 1.3 朋友的電腦(接收端)
    • 2.馮·諾依曼體系結構在其中的體現
    • 3.為什么要有這樣的設計?


一、馮 ? 諾依曼體系結構推導

馮·諾依曼結構也稱普林斯頓結構,是一種將程序指令存儲器數據存儲器合并在一起的存儲器結構。程序指令存儲地址數據存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數據的寬度相同,如英特爾公司的8086中央處理器的程序指令和數據都是16位寬。

數學家馮·諾依曼提出了計算機制造的三個基本原則,即采用二進制邏輯程序存儲執行以及計算機由五個部分組成(運算器、控制器、存儲器、輸入設備、輸出設備),這套理論被稱為馮·諾依曼體系結構


我們常見的計算機,如筆記本。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系。
在這里插入圖片描述
存儲器:內存

外設:

輸入設備:鼠標、鍵盤、攝像頭、話筒、磁盤、網卡…
輸出設備:顯示器、播放器硬件、磁盤、網卡…
有的設備是純輸入、輸出,也有既是輸入又是輸出的設備

CPU:

運算器:對我們的數據進行計算任務(算術運算,邏輯運算) 控制器:對我們的計算硬件流程進行一定的控制

以上這些都是獨立的個體!各個硬件單元必須用“線”鏈接起來

  1. 系統總線
  2. IO總線

截至目前,我們所認識的計算機,都是有一個個的硬件組件組成

輸入單元:包括鍵盤, 鼠標,掃描儀, 寫板等
中央處理器(CPU):含有運算器和控制器等
輸出單元:顯示器,打印機等

關于馮諾依曼,必須強調幾點:

  • 這里的存儲器指的是內存
  • 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問 外設(輸入或輸出設備)
  • 外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。
  • 一句話,所有設備都只能直接和內存打交道。

馮·諾依曼體系結構的工作流程
馮·諾依曼體系結構的工作基于“存儲程序”和“順序執行”的原則,其基本流程如下:

  • 取指令(Fetch):控制器從存儲器中讀取下一條指令(根據程序計數器的地址)。
  • 解碼(Decode):控制器解析指令,確定需要執行的作。
  • 執行(Execute):運算器執行指令(可能涉及從存儲器讀取數據、計算、或將結果寫回存儲器)。
  • 更新程序計數器:程序計數器加1,指向下一條指令,循環上述步驟。

階段 1:初始計算機體系結構(僅輸入、運算、輸出)

描述:計算機最初的作用是解決問題,需要輸入數據、進行運算并輸出結果。因此,體系結構包括輸入設備、運算功能和輸出設備。

輸入設備
運算功能
輸出設備

推導

  • 計算機通過輸入設備獲取數據或問題。
  • 數據經過算術運算和邏輯運算后,通過輸出設備顯示結果。
  • 然而,僅靠運算功能不足以協調數據流,缺乏控制機制。

階段 2:加入控制功能,初步形成 CPU 概念

描述:為了協調輸入、運算和輸出的時機,引入控制功能(對應 C 語言中的判斷、循環、函數跳轉等)。將運算功能和控制功能整合,稱為中央處理器(CPU)。

輸入設備
CPU
包含運算和控制功能
輸出設備

推導

  • CPU 整合了算術運算(加減乘除)、邏輯運算(與、或等)和控制功能。
  • 但輸入設備和輸出設備相對于 CPU 速度極慢(木桶原理),導致整體性能受限。
    在這里插入圖片描述

階段 3:性能瓶頸與引入內存

描述:由于輸入/輸出設備與 CPU 速度差異巨大,體系結構效率低下。引入內存作為緩沖,位于慢設備(輸入/輸出)和快設備(CPU)之間,緩解速度不匹配問題。

輸入設備
內存
CPU
輸出設備

推導

  • 輸入設備將數據存入內存,CPU 從內存讀取數據處理后寫回內存。
  • 內存再將數據傳輸給輸出設備。
  • 內存速度介于輸入/輸出設備和 CPU 之間,起到緩沖作用,避免 CPU 因等待慢設備而閑置。

階段 4:最終馮·諾依曼體系結構

描述:結合存儲器(僅指內存,不包括外存)、CPU、輸入設備和輸出設備,形成經典的馮·諾依曼體系結構。數據在內存和 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 總線 從內存讀取數據,發送到網絡。

1.2 網絡傳輸(簡略)

  • 數據經過路由器、交換機等網絡設備,從你的網卡傳輸到朋友的網卡。
  • 具體過程涉及物理層信號轉換、數據鏈路層幀傳遞、網絡層路由等(按你的要求忽略細節)。

1.3 朋友的電腦(接收端)

  • 接收階段(網卡 → 內存)

    • 朋友的網卡(輸入設備)接收到網絡數據,存儲到網卡的寄存器中。
    • 通過 I/O 總線,網卡將數據寫入內存。
    • 馮·諾依曼特性:網卡作為外設,依然通過內存與 CPU 交互。
  • 解包階段(內存 → CPU → 內存)

    • CPU 從內存讀取數據,按協議棧逆向解包:
      • 數據鏈路層:剝離以太網幀。
      • 網絡層:解析 IP 地址。
      • 傳輸層:處理 TCP 頭部。
      • 應用層:提取 QQ 消息內容。
    • 解包后的消息寫回內存。
  • 顯示階段(內存 → 顯示器)

    • QQ 客戶端從內存讀取解包后的消息。
    • CPU 執行渲染邏輯,將消息寫入顯示緩沖區。
    • 顯示器(輸出設備)通過 I/O 總線 從內存獲取數據,顯示在朋友的屏幕上。

2.馮·諾依曼體系結構在其中的體現

馮·諾依曼體系結構的核心是 存儲程序概念CPU-內存-外設 的分工協作。以下是它在 QQ 聊天過程中的體現:

  1. 內存作為數據中轉站

    • 所有外設(鍵盤、網卡、顯示器)都通過內存與 CPU 交互。
    • 原因:CPU 的處理速度遠高于外設,直接交互會導致效率低下;內存作為緩沖區,解耦了 CPU 和外設的操作。
  2. 程序必須加載到內存

    • QQ 客戶端的可執行文件存儲在硬盤上,運行時加載到內存。
    • 原因:CPU 只能從內存取指令和數據,硬盤(外設)的數據訪問需要通過內存中轉。
  3. 總線連接硬件

    • 系統總線:連接 CPU 和內存,傳輸指令和數據。
    • I/O 總線:連接內存和外設(如鍵盤、網卡),負責數據輸入輸出。
  4. 寄存器的作用

    • 外設(如鍵盤、網卡)內部的寄存器暫存數據,再通過總線寫入內存。
    • 原因:寄存器速度快,適合緩沖瞬時數據,減少內存直接訪問的壓力。

3.為什么要有這樣的設計?

  1. 為什么 CPU 只與內存打交道?

    • 效率:CPU 的速度(GHz 級別)遠超外設(MHz 或更低),直接與外設交互會浪費 CPU 時間。
    • 解耦:通過內存中轉,CPU 可以專注于計算,外設可以獨立完成 I/O 操作。
  2. 為什么程序要加載到內存?

    • 速度:內存的訪問速度(納秒級)比硬盤(毫秒級)快幾個數量級,CPU 需要快速獲取指令(但也會出現“內存墻”的問題)。
    • 控制:內存由操作系統管理,便于分配和保護程序運行環境。
  3. 為什么外設需要寄存器?

    • 緩沖:外設的處理速度慢,寄存器作為臨時存儲,避免數據丟失。
    • 同步:寄存器與外設硬件直接相連,確保數據按序傳輸到內存。
  4. 為什么數據要經過封裝和解包?

    • 可靠性:網絡協議(如 TCP)通過頭部信息保證數據順序和完整性。
    • 通用性:分層封裝(如 TCP/IP)讓不同設備和軟件能夠協同工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72505.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72505.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72505.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python print() 打印多個變量時,可變對象和不可變對象的區別

先來看這段代碼: tmp [] print(tmp, tmp.append(1), tmp)輸出: [1] None [1]并不是一些人認為的 [] None [1] 這是因為列表是可變對象,print()打印前會先計算出所有結果,最后再打印出來,中間在列表中添加了1&#…

【數學 線性代數】差分約束

前言 C算法與數據結構 本博文代碼打包下載 什么是差分約束 x系列是變量&#xff0c;y系列是常量&#xff0c;差分系統由若干如下不等式組成。 x1-x2 < y1 x2-x3 < y2 ? \cdots ? 可能有負環的最短路 個人習慣&#xff1a;如果存在a指向b的邊&#xff0c;則a是b的…

AutoGen :使用 Swarm 構建自治型多智能體團隊

??????本人承接各類AI相關應用開發項目(包括但不限于大模型微調、RAG、AI智能體、NLP、機器學習算法、運籌優化算法、數據分析EDA等) !!!?????? 有意愿請私信!!!AutoGen 的 AgentChat 模塊提供了一種強大的方法來構建多智能體協作系統。 在之前的文章中,我們探討了…

2025人工智能“落地生花”:這六大領域正掀起顛覆性革命

——從醫療到養老&#xff0c;一場“AI”的全民狂歡正在上演 2025年的春天&#xff0c;全球科技界的熱搜被一個中國AI大模型“霸榜”——DeepSeek。從春晚的機器人熱舞到政務系統的“數字員工上崗”&#xff0c;從醫療診斷到工業煉鋼&#xff0c;這場始于春節的技術海嘯&#…

第27周JavaSpringboot git初識

Git 課程筆記 一、Git 的介紹 1. Git 的誕生背景 Git 是 Linux 內核的作者 Linus Torvalds 為了更好地管理 Linux 內核開發而創建的版本控制系統。在 Linux 內核開發初期&#xff0c;由于開發者眾多&#xff0c;協作成本很高&#xff0c;后來使用了 BitKeeper 工具來輔助協作…

藍耘智算|從靜態到動態:探索Maas平臺海螺AI圖片生成視頻功能的強大能力

文章目錄 &#x1f44f;一、技術介紹&#x1f44f;二、平臺注冊&#x1f44f;三、功能體驗&#x1f44f;四、總結 隨著人工智能技術的快速發展&#xff0c;視頻處理和生成技術已經成為了眾多行業關注的熱點。最近&#xff0c;我有機會體驗了藍耘智算平臺的Maas平海螺AI視頻產品…

解決從deepseek接口獲取的流式響應輸出到前端都是undefined的問題

你的前端 EventSource 代碼遇到了 undefined 連續輸出 的問題&#xff0c;通常是因為&#xff1a; AI 返回的內容被拆成了單個字符&#xff0c;導致前端 JSON.parse(event.data).content 獲取到的是單個字符&#xff0c;而 undefined 可能是因為某些數據塊沒有 content 字段。…

VLLM專題(二十七)—使用 Kubernetes

在Kubernetes上部署vLLM是一種可擴展且高效的方式來服務機器學習模型。本指南將引導您使用原生Kubernetes部署vLLM。 此外,您還可以使用以下任意一種方式將vLLM部署到Kubernetes: HelmInftyAI/llmazKServekubernetes-sigs/lwsmeta-llama/llama-stacksubstratusai/kubeaivllm…

前綴和 之 哈希表 之 和 的奇偶與倍數

文章目錄 930.和相同的二元子數組523.連續的子數組和 求解連續子數組的和的問題&#xff0c;常常會使用到這個前綴和的思路&#xff0c;當然當數組存在單調性的時候&#xff0c;可以考慮使用不定長滑動窗口&#xff0c;在這里解釋一下&#xff0c;何為數組的和存在這個單調性&a…

Docker Compose 和 Kubernetes(K8s)對比

Docker Compose 和 Kubernetes&#xff08;K8s&#xff09;在某些方面有相似的功能&#xff0c;但它們的 核心用途和適用場景不同。以下是它們的主要區別和聯系&#xff1a; 1. Docker Compose 和 Kubernetes 的區別 對比項Docker ComposeKubernetes&#xff08;K8s&#xff0…

晶藝代理,100V3.5A高耐壓LA1823完全替換MP9487--啟燁科技有限公司

晶藝品牌LA1823是異步降壓轉換器&#xff0c;COT控制&#xff0c;PFM工作模式, 150KHz/ 250KHz/ 450KHz &#xff0c;開關頻率可調節&#xff0c;輸入電壓4.5~100V&#xff0c;2A平均電流&#xff0c;峰值電流3.5A&#xff0c;采用ESOP8封裝。 晶藝LA1823的特性&#xff1a; 4.…

PLC控制柜在技術創新驅動中功能演進 尤勁恩科技

在智能制造體系中&#xff0c;PLC控制柜不僅承擔著傳統設備控制的基礎功能&#xff0c;更通過工業以太網、PROFIBUS等現場總線技術&#xff0c;構建起分布式控制系統&#xff08;DCS&#xff09;。這種拓撲結構使生產線具備實時數據采集、遠程監控和智能決策能力&#xff0c;顯…

【JavaEE】Spring Boot 日志

目錄 一、日志概述二、使用日志2.1 打印日志2.2 日志框架2.2.1 門面 / 外觀 模式 2.3 日志級別2.3.1 六大分類2.3.2 使用 2.4 日志級別配置2.5 日志的持久化2.6 日志文件分割2.7 日志文件格式2.8 Slf4j 簡單打印日志 一、日志概述 ?志主要是為了發現問題, 分析問題, 定位問題…

代碼隨想錄算法訓練營第34天 | 62.不同路徑 63. 不同路徑 II 整數拆分 不同的二叉搜索樹 (跳過)

62.不同路徑 62. 不同路徑 - 力扣&#xff08;LeetCode&#xff09; 本題大家掌握動態規劃的方法就可以。 數論方法 有點非主流&#xff0c;很難想到。 代碼隨想錄 視頻講解&#xff1a;動態規劃中如何初始化很重要&#xff01;| LeetCode&#xff1a;62.不同路徑_嗶哩嗶哩_b…

uniapp APP權限彈框

效果圖 第一步 新建一個頁面&#xff0c;設置透明 {"path": "pages/permissionDisc/permissionDisc","style": {"navigationBarTitleText": "","navigationStyle": "custom","app-plus": {&…

網絡安全證書培訓機構有哪些

一、前言少敘 記得剛入行的時候&#xff0c;想考一個證書來裝裝門面&#xff0c;結果發現費用太高了&#xff0c;比當時一個月的工資都高&#xff0c;感嘆網絡安全這幫人真舍得花錢&#xff0c;遂放棄。后來入職網絡安全公司&#xff0c;考了一個CISP&#xff0c;在工作中逐漸…

torch.argsorttorch.gather

文章目錄 1. 舉例說明2. pytorch 代碼 1. 舉例說明 torch.argsort 的作用是可以將矩陣中的元素進行從小到大排序&#xff0c;得到對應的序號。假設我們有一個向量a表示如下 a [ 8 , 7 , 6 , 9 , 7 ] \begin{equation} a[8,7,6,9,7] \end{equation} a[8,7,6,9,7]?? 那么從小…

JSON數據格式介紹

2.5 JSON 2.5.1.JSON格式的用途 在開發中凡是涉及到『跨平臺數據傳輸』&#xff0c;JSON格式一定是首選 2.5.2.JSON格式的說明 1.JSON數據兩端要么是{}&#xff0c;要么是[] {}定義JSON對象[]定義JSON數組 2.JSON對象的格式是&#xff1a;json {key:value,key:value,...,ke…

(性能測試)性能測試工具 2.jmeter的環境搭建 3jmeter元件和4使用實例 5jmeter元件和參數化

目錄 性能測試工具 性能測試工具 jemeter環境搭建 jmeter的常用目錄介紹 jmeter修改語言和主題--jmeter界面的漢化 jmeter元件 jmeter元件和組件的介紹 jmeter的作用域原則 jmeter的執行順序 案例&#xff1a;執行順序 jmeter使用案例 jmeter線程組的介紹 jmeter…

Qt程序基于共享內存讀寫CodeSys的變量

文章目錄 1.背景2.結構體從CodeSys導出后導入到C2.1.將結構體從CodeSys中導出2.2.將結構體從m4文件提取翻譯成c格式 3.添加RTTR注冊信息4.讀取PLC變量值5.更改PLC變量值6.Qt讀寫CodeSys的共享內存 1.背景 在文章【基于RTTR在C中實現結構體數據的多層級動態讀寫】中&#xff0c…