Linux馮諾依曼體系與計算機系統架構認知(8)

文章目錄

  • 前言
  • 一、馮諾依曼體系
    • 馮?諾依曼體系結構推導
    • 內存提高馮?諾依曼體系結構效率的方法
    • 你用QQ和朋友聊天時數據的流動過程
    • 與馮?諾依曼體系結構相關的一些知識
  • 二、計算機層次結構分析
    • 操作系統(Operator System)
    • 驅動層的作用與意義
    • 系統調用接口(system call)
    • 用戶操作接口
  • 三、操作系統管理
    • 管理者決策被管理者
    • 如何得到被管理者數據
    • 庫函數與系統調用的關系
  • 總結


前言

??馮諾依曼體系是現代計算機設計的基石,其統一存儲和順序執行理念推動了計算機的發展。結合操作系統、驅動層和系統調用的優化設計,計算機實現了高效的軟硬件協作

??其實我這個Linux專欄,表面上只是講了操作系統,其實未來我還會穿插 計算機網絡、數據結構與算法、數據庫原理等“四大件內容”

??計算機的一切都是如此脈絡交織,美妙無比,事實上,在我學習Linux的途中,很多知識點會有一種豁然開朗的感覺,有時候也很幸運自己選了一個對我來說這么完美的專業,我愛她,傾注了我巨大的熱情,也希望她能不辜負我,hhhhh


一、馮諾依曼體系

??我們今天所有的計算機都離不開 馮諾依曼 體系,這位偉大的計算機科學家早在二十世紀四十年代就提出了這種結構,即計算機應由五部分組成:輸入設備、存儲器、運算器、控制器、輸出設備

在這里插入圖片描述

馮?諾依曼體系結構推導

??計算機的作用就是為了解決人的問題,而要解決問題,首先需要將數據或是問題輸入到計算機當中,所以計算機必須要有輸入設備。計算機解決完問題后還需要將計算結果輸出顯示出來,所以計算機必須要有輸出設備。計算機通過輸入設備得到數據,數據在計算機當中進行一系列的算術運算和邏輯運算后,通過輸出設備進行輸出,于是就得到了以下流程圖。

在這里插入圖片描述
??但是計算機當中只有算術運算功能和邏輯運算功能是不夠的,還需要有控制功能,控制何時從輸入設備獲取數據,何時輸出數據到輸出設備等。對應到C語言當中,算術運算就完成一系列的加減乘除,而邏輯運算就對應于一系列的邏輯與邏輯或等,控制功能就對應于C語言當中的判斷、循環以及各個函數之間的跳轉等等。
在這里插入圖片描述

??而我們后人就將這個具有算術運算功能、邏輯運算功能以及控制功能的這個模塊稱為中央處理器,簡稱CPU

??但是輸入設備和輸出設備相對于中央處理器來說是非常慢的,于是在當前這個體系整體呈現出來的就是,輸入設備和輸出設備很慢,而CPU很快,根據木桶原理,那么最終整個體系所呈現出來的速度將會是很慢的

??木桶效應:一個水桶所能承接水量的上限并不取決于桶壁上最長的那塊木板,恰恰是取決于最短的那塊

??所以當前這個體系結構顯然是不合適的,于是我們就不讓輸入設備和輸出設備直接與CPU進行交互,而在這中間加入了內存。

在這里插入圖片描述
??內存有個特點就是,比輸入設備和輸出設備要快很多,但是比CPU又要慢。現在內存就處于慢設備和快設備之間,是一個不快也不慢的設備,能夠在該體系結構當中就起到一個緩沖的作用。

??現在該體系的運行流程就是:用戶輸入的數據先放到內存當中,CPU讀取數據的時候就直接從內存當中讀取,CPU處理完數據后又寫回內存當中,然后內存再將數據輸出到輸出設備當中,最后由輸出設備進行輸出顯示。

??于是就形成了最終的馮諾依曼體系結構
在這里插入圖片描述
注意: 這里存儲器只是內存,不包括外存。

內存提高馮?諾依曼體系結構效率的方法

??在這里在這里在這里大多數人有一個疑惑就是,先將輸入設備的數據交給內存,再由內存將數據交給CPU,這個過程真的比CPU直接從輸入設備獲取數據更快嗎?

??說明這個問題之前,我們首先需要知道:內存具有數據存儲的能力。雖然內存的大小只有4G/8G,但是既然內存有大小,那么它就有預裝數據的能力,而這就是提高該體系結構效率的秘訣。

??這里不得不說到的就是局部性原理:根據統計學原理,當一個數據正在被訪問時,那么下一次有很大可能會訪問其周圍的數據。所以當CPU需要獲取某一行數據時,內存可以將該行數據之后的數據一同加載進來,而CPU處理數據和內存加載數據是可以同時進行的,這樣下次CPU就可以直接從內存當中獲取數據。

??輸出數據的時候也一樣,CPU處理完數據后直接將數據放到內存當中,當輸出設備需要時再在內存當中獲取即可,這也就有了我們平常所說的緩沖區的概念。例如,緩沖區滿了才將數據打印到屏幕上,使用fflush函數將緩沖區當中的數據直接輸出之類的,都是將內存當中的數據直接拿到輸出設備當中進行顯示輸出。

也就是說,內存的核心作用在于:

  1. 【利用內存作為緩沖】:通過預先將大量數據加載到內存中,減少CPU直接等待輸入輸出設備的時間。內存的讀取和寫入速度遠高于外設,能夠更快地向CPU提供所需數據。加快數據傳遞速度,為CPU提供高效支持。
  2. 【分離操作,提升并行性】:CPU從內存中讀取數據與外部設備向內存導入數據這兩個過程可以同時進行。這種并行處理方式避免了串行執行所帶來的效率低下。實現數據流動的并行化,大幅提升整體效率。

你用QQ和朋友聊天時數據的流動過程

??要使用QQ,首先需要聯網,而你和你的朋友的電腦都是馮諾依曼體系結構,在你向朋友發送消息這個過程中,你的電腦當中的鍵盤充當輸入設備、顯示器和網卡充當輸出設備,你朋友的電腦當中的網卡充當輸入設備、顯示器充當輸出設備

在這里插入圖片描述
??剛開始你在鍵盤當中輸入消息,鍵盤將消息加載到內存,此時你的顯示器就可以從內存獲取消息進而顯示在你自己的顯示器上,此時你就能在你自己的電腦上看到你所發的消息了。

??在鍵盤將消息加載到內存后,CPU從內存獲取到消息后對消息進行各種封裝,然后再將其寫回內存,此時你的網卡就可以從內存獲取已經封裝好的消息,然后在網絡當中經過一系列處理(這里忽略網絡處理細節),之后你朋友的網卡從網絡當中獲取到你所發的消息后,將該消息加載到內存當中,你朋友的CPU再從內存當中獲取消息并對消息進行解包操作,然后將解包好的消息寫回內存,最后你朋友的顯示器從內存當中獲取消息并顯示在他的電腦上。

在這里插入圖片描述

與馮?諾依曼體系結構相關的一些知識

在這里插入圖片描述
??根據馮諾依曼體系結構圖,我們可以知道,站在硬件角度或是數據層面上,CPU只和內存打交道,外設也只和內存打交道。到這里我們也可以說明一個問題:為什么程序運行之前必須先加載到內存?

??因為可執行程序(文件)是在硬盤(外設)上的,而CPU只能從內存當中獲取數據,所以必須先將硬盤上的數據加載到內存,也就是必須先將程序加載到內存。

常見的輸入設備和輸出設備(拓展):

  1. 輸入設備:鍵盤、鼠標、網卡、硬盤、話筒、攝像頭、掃描儀等。
  2. 輸出設備:顯示器、音響、網卡、硬盤、打印機等。

??注意: 同種設備在不同場景下可能屬于輸入設備,也可能屬于輸入設備。

??在物理層面上,各個硬件單元之間是通過總線連接的,外設與內存之間的總線叫做IO總線,內存與CPU之間的總線叫做系統總線。

總結一下:

  1. 計算機只能識別二進制,用戶和計算機不能直接打交道,必須需要通過輸入輸出設備進行交流。關于設備,有純的輸入或輸出,也有兼容輸入輸出設備。
  2. 中央處理器(CPU):含有運算器和控制器等
  3. 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取簡單來說,所有設備都只能直接和內存打交道。

二、計算機層次結構分析

操作系統(Operator System)

??操作系統是一款管理計算機軟硬件資源的軟件,它向上為應用程序提供穩定的服務接口,向下為硬件提供統一的管理和調度,創造穩定可靠的運行環境。

??每個硬件設備都有其特定的功能,并能夠在馮諾依曼體系下高效運行。然而,僅具備硬件功能還遠遠不夠,因為硬件的操作需要明確的調控和協調。也就是說,何時執行何種功能,必須通過一個統一的管理者來安排,這正是操作系統和程序設計的重要作用。

在這里插入圖片描述

驅動層的作用與意義

在這里插入圖片描述
??上層的任何操作最終都會反饋到底層硬件,操作系統接收上層請求后,會調用相關的底層硬件。然而,由于硬件特性不同,可能會導致需要修改硬件或操作系統以適配新設備。為了解決這種問題,在軟件和硬件之間引入了一層驅動層。

??驅動層是一種專門的軟件,每種硬件都有對應的驅動層。它的主要作用不是直接管理軟硬件資源,而是為操作系統提供統一的通信接口,讓操作系統能夠通過標準化的方法訪問和控制硬件設備。例如,操作系統可以通過驅動層讀取硬件信息或發送控制指令,而不需要關心硬件的具體實現細節。

??不論硬件如何變化,只要硬件廠商提供了合適的驅動程序,操作系統就能夠正常管理和使用該硬件。

系統調用接口(system call)

在這里插入圖片描述
??底層硬件的管理者是操作系統,任何涉及到訪問硬盤的行為,必須通過操作系統進行訪問。操作系統里面本身是對軟硬件資源進行操作,所以操作系統內部會包含所有的軟硬件資源。

所以有一個問題,如果出現用戶想要訪問某種軟硬件資源數據,可不可以直接訪問操作系統特定的數據呢?

??答案是不行,操作系統內部資源是十分重要的,不允許其他用戶直接進行訪問,避免用戶造成內部資源的損壞。然而,用戶仍然需要通過操作系統向底層硬件提出請求并執行操作。

??為此,操作系統設計者使用 C語言 編寫了一系列內部函數接口,這些接口為用戶程序提供了訪問系統資源的標準服務。這些接口被稱為 系統調用(System Call)。

用戶操作接口

在這里插入圖片描述
??由于系統調用本身的使用難度較高,普通用戶直接使用系統調用可能面臨復雜的操作流程和較高的技術門檻。因此,程序員通常會基于系統調用設計上層的軟件或接口,通過封裝特定的功能和邏輯,提供更簡單、易用的服務。

三、操作系統管理

管理者決策被管理者

??我們可以舉個例子方便理解:評選獎學金
??將評選獎學金的工作人員看成管理者,而參與評選的學生看成被管理者。
??如果管理者需要對于被管理者需要進行決策,決定獎學金分配。根據我們日常流程可以知道,管理者和被管理者間是不需要見面,管理者會根據被管理者數據進行相關決策。

這也說明管理的本質是通過對于數據進行管理,從而達到對于人的管理。

如何得到被管理者數據

??管理者是負責對被管理者數據進行決策,而被管理者數據是需要通過執行者去執行收集數據。由于人數過多,精力有限,不可能一一去問,所以我們可以使用EXCEL表格進行管理,但是龐大的數據量也是十分的棘手。

??管理者是老練的程序員,想到可以將自己手上的活交給編譯器去做,那么將學生信息封裝到結構體中,在每個結構體內部添加結構體指針用于連接其他包含學生信息的結構體,形成鏈表。

??管理者只需要對鏈表進行管理,對于學生信息數據進行增刪查改轉變為了對鏈表的增刪查改。相對于Excel表可以根據鏈表的特點添加一些方便的接口,比如找到這一堆學生中數學成績最好的學生。

在這里插入圖片描述
??在計算機體系結構里,我們的OS就相當于管理者,我們的軟硬件資源就相當于被管理者,而我們的驅動程序就相當于是執行者。

庫函數與系統調用的關系

??【場景】:假如有A和B兩個校長,A校長有一個學生數學特別厲害,但是B校長沒有,于是B校長就想跟A校長商量借這個同學來打比賽,但是B校長肯定不能直接去找這個學生,因為這個學生是A校長的人,他得負責,所以他必須要通過A校長的同意才行。

??庫函數必須通過系統調用接口才能與操作系統進行交互,從而訪問底層資源。因此,庫函數與系統調用呈現出上下層關系,可以理解為:

  1. 系統調用是基礎層
    ??系統調用是操作系統提供的接口,直接與操作系統內核交互,用于訪問硬件資源或執行關鍵的系統操作(如文件管理、進程控制等)。

  2. 庫函數是封裝層
    ??庫函數建立在系統調用之上,進行二次開發,通過封裝復雜的系統調用邏輯,為開發者提供更加簡單、統一的操作接口。例如:printf() 是C標準庫函數,但它最終調用了系統調用 write() 來實現數據輸出。

??總結一下: 管理者管理被管理者,實際上是先將被管理者的各種信息進行描述,然后再將多個被管理者的描述信息根據某種數據結構組織起來,最后管理者管理被管理者實際上就是對數據結構的管理。

先描述,再組織,這是一個很重要的思想,往后我會在教學中不斷提起的!!!


總結

??往下只會越來越難哦,哎,這Linux!!!

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

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

相關文章

OpenCV的基本用法全解析

《小白入門:OpenCV的基本用法全解析》 嗨,朋友們!之前咱們知道了OpenCV在機器視覺里就像個超級厲害的瑞士軍刀,那今天咱們就來好好嘮嘮,**OpenCV到底該怎么用呢?**這就像是拿到了一把好劍,咱們…

匯川EASY系列之以太網通訊(MODBUS_TCP做從站)

匯川easy系列PLC做MODBUS_TCP從站,不需要任何操作,但是有一些需要知道的東西。具體如下: 1、匯川easy系列PLC做MODBUS_TCP從站,,ModbusTCP服務器默認開啟,無需設置通信協議(即不需要配置),端口號為“502”。ModbusTCP從站最多支持31個ModbusTCP客戶端(ModbusTCP主站…

在 Offset Explorer 中配置多節點 Kafka 集群的詳細指南

一、是否需要配置 Zookeeper? Kafka 集群的 Zookeeper 依賴性與版本及運行模式相關: Kafka 版本是否需要 Zookeeper說明0.11.x 及更早版本? 必須配置Kafka 完全依賴 Zookeeper 管理元數據2.8 及以下版本? 必須配置Kafka 依賴外置或內置的 Zookeeper …

前端-選中pdf中的文字并使用,顯示一個懸浮的翻譯按鈕(本地pdfjs+iframe)不適用textlayer

使用pdfjs移步– vue2使用pdfjs-dist實現pdf預覽(iframe形式,不修改pdfjs原來的ui和控件,dom層可以用display去掉一部分組件) 方案1:獲取選擇文本內容的最前面的字符坐標的位置(這種寫法會導致如果選擇超出…

生活電子常識-deepseek-r1本地化部署+ui界面搭建

前言 deepseek-r1 14b模型,32b模型部署在本地電腦上也能實現非常好的性能。 因此有興趣研究了下如何在本地部署。 同時最新流行mauns工作流,他們提供一句話實現網頁端任意應用的能力。實際上,你也可以用本地的模型來實現離線的ai工作流功能。…

mac絲滑安裝Windows操作系統【絲滑簡單免費】

mac絲滑安裝Windows操作系統【絲滑&簡單&免費】 記錄mac絲滑安裝windows系統1、安裝免費版 VMware fusion 132、安裝Windows鏡像文件3、跳過聯網安裝(完成1后將2拖入1 點點點 即可來到3的環節)4、 安裝vmware 工具【非常重要,涉及聯網…

基于Spring Boot的企業內管信息化系統的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導,歡迎高校老師/同行前輩交流合作?。 技術范圍:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容:…

Pytorch實現之對稱卷積神經網絡結構實現超分辨率

簡介 簡介:針對傳統的超分辨率重建技術所重建的圖像過于光滑且缺乏細節的問題,作者提出了一種改進的生成對抗圖像超分辨率網絡。 該改進方法基于深度神經網絡,其生成模型包含多層卷積模塊和多層反卷積模塊,其中在感知損失基礎上增加了跳層連接和損失函數。 該判別模型由多…

Scikit-learn模型構建全流程解析:從數據預處理到超參數調優

模型選擇與訓練步驟及示例 1. 數據準備與探索 步驟說明:加載數據并初步探索其分布、缺失值、異常值等。 注意事項: 檢查數據類型(數值/類別)、缺失值和異常值。對類別型特征進行編碼(如獨熱編碼)。 實例&…

001-JMeter的安裝與配置

1.前期準備 下載好JMeter : https://jmeter.apache.org/download_jmeter.cgi 下載好JDK : :Java Downloads | Oracle 中國 下載圖中圈藍的JMeter和JDK就行,讓它邊下載,我們邊往下看 2.為什么要下載并安裝JDK ? JMeter 是基于 Java 開發的工具&#…

第2.2節 Android Jacoco插件覆蓋率采集

JaCoCo(Java Code Coverage)是一款開源的代碼覆蓋率分析工具,適用于Java和Android項目。它通過插樁技術統計測試過程中代碼的執行情況,生成可視化報告,幫助開發者評估測試用例的有效性。在github上開源的項目&#xff…

特征工程自動化(FeatureTools實戰)

目錄 特征工程自動化(FeatureTools實戰)1. 引言2. 項目背景與意義2.1 特征工程的重要性2.2 自動化特征工程的優勢2.3 工業級數據處理需求3. 數據集生成與介紹3.1 數據集構成3.2 數據生成方法4. 自動化特征工程理論基礎4.1 特征工程的基本概念4.2 FeatureTools庫簡介4.3 關鍵公…

Scikit-learn模型評估全流程解析:從數據劃分到交叉驗證優化

模型評估的步驟、scikit-learn函數及實例說明 1. 數據劃分(Train-Test Split) 函數:train_test_split使用場景:將數據分為訓練集和測試集,避免模型過擬合。作用:確保模型在未見過的數據上驗證性能。示例&…

Spring AI相關的面試題

以下是150道Spring AI相關的面試題目及答案: ### Spring AI基礎概念類 **1. 什么是Spring AI?** Spring AI是Spring框架的擴展,旨在簡化人工智能模型在Java應用中的集成與使用,提供與Spring生態無縫銜接的工具和抽象&#xff0c…

C++ 學習筆記(四)—— 類和對象

1、this指針 class Date { public:void Init(Date* this, int year, int month, int day){this->_year year;this->_month month;this->_day day;this->Print();// 這就是this指針,是編譯器自己加的,是用來讓成員函數找到成…

SpringMVC全局異常處理機制

異常處理機制 異常處理的兩種方式: 編程式異常處理:是指在代碼中顯式地編寫處理異常的邏輯。它通常涉及到對異常類型的檢測及其處理,例如使用 try-catch 塊來捕獲異常,然后在 catch 塊中編寫特定的處理代碼,或者在 f…

深入LangChain:LLM交互機制與RAG集成的技術

本文將聚焦于 LangChain 如何集成檢索增強生成(RAG),了解其架構、主要組件,以及與 LLM 的交互 LangChain 架構概覽 1、基礎層 這是與各類 LLM 對接的 “橋梁”。LangChain 支持多種流行的 LLM,如 OpenAI 的系列模型、H…

本地部署 LangManus

本地部署 LangManus 0. 引言1. 部署 LangManus2. 部署 LangManus Web UI 0. 引言 LangManus 是一個社區驅動的 AI 自動化框架,它建立在開源社區的卓越工作基礎之上。我們的目標是將語言模型與專業工具(如網絡搜索、爬蟲和 Python 代碼執行)相…

SQL注入(SQL Injection)攻擊原理與防御措施

SQL是一種代碼注入技術,可使攻擊者修改應用程序向數據庫提供的查詢。 迄今為止,最常見和最嚴重的應用 程序安全威脅總是隱藏在與數據庫有某些連接的網絡應用 程序中。 通過這種 SQL 注入,攻擊者可以繞過登錄程序,獲取、更改甚至更…

【算法】十大排序算法(含時間復雜度、核心思想)

以下是 **十大經典排序算法** 的時間復雜度、空間復雜度及穩定性總結,適用于面試快速回顧:排序算法對比表 排序算法最佳時間復雜度平均時間復雜度最差時間復雜度空間復雜度穩定性核心思想冒泡排序O(n)O(n)O(n)O(1)穩定相鄰元素交換,大數沉底…