【Linux】馮諾依曼體系結構和操作系統的理解

目錄

  • 馮·諾依曼體系結構
    • 一個例子來深入理解
  • 初識操作系統
    • 操作系統的作用
    • 設計操作系統的目的
    • 操作系統之上和之下分別有啥
  • 管理的精髓,先描述,再組織

馮·諾依曼體系結構

在這里插入圖片描述
我們知道,計算機這個東西發明出來就是幫助人們快速解決問題的。那如果我們想把問題交給計算機處理,我們就需要一個輸入設備把我們問題所需要的數據和信息交給計算機,然后我們需要計算機給出我們處理的結果,就需要一個叫做輸出設備的東西來讓計算機把結果顯示出來(比如顯示器)在這里插入圖片描述

  • 而我們后人就將這個具有算術運算功能、邏輯運算功能以及控制功能的這個模塊稱為中央處理器,簡稱CPU。
  • CPU的處理數據的速度非常快,可以這么說如果我們想要打游戲和刷視頻如此的流暢,一塊好的CPU是不可或缺的。
  • 但是我們早期的計算機遇到了一個問題就是,CPU確實處理數據非常快,但是輸入設備和輸出設備他兩的處理數據的能力不快呀。這個時候CPU1微秒處理完數據,對輸入設備說,輸入設備我把你剛剛交給我的數據處理完了,你還有數據交給我們嗎?輸入設備這個時候說,請你等一下CPU我正在處理呢。 這個時候CPU又對輸出設備說,輸出設備我這里有一批剛剛處理完的數據要交給你,你現在有空處理嗎?這個時候輸出設備又說:等一下CPU,我這里的數據也還沒處理完呢。
  • 這個時候CPU就只能翹著二郎腿在這里閑著等他們了,這個時候我們就浪費了大量的空閑時間。

在這里插入圖片描述

  • 這也是木桶原理的現象。
  • 這個時候我們的諾依曼大佬也發現這個問題,就讓一個叫內存的東西作為橋梁介于CPU和輸入/輸出設備之間,內存的工作速度只是比CPU慢一點,如果說CPU處理完了數據,需要得到新的數據繼續工作,這個時候內存也剛好把輸入設備的數據拿到,這個時候內存就可以盡快的把數據拿給CPU處理,對于輸出設備的對接也是如此。
  • 現在該體系的運行流程就是:用戶輸入的數據先放到內存當中,CPU讀取數據的時候就直接從內存當中讀取,CPU處理完數據后又寫回內存當中,然后內存再將數據輸出到輸出設備當中,最后由輸出設備進行輸出顯示。
  • 于是就形成了最終的馮諾依曼體系結構。

在這里插入圖片描述

一個例子來深入理解

  • 今天你要使用qq對你的朋友發送一句你好的信息
  • 要使用qq就需要聯網,你和你的朋友的電腦都是馮·諾依曼的體系結構:你的輸入設備是:鍵盤,輸出設備是:顯示器和網卡, 你朋友的輸入設備是:網卡,輸出設備是:顯示器
    在這里插入圖片描述
  • 剛開始你在你的鍵盤中輸入了你好這個數據,那么鍵盤這個輸入設備就把數據交給內存,內存拿到了又交給CPU處理,CPU處理好后交給內存,內存又對顯示器和網卡兩個輸出設備各個發送一份,那么你的顯示器就得到了你好這個數據,這個時候你的顯示器上就顯示了你發送你好的信息,那么網卡的信息就開始交給網絡流,流到了朋友電腦的網卡這個輸入設備這里,被朋友電腦的網卡獲取到,這個時候網卡又把這個數據交給內存,內存交給CPU,CPU處理完后又交給內存,內存拿到后,交給你你朋友電腦的顯示器這個輸出設備,這個時候你朋友的顯示器上就出現了你好。

總結一下:

  • CPU只和內存打交道

初識操作系統

操作系統的作用

簡單來說就是用來管理軟件和硬件的一款系統軟件

設計操作系統的目的

  • 與硬件進行交互,管理所有的軟硬件資源。
  • 為用戶程序(應用程序)提供一個良好的執行環境。

例如:如果用戶現在像在顯示器上看一個東西,就需要顯示器的驅動程序來啟動顯示器這個硬件,操作系統就是需要來管理驅動程序這一操作,來滿足用戶的需求。

操作系統之上和之下分別有啥

  • 首先就是我們肉眼可見的計算機硬件,這些硬件的結構也是遵從我們的馮·諾依曼體系結構的。
    在這里插入圖片描述
  • 但是如果只是有這些硬件是不行的,還要有一個的東西來對硬件進行管理。例如:內存什么時候從從輸入設備讀取數據?讀取多少數據?內存何時刷新緩沖區到輸出設備?是按行刷新還是全刷新?這些都是由軟件進行管理的,而這個軟件就是操作系統(Operator System)。

在這里插入圖片描述

  • 那這個時候有一個問題。我們是不是可以理解為,操作系統直接來管理硬件?
  • 舉個例子,如果操作系統自己來完成鍵盤的讀取操作,那么只要你的鍵盤讀取方式進行了改變,那么操作系統的內核源代碼就需要進行重新編譯,這對操作系統來說維護成本太高了。
  • 于是我們早操作系統和硬件之間也加了一個驅動層,這個驅動層的主要作用就是去直接控制底層硬件的。例如,鍵盤有鍵盤驅動,網卡有網卡驅動,硬盤有硬盤驅動,磁盤有磁盤驅動。驅動簡單來說就是去訪問某個硬件的讀,和硬件狀態驅動層就是直接和硬件打交道的。此時操作系統就只需關心何時讀取數據,而不用關心數據是如何讀取的了,也就是完成了操作系統與硬件之間的解耦。
    在這里插入圖片描述
  • 這個時候大家可能對解耦這個名詞有點陌生,我這里講一下什么是高內聚和低耦合

補充知識:高內聚和低耦合

  • 什么是高內聚?例如臺式電腦把顯卡和顯示器這樣主要用來顯示的功能放在一起叫做高內聚,把具有類似功能的函數封裝在一個類也是高內聚。
  • 什么是低耦合,我的臺式電腦感覺用著非常卡頓,系統反應遲鈍,我現在把CPU換一個更高效的但是換了CPU并不會造成很大影響其他顯卡和內存的功能。或者我把一個函數的代碼改了并不會造成很大影響(不是沒有影響哈)另一個函數的功能,叫做低耦合

那操作系統究竟管理些什么呢?操作系統主要進行以下四項管理:

  1. 內存管理:內存分配、內存共享、內存保護以及內存擴張等等。
  2. 驅動管理:對計算機設備驅動驅動程序的分類、更新、刪除等操作。
  3. 文件管理:文件存儲空間的管理、目錄管理、文件操作管理以及文件保護等等。
  4. 進程管理:其工作主要是進程的調度。
  • 而操作系統再往上就是我們所處的位置,在這里我們就可以用命令行或是圖形化界面進行各種操作,這一層被稱為用戶層。(如Windows的圖形界面操作,Linux的命令行指令操作)

在這里插入圖片描述

  • 但操作系統為了保護自己,對上只暴露了一些接口,而不會讓用戶直接訪問操作系統,這一系列接口被稱為系統調用接口(其實就是函數)。
  • 例如:如果我們的程序要訪問硬件,必須通過系統調用訪問操作系統,讓操作系統去讓硬件執行相應的操作。(只有操作系統可以管理軟件和硬件)

在這里插入圖片描述

  • 但是系統調用接口的方式來訪問操作系統,對于不熟悉操作系統的人操作成本還是太高了,我們因為要使用系統調用前提條件是你得對系統有一定了解。所以在系統調用接口之上又構建出了一批庫,例如libc和libc++。實際上在語言級別上使用的各種庫,就是封裝了系統調用接口的,我們就是通過調用這些庫當中的各種函數(例如printf和scanf)進行各種程序的編寫。
  • 例如我們的Printf函數要把數字打印到顯示器,就要訪問硬件,訪問硬件去需要調用系統調用讓操作系統去給顯示器說我們的需求
    在這里插入圖片描述

管理的精髓,先描述,再組織

  • 要想學好操作系統,那么就必須正確理解到底什么是管理。
  • 這里我們舉一個實際的例子來談談管理,現在給出三個角色:學生、輔導員和校長。很明顯,校長在這三個人當中是管理者,學生是被管理者,那么輔導員充當什么角色呢?
    在這里插入圖片描述
  • 仔細想想,實際上完成任何一件事都要經過兩個過程,首先是決定要不要做這件事或是如何做這件事(決策),然后就是去做這件事情(執行)。校長作為管理者來管理學生,校長實際上就是那個做決策的人,但是校長作出決策后并不需要自己來執行,而是讓輔導員去執行,所以輔導員的主要任務就是執行管理者的決策,我們通常將其稱為執行者。
    在這里插入圖片描述
  • 雖然說校長是管理學生的,但是我們在學校一般情況下是看不到校長本人的,那么校長是如何做到在不看到我們的情況下對我們進行管理的呢?

舉個例子,現在校長要求輔導員將計算機成績排名前十的學生的各科資料以及平時表現記錄拿過來,他將從這十名同學之中選出三名學生參加本次的編程大賽,當輔導員將資料拿來后校長選出三名學生說:“就這三個了,你找個老師對這三名學生進行一下強化訓練,然后參加本次的編程大賽。”然后校長就什么也不管了。

  • 在這個過程中,校長根本沒有見過這三名同學,就對其進行了管理,他根據的是什么?沒錯,他根據的是數據。
  • 實際上,學校將我們每個學生的各種信息都進行了管理,基本信息、成績信息以及健康信息等等。
    在這里插入圖片描述
  • 每一種信息就描述了這個學生的情況,我們的學長就可以只根據這些關于這個學生的信息就可以把學生管理起來。這么一套信息在C語言當中我們稱之為抽象結構體,而在C++當中又叫做類。
  • 當學生的數量多起來了,校長就可以將全部學生的信息組織起來,當然組織的方式有很多種(鏈表、順序表、樹),而每種組織方式都有其自己的優勢,于是就有了一門課程專門教我們管理數據的方式,那就是數據結構。這里我們假設校長以雙鏈表的形式將學生的信息組織起來。
    在這里插入圖片描述
  • 此時校長對這些學生的管理,其實就是對雙鏈表這個數據結構的增刪查改。例如:我如果要年級最后三名開除學籍,那么我們就可以在學籍系統中,刪掉這三名學生的信息。
  • 那么操作系統是不是也可以這樣管理硬件?把網卡,顯卡,鍵盤,定義一個類,描述他們的屬性,然后數據結構組織起來,對他們進行增刪查改

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

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

相關文章

kotlin @JvmStatic注解的作用和使用場景

1. JvmStatic 的作用 JvmStatic 是 Kotlin 提供的一個注解,用于在 JVM 上將伴生對象(companion object)中的方法或屬性暴露為 Java 靜態方法或字段。 作用對象:只能用在 companion object 中的函數或屬性。效果: 在 …

Redis實現-優惠卷秒殺(基礎版本)

(一)全局唯一ID 一、全局ID生成器 可以看到在優惠卷訂單表中的主鍵id并沒有設置Auto increment自增長 假如未來訂單量達到數億單,單表無法保存如此多數據,就需要對其進行分表存儲(分布式)。假如每張表都采用自增長,各自從1開始自增&#xf…

c++STL——哈希表封裝:實現高效unordered_map與unordered_set

文章目錄 用哈希表封裝unordered_map和unordered_set改進底層框架迭代器實現實現思路迭代器框架迭代器重載operator哈希表中獲取迭代器位置 哈希表的默認成員函數修改后的哈希表的代碼封裝至上層容器 用哈希表封裝unordered_map和unordered_set 在前面我們已經學過如何實現哈希…

虹科應用 | 探索PCAN卡與醫療機器人的革命性結合

隨著醫療技術的不斷進步,醫療機器人在提高手術精度、減少感染風險以及提升患者護理質量方面發揮著越來越重要的作用。醫療機器人的精確操作依賴于穩定且高效的數據通信系統,虹科提供的PCAN四通道mini PCIe轉CAN FD卡,正是為了滿足這一需求而設…

Yolov8的詳解與實戰-深度學習目標檢測

Yolov8的詳解與實戰- 文章目錄 摘要 模型詳解 C2F模塊 Loss head部分 模型實戰 訓練COCO數據集 下載數據集 COCO轉yolo格式數據集(適用V4,V5,V6,V7,V8) 配置yolov8環境 訓練 測試 訓練自定義數據集 Labelme…

scons user 3.1.2

前言 感謝您抽出時間閱讀有關 SCons 的內容。SCons 是一款下一代軟件構建工具,或者稱為 make 工具,即一種用于構建軟件(或其他文件)并在底層輸入文件發生更改時使已構建的軟件保持最新狀態的軟件實用程序。 SCons 最顯著的特點是…

Java的多線程筆記

創建一個線程的方法有多種,比如可以繼承Thread類或者實現Runnable接口,結論是實現Runnable接口比前者更加優越。 二者代碼對比 Java 不支持多繼承,如果你繼承了 Thread 類,就不能再繼承其他類,實現 Runnable 接口后&am…

PDF Base64格式字符串轉換為PDF文件臨時文件

需求描述: 在對接電子病歷系統與河北CA,進行免密文件簽章的時候,兩者系統入參不同,前者是pdf文件,base64格式;后者要求File類型的PDF文件。 在業務中間層開發時,則需要接收EMR側提供的base64格式…

代碼隨想錄訓練營第二十三天| 572.另一顆樹的子樹 104.二叉樹的最大深度 559.N叉樹的最大深度 111.二叉樹的最小深度

572.另一顆樹的子樹: 狀態:已做出 思路: 這道題目當時第一時間不是想到利用100.相同的樹思路來解決,而是先想到了使用kmp,不過這個題目官方題解確實是有kmp解法的,我使用的暴力解法,kmp的大致思…

【RabbitMq C++】消息隊列組件

RabbitMq 消息隊列組件 1. RabbitMq介紹2. 安裝RabbitMQ3. 安裝 RabbitMQ 的 C客戶端庫4. AMQP-CPP 庫的簡單使用4.1 使用4.1.1 TCP 模式4.1.2 擴展模式 4.2 常用類與接口介紹4.2.1 Channel4.3.2 ev 5. RabbitMQ樣例編寫5.1 發布消息5.2 訂閱消息 1. RabbitMq介紹 RabbitMq - …

鴻蒙NEXT開發動畫案例8

1.創建空白項目 2.Page文件夾下面新建Spin.ets文件,代碼如下: /*** SpinKit動畫組件 (重構版)* author: CSDN-鴻蒙布道師* since: 2025/05/14*/interface AnimationGroup {indexes: number[];delay: number; }ComponentV2 export struct SpinEight {Re…

MySQL全局優化

目錄 1 硬件層面優化 1.1 CPU優化 1.2 內存優化 1.3 存儲優化 1.4 網絡優化 2 系統配置優化 2.1 操作系統配置 2.2 MySQL服務配置 3 庫表結構優化 4 SQL及索引優化 mysql可以從四個層面考慮優化,分別是 硬件系統配置庫表結構SQL及索引 從成本和優化效果來看&#xf…

vue和springboot交互數據,使用axios【跨域問題】

vue和springboot交互數據,使用axios【跨域問題】 提示:幫幫志會陸續更新非常多的IT技術知識,希望分享的內容對您有用。本章分享的是node.js和vue的使用。前后每一小節的內容是存在的有:學習and理解的關聯性。【幫幫志系列文章】&…

FFMPEG 與 mp4

1. FFmpeg 中的 start_time 與 time_base start_time 流的起始時間戳(單位:time_base),表示第一幀的呈現時間(Presentation Time)。通常用于同步多個流(如音頻和視頻)。 time_base …

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂

AI世界的崩塌:當人類思考枯竭引發數據生態鏈斷裂 ——論過度依賴AI創作對技術進化的反噬 一、數據生態的惡性循環:AI的“自噬危機” 當前AI模型的訓練依賴于人類創造的原始數據——書籍、論文、藝術作品、社交媒體動態等。據統計,2025年全球…

C++【STL】(2)string

C【STL】string用法擴展 1. assign:為字符串賦新值 用于替換字符串內容,支持多種參數形式。 常用形式: // 用另一個字符串賦值 str.assign("Hello World");// 用另一個字符串的子串(從第6個字符開始,取5…

樹莓派4基于Debian GNU/Linux 12 (Bookworm)開啟VNC,使用MobaXterm連接VNC出現黑屏/灰屏問題

1. 開啟樹莓派的VNC服務 啟用VNC服務:通過raspi-config開啟 # 1. 通過 raspi-config 工具開啟 sudo raspi-config選擇 Interface Options → VNC → Yes退出時會自動啟動服務 檢查服務狀態: sudo systemctl status vncserver-x11-serviced正常輸出應顯示…

MongoDB使用x.509證書認證

文章目錄 自定義證書生成CA證書生成服務器之間的證書生成集群證書生成用戶證書 MongoDB配置java使用x.509證書連接MongoDBMongoShell使用證書連接 8.0版本的mongodb開啟復制集,配置證書認證 自定義證書 生成CA證書 生成ca私鑰: openssl genrsa -out ca…

Python爬蟲實戰:研究js混淆加密

一、引言 在當今數字化時代,數據已成為推動各行業發展的核心驅動力。網絡爬蟲作為一種高效的數據采集工具,能夠從互聯網上自動獲取大量有價值的信息。然而,隨著互聯網技術的不斷發展,許多網站為了保護自身數據安全和知識產權,采用了 JavaScript 混淆加密技術來防止數據被…

Java項目層級介紹 java 層級 層次

java 層級 層次 實體層 控制器層 數據連接層 Service : 業務處理類 Repository :數據庫訪問類 Java項目層級介紹 https://blog.csdn.net/m0_67574906/article/details/145811846 在Java項目中,層級結構(Layered Architecture&#xf…