Linux 進程概念補充 (自用)

進程概念

  • 內核
  • 進程
  • 進程狀態
  • 內存泄漏
  • 進程調度。
  • Linux真實調度算法
  • 環境變量

內核

狹義上的操作系統指的是 內核就是進程管理進程調度,文件系統等等。
廣義上的操作系統其實在外殼指令這些。封裝了系統調用的東西。

進程

課本概念程序的一個基本實例
內核觀點,承擔分配資源的實體。
我們可以理解為所謂進程就是PCB+加載到內存的代碼和數據。

管理就得先描述再組織。Linux下的PCB就是task_struct。

我們可以通過指令ps axj|head -1

ls /proc (內存級的文件系統)

在這里插入圖片描述
cwd -> cwd 表示進程的 ?當前工作目錄
exe -> 表示進程執行的 ?可執行文件路徑,即進程是通過哪個二進制文件啟動的

bash就是一個死循環的進程

fork()創建子進程,如何理解fork調用一次返回兩次
一個函數通常在執行到return語句之前,函數的工作基本完成了。
我們認為在fork函數內部執行到return之前,我們已經創建了子進程。父子進程同時return

進程狀態

進程狀態實際就是task struct中的一個整數。
有運行阻塞掛起。
運行就是進程鏈入到運行隊列
阻塞就是進程鏈入到阻塞隊列中

理解Linux內核鏈表的話題,
Linux的PCB,封裝一個雙向鏈表的結構體。
封裝了一個previous指針和一個next指針。
PCB中可以存在多個這樣的結構體
第一個head我們放在這個調度隊列中,第二個放在在等待隊列中,第三個再放入其他。
這樣就可以將一個進程鏈入到不同的數據結構當中。可能有的人會想,我們就可以用offset函數計算出偏移量

如何管理硬件?管理硬件先描述再組織,就是我們有個struct device的。結構體里面封裝了這個。ID標識符,然后status表示狀態,然后task struck wait_queen,

如果說進程所就緒的,所需要的資源未就緒,我們就把它列入到特定硬件的阻塞隊列中,如果如果硬件那個硬件就去了,我們就在那再鏈回到運行隊列中。

事實上我們察覺不了,其實是內存中的代碼和數據掛回到磁盤中但是我們保留它PCB的結構體

掛起就是掛到外設或者說將他放到運行隊列的末端。

運行在在unix,Linux下表現的就是偶爾加或者說r狀態二加是前臺,r是后臺。
S就是阻塞狀態,然后也就可中斷睡眠,淺睡眠。就是然后操作系統可以自自主的殺死這個進程。

具體狀態
R(后臺)和R+(前臺)運行

S(阻塞) 可中斷休眠(操作系統可自主殺死該進程)
t(暫停) debug下
T(暫停) Ctrl+Z
這個是Linux下的特有的狀態,這個只是一種操作系統止損的行為。這個進程是不是真要殺死?但操作系統只是懷疑這個進程有問題,所以就暫停住他。

D就是不可中斷狀態。因為如果說我們進行大量的這個寫入,但是如果說進程被殺死,用戶無法得知,那數據就會直接丟失,為此我們需要一個不可被擊殺的狀態,但其實這個狀態是很少見的。只要做存儲和IO的人才知道

Z狀態就是僵尸狀態,僵尸進程這個東西是非常重要的,如果我們不對僵尸進程進行處理的話,那就會造成這個內存泄露,父進程不管僵尸進程就會一直維護導致內存泄漏。

內存泄漏

常駐內存的進程(死循環)才會有內存泄漏

如果子進程退出之前,父進程先現在死亡了,那么子進程就會托管給父進程?

進程調度。

我們要理解到首先我們談兩個概念,優先級和權限。優先級是指先后順序,權限是能否得到我們只有在具有訪問的權限的情況下才能談優先級的概念。

我來講一下nice值,值越低,優先級越高。但其實nice值是有一定范圍的即優先級有一定范圍,否則會導致進程饑餓,

并發是多個進程。單哥CPU快速切換,也就是分時系統。
并行就是多個進程。多個CPU。

進程會調度。
哪怕該進程是死循環也會調度
保存:將寄存器中的內容保存到當前進程的PCB當中
恢復上下文:當前進程的PCB當中的內容恢復到寄存器當中

我要要意識到空間一份,內容多份!!!

Linux真實調度算法

在這里插入圖片描述

nr_active表明多少個進程
bitmap[5],0到99實時優先級不考慮,100-139分時我們要考慮的優先級。通過位圖我們就能O(1)地得出當前優先級下隊列是否有進程
queue哈希桶,哈希函數X-60+(140-40)。
X是進程優先級,進程優先級范圍是[60,99]

當前進程執行完之后,并不是直接列入到當前隊列的最末端因為這樣的話一個優先級高的死循環進程,我們永遠無法到達到下一優先級隊列當中。因此我們將它列入到過期隊列當中。隨著時間的發展活躍隊列的進程越來越少,過期隊列的進程越來越多。最后當活躍隊列的進程為零時,我們將活躍隊列和過期隊列的指針交換(O(1))。又得到了一個充滿進程的活躍隊列和一個空的過期隊列。

環境變量

命令行參數:實現不同程序子功能的方法
int main(int argc,char* argv[])

環境變量從哪來?
配置文件里來

.bash_profile
.bashrc(在這里面添加PATH)

su USER變
su - 重新登入

環境變量Key=Value的形式
PWD(當前路徑)
OLDPWD(上次路徑)

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

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

相關文章

【dify實戰】agent結合deepseek實現基于自然語言的數據庫問答、Echarts可視化展示、Excel報表下載

使用dify agent實現數據庫智能問答,echarts可視化展示,excel報表下載 觀看視頻,您將學會 在dify下如何快速的構建一個agent,來完成數據分析工作;如何在AI的回復中展示可視化的圖表;如何在AI 的回復中加入E…

macos下 ~/.zshrc~ 和 ~/.zshrc

macos下 ~/.zshrc~ 和 ~/.zshrc ~/.zshrc通常是備份文件或臨時文件,可能由編輯器(如vim)創建,通常可以安全刪除,不會影響系統運行。 在Mac下,這種帶~后綴的備份文件通常是由以下情況產生: 常…

位運算---總結

位運算 基礎 1. & 運算符 : 有 0 就是 0 2. | 運算符 : 有 1 就是 1 3. ^ 運算符 : 相同為0 相異為1 and 無進位相加位運算的優選級 不用在意優先級,能加括號就加括號給一個數 n ,確定它的二進制位中第 x 位是 0 還是 1? 規定: 題中所說的第x位指:int 在32位機器下4個…

Java SpringBoot的自定義配置

一,一個類多個屬性的情況 application.properties配置文件寫法 my.config.ip127.0.0.1 my.config.port8080自定義配置類:MyTestConfig import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.context.properties…

Matlab FCM模糊聚類

1、內容簡介 Matlab 211-FCM模糊聚類 可以交流、咨詢、答疑 2、內容說明 略 3、仿真分析 略 4、參考論文 略

C++項目 —— 基于多設計模式下的同步異步日志系統(4)(雙緩沖區異步任務處理器(AsyncLooper)設計)

C項目 —— 基于多設計模式下的同步&異步日志系統(4)(雙緩沖區異步任務處理器(AsyncLooper)設計) 異步線程什么是異步線程?C 異步線程簡單例子代碼解釋程序輸出關鍵點總結擴展:使…

C# 使用 BinaryFormatter 和相關類型時的反序列化風險

C# 使用 BinaryFormatter 和相關類型時的反序列化風險 由來:在項目使用.NET Reactor 混淆 C# 的序列化和反序列化發現存在的問題,讀取文件時,轉化為對應的類數據有時候為空,所以就在網上搜索了相關知識,在此做個筆記以…

OpenCv高階(四)——角點檢測

一、角點檢測 在計算機視覺中,角點檢測是識別圖像中局部區域(角點)的關鍵技術,這些區域通常是兩條或多條邊緣的交點,具有豐富的結構信息,常用于圖像匹配、跟蹤、三維重建等任務。 Harris角點檢測算法是一…

Conda 入門指令教程

Conda 入門指令教程 Conda 是一個強大的包和環境管理工具,廣泛應用于數據科學和機器學習項目中。本文將介紹 Conda 的常用指令,幫助你快速上手。 1. Conda 基礎操作 查看 Conda 版本 conda --version顯示當前安裝的 Conda 版本。 更新 Conda conda…

Unity ShaderLab引用HLSL文件找不到其中函數

在寫Unity Shader的過程中,常常需要將方法封裝到HLSL文件中,今天遇到一個這樣的報錯, 明明hlsl文件路徑引用沒問題,卻引用不到方法 并且將分散文件中的函數復制過來一切正常,最終定位到HLSL的預編譯指令中 這指令的…

uniapp上傳圖片時(可選微信頭像、相冊、拍照)

參考文獻&#xff1a;微信小程序登錄——頭像_onchooseavatar-CSDN博客 <button open-type"chooseAvatar" chooseavatar"onChooseAvatar"> </button>onChooseAvatar(e) {uni.showLoading({title: 上傳中...,mask: true});uni.uploadFile({url…

單元測試的一般步驟

Qt Test Qt Test 是 Qt 開發人員發布的一個單元測試框架&#xff0c;用于測試基于 Qt 框架的應用程序或庫。它提供了單元測試框架中常見的所有功能以及用于測試圖形用戶界面的擴展。 1.自動化測試包絡ui測試>接口測試>單元測試&#xff1b;現問如何使用Qt進行單元測試&…

【Matlab】中國沿岸潮灘寬度和坡度分布

【Matlab】中國沿岸潮灘寬度和坡度分布 參考文獻見最后或者閱讀原文&#xff01; 中國沿岸潮灘寬度和坡度分布: figure 1 a 潮灘寬度分布。b 潮灘坡度分布。 圖中標注了中國沿海各省&#xff0c;分別為遼寧&#xff08;LN&#xff09;、河北&#xff08;HB&#xff09;、山東&…

理解.NET Core中的配置Configuration

什么是配置 .NET中的配置&#xff0c;本質上就是key-value鍵值對&#xff0c;并且key和value都是字符串類型。 在.NET中提供了多種配置提供程序來對不同的配置進行讀取、寫入、重載等操作&#xff0c;這里我們以為.NET 的源碼項目為例&#xff0c;來看下.NET中的配置主要是有…

windows服務器及網絡:論如何安裝(虛擬機)

今天我要介紹的是&#xff1a;在Windows中對于安裝系統&#xff08;虛擬機的步驟以及相關的安裝事宜&#xff09;&#xff0c;事不宜遲&#xff0c;讓我們來看看系統安裝&#xff08;虛擬機&#xff09;是怎么操作的&#xff1a; 對現在來說&#xff0c;安裝電腦系統已經是非常…

shardingsphere-jdbc集成Seata分布式事務

1、導入相關依賴 <!-- shardingsphere-jdbc --><dependency><groupId>org.apache.shardingsphere</groupId><artifactId>shardingsphere-jdbc</artifactId><version>5.5.1</version></dependency><!-- shardingspher…

05-DevOps-Jenkins自動拉取構建代碼

新建Gitlab倉庫 先在Gitab上創建一個代碼倉庫&#xff0c;選擇創建空白項目 安裝說明進行填寫&#xff0c;然后點擊創建項目 創建好的倉庫是空的&#xff0c;什么都沒有 新建一個springboot項目&#xff0c;用于代碼上傳使用。 只是為了測試代碼上傳功能&#xff0c;所以代碼…

C#核心(24)結構體和類的區別,抽象類和接口的區別(面試常問)

前言 隨著上一節我們對StringBulider的講解落下帷幕&#xff0c;c#核心的知識點我們也即將告一段落,我們講完了面向對象要用的三大特性&#xff08;封裝&#xff0c;繼承&#xff0c;多態&#xff09;和七大原則。期中自然也不乏一些小的散的碎的的知識點。 今天我們要講的也…

HTMLCSS實現異環網站,期末web作業

本網站是我在學習前端時敲得&#xff0c;僅供學習使用。 這段代碼是一個完整的 HTML 網頁項目&#xff0c;包含 HTML、CSS 和 JavaScript 部分&#xff0c;用于構建一個名為 “異環” 的網頁。網頁具備頭部導航欄、主體視頻展示、圖片交互元素、音樂播放控制、視頻彈窗播放以及…

Oracle表的別名不能用as,列的別名可以用as

在 Oracle 數據庫中&#xff0c;?表的別名?和?列的別名?在使用 AS 關鍵字時確實有不同規則&#xff0c;以下是詳細說明&#xff1a; 1. 表的別名&#xff08;Table Alias&#xff09;? ?不支持 AS 關鍵字?&#xff0c;直接跟在表名后即可。?語法示例?&#xff1a; S…