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

0 前言

接上一篇文章:進程調度(2a):SJF(短任務優先) 算法 原理與實踐

1 前提鋪墊

與上一篇同。

2 STCF 原理

STCF(Shortest Time-to-Completion First)最短完成時間優先。

2.1 算法

還記得上一個算法SJF嗎?它是非搶占式的,只能傻傻地等著長任務A完成,這顯然是“懦弱”的,并且降低了系統的效率,因此,讓我們給它添加一個搶占功能吧!

搶占什么呢?當然是A了,還是用上次的例子

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

A在0時刻到達并執行,B和C在10時刻到達。之前B和C只能等著A結束執行再按照B、C的順序執行,現在,我們有搶占功能了!

在時刻10的時候,Scheduler(調度器)發現B和C的執行時間比A短,那么好,A你就不要再執行了,讓B先來吧! 這里,我們也使用到了上下文切換機制,先保存了A執行的狀態,等B、C執行完,再讓A繼續執行。

一個問題:究竟是識別A剩余執行時間,還是全部執行時間,又或者什么呢?A、B和C的執行時間,系統又怎樣得知?這些我們以后再談,并且這設計到了具體實現的層次,現在,我們的假設還是運行時間是已知的,并且是在抽象層次在談論。

在這里插入圖片描述
這樣,看起來就比之前的SJF棒多了!起碼它學會了“搶車位”。

現在,Average Turnaround Time = (10 + 30 + 130)/ 3 = 56.67,要知道,之前可是110。

不過,這個算法也會有一些問題,我們下面說一下。

2.2 缺點:長任務“饑餓”

試想一下,對于一個長任務,如果有遠遠不斷地短任務進入,那么這個長任務可能永遠不會被執行了……(它也太慘了……)

不僅如此,對于一個交互型程序來說,與用戶交互的響應時間(我們下一講說這個指標,簡單來說,就是用戶發送命令,到看見屏幕產生變化的時間,這應該很快才對)就會非常長,想象一下,你敲擊鍵盤的字母A后,等待10s才看見屏幕上顯示了A……這簡直讓人發瘋!

說明:在原書中沒有給出STCF算法的模擬,因此暫時沒有實踐內容,不過因為該算法與SJF的區別就在于搶占,因此比較容易理解。

2.3 關注點:順序執行的打破

我們之前看到的進程,都是從一開始執行,就一直執行到完成才停止,這個過程并不需要上下文切換機制前面的篇章好像寫錯了……),而這一次,我們看到了任務A被分成了兩段來執行,這時候就使用到了上下文切換機制了,被打斷的A,必須要保存現場,然后下一次被執行的時候,恢復現場繼續執行。

這也是我們第一次見到,多個任務不是順序執行的,而是切換執行的,下一篇輪轉算法,你將更清晰地體會到這一點!

3 核心思想

STCF與SJF本質是一樣的,區別就是,前者是搶占式,后者是非搶占式的。

核心思想就是,讓運行時間短的任務先執行

這樣做的缺點也分析過,長任務可能一直得不到執行,后續我們會解決這個問題的。

4 預告:進程調度(3):RR(輪轉) 算法 原理與實踐

我們接下來會使用輪轉算法解決交互式程序響應時間問題。這樣能讓用戶獲得很好的體驗。

下一篇鏈接:RR(輪轉) 算法 原理與實踐

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

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

相關文章

【操作系統】進程調度(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 注意&…

【微機原理與接口技術】多功能可編程芯片 與 多功能電飯煲

多功能可編程芯片&#xff0c;就像你的多功能電飯煲&#xff0c;你點了不同的按鍵&#xff0c;就啟動了不同的工作方式&#xff0c;是熬粥還是做米飯&#xff0c;之后你又得選擇壓力和時間。 而在芯片上&#xff0c;你得先設置控制字&#xff0c;也就是 先選擇工作方式&#…