進程的基本狀態及轉換和阻塞及掛起的理解【轉】

来源:https://www.cnblogs.com/linhaostudy/archive/2018/12/08/10089701.html
-Advertisement-
Play Games

就緒狀態 :一個進程獲得了除處理機外的一切所需資源,一旦得到處理機即可運行,則稱此進程處於就緒狀態。 執行狀態:當一個進程在處理機上運行時,則稱該進程處於運行狀態。 阻塞狀態:一個進程正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時仃止運行,這時即使把處理機分配給進程也無法運行,故稱該 ...


  • 就緒狀態 :一個進程獲得了除處理機外的一切所需資源,一旦得到處理機即可運行,則稱此進程處於就緒狀態。
  • 執行狀態:當一個進程在處理機上運行時,則稱該進程處於運行狀態。
  • 阻塞狀態:一個進程正在等待某一事件發生(例如請求I/O而等待I/O完成等)而暫時仃止運行,這時即使把處理機分配給進程也無法運行,故稱該進程處於阻塞狀態。
  • 掛起狀態:由於IO的速度慢於CPU的運算速度,經常出現CPU等待I/O的情況。這時OS需要將主存中的進程對換至外存。在進程行為模式中需要增加一個新的掛起(suspend)狀態。當記憶體中所有進程阻塞時,OS可將一進程置為掛起態並交換到外存,再調入另一個進程執行。
  • 新建狀態:進程剛創建,但還不能運行,OS還沒有把它加到可執行進程組中,通常是還沒有載入到主存中的新進程。
  • 退出狀態:OS從可執行進程組中釋放出的進程,或者是因為它自身停止了,或者是因為某種原因被取消。進程不在適合執行,但與作業相關的表和其它信息臨時被OS保留起來,為其他程式提供所需信息。
  • 活躍就緒:指進程在主存並旦可被調度的狀態。
  • 靜止就緒:指進程被對換到輔存時的就緒狀態,是不能被直接調度的狀態,只有當主存中沒有活躍就緒態進程,或者是掛起態進程具有更高的優先順序,系統將把掛起就緒態進程調回主存並轉換為活躍就緒。
  • 活躍阻塞:指進程在主存中。一旦等待的事件產生,便進入活躍就緒狀態。
  • 靜止阻塞:指進程對換到輔存時的阻塞狀態。一旦等待的事件產生,便進入靜止就緒狀態。

進程轉換狀態圖

  • 三種基本狀態轉換圖:

  • 五種基本狀態轉換圖(單掛起):

  • 五種基本狀態轉換圖(雙掛起):

阻塞及掛起的理解

  1. 掛起是一種主動行為,是把一個進程從記憶體轉到外存,而阻塞則是一種被動行為(並不絕對,看個人理解),是在等待事件或資源時任務的表現。對於掛起,其進程所有資源都轉入外存;而阻塞,其進程所有資源依然保存在記憶體中。
  2. 對應掛起的行為是激活,即當沒有活動就緒進程時或靜止就緒隊列裡面有進程優先順序高於活動就緒裡面所有進程,還有就是當一個進程釋放足夠記憶體時,系統會把一個高優先順序阻塞激活。而阻塞卻沒有對應的主動行為來解除,需要其他進程或系統喚醒。
  3. 一個比喻:只有一個鍋,當食材已經準備充分的菜就可以下鍋,這就是執行態;而其他準備好的菜就順序放在一旁,等待下鍋,這就是就緒態;還有的菜準備還不是很充分,例如該切片的菜還沒有切片,還有一些佐料還沒有從冰箱里拿出,這就是I/O操作等待,類似阻塞態;而還有一種情況就是廚房的面積太小了,桌子上放不下那麼多的準備下鍋的菜,於是先將那些還沒有準備好的菜放入冰箱,如果還是放不了那麼多菜,就把那些已經準備好的但沒有下鍋的菜放入冰箱,以免變質,這就是掛起態;當桌子上有位置了,就把菜從冰箱拿出來,這便是激活操作。做好的菜就可以端出廚房,這便是退出態。(PS:這裡我假設冰箱空間很大,也存在那種炒到一半的菜放到一邊的情況,即從執行態到就緒態或阻塞態的情況,這種情況可以類似川菜中先將肉處理一下(去腥等等),然後又從鍋里撈出來,用豆瓣和其他佐料來進行腌制(這裡如果佐料沒有在桌子上就類似進入阻塞態,而如果有就相當於進入就緒態,但是鍋里已經被占用了,需要等待一會兒)至於優先順序的高低,也可類比有些菜是為了其他菜做鋪墊(舉個例子:在川菜裡面,回鍋肉和炒白菜,一般家庭會優先做回鍋肉,因為當做回鍋肉時,會炒出許多豬油,而這些有可以用來炒白菜,這樣的炒白菜不僅好吃,而且也節約了許多油。))

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這是我定義的實體類 對應的資料庫表 映射文件 數據訪問層寫的是插入語句 錯誤: 捕捉到 NHibernate.Exceptions.GenericADOException HResult=-2146232832 Message=could not insert: [DaYou.Yun.Entity. ...
  • 由於本人是Java入門的開發,在C#開發中遇到的問題,在此記錄一下: 1、client端的send方法不管發送出去沒發送出去,總是顯示發送出去。 查資料得知,send方法是將數據發送到緩存區,並不是直接發送到server。 2、connected 方法,總是顯示已連接上。 一直以為connected ...
  • 在測試中經常會遇到請求一些https的url,但又沒有本地證書,這時候可以用下麵的方法忽略警告 ...
  • 這段時間因公司業務需要.net開發且需要用到DevExpress控制項,我自己研究學習了一下,用的是visual studio(2013)和DevExpress(V14.1.4),VS2013的下載安裝就不說,直接進入正題。 DevExpress(V14.1.4)安裝、破解和漢化的程式下載鏈接 鏈接: ...
  • 在 Asp.Net Core 中,我們常常使用 System.Threading.Timer 這個定時器去做一些需要長期在後臺運行的任務,但是這個定時器在某些場合卻不太靈光,而且常常無法控制啟動和停止,我們需要一個穩定的,類似 WebHost 這樣主機級別的任務管理程式,但是又要比 WebHost ... ...
  • 本節重點不講反射機制,而是講lambda表達式樹來替代反射中常用的獲取屬性和方法,來達到相同的效果但卻比反射高效。 每個人都知道,用反射調用一個方法或者對屬性執行SetValue和GetValue操作的時候都會比直接調用慢很多,這其中設計到CLR中內部的處理,不做深究。然而,我們在某些情況下又無法不 ...
  • ...
  • 一、安裝版本詳情 Server: MariaDB Server version: 5.5.60 MariaDB MariaDB Server [root@ln 125 ~] cat /etc/redhat release CentOS Linux release 7.6.1810 (Core) [r ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...