Linux進程狀態補充(10)

文章目錄

  • 前言
  • 一、阻塞
  • 二、掛起
  • 三、運行R
  • 四、休眠D
  • 五、四個重要概念
  • 總結


前言

??上篇內容大家看的云里霧里,這實在是正常不過,因為例如 寫實拷貝 等一些概念的深層原理我還沒有講解,大家不用緊張,我們繼續往下學習就行!!!

??在本篇開始之前,我們先來回顧一下有關 進程 的一些知識點:

  • OS管理的本質是先描述,再組織
  • OS并非直接管理進程 ,而是管理 進程 的 PCB(task_struct)
  • PCB 中有著進程的各種信息,包括:PID、PPID、進程狀態等
  • 我們可以通過函數 getpid() 獲取當前進程的 PID
  • 進程 間存在父子關系,可以通過 fork() 主動創建 子進程
  • 父子進程 相互獨立,共享一份代碼時,具有 寫時拷貝 機制

在這里插入圖片描述


一、阻塞

??先來看看進程狀態圖
在這里插入圖片描述

  • 阻塞 就是 進程 因等待某種條件就緒,而導致的一種不推進狀態
  • 通俗來說,阻塞 就是 進程 卡住了,原因就是缺少資源

??比如在我們日常生活中,常常發生堵車,這就是因為 道路資源 不夠用了,車輛這個 進程 就需要原地等待

那么 進程 需要什么資源呢?

  • 比如 磁盤、網卡、顯卡 等各種外設
  • 假設你現在想在 steam 上下載游戲,當你點擊下載按鈕后提示磁盤空間不足,此時是無法運行 steam下載 這個進程的,因為此 進程 需要等待足夠大的 磁盤資源
  • 此時我們就稱此 進程 為 阻塞 狀態

??一言以蔽之,進程阻塞就是不被調度,原因是 進程 的 task_struct 結構體需要在某種被 OS 管理的資源下排隊

二、掛起

??理解 進程阻塞 后,理解 進程掛起 就比較輕松了

??其定義為:當 CPU 資源緊張時,將 進程 交換至 磁盤 中掛起,此時內存中只有 PCB,所以 掛起 可以看作一種特殊的阻塞狀態

??比如在我們日常生活中,一邊走路一邊玩手機很危險,所以此時我們會將玩手機這個 進程掛起 ,即把手機揣進兜里,然后 專心執行走路 這個 進程

??進程是何種狀態,取決于此進程的PCB在哪里排隊!!! 本質無外乎鏈表的增、刪、查、改!!!

在這里插入圖片描述

三、運行R

??一個程序在運行就表示該 進程 處于 運行 狀態,那么事實真的如此嗎?
在這里插入圖片描述

??可以看到當前的進程狀態為 睡眠 S+
在這里插入圖片描述

注: + 表示當前進程在前臺運行中

原因在于:

  • 運行了,但我們很難捕捉到
  • 根據馮諾依曼體系, printf 也是將內存里面去寫的,相當于顯示器也有自己的緩存,printf 也有自己的 I/O,因為 I/O 的速度很慢,所以大部分時間都在 I/O, 所以我們進程大部分都在等待狀態

四、休眠D

??存在一種特殊睡眠狀態 休眠 D,休眠 又被稱為不可中斷休眠,顧名思義,休眠 D 狀態下的 進程 是無法終止的,kill 指令和 OS都無能為力,只能默默等待 進程阻塞 結束,拿到資源了,進程 才會停止 休眠 D 狀態

??倘若存在 休眠 D 進程長時間運行,那么此時就表示系統離宕機不遠了

??我來畫個示意圖來解釋一下為什么會有這么一個特殊的進程狀態,

在這里插入圖片描述
??情景是 進程A 想將一整天銀行的交易記錄(100w條)永久保存到磁盤里面,進程A把磁盤叫出來,說:我這邊有100w條數據,請你幫我保存到你那邊去唄,而磁盤相對于內存來說是非常慢的,而這個時候進程A就只能阻塞了,就被鏈入到磁盤等待隊列 struct device* devices 中了,而狀態變為S(假設,事實上是D,后面就知道為什么不能了),這個時候進程A就翹腳嗑瓜子了,讓其他進程運行,但是這個時候,OS急沖沖地跑過來,說:我們內存資源已經不足了,你再占用資源我自己都要寄了,覆巢之下,豈有完卵!,我只好把你干掉了。這個時候磁盤發現寫到第80w的時候發現這個時候磁盤也要慢了,只好告訴進程A:趕快告訴用戶,寫入失敗了,趕快返回了錯誤碼。但是這個時候進程A已經被OS干掉了,磁盤只好把數據丟棄了,也就造成了數據的丟失

??數據丟失導致銀行老板把進程A、OS、磁盤叫到辦公室,磁盤委屈道:我就是個臭跑腿的,我已經將數據寫入失敗的可能告訴你了,我跟進程B,進程C都是這樣干的,這不怪我!進程A說:這不怪我,這怪OS把我給干掉了,人在家中坐,鍋從天上來,OS說:這不怪我,我本來就是管理者,我只是在履行保護內存資源的職責!

??很明顯,明察秋毫的我們發現了其實是銀行的問題,定義了一個新的狀態D深度睡眠,用于當 OS 和 磁盤 進行 I/O阻塞 的時候,這就是D狀態的由來

五、四個重要概念

??競爭性: 系統進程數目眾多,而CPU資源只有少量,甚至1個,所以進程之間是具有競爭屬性的。為了高效完成任務,更合理競爭相關資源,便有了優先級。
??獨立性: 多進程運行,需要獨享各種資源,多進程運行期間互不干擾。
??并行: 多個進程在多個CPU下分別同時進行運行,這稱之為并行。
??并發: 多個進程在一個CPU下采用進程切換的方式,在一段時間之內,讓多個進程都得以推進,稱之為并發。

??CPU執行進程代碼,不是把進程代碼執行完畢,才開始執行下一個,而是給每一個進程預分配一個 時間片 ,基于 時間片 ,進行調度輪轉(單CPU下)


總結

??這篇有點水,下篇爭取來個實的!

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

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

相關文章

信息學奧賽一本通 1609:【例 4】Cats Transport | 洛谷 CF311B Cats Transport

【題目鏈接】 ybt 1609:【例 4】Cats Transport 洛谷 CF311B Cats Transport 【題目考點】 1. 動態規劃:斜率優化動規 【解題思路】 解法1:設a點的前綴和 輸入的 d d d序列是從 d 2 d_2 d2?到 d n d_n dn?,共n-1個數字。人…

bluecode-20240913_1_數據解碼

時間限制:C/C 1000MS,其他語言 2000MS 內存限制:C/C 256MB,其他語言 512MB 難度:困難 數據解碼 指定有一段經過編碼的二進制數據,數據由0個或多個"編碼單元"組成。"編碼單元"的編碼方式…

接口自動化進階 —— Pytest全局配置pytest.ini文件詳解!

pytest.ini 是 Pytest 的全局配置文件,用于自定義測試運行的行為和規則。通過配置 pytest.ini,可以避免在命令行中重復輸入參數,提升測試的效率和一致性。 1. 配置文件的位置和格式 位置:pytest.ini 文件通常放在項目的根目錄下。…

ModuleNotFoundError: No module named ‘demjson‘

錯誤 ModuleNotFoundError: No module named demjson 表明 Python 無法在其環境中找到名為 demjson 的模塊。demjson 是一個第三方庫,用于在 Python 中編碼和解碼 JSON 數據。如果你嘗試導入它但遇到了這個錯誤,那很可能是因為你的 Python 環境中沒有安裝…

1、C51單片機(STC8G2K64S4)串口實驗

一、串口1接線圖 1、下面是單片機外接電路圖,P30,P31分別用于RXD和TXD功能引腳 2、我們來查看單片機手冊 串口1需要設置的寄存器 串口1的功能腳配置選擇位,看電路圖選擇的是P3.0,P3.1。 3、串口1:SCON控制寄存器 設置為0x50:0101 0000。&a…

3PL EDI:SA Piper Logistics EDI需求分析

SA Piper Logistics成立于2005年,是一家專注于全球供應鏈管理的第三方物流服務商(3PL),總部位于美國芝加哥。公司以“優化物流效率,重塑供應鏈價值”為使命,提供倉儲管理、運輸規劃、訂單履行及跨境清關等一…

vscode正則表達式使用

小標題 ^\d.\d.\d\s.*$ ^表示匹配字符串的開頭。\d\.\d\.\d表示匹配一到多個數字,接著一個小數點,再接著一到多個數字,然后又一個小數點和一到多個數字,用來匹配類似 “2.1.1” 這樣的標題號部分。\s表示匹配一個空格。.*表示匹配…

力扣.旋轉矩陣Ⅱ

59. 螺旋矩陣 II - 力扣&#xff08;LeetCode&#xff09; 代碼區&#xff1a; class Solution {const int MAX25; public:vector<vector<int>> generateMatrix(int n) {vector<vector<int>> ans;vector<int> hang;int len_nn;int arry[25][25]…

軟件工程面試題(十)

1、OSI七層模型tcp四層模型是什么樣的 OSI七層參考模型 :物理層 、數據鏈路層 、網絡層 、傳輸層、應用層、會話層、表示層 TCP/IP:第一層網絡接口層第二層 第二層??網間層 第三層??傳輸層 第四層??應用層 2、JAVA測試模式(ZZ): 模式(一) Main 模式 模式(二)…

淘寶雙十一大促監控系統開發:實時追蹤爆品數據與流量波動

以下是開發一個淘寶雙十一大促監控系統&#xff0c;以實時追蹤爆品數據與流量波動的詳細步驟及示例代碼&#xff1a; 實現思路 數據獲取&#xff1a;利用淘寶 API 或者爬蟲技術&#xff0c;獲取商品的銷售數據、瀏覽量等信息。數據存儲&#xff1a;將獲取到的數據存儲到數據庫…

高并發金融系統,“可觀測-可追溯-可回滾“的閉環審計體系

一句話總結 在高并發金融系統中&#xff0c;審計方案設計需平衡"觀測粒度"與"系統損耗"&#xff0c;通過雙AOP實現非侵入式采集&#xff0c;三表機制保障操作原子性&#xff0c;最終形成"可觀測-可追溯-可回滾"的閉環體系。 業務痛點與需求 在…

Docker 的實質作用是什么

Docker 的實質作用是什么 目錄 Docker 的實質作用是什么**1. Docker 的實質作用****2. 為什么使用 Docker?****(1)解決環境一致性問題****(2)提升資源利用率****(3)簡化部署與擴展****(4)加速開發與協作****3. 舉例說明****總結**Docker 的實質是容器化平臺,核心作用…

【測試】每日3道面試題 3/29

每日更新&#xff0c;建議關注收藏點贊。 自動化測試中的PO模式 page object model POM 是一個設計模式&#xff0c;在自動化測試中將頁面元素和操作抽象為對象。具體是將每個頁面或頁面一部分封裝為一個類&#xff0c;包含頁面元素和相關操作。 PO 模式不僅適用于 Web 應用的自…

ISIS-4 LSP計算

上一章我們介紹了ISIS的LSDB的形成以及相關實驗 這一章我們來介紹ISIS是怎樣來計算我們的路由的 1、LSDB數據庫 之前我們在ISIS概述里面已經提及到Level-1的路由器設備只會維護Level-1的LSDB Level1-2會維護Level-1以及Level-2的LSDB,Level-2只會維護Level-2的LSDB 2、ATT置…

第7期:生成式AI倫理邊界——當技術撞上道德與法律的防火墻

現實版"黑鏡"事件 某直播平臺主播使用AI換臉技術冒充明星帶貨&#xff0c;當晚銷售額破億。三天后收到法院傳票——這不僅侵犯肖像權&#xff0c;生成的虛假宣傳內容還引發大規模消費投訴。這個案例讓行業意識到&#xff1a;沒有倫理約束的AI&#xff0c;就像沒有剎車…

Vue2 使用 v-if、v-else、v-else-if、v-show 以及 v-has 自定義指令實現條件渲染

提示&#xff1a;渲染就是顯示 文章目錄 前言v-if 的基礎用法v-elsev-else-ifv-show 和 v-if 對比自定義指令 v-hasv-if 和 v-has 結合使用場景完整示例補充說明 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&#xff1a; 在 Vue2 中&#xff0c;可以通過 v-if 和…

【項目合集】只能xx養殖系統,STM32、esp8266、OLED屏幕、dht11、光敏、水位、加熱、風扇

硬件 STM32 主控ESP8266 WIIF 模塊煙霧傳感器dht11 溫濕度傳感器光敏傳傳感器&#xff08;偏暗、亮兩種狀態&#xff09;水位檢測OLED 顯示當前狀態&#xff08;環境數據&#xff09;加熱模塊&#xff08;燈代替&#xff09;風扇模塊電源模塊繼電器&#xff08;控制風扇&#…

Java多線程與高并發專題——Condition 和 wait/notify的關系

引入 上一篇關于Condition&#xff0c;我們對Condition有了進一步了解&#xff0c;在之前生產/消費者模式一文&#xff0c;我們講過如何用 Condition 和 wait/notify 來實現生產者/消費者模式&#xff0c;其中的精髓就在于用Condition 和 wait/notify 來實現簡易版阻塞隊列&am…

29_項目

目錄 http.js 1、先注冊賬號 register.html 2、再登錄 login.html 3、首頁 index.html 4 詳情 details.html cart.html css index.css register.css details.css 演示 進階 http.js let baseURL "http://localhost:8888"; let resgiterApi baseURL &…

Next.js 項目生產構建優化

Next.js 項目生產構建優化的完整教程&#xff0c;涵蓋配置、工具鏈和性能調優技巧&#xff0c;助你顯著加速 npm run build&#xff1a; 注&#xff1a;學習階段請先測試環境使用&#xff01; 文章目錄 [toc]一、基礎優化1. 確保使用最新版本2. 清理無用依賴和代碼3. 配置 nex…