進程與線程:07 CPU調度策略

一、課程內容概述

本節課程主要講解操作系統的CPU調度策略,聚焦于基本操作系統上的調度算法,探討其大致實現方式、需折中考慮的問題。CPU調度在不同場景下復雜程度不同,如衛星、導彈等實時性要求高的系統,需采用實時調度,而本次課程主要圍繞常見的基本調度策略展開,不求窮盡所有算法,旨在以點帶面,幫助學習者觸類旁通。

二、CPU調度的基本概念

  1. 調度與切換的關系:在多進程圖像下,CPU調度和進程切換緊密相連。調度的目的是從就緒隊列中選取下一個要執行的進程(獲得next),并切換到該進程(switch to next),從而使操作系統能夠實際運轉。例如,當一個進程(如p1)在執行過程中因阻塞、時間片到期等原因無法繼續執行時,操作系統需從就緒隊列中選擇另一個進程(如p2或p3)來執行,此時就涉及到調度策略的選擇。在這里插入圖片描述

  2. 調度的直觀想法:其直觀思路是從就緒隊列的眾多進程中選擇執行對象。生活中的銀行、食堂等場景也存在類似調度,最常見的方法是先來先服務(先入先出),這種方法簡單公平,但存在局限性。比如在銀行,對于簡單詢問業務的客戶,若采用先來先服務,可能導致其等待時間過長,不太合理,因此可考慮短作業適當優先。然而,若短作業的處理時間不斷延長,又需適當降低其優先級,這就引出了優先級調度的概念,且優先級在實際中會不斷變化 。
    在這里插入圖片描述

三、設計調度算法的指標

在這里插入圖片描述

  1. 進程滿意的關鍵因素:設計調度算法需要明確指標,而讓進程滿意的關鍵在于時間相關因素。對于進程而言,用戶希望程序執行速度快,這涉及到多種時間指標,如周轉時間和響應時間。
  2. 周轉時間周轉時間是指從任務進入系統到任務結束的時間,用戶希望該時間越短越好。例如,在編譯任務中,用戶期望編譯過程盡快完成。
  3. 響應時間響應時間是從操作發生到系統產生反應的時間,對于一些前臺任務(如word操作),用戶更關注響應時間。比如按下鍵盤后,希望字符能盡快顯示在屏幕上。
  4. 其他指標:除了周轉時間和響應時間,系統內耗時間也應盡量少,否則會減少實際用于處理任務的時間,導致用戶不滿。同時,系統完成任務的數量(吞吐量)應盡量大 。

四、CPU調度的關鍵——折中和綜合

在這里插入圖片描述

  1. 系統任務的多樣性與矛盾:操作系統中存在多種任務,如前臺任務(如ppt操作)和后臺任務(如圖像壓縮),它們關注點不同,前臺任務更關注響應時間,后臺任務更關注周轉時間。而且這些任務之間相互影響,例如,若要滿足前臺任務響應時間短的要求,就需要增加進程切換次數,但這會導致系統內耗增大,進而使后臺任務的周轉時間變長,因此CPU調度需要在這些相互矛盾的需求之間進行折中、平衡與綜合 。
  2. I/O約束性任務和CPU約束性任務:I/O約束性任務的特點是I/O操作較多,CPU執行區間短且頻率高,如銀行出納工作、word操作等;與之相對的是CPU約束性任務,這類任務長時間進行計算,幾乎沒有I/O操作,例如gcc編譯、matlab矩陣計算等。由于兩者特點不同,調度優先級也應有所區別,I/O約束性任務通常優先級更高,因為它優先執行可以使I/O和CPU并行工作,提高系統效率,且I/O約束性任務往往是前臺任務,為了給用戶及時反饋,也應賦予較高優先級 。

五、常見調度算法

  1. 先來先服務(FCFS):這是最簡單的調度算法,按照進程到達就緒隊列的先后順序進行調度。例如,進程p1先到達,p5后到達,調度順序就是p1執行完后p2,依次類推直到p5。但這種算法可能導致周轉時間較長,通過調整進程執行順序,將短作業提前執行,可降低周轉時間,提高系統整體滿意度,由此引出短作業優先(SJF)算法在這里插入圖片描述

  2. 短作業優先(SJF):該算法將短作業優先執行,可證明這種方法能使周轉時間最小。因為在計算周轉時間的公式中,先執行的作業被重復計算的次數更多,所以將短作業放在前面執行,最終得到的周轉時間總和更小。這種算法在實際中有重要價值,但也有局限性 。在這里插入圖片描述

  3. 時間片輪轉調度(RR):為保證響應時間,引入時間片輪轉調度算法。它將CPU時間劃分為固定大小的時間片,每個進程輪流執行一個時間片。例如,給進程p1、p2、p3各分配10個時間片,執行完后再為后續進程分配。通過這種方式,可保證最長響應時間在一定范圍內(為進程數量乘以時間片大小),從而確保響應時間。為提高響應速度,時間片應盡量小,但同時要限制系統中進程的數量 。在這里插入圖片描述

  4. 優先級調度:由于不同任務對響應時間和周轉時間的需求不同,可采用優先級調度。直觀做法是設置前臺任務隊列和后臺任務隊列,前臺任務采用輪轉調度以保證響應時間,后臺任務采用短作業優先以減少周轉時間,然后通過優先級來決定執行順序,前臺任務優先級高于后臺任務在這里插入圖片描述
    但如果采用絕對優先級調度,可能導致后臺任務饑餓,如1967年提交的一個進程,因前臺任務不斷出現,直到1973年都未執行。因此,任務優先級應動態調整,但這又會引發新的矛盾,如后臺長CPU任務執行時會影響前臺任務響應時間。所以,調度算法需要綜合考慮輪轉調度、優先級和短作業優先等因素,且應具備學習機制,能根據任務特點和變化自適應調整,以實現對各種任務的折中與綜合 。
    在這里插入圖片描述
    在這里插入圖片描述

六、課程總結與展望

本次課程介紹了CPU調度的含義,即從就緒隊列選取進程執行,強調調度算法需考慮周轉時間、響應時間、任務特點和優先級等因素,還講解了先來先服務、短作業優先、時間片輪轉調度三種基本算法。未來課程將在此基礎上,展示如何綜合這些基本算法,設計出簡單且能有效折中多種任務需求的實際調度程序,以應對操作系統中多任務的復雜情況 。

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

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

相關文章

JPG與PDF格式轉換器

該插件可實現JPG與PDF格式的互轉。 MainForm.Designer.cs using System.Windows.Forms; namespace JpgToPdfConverter {partial class MainForm{private System.ComponentModel.IContainer components null;protected override void Dispose(bool disposing){if (disposing &…

LlamaIndex 第八篇 MilvusVectorStore

本指南演示了如何使用 LlamaIndex 和 Milvus 構建一個檢索增強生成(RAG)系統。 RAG 系統將檢索系統與生成模型相結合,根據給定的提示生成新的文本。該系統首先使用 Milvus 等向量相似性搜索引擎從語料庫中檢索相關文檔,然后使用生…

淺聊一下數據庫的索引優化

背景 這里的索引說的是關系數據庫(MSSQL)中的索引。 本篇不是純技術性的內容,只是聊一次性能調優的經歷,包含到一些粗淺的實現和驗證手段,所以,大神忽略即可。 額…對了,筆者對數據庫的優化手段…

【android bluetooth 框架分析 02】【Module詳解 7】【VendorSpecificEventManager 模塊介紹】

1. 背景 我們在 gd_shim_module 介紹章節中&#xff0c;看到 我們將 VendorSpecificEventManager 模塊加入到了 modules 中。 // system/main/shim/stack.cc modules.add<hci::VendorSpecificEventManager>();在 ModuleRegistry::Start 函數中我們對 加入的所有 module…

小剛說C語言刷題—1080質因子

1.題目描述 任意輸入一正整數 N &#xff0c;求出它的所有質因子。如&#xff1a;10&#xff1d;25&#xff0c;20&#xff1d;225。 輸入 輸入只有一行&#xff0c;包括 11個整數 n (1≤n≤32768) 輸出 輸出若干行&#xff0c;按從小到大的順序給出這個數的所有質因子&am…

C語言中的宏

1.防止頭文件重復包含 1.#pragma once #pragma once 是一個編譯器指令&#xff0c;用于防止頭文件被重復包含。它的核心作用是通過簡單語法替代傳統的頭文件保護宏&#xff08;#ifndef/#define/#endif&#xff09;&#xff0c;提升代碼簡潔性和可維護性。 作用詳解 防止重復…

MapReduce 模型

?引言? MapReduce 是分布式計算領域的里程碑式模型&#xff0c;由 Google 在 2004 年論文中首次提出&#xff0c;旨在簡化海量數據處理的復雜性。其核心思想是通過函數式編程的 ?Map? &#xff08;映射&#xff09;和 ?Reduce? &#xff08;歸約&#xff09;階段&#x…

Linux文件編程——標準庫函數fopen、fread、fwrite等函數

1. fopen — 打開文件 函數原型&#xff1a; FILE *fopen(const char *filename, const char *mode);參數&#xff1a; filename&#xff1a;要打開的文件名&#xff0c;可以是相對路徑或絕對路徑。 mode&#xff1a;文件打開模式&#xff0c;表示文件的操作方式&#xff08…

從 Git 到 GitHub - 使用 Git 進行版本控制 - Git 常用命令

希望本貼能從零開始帶您一起學習如何使用 Git 進行版本控制&#xff0c;并結合遠程倉庫 GitHub。這會是一個循序漸進的指南&#xff0c;我們開始吧&#xff01; 學習 Git 和 GitHub 的路線圖&#xff1a; 理解核心概念&#xff1a;什么是版本控制&#xff1f;Git 是什么&…

2025.05.11拼多多機考真題算法崗-第四題

?? 點擊直達筆試專欄 ??《大廠筆試突圍》 ?? 春秋招筆試突圍在線OJ ?? 筆試突圍OJ 04. 記憶碎片重組 問題描述 盧小姐正在開發一款名為"記憶碎片"的游戲,玩家需要分析混亂的記憶數據,推測出形成這些記憶的原始序列。游戲中,記憶數據存儲在一個特殊的數…

Android Exoplayer多路不同時長音視頻混合播放

在上一篇Android Exoplayer 實現多個音視頻文件混合播放以及音軌切換中我們提到一個問題&#xff0c;如果視頻和音頻時長不一致&#xff0c;特別是想混合多個音頻和多個視頻時就會出問題&#xff0c;無法播放。報錯如下&#xff1a; E/ExoPlayerImplInternal(11191): Playback…

Datawhale PyPOTS時間序列5月第1次筆記

課程原地址&#xff1a; https://github.com/WenjieDu/PyPOTS&#xff08;Package地址&#xff09; https://github.com/WenjieDu/BrewPOTS/tree/datawhale/202505_datawhale&#xff08;Tutorial地址&#xff09; 2.1 PyPOTS簡介 PyPOTS 是一個專為處理部分觀測時間序列&a…

網安學途—流量分析 attack.pcap

attack.pacp 使用Wireshark查看并分析虛擬機windows 7桌面下的attack.pcapng數據包文件&#xff0c;通過分析數據包attack.pcapng找出黑客的IP地址&#xff0c;并將黑客的IP地址作為FLAG &#xff08;形式&#xff1a;[IP地址]&#xff09;提交&#xff1a; 過濾器篩選&#x…

【大模型】DeepResearcher:通用智能體通過強化學習探索優化

DeepResearcher&#xff1a;通過強化學習在真實環境中擴展深度研究 一、引言二、技術原理&#xff08;一&#xff09;強化學習與深度研究代理&#xff08;二&#xff09;認知行為的出現&#xff08;三&#xff09;模型架構 三、實戰運行方式&#xff08;一&#xff09;環境搭建…

go語言實現IP歸屬地查詢

效果: 實現代碼main.go package mainimport ("encoding/json""fmt""io/ioutil""net/http""os" )type AreaData struct {Continent string json:"continent"Country string json:"country"ZipCode …

基于STM32、HAL庫的SGTL5000XNLA3R2音頻接口芯片驅動程序設計

一、簡介: SGTL5000XNLA3R2 是 Cirrus Logic 推出的高性能、低功耗音頻編解碼器,專為便攜式和電池供電設備設計。它集成了立體聲 ADC、DAC、麥克風前置放大器、耳機放大器和數字信號處理功能,支持 I2S/PCM 音頻接口和 I2C 控制接口,非常適合與 STM32 微控制器配合使用。 二…

window 顯示驅動開發-報告圖形內存(一)

計算圖形內存 在 VidMm 能夠向客戶端報告準確的帳戶之前&#xff0c;它必須首先計算圖形內存的總量。 VidMm 使用以下內存類型和公式來計算圖形內存&#xff1a; 系統總內存 此值是操作系統可訪問的系統內存總量。 BIOS 分配的內存不會出現在此數字中。 例如&#xff0c;一臺…

[FA1C4] 博客鏈接

Blog Link 博客已經從 CSDN 轉移 高情商&#xff1a;博客是給人看的 低情商&#xff1a;CSDN 已經爛了根本不能看 鏈接: https://fa1c4.github.io/

python通過curl訪問deepseek的API調用案例

廢話少說&#xff0c;開干&#xff01; API申請和充值 下面是deepeek的API網站 https://platform.deepseek.com/ 進去先注冊&#xff0c;是不是手機賬號密碼都不重要&#xff0c;都一樣&#xff0c;完事充值打米&#xff0c;主要是打米后左側API Keys里面創建一個API Keys&am…

【計算機視覺】OpenCV項目實戰:基于face_recognition庫的實時人臉識別系統深度解析

基于face_recognition庫的實時人臉識別系統深度解析 1. 項目概述2. 技術原理與算法設計2.1 人臉檢測模塊2.2 特征編碼2.3 相似度計算 3. 實戰部署指南3.1 環境配置3.2 數據準備3.3 實時識別流程 4. 常見問題與解決方案4.1 dlib安裝失敗4.2 人臉檢測性能差4.3 誤識別率高 5. 關鍵…