Linux:計算機的層狀結構

1.馮諾依曼體系結構

我們常見的計算機,如筆記本、臺式機。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系結構。

CPU:運算器和控制器組成。運算器主要工作是做算術運算和邏輯運算。控制器主要工作是協調設備之間信息流動的。

輸入設備:鍵盤、鼠標、網卡等。

輸出設備:顯示器、網卡、打印機等。

存儲器:存儲器指的是內存,它的特點是掉電易失。

SSD固態硬盤或磁盤在馮諾依曼體系結構中它們不是存儲器,它們是輸入或者是輸出設備

設備是用總線連接的,被集成在了主板上。將設備連接起來的目的是為了數據流動(本質就是設備之間數據的來回拷貝,拷貝的整體速度是決定了計算機的效率指標)。

輸入設備和輸出設備它們的效率是比較慢的,cpu的速度又非常的快,如果中間沒有了存儲器這樣的設備,那么計算機的整體速度就取決于輸入或輸出設備,為了解決這種問題,于是在硬件上加入了存儲器。


存儲器比輸入或輸出設備要快,比CPU慢,輸入設備就將數據放到存儲器中,CPU在存儲器中去讀取執行,將結果放入到存儲器,存儲器在轉交給輸出設備,這樣一來計算器的整體速度就變為了以存儲器為主

當CPU在忙的時候,輸入設備將數據放入到存儲器中(這個工作是預先加載),當CPU不忙的時候直接到存儲器中讀取數據,將處理好的結果放入到存儲器中(這個工作是緩存),輸出設備直接在存儲器中去讀取,這樣一來計算機的效率就變得很高。


2.操作系統是如何管理底層硬件的?

第一個被加載的軟件是操作系統。操作系統是一個軟件,它的工作是對軟件資源和硬件資源進行管理

計算機的層狀結構圖:

計算機的軟硬件結構是層狀的。最底層是硬件,硬件有網卡,硬盤,鍵盤,顯示器,CPU等等,這些硬件底層構成并不是隨便放的,都是以馮諾依曼體系結構來進行組織的。


操作系統和底層硬件之間還有一個驅動程序,驅動程序是一個軟件,專門去控制對應的軟件,例如網卡驅動控制的是網卡,網卡的讀,寫,狀態,開和關等相關操作接口,都在網卡驅動里,操作系統直接去調用網卡驅動就能控制底層硬件的網卡(幾乎每一種底層硬件都有自己的驅動程序)。

在計算機的層狀結構圖中我們先從往下去研究,來學習操作系統是如何管理底層硬件的。

操作系統類似于現實生活中的領導,領導的主要工作是管理自己底下的員工,而管理的核心就是去做出正確的決策。底層硬件類似于現實生活中的普通員工,它們的主要工作是做執行,執行領導安排的任務。驅動程序類似于現實生活中的組長,它們的主要工作是保證管理決策落地,催促小組成員完成任務(操作系統做決策,底層硬件去執行,驅動程序保證決策落地)。

下面就以校園生活為例:

校長---------操作系統

輔導員----------驅動程序

學生-----------底層硬件


在學校中,校長是管理者,學生是被管理者,大多數的學生連校長的面都沒有見過,但是各方面都被安排的明明白白的,例如:該在什么教室上什么課,住在哪一間寢室,是否可以拿到獎學金和助學金等等。所以管理者和被管理者根本不需要見面,管理的本質不在于對人做管理,而在于對人的信息(數據)做管理,例如:校長拿到一個學生的信息(數據),該學生各科成績優秀,且是學生會的主席,對學校有重大貢獻,校長就可以做出決策,讓該學生拿到助學金。管理者核心是做決策,根據數據來做決策


管理者和被管理者面都沒有見過是如何拿到信息(數據)的呢,校長和學生沒有見過面,但是校長卻能知道學生的信息(數據),原因是因為輔導員,輔導員將學生的信息(數據)上交到了校長那里,同時輔導員還要保證管理決策落地,如果校長想組織一場運動會,不需要挨個去通知學生,只需要告訴輔導員,輔導員就會去通知學生。


管理者在面對大量的被管理者的時候,數據量是必然非常大的,因為對人的管理需要轉化成對數據的管理,數據量非常大的時候(學生非常的多),校長該如何去管理???

假設校長在沒有升職前是一個C語言的老師,他是一個懂編程的校長,在面對大量學生的信息(數據)時就想到了數據結構的鏈表,根據學生的信息(數據)去創建一個節點,例如:

將根據學生的信息(數據)所創建的節點以鏈表的形式鏈接起來,每新來一個學生就新增一個節點,將被開除的學生或者是畢業的學生就釋放掉對應的節點,還可以以身高、成績為鍵值進行排序來找出身高最高的學生或成績最好的學生進行做出決策,這樣一來對學生的管理就變成了對鏈表的增刪查改。對管理的一個計算機的建模的過程可以簡化為六個字:先描述,在組織。我們在C語言上描述一個事物只能用結構體來描述,先描述就是用結構體去描述對應的事物,比如校長用結構體去描述一個學生的基本信息,然后在使用鏈表將用結構體來描述的事物進行組織起來,這樣一來校長對學生的管理就變為了對數據結構中鏈表的增刪查改。

底層硬件雖然有很多,不同,但是硬件都有它的名稱,狀態,操作方法,對應的屬性。作系統對底層硬件的管理也是先描述,在組織,先將底層硬件使用結構體抽象的描述出來,例如:

再將用結構體抽象描述起來硬件使用鏈表的形式組織起來。從此往后,操作系統對底層硬件的管理就變為了對數據結構鏈表的增刪查改,例如:操作系統想找一個網卡,就可以根據網卡的名稱來遍歷一遍鏈表,然后再根據它的驅動做出管理,如:發送數據,關閉網卡。如果一個設備突然壞掉了,操作系統在鏈表中將這個壞掉的設備節點釋放掉。

操作系統不僅要管理底層硬件同時也需要將驅動程序給管理起來,管理的方法也是先描述,再組織。使用結構體將驅動程序描述出來,里面的屬性有:驅動的名稱,驅動的類別,驅動的方法,驅動的狀態,驅動的版本等等....,然后再給每一個驅動程序創建一個結構體對象,再使用數據結構組織起來,如鏈表。之后操作系統對驅動程序的管理就變為了對鏈表的增刪查改。

總結:

操作系統的管理工作:先描述,再組織

3.系統調用接口

計算機的層狀結構圖:

在前面說過,操作系統是一個軟件,它的主要工作是管理好軟硬件資源對上層應用軟件提供良好的運行環境。判斷一款操作系統好不好主要是看這三點:穩定(軟硬件資源管理的非常好,不會經常出現藍屏死機現象)、高效(軟硬件資源管理的代碼算法部分寫的非常良好)、安全(用戶的數據不會泄露出去)。


為什么要有系統調用接口???舉個例子:在現實生活的銀行,如果我們要去銀行中存錢或取錢,銀行肯定不會讓我們跑到倉庫里自己去放錢或取錢,萬一有人要存5000,實際上只在倉庫里放了一塊錢,還順帶在倉庫里拿了一部分錢,所以銀行會擔心群眾中有壞人,它不會將自己全面暴露出來,但是為了給我們提供服務,銀行就設置了柜臺(人工服務),ATM機,讓我們去存錢或者是取錢,這樣一來,銀行就保證了自己的安全,也為群眾提供了應有的服務。

同樣也是如此,我們要去硬盤中讀取數據,操作系統肯定不會讓我們直接去遍歷它管理硬盤那一個數據結構中的某個字段,萬一我們把其他人的數據也拿去了怎么辦,所以操作系統不能將自己全面暴露出來,這樣做不安全。為了解決這個問題,所以操作系統和用戶之間有了系統調用接口這一層,系統調用接口是操作系統提供的一批接口,只允許用戶通過系統調用接口來訪問操作系統內部。


Linux操作系統是用C語言實現的(有少部分匯編),所以系統調用接口其實就是用C語言實現的函數,它是操作系統提供的系統調用函數。有些函數是有輸入、輸出的,所謂的輸入其實就是用戶想將數據交給操作系統,輸出就是通過接口函數將數據拿給用戶。

操作系統給上層用戶提供的兩方面的功能:1.數據方面的支持(如:用戶想拿到文件數據、系統當中有多少進程等),2.功能方面的支持(如:用戶想將數據通過網卡發送到網絡,將數據寫入到磁盤等)。


總結:任何人都不能直接去訪問操作系統內部的數據,必須通過操作系統提供的接口函數才能去訪問

用戶不能直接去訪問操作系統內部的數據,能不能直接繞過操作系統去控制底層硬件???答案是不能的,假設可以,如果用戶一直在控制著網卡,網卡就會處于非常忙的狀態,這時操作系統有個任務需要使用網卡,發現網卡一直被用戶給控制著,這個任務就無法進行下去,那么操作系統的管理工作還做不做了。所以用戶不能越級去控制底層硬件,必須通過系統提供的系統調用接口才行。

重新去理解printf函數和scanf函數

在學習C語言的時候,我們肯定使用printf函數和scanf函數。以printf函數為例,printf打印的消息是在顯示器上顯示的,顯示器是一個硬件,肯定是被操作系統管理起來的,printf是C語言提供的標準輸出函數,它有能力直接在顯示器上打印內容嗎??答案是不能的,用戶不能越級去控制底層硬件,雖然我們不知道printf是怎么實現的,但是它的內部肯定封裝并且調用了系統調用接口函數才能向顯示器上打印內容。scanf同樣也是如此,必須通過系統調用接口函數才能讀取到用戶在鍵盤上輸入的數據。


不僅是C語言,其他語言也是如此,只要是影響到底層的硬件就必須通過系統調用接口函數才能去訪問硬件。

雖然系統調用接口本來就是給用戶準備的,但是要對操作系統有一定的了解才能把系統調用使用的好因為系統調用的參數和返回值必須得對操作系統有一定的認知,如果不懂的話使用系統調用接口會非常難受,所以就有人對系統調用接口進行了封裝,形成了lib(庫),提供給用戶進行開發操作,減少使用者使用成本。

所以我們雖然沒有使用過系統調用,但是通過學習計算機語言時也間接使用了,例如C語言將訪問顯示器和鍵盤的系統調用接口封裝成了printf和scanf函數,所以才有了C標準庫這樣的概念。

系統調用和庫函數之間的關系!!

系統調用是操作系統提供,庫函數是用戶提供(如C標準庫),它們之間的關系是上下層的關系。并不是所有的庫函數都會去調用系統調用,只要是庫函數調用了系統調用它們的關系就是上下層的關系(庫函數在上,系統調用在下)。

4.總結

我們通過學習馮諾依曼體系結構了解了計算機的組成結構,在通過計算機的層狀結構圖來學習操作系統是如何管理底層硬件的。

所以為什么要有操作系統的原因以及操作系統為什么要進行軟硬件資源進行管理的原因就是因為:操作系統要對下管理好軟硬件資源,對上要將自己的功能進行打包,形成系統調用接口,給上層的用戶提供服務,可以讓用戶直接調用系統調用接口,也可以讓用戶直接使用各種庫函數,為了讓用戶更好的去操作,所以在系統調用接口之上就有了shell外殼,lib(庫),指令,用戶就能更好的去進行指令操作、開發操作、管理操作

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

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

相關文章

LangGraph(四)——加入人機交互控制

目錄 1. 引言2. 添加Human Assistance工具3. 編譯狀態圖4. 提示聊天機器人5. 恢復執行參考 1. 引言 智能體可能不可靠,甚至需要人工輸入才能完成任務。同樣,對于某些操作,你可能需要在運行前獲得人工批準,以保證一切按預期運行。 …

數據結構【AVL樹】

AVL樹 1.AVL樹1.AVL的概念2.平衡因子 2.AVl樹的實現2.1AVL樹的結構2.2AVL樹的插入2.3 旋轉2.3.1 旋轉的原則 1.AVL樹 1.AVL的概念 AVL樹可以是一個空樹。 它的左右子樹都是AVL樹,且左右子樹的高度差的絕對值不超過1。AVL樹是一顆高度平衡搜索二叉樹,通…

JavaScript【5】DOM模型

1.概述: DOM (Document Object Model):當頁面被加載時,瀏覽器會創建頁面的文檔對象模型,即dom對象;dom對象會被結構化為對象樹,如一個HTML文檔會被分為head,body等部分,而每個部分又…

STM32燒錄程序正常,但是運行異常

一、硬件配置問題 BOOT引腳設置錯誤 STM32的啟動模式由BOOT0和BOOT1引腳決定。若設置為從RAM啟動(BOOT01,BOOT10),程序在掉電后無法保存,導致復位后無法正常運行。應確保BOOT00(從Flash啟動)15。…

汽車二自由度系統模型以及電動助力轉向系統模型

汽車二自由度系統模型與電動助力轉向系統(EPS)的詳細建模方案,包含理論推導、MATLAB/Simulink實現代碼及參數說明: 一、二自由度汽車模型 1. 模型描述 包含以下兩個自由度: 橫向運動(側向加速度&#xf…

git提交庫常用詞

新功能 feat修改BUG fix文檔修改 docs格式修改 style重構 refactor性能提升 perf測試 test構建系統 build對CI配置文件修改 ci修改構建流程、或增加依賴庫、工具 chore回滾版本 revert

JavaScript 時間轉換:從 HH:mm:ss 到十進制小時及反向轉換

關鍵點 JavaScript 可以輕松實現時間格式(HH:mm:ss 或 HH:mm)與十進制小時(如 17.5)的相互轉換。兩個函數分別處理時間字符串到十進制小時,以及十進制小時到時間字符串的轉換,支持靈活的輸入和輸出格式。這…

LLM智能體新紀元:深入解析MCP與A2A協議,賦能智能自動化協作

LLM智能體(LLM agents)是能夠自主行動以實現特定目標的AI系統。在實際應用中,智能體能夠將用戶請求拆解為多個步驟,利用知識庫或API獲取數據,最終整合出答案。這讓智能體相比于傳統獨立聊天機器人擁有更強大的能力——…

[PMIC]PMIC重要知識點總結

PMIC重要知識點總結 摘要:PMIC (Power Management Integrated Circuit) 是現代電子設備中至關重要的組件,負責電源管理,包括電壓調節、電源轉換、電池管理和功耗優化等。PMIC 中的數字部分主要涉及控制邏輯、狀態機、寄存器配置、通信接口&am…

PYTHON訓練營DAY28

類 (一)題目1:定義圓(Circle)類 要求: 包含屬性:半徑 radius。包含方法: calculate_area():計算圓的面積(公式:πr)。calculate_circ…

機器學習-人與機器生數據的區分模型測試 -數據篩選

內容繼續機器學習-人與機器生數據的區分模型測試 使用隨機森林的弱學習樹來篩選相對穩定的特征數據 # 隨機森林篩選特征 X data.drop([city, target], axis1) # 去除修改前的城市名稱列和目標變量列 y data[target] X_train, X_test, y_train, y_test train_test_split(X…

Data whale LLM universe

使用LLM API開發應用 基本概念 Prompt Prompt 最初指的是自然語言處理研究人員為下游任務設計的一種任務專屬的輸入模板。 Temperature 使用Temperature參數控制LLM生成結果的隨機性和創造性,一般取值設置在0~1之間,當取值接近1的時候預測的隨機性較…

Azure 應用的托管身份與服務主體

Microsoft Entra ID -- 前稱 Azure Active Directory -- 提供強大的身份驗證和授權功能。托管身份和服務主體通過限制憑據暴露的風險來幫助確保對 Azure 資源的訪問安全。 托管身份為Azure原生應用程序自動管理身份,而服務主體則非常適合需要訪問Azure資源的外部應…

16 C 語言布爾類型與 sizeof 運算符詳解:布爾類型的三種聲明方式、執行時間、賦值規則

1 布爾類型 1.1 布爾類型概述 布爾類型用于表示邏輯上的真(true)和假(false)兩種狀態,是編程中條件判斷和邏輯運算的基礎。在 C 語言中,布爾值的表示方式隨著標準的發展而不斷完善。 1.2 布爾類型的三種聲…

【C++詳解】string各種接口如何使用保姆級攻略

文章目錄 一、string介紹二、string使用構造函數析構函數賦值運算符重載string的遍歷修改方法1、下標[]2、迭代器3、范圍for 迭代器使用詳解const迭代器反向迭代器(reverse) Capacity(容量相關)size/lengthmax_sizecapacityclear/emptyshrink_to_fit(縮容)reserve(擴…

回調函數應用示例

回調函數是一種通過函數指針(或引用)調用的函數,它在特定事件或條件發生時被另一個函數調用。回調函數的核心思想是將函數作為參數傳遞,以便在適當的時候執行自定義邏輯,常用于異步編程、事件驅動架構等場景。 業務場景…

linux標準庫頭文件解析

linuxc標準庫 C 標準庫&#xff08;C Standard Library&#xff09;包含了一組頭文件&#xff0c;這些頭文件提供了許多函數和宏&#xff0c;用于處理輸入輸出、字符串操作、數學計算、內存管理等常見編程任務。。 頭文件功能簡介<stdio.h>標準輸入輸出庫&#xff0c;包含…

Unbuntu 命令

Ubuntu 命令速查表? ?分類??命令??功能描述??示例/常用選項????文件與目錄?ls列出目錄內容ls -a&#xff08;顯示隱藏文件&#xff09;; ls -lh&#xff08;詳細列表易讀大小&#xff09; cd切換目錄cd ~&#xff08;主目錄&#xff09;; cd ..&#xff08;上級…

怎么在excel單元格1-5行中在原來內容前面加上固定一個字?

環境&#xff1a; WPS 2024 問題描述&#xff1a; 怎么在excel單元格1-5行中在原來內容前面加上固定一個字&#xff1f; 解決方案&#xff1a; 1.在Excel中&#xff0c;如果您想在單元格的內容前面添加一個固定的字&#xff0c;可以通過以下幾種方法實現&#xff1a; 方法…

Linux zip、unzip 壓縮和解壓

zip 命令用于壓縮文件&#xff0c;壓縮后的文件后綴名為 .zip 。 對應的解壓命令是 unzip 。 測試用的目錄結構如下&#xff0c; userzn:~/test$ tree . ├── folder1 │ ├── folder111 │ │ └── file1.txt │ └── main1.c ├── folder2 │ ├── …