操作系統原理之進程調度與死鎖(三)

来源:https://www.cnblogs.com/jalja/archive/2019/08/29/11432035.html
-Advertisement-
Play Games

先來先服務(FCFS)調度演算法是一種最簡單的調度演算法,該演算法既可用於作業調度,也可用於進程調度。 當在作業調度中採用該演算法時,每次調度都是從後備作業隊列中選擇一個或多個最先進入該隊列的作業,將它們調入記憶體,為它們分配資源、創建進程,然後放入就緒隊列 ...


一、進程調度的功能與時機

進程調度:進程調度的功能由操作系統的進程調度程式完成

具體任務:按照某種策略和演算法從就緒態進程中為當前空閑的CPU選擇在其上運行的新進程。

進程調度的時機:進程正常或異常結束、進程阻塞、有更高優先順序進程到來、時間⽚用完時都會導致進程調度。


二、進程調度演算法

什麼樣的演算法是好的演算法?

  • 周轉時間短:作業從提交給系統開始,到作業完成,花費時間短

         

               

 

  • 響應時間快:從用戶提交作業開始,到系統開始響應,花費時間短
  • 截止時間的保證:保證作業在“開始截止時間”前開始,在“完成截止時間”前完成
  • 系統吞吐量高:系統在單位時間內完成的作業量多
  • 處理機利用率好:CPU的利用率儘可能高

進程調度演算法:

先來先服務調度演算法(FCFS) :從就緒隊列的隊首選擇最先到達就緒隊列的進程,為該進程分配CPU

周轉時間=進程的周轉時間

系統平均周轉時間=所有進程的周轉時間之和,然後除以進程個數

 帶全平均周轉時間w=每個進程的周轉時間除以該進程的服務時間,然後相加,最後除以進程個數

缺點:服務時間段的進程等待時間較長,整個周轉時間較長。

 

短進程優先調度演算法(SPF):從就緒隊列中選擇估計運行時間最短的進程,為該進程分配CPU

 優點 :與FCFS演算法相比,短進程優先演算法能有效降低進程的平均等待時間,提高系統吞吐量

  缺點: 對長進程不利;不能保證緊迫進程的處理;進程長短由用戶估計,不一定准確。


優先權調度演算法:統將CPU分配給就緒隊列中優先權最高的進程 

  • 非搶占式:運行期間,有更高優先權的進程到來,也不能剝奪CPU
  • 搶占式:運行期間,有更高優先權的進程到來,就可以搶占CPU

優先權類型

  • 靜態優先權:創建時確定,運行期間保持不變 
  • 動態優先權:創建時確定,隨著進程推進或等待時間增加而改變

該演算法存在的問題:無窮阻塞(饑餓問題);解決的方案(老化技術):增加等待時間很長的進程的優先權 

時間片輪轉調度演算法(RR):

系統將所有就緒進程按先來先服務的原則,排成一個隊列,每次調度時把CPU分給隊首進程,並令其執行一個時間片。當時間片用完時,調度程式終止當前進程的執行,並將它送到就緒隊列的隊尾。

 

 

1、時間片⼤小確定時

T=Nq       T:系統響應時間        N:進程數量     q:時間片

  • 系統對響應時間的要求:響應時間要求越短,時間片越小
  • 就緒隊列中進程的數目:進程數量越多,時間片越小
  • 系統的處理能力:處理能力越好,時間片越小

【例】進程A、B、C、D需要運行的時間分別為20ms、10 ms、15 ms、5 ms,均在0時刻到達。到達的先後次序為A、B、C、D。如果時間片分別為1 ms和5ms,計算各個進程的帶權周轉時間和平均帶權周轉時間。

 

 

 


多級隊列調度演算法:將就緒隊列分成多個獨⽴隊列,每個隊列有自己的調度演算法

優先順序高隊列  p1 、p2、 p3 、p4     

優先順序低隊列  p5、 p6 、p7             


多級反饋隊列調度演算法建立多個優先權不同的就緒隊列,每個隊列有大小不同的時間片

 隊列優先權越高,時間片越短

 隊列優先權越低,時間片越長

 

 三、實時系統中的調度

實現實時調度的基本條件:

1、提供必要的調度信息:就緒時間 、開始截止時間 、完成截止時間、處理時間、 資源要求 、優先順序

2、系統處理能力強:假定系統中有m個周期性的實時進程,它們的處理時間可表示為Ci,周期時間表示為Pi,則在單處理機情況下,必須滿足如下公式的限制條件:

 

 

3、採用搶占式調度機制(使用最廣泛的方式)

4、具有快速切換機制:   對外部中斷的快速響應能力    快速的進程切換能力

 

常用的實時調度演算法

 1、最早截止時間優先演算法EDF(淘寶&京東):開始截止時間越早,進程優先順序越高,越優先獲得CPU

 

 2、最低鬆弛度優先演算法LLF:根據實時進程的緊迫程度來進行調度的演算法

四、進程切換

進程切換的含義:當前正在執行的進程成為被替換進程,讓出其所使⽤的CPU,以運行被進程調度程式選中的新進程。

進程切換的步驟:

  • 保存包括程式計數器和其他寄存器在內的CPU上下文環境
  • 更新被替換進程的進程式控制制塊
  • 修改進程狀態,把執行態改為就緒態或阻塞態
  • 將被替換進程的進程式控制制塊移到就緒隊列或阻塞隊列
  • 執行通過進程調度程式選擇的新進程,並更新該進程的進程式控制制塊
  • 更新記憶體管理的數據結構
  • 恢復被調度程式選中的進程的硬體上下文

五、 多處理器調度

1、多處理器系統的類型:

  • 緊密耦合  共用主存儲器和I/O設備
  • 鬆弛耦合  有各自的存儲器和I/O設備
  • 對稱  處理單元功能和結構相同
  • 非對稱  有多種類型的處理單元  一個主處理器,多個從處理器

2、多處理器系統的進程分配方式:
     對稱系統分配方式:
        靜態分配:就緒隊列的進程只能在與就緒隊列對應的處理器上運行。

     動態分配:進程隨機地被分配到當時處於空閑狀態的某一處理器上執行。

    ⾮對稱系統分配方式:主-從式分配方式(大多採用)

3、進程(線程)的調度方式

⾃調度   最常用最簡單的方式:採⽤自調度的系統中設置有一個公共的就緒隊列,任何一個空閑的處理器都可以自行從該就緒隊列中選取一個進程或者一個線程運行。


 

 

 

 

 成組調度

 

 

 

專⽤處理器分配

六、 死鎖

死鎖的定義:由於多個進程競爭共用資源而引起的進程不能向前推進的僵死狀態稱為死鎖

產生死鎖的原因:競爭共用資源且分配資源的順序不當

1、產生死鎖的必要條件

  • 互斥條件:只有一個資源,要麼你用,要麼我用
  • 請求和保持條件:必須保持自己的條件,不能相讓
  • 不剝奪條件:不能搶占他人資源
  • 環路等待條件:

2、處理死鎖的基本方法

  • 死鎖的預防   通過破壞死鎖的產生條件來保證不發生死鎖
  • 死鎖的檢測        檢測當前系統是否出現死鎖
  • 死鎖的避免        通過演算法合理分配資源來保證不發生死鎖
  • 死鎖的解除        檢測到系統有死鎖後進行解除

處理死鎖的基本方法有:預防死鎖、避免死鎖、檢測並解除死鎖和忽略死鎖問題

 

###############################處理死鎖的基本方法詳解###########################

1、死鎖的預防

 

 

 2、死鎖的避免

 

 

 例如:

 

 

 

銀行家演算法:一個進程提出資源請求後,系統先進行資源的試分配,分配後檢測系統是否安全。銀行家演算法的實質是避免系統進入不安全狀態。

例如:5個進程p0、p1、p2、p3、p4 3種類型的資源A、B、C 

 

 

 

 

3、死鎖的檢測

何時調用檢測演算法

  • 死鎖可能發生的頻率 ,發生頻率很高時需要檢測
  • 死鎖發生時受影響的進程數量,受影響的進程數量較多

資源分配圖

 

 系統初始化時分配給p1兩個資源,p1又主動請求一個資源

系統初始化時分配給p2兩個資源,p2又主動請求一個資源

 

死鎖定理
  用於檢測系統所處的資源分配狀態是否為死鎖狀態

      S為死鎖狀態的充分條件是當且僅當S狀態的資源分配圖是不可完全簡化的,即資源分配圖是不是可以把申請資源的線全部消掉。

 

 4、死鎖的解除

解除途徑

  • 進程終止   終止所有死鎖進程;一次只終止一個處於死鎖的進程,直到死鎖解除
  • 資源搶占   逐步從進程中搶占資源給其他進程使用,直到死鎖被打破為止

 


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

-Advertisement-
Play Games
更多相關文章
  • 前提 入行已經7,8年了,一直想做一套漂亮點的自定義控制項,於是就有了本系列文章。 GitHub:https://github.com/kwwwvagaa/NetWinformControl 碼雲:https://gitee.com/kwwwvagaa/net_winform_custom_contr ...
  • 每次寫while(true)的時候會不會心虛? 特別邏輯稍微複雜一點 ...
  • 場景 Winforn中設置ZedGraph曲線圖的屬性、坐標軸屬性、刻度屬性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100112573 效果 實現 添加兩條Y軸 ZedGraph是預設帶2條Y軸的,所以其自帶YAxis屬 ...
  • c# 非同步( Async ) 不是多線程 c# 非同步( Async ) 不是多線程 誤解 async 在調試 xxxxAsync() 方法的時候,常常會看到調試器界面中會多出一些線程,直覺上誤認為 Async 冠名的函數是多線程。 對於 StringReader 中的 ReadAsync() 方法的 ...
  • 場景 Winforn中設置ZedGraph曲線圖的屬性、坐標軸屬性、刻度屬性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100112573 在上面實現曲線相關屬性的設置的基礎上,實現的效果如下: 什麼是曲線標簽,就是上圖中標 ...
  • 場景 Winforn中設置ZedGraph曲線圖的屬性、坐標軸屬性、刻度屬性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100112573 在上面實現曲線相關屬性的設置的基礎上,實現的字體效果如下: 實現效果參照原文。 現在 ...
  • 當我們用很多服務時,各個服務間的調用關係是怎麼樣的?各個服務單調用的順序\時間性能怎麼樣?服務出錯了,到底是哪個服務引起的?這些問題我們用什麼方案解決呢,以前的方式是各個系統自己單獨做日誌,出了問題從暴出問題的服務開始一個一個服務的排查,耗時耗力,有些日誌不全的,還不一定查得出來。好在現在有Skyw ...
  • 1. 程式和進程 什麼是程式?什麼是進程? 程式是電腦存儲系統中的數據文件,如源代碼程式和可執行程式 進程是程式關於某個數據集合的一次運行活動,是程式執行後得到的一個實體 在當代操作系統中,進程是資源分配的基本單位 程式和進程有什麼聯繫? 沒有程式就沒有進程;但有了程式,未必就會有進程,如程式不運 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...