【操作系統】進程調度(2a):SJF(短任務優先) 算法 原理與實踐

0 前言

接上一篇文章:進程調度(1):FIFO(先進先出)算法 原理與實踐

1 前提鋪墊

請參考上一篇文章的前提鋪墊部分,本文與之完全一致。

2 SJF 原理

SJF(Shortest Job First)短任務優先,也就說,對于Ready的多個進程,先執行最短的內一個。

2.1 算法

這種算法在我們的《算法與數據結構》中也是常見的,對于多個即將執行的任務,每一次都選擇最短的先執行,執行完之后再執行次短的,以此類推,這樣一來,每個任務的周轉時間都是最小的,平均周轉時間也就是最小的。

單純從平均周轉時間這個性能指標來說,這個算法還是不錯的!

2.1.1 實例1

我們先來看一個實例,例如有4個任務(放寬每個任務時間都一樣的假設)

  • A:10
  • B:1
  • C:4
  • D:100

假定4個任務同時到達,根據SJF的原則,我們的執行順序應該是

B
C
A
D

對應的Average Turnaround Time = (1 + 5 + 15 + 115) / 4 = 34 (平均周轉時間是34s)
在這里插入圖片描述

2.1.2 實例1的模擬

我們直接將后面部分要將的實踐搬到這里一部分,讓你有一個直觀的感受:

ARG policy SJF
ARG jlist 10,1,4,100Here is the job list, with the run time of each job: Job 0 ( length = 10.0 )Job 1 ( length = 1.0 )Job 2 ( length = 4.0 )Job 3 ( length = 100.0 )** Solutions **Execution trace:[ time   0 ] Run job 1 for 1.00 secs ( DONE at 1.00 )[ time   1 ] Run job 2 for 4.00 secs ( DONE at 5.00 )[ time   5 ] Run job 0 for 10.00 secs ( DONE at 15.00 )[ time  15 ] Run job 3 for 100.00 secs ( DONE at 115.00 )Final statistics:Job   1 -- Response: 0.00  Turnaround 1.00  Wait 0.00Job   2 -- Response: 1.00  Turnaround 5.00  Wait 1.00Job   0 -- Response: 5.00  Turnaround 15.00  Wait 5.00Job   3 -- Response: 15.00  Turnaround 115.00  Wait 15.00Average -- Response: 5.25  Turnaround 34.00  Wait 5.25

具體含義在上一篇文章已經解釋過了,不再細說。

這樣來看,SJF在這種情況下,的確是最優的,從數學角度來說也是最優的!

但是,如果我們放寬任務同時到達的條件,事情可能又比較糟糕了……

2.2 缺點:非搶占式調度

什么是非搶占式調度呢?我們先來看一個假設:

假設任務A在CPU執行,任務B到達了,并且B的運行時間比A小,但是A在B到達之前已經在執行了,B就只能等著A執行完再執行,盡管B比A的運行時間少。

這就是非搶占式調度,后來者即便比正在運行的進程時間短,也不能搶占它的位置來運行自己

這樣的話,會造成什么問題呢?我們來看一個實例

  • A:100
  • B:10
  • C:20

三個進程,A先到達(0時刻到達),隨后B、C到達(B、C同時在時刻10到達)。

程序的執行情況

A
B
C

對于后來的B和C,雖然遠比A運行時間小,但是由于SJF的非搶占,它們只能等著A執行完,然后再執行B,再執行C(因為B比C時間少)。
在這里插入圖片描述
這顯然是糟糕的,此時,Average Turnaround Time = (100 + 110 + 120) / 3 = 110。看起來,又退化到了FIFO算法……

顯然,非搶占式調度也不是很好。所以人們又提出了新的算法……是的,當舊算法出現問題,自然會催生新算法誕生,人類的科技就是這樣一步步變得越來越強大和復雜。

3 SJF 實踐

你可以充分閱讀README.md文檔,然后自己嘗試一些數字并計算,之后再參考答案。

值得說明的是,模擬程序并不是很完美,默認是多任務同時到達,并且沒有提供修改選項。

4 重要思想

對于同時到達的任務,采取花費時間少的優先執行,這能夠讓我們的Average Turnaround Time這一性能指標達到最優。但是不同時到達的任務,可能不太好用,因為它“不會搶地盤”,只會“傻等著”,后續我們也會介紹解決方案。

后續我們會介紹更多的性能指標,你就會發現,僅僅只有平均周轉時間最優,是遠遠不夠的。

5 預告:進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐

基于SJF的非搶占式調度的缺點,STCF做了改進,實現了搶占式調度

下一篇鏈接:進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐

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

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

相關文章

【操作系統】進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐

0 前言 接上一篇文章:進程調度(2a):SJF(短任務優先) 算法 原理與實踐 1 前提鋪墊 與上一篇同。 2 STCF 原理 STCF(Shortest Time-to-Completion First)最短完成時間優先。 2.1…

【操作系統】進程調度(3):RR(輪轉) 算法 原理與實踐

0 前言 接上一篇文章:進程調度(2b):STCF(最短完成時間優先) 算法 原理與實踐 1 前提鋪墊 除了與上一篇相同的,這里介紹新的基礎知識。 1.1 三種類型的程序 計算密集型(CPU導向&…

【操作系統】進程調度(4):I/O、不可預測的運行時間

0 前言 上一篇文章:進程調度(3):RR(輪轉) 算法 原理與實踐 1 前提鋪墊 與上一篇同。 2 引入I/O操作 之前我們一直提及的是計算密集型程序,現在我們的程序可以進行I/O交互了,它會…

堅定不移地加速,并且不斷解決新問題

想要更快更高效地做事,一定會帶來問題,我們要做的是 保證事情一定要做對堅定不移地解決問題,尋找方法,而不是回歸慢速 這里有幾個典型的例子 從單周期CPU,到多周期CPU,是為了提速,我們不必再…

運行bat批處理文件不出現黑框

if "%1""hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit :CmdBegin echo off java -jar logisim118.exe exit 只需要添加上述代…

【操作系統】使用循環創建線程,一個手殘導致的bug

讓我們先看看這個手殘的程序…… 這是一個簡單的生產者消費者問題。 #include <assert.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <unistd.h> #include <pthread.h> #include <sys/types.h> #incl…

【計算機系統設計】重點 · 學習筆記(0)

HDL等硬件描述語言&#xff0c;例如Verilog&#xff0c;是并行的&#xff0c;而不像軟件一樣的順序執行的&#xff0c;例如很多的always塊&#xff0c;initial塊&#xff0c;都是并行的&#xff0c;他們會轉換為硬件電路&#xff0c;而在仿真的時候&#xff0c;他們也是并發執行…

【計算機系統設計】學習筆記(1)03,04

疑問&#xff1a;sw和lw指令&#xff0c;獲取的地址不是4的整倍數&#xff08;字節不對齊&#xff09;的時候&#xff0c;應該如何處理&#xff1f; 東南大學MOCC 計算機系統綜合設計 03 03-1 寄存器 介紹了MIPS寄存器&#xff0c;32個寄存器的基本功能和使用&#xff0c;注…

【期末考試】計算機網絡、網絡及其計算 考試重點

個人簡介&#xff1a;Java領域新星創作者&#xff1b;阿里云技術博主、星級博主、專家博主&#xff1b;正在Java學習的路上摸爬滾打&#xff0c;記錄學習的過程~ 個人主頁&#xff1a;.29.的博客 學習社區&#xff1a;進去逛一逛~ 計算機網絡及其計算 期末考點 &#x1f680;數…

【計算機系統設計】學習筆記(2)

5.1 對于CPU與外界的讀寫&#xff0c;只有load和store指令能夠做&#xff0c;所以很多情況下&#xff0c;直接通過bypass跳過去了&#xff0c;或者閑置&#xff0c;尤其對于流水線&#xff0c;更應該直接跳過而不是閑置&#xff08;如何設計?&#xff09;。 另一方面&#xf…

【計算機系統設計】重點 · 學習筆記(1)(資源消耗)

這一點先淺顯理解&#xff0c;就好比我要造一個樓 我是用現成的材料造節省?還是需要用XX材料&#xff0c;但是XX材料還需要現成材料造呢&#xff1f; 這也不一定&#xff0c;但是基本來說&#xff0c;如果使用現有資源&#xff0c;能夠直接用&#xff0c;那其實是最好不過的…

【計算機系統設計】重點 · 學習筆記(0)(數據通路設計思想)

重點1&#xff1a;05.1 設計思想 設計思想至關重要&#xff0c;這決定了你能不能自己根據ISA設計出來CPU架構&#xff0c;而不是只是抄別人的&#xff0c;也決定你能不能完成自己的設計更優化的架構。 描述方式約定 6 數據通路 ≠ Verilog代碼 我們構建的數據通路&#…

【計算機系統設計】實踐筆記(1)數據通路構建:取指部件分析

0 核心思想 根據指令功能&#xff0c;分析出需求&#xff0c;從而得出需要的部件、控制信號以及其他設計。 1. 針對的指令 取指階段&#xff0c;針對所有指令&#xff0c;任何指令都需要進行取指。 2 功能&#xff08;需求&#xff09;分析 CPU的內部采用的是字節編址&…

【計算機系統設計】實踐筆記(2)數據通路構建:第一類R型指令分析(1)

0 回顧 上一次實踐筆記&#xff08;0&#xff09;我們實現了一個最簡單的&#xff0c;能夠每個上升沿4的PC。 我們最需要關注的就是器件功能的獨立性&#xff0c;避免內外功能混雜&#xff0c;同時一定要注意腦中有電路&#xff08;RTL級描述的抽象電路而不是實際的門級電路&…

接口的抽象與實現(概述)

概述 我們先建立一個整體的接口格局觀&#xff0c;建立知識地圖&#xff0c;了解接口的大概面貌。 整體來說&#xff0c;就這點事兒&#xff0c;4個箭頭代表了所有&#xff01; 三個器件4個箭頭 把這幾個都想明白&#xff0c;就完事兒了。 第一層&#xff08;頂層&#xf…

從功能層次,闡述CPU、接口和外設之間的交互

我們從功能抽象層次&#xff0c;闡述一下CPU、接口芯片和外設之間的交互情況&#xff1a; 三個器件4個箭頭 我們依次將其描述清楚。 數據 箭頭①和③ CPU給接口可以發送數據&#xff0c;然后接口暫存數據&#xff0c;之后再發給外設&#xff0c;這就是數據緩沖。 發送的數…

【接口技術】8086的IN和OUT指令

x86采用獨立編址的方式&#xff0c;IO端口地址和存儲器地址是分開的。 對于IO存儲器訪問&#xff0c;需要使用獨立的IO指令&#xff0c;也就是IN和OUT 兩類地址 地址空間大小在8位以下地址空間大小在16位以下 兩種格式 對于兩類不同的地址&#xff0c;IO指令的格式不一樣。…

Vivado工程文件分類

只需要在創建的時候&#xff0c;選擇自定義路徑即可&#xff0c;最好在原有的new文件夾下新建文件夾。 至于路徑的匹配&#xff0c;可以自己試試&#xff0c;在原有默認new下創建文件夾&#xff0c;選中新的文件夾后&#xff0c;內部的Verilog文件可以訪問外部new文件夾的文件&…

【微機原理與接口技術】具體芯片(1)并行接口8255A(1):全局觀

并行接口8255A 首先&#xff0c;它是傳輸并行數據的&#xff0c;與CPU一樣&#xff0c;然后&#xff0c;它是可編程的&#xff0c;也是多功能的&#xff0c;CPU可以對其進行一些控制。 管腳 先從最宏觀層面分類 一部分引腳與外設相連一部分引腳與CPU相連GND和Vcc 注意&…