深入了解Linux系統—— 操作系統

一、馮諾依曼體系結構

在這里插入圖片描述

現在我們常見的計算機(筆記本電腦等)和不常見的計算機(服務器)它們都滿足馮諾依曼體系。

我們可以把計算機理解成一個個硬件組成的

  • 輸入設備:鍵盤、鼠標、攝像頭、網卡、磁盤等
  • 輸出設備:顯示屏、打印機、網卡、磁盤等
  • 中央處理器CPU: 運算器+控制器
  • 存儲器:本質就是內存

理解輸入輸出IO Input/Output <-> IO,我們要站在內存的角度去理解,將數據輸入到內存這是輸入Input;將數據從內存輸出,這是輸出Output

在這里插入圖片描述

1. 理解軟件(程序)運行為什么要加載到內存?

我們知道軟件(程序)在運行之前,必須要先加載到內存,但是我們不知道這為什么?

了解了馮諾依曼體系結構,就知道了為什么,因為體系結構規定了。

程序在加載到內存之前,在哪?很顯然在磁盤中(也就是外存)

通過觀察馮諾依曼體現結構,我們能夠發現,CPU只能在內存中讀取和寫入數據;那我們的程序要像在CPU中運行,那就必須要先加載到內存中。

那程序要加載到內存中,這不就是將數據(我們寫的代碼也是數據)輸入到內存(Input)操作嗎(簡單來說,就是將數據拷貝到內存中)。

在這里插入圖片描述

3. 內存

看到這里,我們可能有一個疑問:為什么要有內存呢?CPU直接從輸入設備中讀取數據,然后將數據輸出到輸出設備不也可以嗎?

對于整個問題,我們要考慮一個問題,我們CPU處理數據是速度是很快的,如果我們CPU直接和輸入輸出設備進行數據交互,那我們整體效率就取決于輸入輸出設備的效率的;

所以要存在內存,我們CPU從內存中讀取數據,這樣可以平衡我們輸入輸出設備和CPU之間的速度差距(在程序運行之前通過特定的算法將數據先加載到內存)。

那這里我們理解了,還有一個疑問,CPU之和內存進行數據交互,那為什么不直接使用內存來存儲數據呢?

簡單來說,就是內存太貴了,如果全部使用內存來存儲數據,那一臺計算機的價格就非常高了。

2.理解數據流動

在馮諾依曼體系結構中,存在數據信號控制信號;這里我們拋開控制信號不談,現在來了解一下數據,以及數據流動。

現在我們想象一個場景,和你的女朋友在微信上聊天,你發送的信息是如何顯示到你女朋友是顯示器上的呢?

簡單來說,這簡單啊:我通過鍵盤將信息輸入到微信中,然后微信通過網絡將信息發送到我女朋友的微信中,然后顯示到她的顯示器上。

但是微信又是如何將數據發送的呢?

這里我們站在硬件的角度,從馮諾依曼體系結構來理解這個數據是如何傳輸的。

首先,我們將你女朋友使用的兩臺計算機設備想象成兩個馮諾依曼體系;

我們要像使用微信發送信息,那就一定要讓微信運行起來(就是將微信程序加載到內存,在CPU中執行);

對于你的這個馮諾依曼體系來說:

輸入設備:就是鍵盤,你通過鍵盤輸入信息。

信息從輸入設備加載到內存,然后通過微信這一個程序對數據進行一系列操作(加密等操作),然后數據由內存到輸出設備。(此時你的輸出設備就是網卡

然后數據通過網絡(一系列操作),將數據傳輸到你女朋友的計算機(馮諾依曼體系結構中);

對于女朋友的計算機馮諾依曼體現結構來說:

此時輸入設備就是網卡;

數據從網卡(輸入設備),然后加載到內存中,再通過微信這一個程序,對數據進行一系列操作(解密),然后數據從內存中到輸出設備中。

此時輸出設備就是顯示器。

這樣你發送的信息就顯示到了你女朋友的顯示器上。

看到這里,應該多多少少有一點理解數據流動了。

這里我們發送信息之后,我們的顯示器中也可以看到發送的信息,那就是我們的輸出設備還用顯示器

這里如果我們發送的是一個文件呢?

此時你的輸入設備就是磁盤(我們將文件拖拽到微信聊天框中這一操作,本質上就是從從磁盤中讀入數據)

而此時你女朋友的輸出設備就是磁盤(接收文件就是將文件保存到磁盤中)

在這里插入圖片描述

二、操作系統

就目前來說,我們并不知道操作系統是什么,是干什么;

簡答來說,操作系統是一個基本的程序集合;

操作系統是一款進行軟硬件管理的軟件。

從廣義上來說,操作系統包括:內核(進程管理、文件管理、內存管理和驅動管理);其它程序(函數庫、shell程序等)

但是狹義上我們也可以認為操作系統內核就是操作系統;

在這里插入圖片描述

理解了操作系統是什么,我們現在來看操作系統是干什么的:

這里先說結論:

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

試想一下,如果沒有操作系統,就一堆硬件擺在我們面前,我們能不能使用?顯然是不能的

軟硬件體系結構

在這里插入圖片描述

看上圖,這是計算機軟硬件體系結構;我們可以看到它分為三個部分用戶部分系統軟件部分硬件部分

之前我們使用計算機,都是通過操作系統,來進行我們的一系列操作;就比如linux中的基本命令,這是shell外殼為我們包裝好的指令,方便我們使用。

通過觀察上圖,我們可以發現系統調用接口驅動程序這些我們之前聽都沒聽過;

系統調用

通過這個名字,就感覺好高級,我們是不是不能隨意的使用系統調用,準確來說是的;

系統調用其實就是函數,只不過是操作系統提供的函數。

我們如果訪問操作系統,就必須通過系統調用

這個理解起來應該很簡單,操作系統不想我們之間去訪問它,所以提供了系統調用;我們可以通過系統調用來訪問操作系統。

一個程序,如果訪問了硬件,那么它一定貫穿整個體系結構

什么意思呢,就比如我們通過指令向文件中寫入數據,指令是shell外殼提供的,它對系統調用進行封裝形成指令供我們使用,而操作系統呢,通過驅動程序,來訪問硬件資源進行操作。

庫里面就可能進行了系統調用的封裝

我們C語言中的printfscanfprintf是將數據輸出到顯示器,scanf是從鍵盤中讀取程序,它們底層就是對系統調用進行了封裝。

理解操作系統

這里簡單來說,在整個計算機軟硬件架構中,操作系統的定位是:?款純正的搞管理的軟件

理解管理

操作系統在管理軟硬件資源的軟件,那如何去理解這個管理呢?

在我們日常生活中也存在很多管理的實例,那這個管理和操作系統管理軟硬件一樣嗎?

博主是一名大學生,在大學中,我們簡化成學生老師校長

那在這個管理實例中,是誰在管理誰呢?

一個事情,可以分為決策和執行;

在上面例子中,我們學生肯定就是被管理者,而老師是執行者,校長則是決策者。

  • 管理者和被管理者不需要見面(簡單來說就是,我們學生不需要見到校長,也能被管理起來)
  • 如何管理?這很簡單,通過信息(數據)管理
  • 如何得到數據?(通過中間層獲取,每個學校都有學生管理系統,我們在這個系統中可以查到我們的所有信息)

我們學校剛成立不久,學生很少,校長管理起來非常容易,搞一個execl表格,這個表格中存儲著我們所有學生的信息;

這樣校長管理我們學生,就直接對這些數據進行管理:簡單來說就是對這些數據增刪查改。

但是隨著學校發展,學生越來越多,這個表格中數據太多了,校長管理不過來了;

如果讓我們去解決,把我們是不是就要搞一個數據結構(鏈表/順序表),將這些信息存儲到計算機里面(學生的信息無非就是姓名、學號、性別、年齡等等)我們搞一個結構體來存儲這些信息;那這樣我們就可以使用數據結構將這些學生的信息存儲起來;

那我們就可以將這些信息存儲到計算機中,然后對這些數據結構進行增刪查改操作,不就將學生管理起來了嗎。

那對于學生的管理工作,不就轉化成對鏈表的增刪查改操作了嗎(這里過程也稱為建模)

建模的過程其實就是先描述、再組織

我們將學生信息使用一個struct結構體存儲起來,這不就是對學生信息的描述嗎;

我們將數據存儲到數據結構中,這不就是將數據組織起來嗎。

在這里插入圖片描述

先描述、在組織

說了這么多,我們這里只需要知道先描述、在組織就OK了。

那我們生活中的實例和操作系統管理硬件一樣嗎?

可以說是一樣的

我們操作系統管理硬件資源,是不是也是對硬件資源信息的管理,只需要知道硬件的信息,就可以對硬件進行管理。

理解系統調用

操作系統要對上提供對應的服務,但是呢,操作系統有不信任任何人;(這句話聽起來很別扭,操作系統要給我們提供對應的服務,又不信任我;這就跟我們生活中的銀行一樣,它要給我們提供相應的服務(存錢、取錢、轉賬等),但同時它又不信任我們,只是通過柜臺窗口,讓我們進行存錢、取錢等。)

那操作系統如何提供對應的服務呢? 就是系統調用

系統調用其實就是函數,函數要有參數和返回值吧,用戶就可以通過這些參數和返回值來實現用戶和操作系統之間的數據交互。

**但是這里有疑問:**我們不了解系統調用, 不會使用系統調用啊?

這就像一個不認識字的人去銀行,銀行通過了窗口來辦理業務,但是這個人不會,不知道要做什么,這時,我們銀行內的工作人員就會幫助這個人去辦理業務;

這就祥我們一樣,我們不了解系統調用,我們該如何去使用呢?

這是就有shell指令等,它們通過對系統調用的封裝,讓我們不知道系統調用的情況下,也可以使用計算機,訪問操作系統。

到這里,本篇文章就已經接近尾聲了,現在來做一個簡單總結:

馮諾依曼體系結構:理解數據流動,內存等

操作系統:操作系統是什么,理解管理

這時,我們銀行內的工作人員就會幫助這個人去辦理業務;

這就祥我們一樣,我們不了解系統調用,我們該如何去使用呢?

這是就有shell指令等,它們通過對系統調用的封裝,讓我們不知道系統調用的情況下,也可以使用計算機,訪問操作系統。

到這里,本篇文章就已經接近尾聲了,現在來做一個簡單總結:

馮諾依曼體系結構:理解數據流動,內存等

操作系統:操作系統是什么,理解管理

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

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

相關文章

RPG7.準備GAS的工作

1.啟動項目&#xff0c;為項目添加gameplayability插件 2.添加abilitysystemcomponent的c類 3.添加attributeset的c類 4.往build.cs內添加模塊 5.進入CharacterBase內&#xff0c;添加gameplayasystem和attributbeset&#xff0c;覆寫PossessedBy()和GetAbilitysystemcomponent…

使用gitea發布軟件包

1、新建hello工程 &#xff08;1&#xff09;HelloApplication.java package cn.ac.trimps.sv;import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplicati…

從請求到響應:初探spring web

引入&#xff1a; 首先小編想分享下一些開發小知識 2000年——手寫servlet/JSP時代 在這個階段中&#xff0c;那時候寫后端代碼&#xff0c;可謂是個麻煩事。 畢竟什么都要自己干 發來的請求都要寫extends HttpServlet的類&#xff0c;手動在web.xml配置 <servlet>…

Redis從入門到實戰實戰篇2

面試重點&#xff1a;本篇包含悲觀鎖&#xff0c;樂觀鎖&#xff0c;多線程以及分布式鎖的知識 目錄 3.優惠卷秒殺 3.1 -全局唯一ID 3.2 -Redis實現全局唯一Id 3.3 添加優惠卷 3.4 實現秒殺下單 3.5 庫存超賣問題分析 3.6 樂觀鎖解決超賣問題 3.7 優惠券秒殺-一人一單 …

LabVIEW實驗室項目中使用類模塊與仿真

在 LabVIEW 程序開發過程中&#xff0c;借鑒面向對象的類思想進行模塊化架構設計&#xff0c;并結合仿真功能&#xff0c;能夠高效應對不同場景的開發需求。 ? 以實驗室場景為例&#xff0c;LabVIEW 開發常面臨設備種類繁多、調試周期漫長&#xff0c;且硬件難以一次性到位的情…

ES6入門---第二單元 模塊三:對象新增、

一&#xff1a;對象簡潔語法&#xff1a; 1、變量簡潔 <script>let name Strive;let age 18;let json {name, //name:name,age //age:age};console.log(json);</script> 2、函數簡潔 let json {name, //name:name,age, //age:age/* showA:functi…

Python創意:AI圖像生成——用代碼繪制未來藝術

當代碼邂逅藝術:AI圖像生成的革命 在數字藝術領域,一場由Python和AI技術引領的革命正在悄然發生。無需專業繪畫技巧,僅憑幾行代碼,普通人也能創造出令人驚嘆的藝術作品。AI圖像生成技術打破了藝術創作的門檻,讓想象力成為唯一的限制。 核心技術方案 1. 技術架構 我們采…

一、Shell 腳本基礎

一、Shell 簡介 1.Shell 的定義與作用 Shell&#xff0c;通常被稱為命令行解釋器 (Command Line Interpreter)&#xff0c;是用戶 &#x1f464; 與 Linux/Unix 操作系統內核進行交互 ?? 的“橋梁” &#x1f309;。它扮演著翻譯官 &#x1f5e3;? 的角色&#xff1a; 接…

青少年編程與數學 02-018 C++數據結構與算法 21課題、機器學習與人工智能算法

青少年編程與數學 02-018 C數據結構與算法 21課題、機器學習與人工智能算法 一、線性回歸算法二、邏輯回歸算法三、K近鄰算法&#xff08;K-Nearest Neighbors, KNN&#xff09;四、決策樹算法五、支持向量機&#xff08;SVM&#xff09;六、神經網絡算法七、聚類算法八、降維算…

【數據結構】——單鏈表練習(1)

一、移除鏈表元素 題目鏈接&#xff1a; 移除鏈表元素 那么根據題目的要求我們大致明白這道題要做什么&#xff0c;就是將一個鏈表中&#xff0c;和指定的值相等的元素的節點刪除&#xff0c;然后返回刪除后的新的鏈表&#xff0c;然后題目給我們傳入的參數是鏈表的頭節點和指…

AI大模型基礎設施:主流的幾款開源AI大語言模型的本地部署成本

以下是對目前主流開源AI大語言模型&#xff08;如DeepSeek R1、LLaMA系列、Qwen等&#xff09;本地部署成本的詳細分析&#xff0c;涵蓋計算機硬件、顯卡等成本&#xff0c;價格以美元計算。成本估算基于模型參數規模、硬件需求&#xff08;GPU、CPU、RAM、存儲等&#xff09;以…

AI生成視頻檢測方法及其相關研究

目錄標題 【1】AI-Generated Video Detection via Spatio-Temporal Anomaly Learning【2】DeCoF: Generated Video Detection via Frame Consistency【2.1】Spatiotemporal Convolutional Neural Networks (STCNN) rely on spatial artifacts【2.2】Capturing Universal Spatia…

仿騰訊會議——服務器注釋

目錄 1、修改協議 2、修改登錄請求結構體 3、修改登錄回復結構體 4、修改注冊請求結構體 5、修改發送登錄請求函數 6、實現發送注冊請求函數 7、修改mysql存儲數據格式 8、自己完成部分 1、修改協議 2、修改登錄請求結構體 3、修改登錄回復結構體 4、修改注冊請求結構體…

list的迭代器詳講

1.list的迭代器就是封裝了節點指針的類 2.迭代器失效 迭代器失效即迭代器封裝的節點指針無效 。因為 list 的底層結構為帶頭結點的雙向循環鏈表 &#xff0c;因此 在 list 中進行插入時是不會導致 list 的迭代 器失效的&#xff0c;只有在刪除時才會失效&#xff0c;并且失效的…

deepSeek論文寫作提示詞指令大全(覆蓋選題、寫作、潤色到投稿全流程)

一、選題與框架設計 1、跨學科選題突破 指令:"結合[領域A]與[領域B]的前沿理論,生成5個交叉創新性論文選題,要求每個選題包含可行性評估。"(支持跨學科研究創新) 示例:"在人工智能與教育心理學領域生成選題,分析理論適用性與資源獲取難度。" 2、…

win11安裝WSL(創建用戶、更改或重置密碼)

文章目錄 win11安裝WSL設置 Linux 用戶名和密碼更改或重置密碼更新和升級軟件包WSL 命令互操作性WSL 的基本命令安裝列出可用的 Linux 發行版列出已安裝的 Linux 發行版將 WSL 版本設置為 1 或 2設置默認 WSL 版本設置默認 Linux 發行版將目錄更改為主頁通過 PowerShell 或 CMD…

Vue.js 與 Ajax (vue-resource) 的深入解析

Vue.js 與 Ajax (vue-resource) 的深入解析 引言 在Web開發中,前后端的交互是不可或缺的。Ajax(異步JavaScript和XML)技術允許我們在不重新加載整個頁面的情況下,與服務器交換數據和更新部分網頁內容。Vue.js 作為一種流行的前端框架,提供了多種方式來處理Ajax請求。其中…

第十三章-PHP MySQL擴展

第十三章-PHP與MySQL 一&#xff0c;連接數據庫 1. 使用 MySQLi&#xff08;面向對象方式&#xff09; <?php // 數據庫參數 $host localhost; $username root; $password ; $database test_db;// 創建連接 $conn new mysqli($host, $username, $password, $databa…

【文獻閱讀】全球干旱地區植被突變的普遍性和驅動因素

一、研究背景 全球干旱區&#xff08;drylands&#xff09;覆蓋了陸地面積的40%以上&#xff0c;承載了全球約三分之一人口&#xff0c;是生態系統脆弱性較高的區域。這些地區對氣候變化和人類干擾尤其敏感。近年來&#xff0c;干旱區發生了大量植被突變現象&#xff0c;即生態…

【Vue3-Bug】中路由加載頁面直接顯示空白

Vue3中路由加載頁面直接顯示空白 沒有子路由 路由定義不能重復&#xff0c;請自己查看數據在main.js(或者)mina.ts入口文件中&#xff0c;需要將router的注入到vue中的執行放在&#xff0c;vue掛在元素之前 // 順序不能變 app.use(router) app.mount(#app)在App.vue中 // 在…