linux之進程理解(1)

目錄

1. 馮諾依曼體系結構

?2. 操作系統(OS)

2.1 概念

2.2 設計OS的目的

2.3 定位

?2.4 理解管理

?3. 系統調用和庫函數概念

?4. 補充


1. 馮諾依曼體系結構

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

?截至目前,我們所認識的計算機,都是有一個個的硬件組件組成,硬件的各種連接是根據馮諾依曼體系結構連接

輸入單元(設備):包括鍵盤, 鼠標,掃描儀, 寫板,攝像頭,網卡等

中央處理器(CPU):含有運算器和控制器等,運算速度非常快

輸出單元(設備):顯示器,打印機,聲卡,磁盤,網卡等

?數據是要在計算機的體系結構中進行流動的,流動的過程中進行數據的處理

從一個設備到另一個設備,本質是一種拷貝!!!

比如輸入設備的數據拷貝到存儲器,存儲器的數據拷貝到cpu等

數據設備間的拷貝效率決定了計算機整機的基本效率

?存儲:距離CPU越近,效率越高,成本造價越高(比如寄存器)

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

1. 這里的存儲器指的是內存

2. 不考慮緩存情況,這里的CPU能且只能對內存進行讀寫,不能訪問外設(輸入或輸出設備)

3. 外設(輸入或輸出設備)要輸入或者輸出數據,也只能寫入內存或者從內存中讀取。

4. 一句話,所有設備都只能直接和內存打交道。

?為什么要有內存的存在而不是讓輸入設備直接與CPPU進行交互?

輸入設備(如鍵盤、鼠標、磁盤等)與 CPU 的速度差異非常大。輸入設備的速度相對較慢,而 CPU 的處理速度非常快。如果讓輸入設備直接與 CPU 進行交互,CPU 在等待輸入設備的數據時會處于空閑狀態,從而造成資源浪費和系統效率低下。

內存作為介于輸入設備和 CPU 之間的緩沖區域,能夠存儲大量數據,并且可以被 CPU 快速訪問。通過在內存中加載數據,CPU 可以隨時從內存中讀取所需數據,而不必等待輸入設備傳輸數據。此外,多個設備可以共享內存中的數據,實現更高效的數據交換和處理。

內存提供了一個統一的數據存儲和處理區域,使得 CPU 可以方便地訪問和處理數據。輸入設備通常只負責數據輸入和輸出,而數據的處理和存儲更適合由 CPU 和內存來完成。

總的來說:因為輸入設備的效率非常低而CPU的效率非常高,一個處理完了一個還在加載數據,類似于木桶原理,有多個木片組成計算機,效率由輸入輸出設備決定。有了內存后,可以在內存中加載很多數據,cpu讀取數據不是從輸入設備讀取數據了而是從內存中讀取數據這樣整機效率由內存決定

而且有了內存等其他便宜的存儲單元可以使電腦的價格降低

?程序運行為什么要加載到內存中?

程序=代碼+數據? ? ? ? ? 程序“數據”都要被CPU訪問

程序沒有被加載到內存的時候在哪里?在磁盤里,就是一個普通的可執行的二進制文件

又因為磁盤是一個外設設備而CPU只能在內存中讀取代碼和數據所以注定了你的程序只能從外設加載到內存中然后才能被cpu執行(也就是跑起來)

這就是馮諾依曼體系結構的應用

?對馮諾依曼的理解,不能停留在概念上,要深入到對軟件數據流理解上請解釋,從你登錄上qq開始和某位朋友聊天開始,數據的流動過程。從你打開窗口,開始給他發消息,到他的到消息之后的數據流動過程。

  1. 輸入階段: 當你打開 QQ 軟件并開始輸入消息時,鍵盤是輸入設備,它會將你輸入的字符轉換為數字編碼并發送給 CPU 進行處理。CPU 接收到鍵盤輸入的數據后,會將數據存儲到內存中的輸入緩沖區。

  2. 處理階段: CPU 接收到輸入數據后,會調用 QQ 軟件的相應功能模塊,比如消息發送模塊。軟件會將你輸入的消息數據從內存中讀取出來,并進行處理,包括對消息內容的格式化、加密等操作。處理完成后,消息數據會被放入內存中的發送緩沖區等待發送。

  3. 輸出階段: 處理完成的消息數據會被發送到網絡接口卡,經過網絡協議封裝后通過網絡連接發送給服務器。服務器接收到消息數據后,會將數據傳輸給你的朋友所在的設備。

  4. 接收階段: 朋友的設備接收到消息數據后,CPU 將數據存儲到內存中的接收緩沖區。QQ 軟件會從接收緩沖區讀取消息數據,并展示在聊天窗口中。

在整個過程中,數據的流動遵循了馮·諾依曼計算機體系結構的基本原理,即輸入、處理、輸出三個步驟。CPU 作為計算機的核心組件負責控制和協調數據在各個部件之間的流動,而內存作為數據存儲和傳輸的中介承擔著關鍵的角色。通過這樣的數據流動過程,你和朋友之間的聊天交流得以實現。

?2. 操作系統(OS)

電腦開機時需要幾十秒的時間本質是加載我們的操作系統,他是一個為我們進行軟硬件管理的軟件

比如u盤的插入與彈出是操作系統進行硬件的管理

比如對軟件的整個生命周期(下載安裝卸載)等是進行軟件的管理

2.1 概念

任何計算機系統都包含一個基本的程序集合,稱為操作系統(OS)。

籠統的理解(廣義),操作系統包括:

操作系統的內核(進程管理,內存管理,文件管理,驅動管理)
操作系統的外殼周邊程序(例如函數庫,shell程序,圖形化程序等等)-給用戶提供使用操作系統的方式

狹義的認識:只是操作系統的內核

2.2 設計OS的目的

如果沒有操作系統就沒有東西管理這些硬件,那么這些硬件是好的還是壞的還是當前什么狀態等就無從得知。操作系統通過驅動程序來與硬件設備進行通信和管理,從而獲取硬件設備的狀態信息,并對其進行控制和監控。

與硬件交互,管理所有的軟硬件資源--手段(對下)

為用戶程序(應用程序)提供一個良好(穩定的,安全的,高效的)的執行環境--目的(對上)

?OS起到一個承上啟下的作用,大概結構圖如下:

只有你驅動程序安裝了OS才能使用相應的硬件

OS不是對底層yin?

2.3 定位

在整個計算機軟硬件架構中,操作系統的定位是:一款純正的“搞管理”的軟件

?2.4 理解管理

管理者具有決策權!就比如學校里校長是管理者,學生是被管理者

但是校長和學生之間并沒有經常接觸但是就能管理好,說明管理者和被管理者不需要經常接觸

管理的本質是對被管理者的數據進行管理,拿到你的數據才是目的!

計算機管理硬件:.1. 描述起來,用struct結構體? 2.?組織起來,用鏈表或其他高效的數據結構(用鏈表等管理數據)? ? ? ? ? ?也就是說每個設備我都可以用結構體描述然后用數據結構組織進行增刪查改,當計算機管理硬件時,可以使用結構體(struct)來描述每個硬件設備的屬性,并使用鏈表或其他高效的數據結構來組織這些硬件設備。
任何管理都是先把被管理對象描述起來后組織
這就是我們為什么學數據結構,因為數據結構他討論的是如何對一個一個對象如何管理的學科,不同的數據結構決定了管理的側重點和效率。就比如我們的容器本質就是數據結構,以及C++所謂的封裝本質是描述對象而STL就是組織對象的方式!(STL就是容器)

凡是要對特定的對象進行管理都是先描述(比如c++的類就是描述)后組織

?3. 系統調用和庫函數概念

在開發角度,操作系統對外會表現為一個整體,但是會暴露自己的部分接口,供上層開發使用,這部分由操作系統提供的接口,叫做系統調用。

系統調用在使用上,功能比較基礎,對用戶的要求相對也比較高,所以,有心的開發者可以對部分系統 調用進行適度封裝,從而形成庫,有了庫,就很有利于更上層用戶或者開發者進行二次開發。

具體的操作系統圖:

有接口是為了操作系統的安全,防止我們用戶對操作系統進行破壞,就比如銀行一樣我們進不去銀行的柜臺它只提供窗口也是為了安全,為什么只提供窗口因為銀行不相信任何人也就是群眾中有壞人。
接口的設計確實是為了操作系統的安全性考慮。接口提供了一種受控的方式,讓應用程序或用戶與操作系統進行交互,同時限制了對操作系統內部的直接訪問,從而降低了潛在的破壞風險

?4. 補充

?指針的大小(即地址本身的大小)通常由操作系統的位數決定,而指針運算時的步長則取決于指針所指向的數據類型的大小。

#include <stdio.h>
int main()
{int arr[] = {1,2,3,4,5};short *p = (short*)arr;int i = 0;for(i=0; i<4; i++){*(p+i) = 0;}for(i=0; i<5; i++){printf("%d ", arr[i]);}return 0;
}

結果為0 0 3 4 5

在32位系統上,指針 p 的大小仍然是4個字節,而每次對 p 進行指針運算時,會按照指向的數據類型大小來進行偏移,即每次偏移2個字節。而一個數據是四個字節,所以移動四次是改變兩個數據

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

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

相關文章

chrome選項頁面options page配置

options 頁面用以定制Chrome瀏覽器擴展程序的運行參數。 通過Chrome 瀏覽器的“工具 ->更多工具->擴展程序”&#xff0c;打開chrome://extensions頁面&#xff0c;可以看到有的Google Chrome擴展程序有“選項Options”鏈接&#xff0c;如下圖所示。單擊“選項Options”…

制作鏡像與配置推送阿里云倉庫

一、制作jdk鏡像 1.1、Alpine linux簡介 Alpine Linux是一個輕量級的Linux發行版&#xff0c;專注于安全、簡潔和高效。它采用了musl libc和BusyBox&#xff0c;使得系統資源占用較少&#xff0c;啟動速度較快。 Alpine Linux也提供了一個簡單的包管理工具APK&#xff0c;(注…

【計算機網絡_應用層】協議定制序列化反序列化

文章目錄 1. TCP協議的通信流程2. 應用層協議定制3. 通過“網絡計算器”的實現來實現應用層協議定制和序列化3.1 protocol3.2 序列化和反序列化3.2.1 手寫序列化和反序列化3.2.2 使用Json庫 3.3 數據包讀取3.4 服務端設計3.5 最后的源代碼和運行結果 1. TCP協議的通信流程 在之…

深入分析Android運行時環境ART:原理、特點與優化策略

摘要 隨著移動互聯網的快速發展&#xff0c;智能手機的性能和功能日益強大&#xff0c;其中Android操作系統因其開放性和靈活性而占據主導地位。Android運行時環境&#xff08;ART&#xff09;作為執行應用程序代碼的關鍵組件&#xff0c;在系統性能和用戶體驗方面起著至關重要…

Vue+SpringBoot打造高校學生管理系統

目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 學生管理模塊2.2 學院課程模塊2.3 學生選課模塊2.4 成績管理模塊 三、系統設計3.1 用例設計3.2 數據庫設計3.2.1 學生表3.2.2 學院課程表3.2.3 學生選課表3.2.4 學生成績表 四、系統展示五、核心代碼5.1 查詢課程5.2 新…

DFS剪枝

剪枝 將搜索過程中一些不必要的部分剔除掉&#xff0c;因為搜索過程構成了一棵樹&#xff0c;剔除不必要的部分&#xff0c;就像是在樹上將樹枝剪掉&#xff0c;故名剪枝。 剪枝是回溯法中的一種重要優化手段&#xff0c;方法往往先寫一個暴力搜索&#xff0c;然后找到某些特…

超詳細紅黑樹的模擬實現

前言 有人說設計出AVL樹的的人是個大牛&#xff0c;那寫紅黑樹&#xff08;RBTree&#xff09;的人就是天才&#xff01; 上一篇文章&#xff0c;我們已經學習了AVL樹&#xff0c;牛牛個人認為AVL樹已經夠優秀了&#xff0c;那讓我們一起探究一下&#xff0c;為什么紅黑樹比AV…

鏈表類型題目

文章目錄 簡介鏈表的常用技巧兩數相加原理代碼代碼|| 兩兩交換鏈表中的節點代碼原理 重排鏈表(重要)原理代碼 合并 K 個升序鏈表代碼遞歸代碼 K 個一組翻轉鏈表原理代碼 簡介 大家好,這里是jiantaoyab,這篇文章給大家帶來的是鏈表相關的題目練習和解析,希望大家能相互討論進步 …

[線代]自用大綱

部分內容整理自張宇和網絡 序 題型分布&#xff1a; 題型單題分值題目數量總分值選擇題5315填空題515解答題12112 *一道大題可能用到六部分所有知識 矩陣 性質 k k k倍和乘積行列式 ∣ k A ∣ k n ∣ A ∣ |kA|k^n|A| ∣kA∣kn∣A∣ ∣ A B ∣ ≠ ∣ A ∣ ∣ B ∣ |AB|≠…

DDE圖像增強

DDE&#xff08;Detail and Darkness Enhancement&#xff0c;細節和暗部增強&#xff09;是一種用于增強圖像細節和暗部區域的方法。其原理可以簡要概括如下&#xff1a; 細節增強&#xff1a;在圖像中突出顯示細節信息&#xff0c;使得圖像更加清晰和具有視覺沖擊力。這可以通…

藍橋杯刷題--python-15-二分(進階)

503. 借教室 - AcWing題庫 n,mmap(int,input().split()) class_list(map(int,input().split())) class_[0]class_ d[0] s[0] t[0] for _ in range(m): dj,sj,tjmap(int,input().split()) d.append(dj) s.append(sj) t.append(tj) def check(k): b[0]*(n2) …

如何解決微服務的數據一致性分發問題?

介紹 系統架構微服務化以后,根據微服務獨立數據源的思想,每個微服務一般具有各自獨立的數據源,但是不同微服務之間難免需要通過數據分發來共享一些數據,這個就是微服務的數據分發問題。Netflix/Airbnb等一線互聯網公司的實踐[參考附錄1/2/3]表明,數據一致性分發能力,是構…

在嵌入式設備中用多項式快速計算三角函數和方根

慣性傳感器的傾角計算要用到三角函數. 在 MCS-51, Cortex M0, M3 之類的芯片上編程時, 能使用的資源是非常有限, 通常只有兩位數KB的Flash, 個位數KB的RAM. 如果要使用三角函數和開方就要引入 math.h, 會消耗掉10KB以上的Flash空間. 在很多情況下受硬件資源限制無法使用 math.…

【 10X summary report】怎么看?詳細解讀筆記

報告內容 在開始正式的分析之前&#xff0c;需要查看在對齊和計數過程中生成的任何總結統計信息。下圖是由Cell Ranger工具創建的10X總結報告&#xff0c;在從10X scRNA-seq實驗生成計數矩陣時會生成。 The left half of the report describes sequencing and mapping statist…

賣wordpress網站模板的網站

WP模板牛 http://www.wpniu.com 上面有很多免費wordpress模板資源的網站&#xff0c;除了免費模板&#xff0c;還有付費模板。 My模板(我的模板) http://www.mymoban.com 老牌網站模板資源站&#xff0c;上面有wordpress模板、帝國CMS模板、WooCommerce模板可以直接免費下載…

Linux whois命令教程:查詢域名所有者信息(附案例詳解和注意事項)

Linux whois命令介紹 whois命令是一個用于查詢域名所有者信息的工具。它可以直接從命令行進行查詢&#xff0c;這對于沒有圖形用戶界面的系統或者需要在shell腳本中進行查詢的情況非常有用。 Linux whois命令適用的Linux版本 whois命令在大多數Linux發行版中都可以使用&…

C++之stack

1、stack簡介 stack是實現的一個先進后出&#xff0c;后進先出的容器。它只有一個出口&#xff0c;只能操作最頂端元素。 2、stack庫函數 &#xff08;1&#xff09;push() //向棧壓入一個元素 &#xff08;2&#xff09;pop() //移除棧頂元素 &#xff08;3…

基于springboot+vue的中國陜西民俗網

博主主頁&#xff1a;貓頭鷹源碼 博主簡介&#xff1a;Java領域優質創作者、CSDN博客專家、阿里云專家博主、公司架構師、全網粉絲5萬、專注Java技術領域和畢業設計項目實戰&#xff0c;歡迎高校老師\講師\同行交流合作 ?主要內容&#xff1a;畢業設計(Javaweb項目|小程序|Pyt…

在 Angular 中使用 Renderer2

Renderer2 類 Renderer2 類是 Angular 提供的一個抽象服務&#xff0c;允許在不直接操作 DOM 的情況下操縱應用程序的元素。這是推薦的方法&#xff0c;因為它使得更容易開發可以在沒有 DOM 訪問權限的環境中渲染的應用程序&#xff0c;比如在服務器上、在 Web Worker 中或在原…

Java如何剪切視頻

背景&#xff1a;如何使用Java批量切割視頻 FFmpeg 是一個強大的開源多媒體處理工具&#xff0c;被廣泛應用于音視頻的錄制、轉碼、編輯等方面。它支持幾乎所有主流的音視頻格式&#xff0c;能夠在各種操作系統平臺上運行&#xff0c;包括 Windows、macOS 和 Linux。FFmpeg 提…