進程調度篇

在操作系統的廣闊領域中,進程調度是其中一個至關重要的環節。它如同操作系統的“交通警察”,負責在多個等待CPU執行的進程間進行高效、公平的分配。本文將帶您了解進程調度的基本概念、重要性、常用算法……

1. 進程調度的基本概念

1.1 進程調度的定義

進程調度,顧名思義,是操作系統負責分配CPU時間給各個進程的過程。由于CPU是計算機中最寶貴的資源之一,因此如何公平且高效地分配CPU時間,是進程調度需要解決的核心問題。

1.2 進程調度的重要性

進程調度對于操作系統的性能和用戶體驗有著至關重要的影響。一個高效的進程調度算法能夠顯著提高CPU的利用率,降低系統的響應時間,從而提高整個系統的性能和用戶滿意度。

2.進程調度常用的算法

1. 先來先服務(FCFS, First-Come, First-Served)
原理:按照進程進入就緒隊列的先后順序進行調度
優點:算法簡單,易于實現。
缺點:可能導致長進程長時間占用CPU,而短進程等待時間過長,產生“饑餓”現象。
2. 短作業優先(SJF, Shortest Job First)
原理:優先調度執行時間最短的進程
優點:平均等待時間和平均周轉時間較短。
缺點:需要預知進程的執行時間,這在實際應用中很難做到;可能導致長進程長時間得不到執行,產生“饑餓”現象(非搶占式SJF)。
3. 優先級調度
原理:根據進程的優先級進行調度,優先級高的進程先執行。
優點:可以靈活地調整進程的優先級,以適應不同的系統需求。
缺點:如果源源不斷地產生高優先級的進程,那么低優先級的進程可能會長時間得不到執行,產生“饑餓”現象。
4. 輪轉調度(RR, Round-Robin)
原理:將CPU時間分成若干時間片,每個進程輪流執行一個時間片。
優點:公平性好,每個進程都能得到執行;響應時間短,系統吞吐量大。
缺點:時間片的選取至關重要,如果時間片過長,退化為FCFS;如果時間片過短,會導致大量的上下文切換,降低系統效率。
5. 多級反饋隊列調度
原理:將就緒隊列分成多個優先級不同的隊列,每個隊列采用不同的調度算法。
優點:結合了SJF、輪轉調度和優先級調度的優點,能夠較好地適應各種類型的進程。
缺點:算法相對復雜,實現起來較為困難。

注意!!!

1. 上文提及的FCFS是First-Come, First-Served的縮寫。

2. 解釋一下為什么時間片過長會退化為FCFS,在輪轉法這種進程調度算法中,如果設定的時間片過長,以至于大部分進程在一個時間片內便可以執行完成,那么RR算法就會失去其輪流執行多個進程的特性,而趨向于FCFS(先來先服務)算法。相信聽到這兒大家也不難看出,當某個進程通過FCFS這個算法一旦開始執行后,它就會一直占用CPU直到執行完成或被阻塞,其他進程只能等待。

?提到進程調度算法,不得不提及進程的狀態、優先級、上下文、記賬信息等。接下來小編將一一為大家講解這些特性,并舉簡單的栗子方便大家理解(淺黃色為解釋,后面為栗子),最后呢會闡述他們與進程調度算法之間的聯系。

3. 進程的狀態

3.1 新建狀態(New)

進程剛剛被創建,但尚未被初始化。這就像是一個新生嬰兒剛剛出生,還沒有開始他的成長之旅。

3.2 就緒狀態(Ready)

進程已準備好執行,但由于其他進程正在占用CPU,因此它處于等待CPU分配的狀態。這就像是一群學生在等待老師點名回答問題,他們都已經準備好了答案,但只能等待輪到自己。

3.3 執行狀態(Running)

進程正在CPU上執行其指令。這是進程生命周期中最關鍵的狀態,也是進程調度算法直接作用的對象。

3.4 阻塞狀態(Blocked/Waiting)

進程因等待某個事件(如I/O操作完成、信號量等)而無法繼續執行。這就像是一個學生在等待實驗器材準備好才能進行實驗,他必須暫停當前的學習任務,直到器材到位。

3.5 終止狀態(Terminated)

進程已完成執行,但尚未被操作系統完全回收資源。這就像是一個學生完成了所有的學習任務,準備離開教室,但他的課桌和椅子還需要老師來整理。

4. 進程的上下文

上下文(Context)是指進程在執行過程中所需的環境信息,包括CPU寄存器的內容、程序計數器、堆棧內容等。當進程被調度執行時,其上下文被加載到CPU中;當進程被切換出去時,其上下文被保存起來,以便將來再次執行時恢復。這就像是你現在正在下象棋,突然被媽媽叫去買醬油,那么現在需要保留棋局,并且記住下一步棋是誰去下,以便買完醬油回來繼續下象棋。

5.進程的優先級

優先級是進程調度中的一個重要概念,用于決定進程被調度的順序。優先級高的進程在調度時具有更高的優先級,更容易獲得CPU資源。優先級的設置可以是靜態的(在進程創建時確定),也可以是動態的(根據進程的執行情況和系統負載動態調整)。這就像是你現在手上有梨和蘋果,但是我喜歡吃蘋果,所以說在選擇吃誰的時候我會先選擇吃蘋果,對應于進程,優先級高的先被執行。

6.進程的記賬信息

記賬信息(Accounting Information)是指操作系統用于跟蹤進程執行情況的統計數據,如CPU使用時間、I/O操作次數、內存使用量、響應時間、周轉時間等。這些信息對于系統性能監控、資源分配優化和進程調度決策都具有重要意義

8.關聯關系

進程調度算法與進程狀態:進程調度算法決定了進程從一種狀態轉換到另一種狀態的時機和方式。例如,在時間片輪轉調度算法中,進程在運行態和就緒態之間周期性切換;在優先級調度算法中,高優先級的進程更容易從就緒態轉換到運行態。
進程調度算法與上下文:上下文保存和恢復是進程切換的關鍵步驟,而進程切換是進程調度算法實現的基礎。在進程調度過程中,需要保存當前進程的上下文并加載新進程的上下文。
進程調度算法與優先級:優先級是許多進程調度算法(如優先級調度、最短剩余時間優先等)的核心概念。通過調整進程的優先級,可以影響進程被調度的順序和頻率。
進程調度算法與記賬信息:記賬信息為進程調度算法提供了重要的決策依據。通過分析記賬信息,操作系統可以了解進程的執行情況和系統負載情況,從而做出更合理的調度決策。

以上就是今天小編給大家帶來的全部內容啦,希望對大家有所幫助~~

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

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

相關文章

【FreeRTOS】freeRTOS的Tmr Svc任務優先級配置

1、Tmr Svc是個FreeRTOS的軟件定時器任務,他可以收集各任務的狀態 2、他的優先級可以通過宏 configTIMER_TASK_PRIORITY 來配置,默認是2 3、修改為31后,程序總是啟動不了, 4、后面才發現原來FreeRTOS的默認最大優先級號配置的是…

工具指南 - jenkins

一、接入SonarQube 掃描代碼 SonarQube是一個用于管理代碼質量的開放平臺,可以快速的定位代碼中潛在的或者明顯的錯誤。 1.1 源碼管理 如果源碼托管在SVN,需要進行Subversion配置: Repository URL:源碼地址,比如https:…

一鍵優雅為Ubuntu20.04服務器掛載新磁盤

itopen組織1、提供OpenHarmony優雅實用的小工具2、手把手適配riscv qemu linux的三方庫移植3、未來計劃riscv qemu ohos的三方庫移植 小程序開發4、一切擁抱開源,擁抱國產化 一、小于2T磁盤掛載方式 1.1 安裝磁盤到電腦后啟動系統 1.2 查找未分區的磁盤 打…

ios swift5 藍牙廣播出數據

WARNING: The advertisement key ‘Manufacturer Data’ is not allowed WARNING: The advertisement key ‘Service Data’ is not allowed manager?.startAdvertising([CBAdvertisementDataServiceUUIDsKey : [myService?.uuid], CBAdvertisementDataLocalNameKey : "…

鴻蒙Navigation的頁面跳轉官方代碼

星河版本 文章部分代碼來源于官方 文章部分代碼來源于官方只是自己改了容易理解 與API4不同的Navigation 新版本使用的思路是 1、創建頁面棧 pageInfos: NavPathStack new NavPathStack();2、resources/base/profile創建 router_map.json 文件 {"routerMap":…

數電設計提問求幫助,出租車計費器。

🏆本文收錄于《CSDN問答解惑-》專欄,主要記錄項目實戰過程中的Bug之前因后果及提供真實有效的解決方案,希望能夠助你一臂之力,幫你早日登頂實現財富自由🚀;同時,歡迎大家關注&&收藏&…

Autosar診斷實戰系列28-2E寫DID Pending期間偶發回NRC0x13問題排查

本文框架 前言1.問題描述2.問題復現3.問題分析問題1:為何在2E Pending期間會發送功能尋址的10 01回NRC13?問題2:在ECU Pending期間收到功能尋址10 01,MCU需要如何處理?問題3:DcmDslConnection是如何定義的?問題4:功能尋址于物理尋址是否對應不同的DcmDslConnection?問…

Pandas數據可視化寶典:解鎖圖形繪制與樣式自定義的奧秘

Pandas數據可視化寶典:解鎖圖形繪制與樣式自定義的奧秘 引言 數據可視化是將數據以圖形或圖像的形式展示出來,使復雜的數據更容易被人類理解和分析。在數據分析、商業智能、科學研究等領域,數據可視化都扮演著至關重要的角色。Pandas作為一…

如何通過 Java 來完成 zip 文件與 rar 文件的解壓縮?

目錄 一、用到的知識點 二、代碼展示(分解版) 三、代碼展示(整體版) 一、用到的知識點 1.IO流: Input:輸入,通過“輸入流”進行文件的讀取操作 Output:輸出,通過“輸出流”進行文件的寫入操作 2.文件操作相關: File類&#xff…

Point Cloud Library (PCL) for Python - pclpy 安裝指南 (2)

Point Cloud Library (PCL) for Python - pclpy 安裝指南 (1) 導入庫 from pclpy import pcl import numpy as np導入pclpy庫中的pcl模塊,用于處理點云數據。numpy庫用于處理數值數據。 讀取點云 cloud pcl.PointCloud.PointXYZRGB() pcl.io.loadPCDFile(F:\\bunn…

2024年西安鐵一中集訓DAY1---- 雜題選講

文章目錄 牛客練習賽125 E 聯誼活動(枚舉,分討)牛客練習賽125 F 玻璃彈珠(類莫隊,離線詢問,數據結構)2024ccpc長春邀請賽 D Parallel Lines(隨機化)2024ccpc長春邀請賽 E…

STM32智能健康監測系統教程

目錄 引言環境準備智能健康監測系統基礎代碼實現:實現智能健康監測系統 4.1 數據采集模塊 4.2 數據處理與分析模塊 4.3 通信與網絡系統實現 4.4 用戶界面與數據可視化應用場景:健康監測與優化問題解決方案與優化收尾與總結 1. 引言 智能健康監測系統通…

k8s 容器環境下的鏡像如何轉換為docker 使用

在無法連接registry 的環境中,想要把 crictl 中的鏡像給docker 使用,應該怎么處理? 其實容器鏡像是通用的,crictl 和ctr 以及docker 鏡像是可以互相使用的,因為docker 在1.10版本之后遵從了OCI。所以crictl 環境下的鏡…

Android Studio 的Gradle下載慢,Gradle切換下載源

看圖 下面的文字地址因為轉義符號的問題,https后面少了一個斜杠看圖片進行補充,直接復制不知道能不能用 distributionUrlhttps://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip

浪潮服務器內存物理插槽位置

浪潮服務器內存物理插槽位置 如下圖所示

Doze和AppStandby白名單配置方法和說明

機制 配置路徑 配置案例 說明 影響機制 調試命令 Doze /platform/frameworks/base /data/etc/platform.xml allow-in-power-save 【系統應用Doze白名單配置】 Doze\Job\AppStandby\Alarm\WakeLock\Sync 查看Doze白名單:adb shell dumpsys deviceidle 添加Doze白名單…

漏洞挖掘之信息搜集(一)

本篇文章只從信息搜集的步驟整理 一、選好你要挖掘的src 這一點一定要明確,定好一個,然后下定決心一定要挖到一個高危 常見src總結: 360眾測(需要考核) 漏洞盒子(還可以,審核很慢)----基本無要求 補天:有錢,但要求高,百度收錄占比權重大于等于1或者或者谷歌權…

前端進階全棧計劃:Java基礎語法

前言 本教程旨在幫助初學者系統地掌握Java的基礎知識。我們將從Java的基本語法開始,逐步深入到面向對象編程、異常處理、多線程編程等核心概念。無論你是編程新手,還是希望夯實基礎的開發者,這份指南都將帶你走進Java的世界,打下堅…

昇思MindSpore學習筆記6-06計算機視覺--Vision Transormer圖像分類

摘要: 記錄MindSpore AI框架使用ViT模型在ImageNet圖像數據分類上進行訓練、驗證、推理的過程和方法。包括環境準備、下載數據集、數據集加載、模型解析與構建、模型訓練與推理等。 一、概念 1. ViT模型 Vision Transformer 自注意結構模型 Self-Attention Tran…

MySQL(基礎篇)

DDL (Data Definition Language) 數據定義語言,用來定義數據庫對象(數據庫,表, 字段) DML (Data Manipulation Languag) 數據操作語言,用來對數據庫表中的數據進行增刪改 DQL (Data Query Language) 數據查詢語言,用…