作業調度算法(含詳細計算過程)和進程調度算法淺析

一.作業調度

作業調度算法需要知道以下公式

周轉時間=完成時間 - 到達時間

帶權周轉時間=周轉時間/運行時間

注:帶權周轉時間越大,作業(或進程)越短;帶權周轉時間越小,作業(或進程)越長。帶權周轉時間越小越好

平均周轉時間=作業周轉總時間/作業個數;

平均帶權周轉時間=帶權周轉總時間/作業個數

同時,作業調度算法會涉及一個概念:

饑餓:

作業饑餓(Job Starvation)或被餓死(Starvation)就是一個或多個低優先級的作業無法獲得系統資源,無法得到執行的機會,從而長時間處于等待狀態的情況。這種情況下,這些作業就會被餓死或者饑餓,因為它們無法得到所需的系統資源而無法完成執行。
?

看如下例子:

1.FCFS(先來先服務算法)

誰先到達,誰就先運行,所以作業運行順序為1->2->3->4

第一個作業完成后,第二個作業才能開始運行,所以第二個作業開始的時間是10:00

以此類推得到:

先來先服務算法的特點

先來先服務算法實現簡單,但是可以看到排在長作業后面的短作業需要等待很長時間,對短作業來說用戶體驗不好。

是否導致饑餓:此算法較為公平,不會導致饑餓

2.SJF(短作業優先調度算法)

誰的運行時間最短,誰就先運行

首先也從第一個開始,因為2,3,4都沒有到達

第一個的完成時間是10:00,這時候2,3,4都到達了,但是作業3的運行時間最短,所以接下來運行作業3

作業4的運行時間最短,所以接下來運行作業4,以此類推,最終的執行順序為:1->3->4->2

SJF算法的特點

短作業優先算法擁有“最短的”平均等待時間和平均周轉時間

是否導致饑餓:此算法會導致饑餓,如果有源源不斷的短作業進來,可能使長作業長時間得不到服務。如果一直得不到服務,則稱為“餓死”。

注:在實際情況下,作業的運行時間往往是由用戶提供的估計值,并不一定真實準確。這意味著在實際應用中,我們可能無法完全實現真正的短作業優先。

3.HRRF(高響應比優先算法)

(等待時間+運行時間)/運行時間

注:較高的響應比意味著作業等待時間相對較短,或者作業的服務時間相對較長,這可以確保作業盡快得到響應并完成。因此,響應比越高通常表示作業具有更好的調度優先級

從作業1開始:

若下一個執行的作業為作業2,那么響應比就是:(10:00-8:30)+40/40=13/4

若下一個執行的作業為作業3,那么響應比就是:(10:00-9:00)+25/25=85/25

若下一個執行的作業為作業4,那么響應比就是:(10:00-9:30)+30/30=2

因為85/25>13/4>2,下一個執行的作業是作業3

執行完后,要重新計算高響應比,響應比最高的運行,得到

若下一個執行的作業為作業2:(10:25-8:30)+40/40=155/40=3.875

若下一個執行的作業為作業4:(10:25-9:30)+30/30=85/30=2.8333...

所以下一個執行的作業為作業2,則最終執行的順序是:1->3->2->4

高響應比優先算法的特點

綜合考慮了等待時間和運行時間(要求服務時間)
等待時間相同時,要求服務時間短的優先(SJF 的優點)
要求服務時間相同時,等待時間長的優先(FCFS 的優點)
對于長作業來說,隨著等待時間越來越久,其響應比也會越來越大,從而避免了長作業饑餓的問題。

二.進程調度

以上的作業調度,我沒有提到進程二字,就是怕大家混淆起來,進程調度和作業調度是兩個不同的調度方法:

1、作業調度
作業調度又稱為高級調度,頻度較低。其主要工作是將位于外存后備隊列中的某個(或某幾個)作業調入內存,排在就緒隊列上。注意了,這個時候僅僅是將作業調入內存,并為作業創建進程、分配資源,此時進程處于就緒態,并沒有執行。


2、進程調度
進程調度又稱為低級調度,是最基本的、頻度最高的調度方式。其主要任務是從就緒隊列中選取一個(或幾個)進程,并分配處理機的過程,這時候才可以理解為“執行”。


3、區別
作業調度和進程調度最主要的區別在于,前者是為作業建立進程的過程,是將作業由外存調入內存的過程;而后者整個過程并沒有跑出內存的范圍,是將就緒態的進程變為運行態的過程。

進程調度也有饑餓的概念,同時進程調度中還有一個重要的概念:

搶占式/非搶占式:

搶占式調度:
?搶占式調度是指操作系統允許正在運行的進程被強制中斷,以便讓更高優先級的進程獲得CPU資源并開始運行。
?在搶占式調度中,操作系統會定期檢查所有正在運行的進程的優先級,并且如果有更高優先級的進程出現,操作系統會立即中斷當前進程的執行,將CPU資源分配給更高優先級的進程。
?例如,在搶占式調度中,當一個進程正在執行一個關鍵任務時,如果有更高優先級的進程需要運行,操作系統會立即中斷當前進程的執行,并將CPU資源分配給更高優先級的進程。

非搶占式調度:

?非搶占式調度是指一旦一個進程獲得處理器,它就會一直運行直到完成或者自愿讓出CPU。
?在非搶占式調度中,高優先級的進程必須等待當前正在運行的進程結束或者主動讓出CPU后,才能獲得CPU資源并開始運行
?例如,在非搶占式調度中,當一個進程正在執行一個關鍵任務時,其他高優先級的進程需要等待該進程完成或者主動讓出CPU,才能獲得CPU資源并開始執行。

正因為進程調度有這兩個性質,所以除了擁有作業調度的三種算法(FCFS,SJF,HRRF),還有其他常見的算法:

1.SRTF(最短剩余時間優先調度算法)

SRTF與SJF最大的區別就是其是搶占式的算法。
運行原理
:每當有進程加入就緒隊列改變時就需要調度,如果新到達的進程剩余時間比當前運行的進程剩余時間更短,則由新進程搶占處理機,當前運行進程重新回到就緒隊列等待下一次調度。

2.RR(時間片輪轉調度算法)

算法思想:公平地、輪流地為各個進程服務,讓每個進程在一定時間間隔內都可以得到響應。
調度程序每次把CPU分配給就緒隊列首進程/線程使用一個時間間隔(稱為時間片),就緒隊列中的每個進程/線程輪流運行一個時間片。

算法規則:按照各進程到達就緒隊列的順序,輪流讓各個進程執行一個時間片(每次選擇的都是排在就緒隊列隊頭的進程)。若進程未在一個時間片內執行完,則剝奪處理機,將進程重新放到就緒隊列隊尾重新排隊。
時間片的選取:時間片大小的確定要從進程個數、切換開銷、系統效率和響應時間等方面考慮。
常用輪轉法:
① 最常用的輪轉法是等時間片輪轉法,每個進程輪流運行相同時間片。
② 改進的輪轉法對于不同的進程分配不同的時間片,時間片的長短可以動態修改。

是否搶占式:搶占式

是否會產生饑餓:不會

優點:公平,響應快,適用于分時操作系統。
缺點:由于高頻率的進程切換,因此有一定開銷;不區分任務的緊急性。

對于時間片輪轉調度算法的實現,建議觀看如下視頻:

RR時間片輪轉調度算法 ~相同到達時間_嗶哩嗶哩_bilibili

RR時間片輪轉調度算法~不同到達時間_嗶哩嗶哩_bilibili

時間片太大或太小
① 如果時間片太大,使得每個進程都可以在一個時間片內就完成,則時間片輪轉調度算法退化為先來先服務調度算法,并且會增大進程的響應時間。
② 如果時間片太小,進程調度、切換是有時間代價的,會導致進程切換過于頻繁,系統會花大量的時間來處理進程切換,從而導致實際用于進程執行的時間比例減小。

3.PSA(優先級調度算法)

算法思想:根據任務的緊急程度來決定處理順序。
算法規則:根據確定的優先級選取進程/線程,每次總是選擇就緒隊列中優先級最高者運行。
用戶進程/線程優先級的規定者有兩種:
用戶:用戶自己提出優先級,稱為外部指定法。優先級越高,費用越高。
系統:由系統綜合考慮有關因素來確定用戶進程/線程的優先級,稱為內部指定法。
進程/線程優先級的確定方式:
根據優先級是否隨時間而變,進程/線程優先級的確定有靜態和動態兩種方式:
靜態優先級:在進程/線程創建時確定,此后不再改變。優先級主要由進程類型、資源需求、時間需求和用戶需求決定。
優點:比較簡單,開銷小。
缺點:不夠公平不太靈活,可能出現優先級低的作業/進程長時間得不到調度的情況。
動態優先級:隨時間而變,基本原則是:
a. 正在運行的進程/線程隨著占有CPU時間的增加優先級逐漸降低;
b. 就緒隊列中等待CPU的進程/線程隨著等待時間增加優先級逐漸提高。
優點:公平性好,靈活,資源利用率高。
缺點:需要花費比較多的執行程序時間,因而花費的系統開銷比較大。

是否可搶占:搶占式,非搶占式都有。

是否導致饑餓:會
若源源不斷地有高優先級進程到來,則可能導致饑餓。
區別在于:非搶占式只需在進程主動放棄處理機時進行調度即可,而搶占式還需在就緒隊列變化時,檢查是否發生搶占。
優點:用優先級區分緊急程度、重要程度,適用于實時操作系統。可靈活地調整對各種作業/進程的偏好程度。
缺點:若源源不斷地有高優先級進程到來,則可能導致饑餓。

優先級調度算法:

速通操作系統優先級調度算法_嗶哩嗶哩_bilibili

4. MLFQ(多級反饋隊列調度算法)

算法思想:對其他調度算法的折中權衡。
算法規則:
1、建立多級就緒進程隊列,各級隊列優先級從高到低,時間片從小到大。每個隊列賦予不同優先級,較高優先級隊列一般分配給較短的時間片。

2、新進程到達時先進入第1級隊列,按先來先服務原則排隊等待被分配時間片,若用完時間片進程還未結束,則進程進入下一級隊列隊尾;若此時已經在最下級的隊列,則重新放回該隊列隊尾。

3、處理器調度每次先從高優先級就緒隊列中選取可占有處理器的進程,只有在選不到時,才從較低優先級就緒隊列中選取進程。即只有第k級隊列為空時,才會為k+1級隊頭的進程分配時間片。

4、任務可以根據自身的行為(如CPU使用時間、等待時間等)在不同的隊列之間移動,實現動態優先級的調整。

是否可搶占:搶占式
在k級隊列的進程運行過程中,若更上級的隊列(1~k-1級)中進入了一個新進程,則由于新進程處于優先級更高的隊列中,因此新進程會搶占處理機,原來運行的進程放回k級隊列隊尾。

是否導致饑餓:會
優點:對其他調度算法的折中權衡。
對各類進程相對公平(FCFS的優點);
短進程只用較少的世界就可完成(SPF的優點);
每個新到達的進程都可以很快得到響應(RR的優點);
不必實現估計進程的運行時間(避免用戶作假);
可靈活地調整對各類進程的偏好程度,比如:CPU密集型進程、I/O密集型進程(拓展:可以將因I/O而阻塞的進程重新放回原隊列,這樣I/O型進程就可以保持較高優先級)。
缺點:可能會導致饑餓

多級反饋隊列調度算法

【進程管理】多級反饋隊列調度算法_嗶哩嗶哩_bilibili

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

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

相關文章

[git] 遠程刪除分支

[git] 遠程刪除分支 1. git刪除遠程分支 git push origin --delete [branch_name]2. 刪除本地分支區別 git branch -d 會在刪除前檢查merge狀態(其與上游分支或者與head)。git branch -D 是git branch --delete --force的簡寫,它會直接刪除…

Redis生產實戰-Redis集群故障探測以及降級方案設計

Redis 集群故障探測 在生產環境中,如果 Redis 集群崩潰了,那么會導致大量的請求打到數據庫中,會導致整個系統都崩潰,所以系統需要可以識別緩存故障,限流保護數據庫,并且啟動接口的降級機制 降級方案設計 …

《C++20設計模式》---原型模式學習筆記代碼

C20設計模式 第 4 章 原型模式學習筆記筆記代碼 第 4 章 原型模式 學習筆記 筆記代碼 #include<iostream> #include<string>// #define VALUE_OF_ADDRESS // PP_4_2_1 (no define: PP_4_2_2) namespace PP_4_2 {class Address{public:std::string street;std::st…

《C++20設計模式》學習筆記---原型模式

C20設計模式 第 4 章 原型模式4.1 對象構建4.2 普通拷貝4.3 通過拷貝構造函數進行拷貝4.4 “虛”構造函數4.5 序列化4.6 原型工廠4.7 總結4.8 代碼 第 4 章 原型模式 考慮一下我們日常使用的東西&#xff0c;比如汽車或手機。它們并不是從零開始設計的&#xff0c;相反&#x…

超過 50% 的內部攻擊使用特權提升漏洞

特權提升漏洞是企業內部人員在網絡上進行未經授權的活動時最常見的漏洞&#xff0c;無論是出于惡意目的還是以危險的方式下載有風險的工具。 Crowdstrike 根據 2021 年 1 月至 2023 年 4 月期間收集的數據發布的一份報告顯示&#xff0c;內部威脅正在上升&#xff0c;而利用權…

基于SSM的劇本殺預約系統的設計與實現

末尾獲取源碼 開發語言&#xff1a;Java Java開發工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 數據庫&#xff1a;MySQL5.7和Navicat管理工具結合 服務器&#xff1a;Tomcat8.5 開發軟件&#xff1a;IDEA / Eclipse 是否Maven項目&#xff1a;是 目錄…

【第三屆】:“玄鐵杯”RISC-V應用創新大賽(基于yolov5和OpenCv算法 — 智能警戒哨兵)

文章目錄 前言 一、智能警戒哨兵是什么&#xff1f; 二、方案流程圖 三、硬件方案 四、軟件方案 五、演示視頻鏈接 總結 前言 最近參加了第三屆“玄鐵杯”RISC-V應用創新大賽&#xff0c;我的創意題目是基于 yolov5和OpenCv算法 — 智能警戒哨兵 先介紹一下比賽&#xf…

docker容器配置MySQL與遠程連接設置(純步驟)

以下為ubuntu20.04環境&#xff0c;默認已安裝docker&#xff0c;沒安裝的網上隨便找個教程就好了 拉去mysql鏡像 docker pull mysql這樣是默認拉取最新的版本latest 這樣是指定版本拉取 docker pull mysql:5.7查看已安裝的mysql鏡像 docker images通過鏡像生成容器 docke…

大數據HCIE成神之路之數據預處理(1)——缺失值處理

缺失值處理 1.1 刪除1.1.1 實驗任務1.1.1.1 實驗背景1.1.1.2 實驗目標1.1.1.3 實驗數據解析 1.1.2 實驗思路1.1.3 實驗操作步驟1.1.4 結果驗證 1.2 填充1.2.1 實驗任務1.2.1.1 實驗背景1.2.1.2 實驗目標1.2.1.3 實驗數據解析 1.2.2 實驗思路1.2.3 實驗操作步驟1.2.4 結果驗證 1…

【STM32】ADC模數轉換器

1 ADC簡介 ADC&#xff08;Analog-Digital Converter&#xff09;模擬-數字轉換器 ADC可以將引腳上連續變化的模擬電壓轉換為內存中存儲的數字變量&#xff0c;建立模擬電路到數字電路的橋梁 STM32是數字電路&#xff0c;只有高低電平&#xff0c;沒有幾V電壓的概念&#xff…

安裝 DevEco Studio 后不能用本地 Node.js 打開

安裝 DevEco Studio 后第一次打開時&#xff0c;不能用本地 Node.js 打開 答&#xff1a;因為本地 Node.js 文件夾名字中有空格 Node.js路徑只能包含字母、數字、“。”、“_”、“-”、“:”和“V” 解決方法&#xff1a; 1.修改文件夾名稱 2.重新下載 注意&#xff1a;找一…

Qt 通過命令行編譯程序

前言 從服務器拉代碼到編譯成可執行文件一個腳本解決問題。使用的項目文件見上一個文章 Qt生成動態鏈接庫并使用動態鏈接庫 腳本代碼 為了方便易懂這是一個很簡單的Qt編譯腳本 call E:\vs2015\VC\vcvarsall.bat x86 rmdir /s /q my-project git clone gitgitee.com:wenbai1…

【CF245H】Queries for Number of Palindromes(字符串區間dp)

Queries for Number of Palindromes - 洛谷 # Queries for Number of Palindromes ## 題面翻譯 題目描述 給你一個字符串s由小寫字母組成&#xff0c;有q組詢問&#xff0c;每組詢問給你兩個數&#xff0c;l和r&#xff0c;問在字符串區間l到r的字串中&#xff0c;包含多少…

1-3算法基礎-標準模板庫STL

1.pair pair用于存儲兩個不同類型的值&#xff08;元素&#xff09;作為一個單元。它通常用于將兩個值捆綁在一起&#xff0c;以便一起傳遞或返回。 #include <iostream> #include <utility> using namespace std; int main() {pair<int, string> person m…

TailwindCSS 多主題色配置

TailwindCSS 多主題色配置 現在大多數網站都支持主題色變換&#xff0c;比如切換深色模式。那么我們該如何進行主題色配置呢&#xff1f; tailwind dark tailwind 包含一個 dark變體&#xff0c;當啟用深色模式時&#xff0c;可以為網站設置不同樣式 <div class"bg-whi…

ThingWorx 9.2 Windows安裝

參考官方文檔安裝配置 1 PostgreSQL 13.X 2 Java, Apache Tomcat, and ThingWorx PTC Help Center 參考這里安裝 數據庫 C:\ThingworxPostgresqlStorage 設置為任何人可以full control 數據庫初始化 pgadmin4 創建用戶twadmin并記錄口令password Admin Userpostgres Thin…

漏刻有時百度地圖API實戰開發(9)Echarts使用bmap.js實現軌跡動畫效果

Bmap.js是Echarts和百度地圖相結合開發的一款JavaScript API&#xff0c;它可以幫助用戶在web應用中獲取包括地圖中心點、地圖縮放級別、地圖當前視野范圍、地圖上標注點等在內的地圖信息&#xff0c;并且支持在地圖上添加控件&#xff0c;提供包括智能路線規劃、智能導航(駕車…

C# WPF上位機開發(通訊協議的編寫)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 作為上位機&#xff0c;它很重要的一個部分就是需要和外面的設備進行數據溝通的。很多時候&#xff0c;也就是在這個溝通的過程當中&#xff0c;上…

PyQt下使用OpenCV實現人臉檢測與識別

背景&#xff1a; 一 數字圖像處理與識別警務應用模型 基于前期所學知識&#xff0c;與公安實踐相結合&#xff0c;綜合設計數字圖像處理與識別警務應用模型,從下列4個研究課題中選擇2個進行實驗實現&#xff1a;圖像增強與復原、人臉檢測與識別、虹膜內外圓檢測與分割、車牌…

Html轉PDF,前端JS實現Html頁面導出PDF(html2canvas+jspdf)

Html轉PDF&#xff0c;前端JS實現Html頁面導出PDF&#xff08;html2canvasjspdf&#xff09; 文章目錄 Html轉PDF&#xff0c;前端JS實現Html頁面導出PDF&#xff08;html2canvasjspdf&#xff09;一、背景介紹二、疑問三、所使用技術html2canvasjspdf 四、展示開始1、效果展示…