Linux 任務調度在進程管理中的關系和運行機制


📖 推薦閱讀:《Yocto項目實戰教程:高效定制嵌入式Linux系統》
🎥 更多學習視頻請關注 B 站:嵌入式Jerry


Linux 任務調度在進程管理中的關系和運行機制

Linux 內核中的“任務調度”是進程管理系統的核心部分,相互關聯而且分工明確。本文通過概念分析、模型分布、行為模式、調度策略、管理工具、代碼示例和流程總結,全面講解 Linux 任務調度在進程管理中的作用和機制。


在這里插入圖片描述

一、任務 vs 進程:基本概念分清

概念含義
進程 (Process)抽象的運行單元,擁有獨立的虛擬地址空間和資源
線程 (Thread)進程內部的執行流
任務 (Task)Linux 內核中對進程和線程的通用統一概念,對應一個 task_struct 結構,是調度的基本單元

同一進程內的多個線程,將在內核中分別代表為多個 task


二、調度系統結構與模式

Linux 調度系統分為以下幾個層級:

1. 調度器(Scheduler)

  • 核心模塊,管理所有任務的調度邏輯。
  • 入口函數如 schedule()pick_next_task()context_switch()

2. 調度行為(Scheduling Behavior)

定義內核是否允許任務在運行中被中斷(即“搶占”)。

模式名稱說明
搶占式Preemptive當前任務可以隨時被更高優先級任務搶占 CPU,適合響應敏感系統(Linux 默認支持)
非搶占式Non-preemptive當前任務必須主動放棄 CPU(如阻塞或退出),適合嵌入式、批處理任務等

注意:搶占式是一種調度行為,不是調度策略,它適用于不同調度策略下的調度邏輯實現。

3. 調度策略(Scheduling Policy)

調度器采用不同策略決定如何選擇任務。

策略類型搶占行為說明
SCHED_NORMAL (CFS)非實時搶占式默認策略,基于虛擬運行時間(vruntime)公平調度
SCHED_FIFO實時非搶占式先來先服務,不自動讓出 CPU,適合控制系統
SCHED_RR實時搶占式時間片輪轉,適合需要時間約束的實時任務
SCHED_DEADLINE實時搶占式基于截止時間和周期調度,用于軟/硬實時系統

三、任務調度流程:從狀態到切換

任務狀態:

狀態說明
TASK_RUNNING可調度,或正在運行
TASK_INTERRUPTIBLE等待被中斷喚醒
TASK_UNINTERRUPTIBLE不可被中斷,用于硬件阻塞操作
TASK_DEAD任務結束,正在回收資源

調度進程切換流程:

正在運行的任務 A||規則觸發 (CPU 用完 / 阻塞 / 有高優先級任務)|schedule()|pick_next_task()|context_switch(A, B)|
切換到 B 執行

四、調度管理工具

工具功能
ps / top / htop查看運行任務信息
chrt設置或查詢任務的調度策略(如 FIFO、RR)
taskset設置 CPU 給任務的親和性(CPU affinity)
schedtool更細化設置調度策略和優先級
/proc/[pid]/sched查看進程調度信息結構體

五、代碼實戰:兩個線程設置不同調度策略

#include <pthread.h>
#include <sched.h>
#include <stdio.h>
#include <unistd.h>void *low_task(void *) {while (1) {printf("low priority running\n");sleep(1);}
}void *high_task(void *) {while (1) {printf("HIGH priority running\n");sleep(1);}
}int main() {pthread_t t1, t2;struct sched_param param;pthread_create(&t1, NULL, low_task, NULL);pthread_create(&t2, NULL, high_task, NULL);param.sched_priority = 10;  // lowpthread_setschedparam(t1, SCHED_RR, &param);param.sched_priority = 80;  // highpthread_setschedparam(t2, SCHED_RR, &param);pthread_join(t1, NULL);pthread_join(t2, NULL);return 0;
}

通過 pthread_setschedparam 分別設置不同線程的調度策略與優先級,可觀察搶占調度行為,高優線程會頻繁搶占 CPU。


六、調度模型補充說明:是否還有其他調度模式?

除了搶占式與非搶占式,還有以下相關概念值得補充:

1. 自愿搶占(Voluntary Preemption)

  • Linux 內核配置中 CONFIG_PREEMPT_VOLUNTARY
  • 表示僅在特定調度點(如 IO 阻塞、顯式調用 schedule())才允許切換。
  • 優點是可控性好,適合桌面/服務器系統,缺點是實時性較差。

2. 強制搶占(Fully Preemptible)

  • CONFIG_PREEMPT
  • 表示內核大多數路徑都允許被搶占,適合響應及時性高的系統。

3. 實時搶占補丁(PREEMPT_RT)

  • 加強版本的內核實時性特性,幾乎所有內核上下文都可被中斷。
  • 適合工業級/控制系統等嚴格實時場景。

七、總結:調度機制是進程管理的動態執行核心

  • ? 任務是調度的基本對象,所有進程/線程均由 task_struct 管理
  • ? 調度行為定義是否可打斷當前任務(搶占與否)
  • ? 調度策略定義如何選擇下一個任務(如 FIFO、RR、CFS)
  • ? 調度器通過 schedule/pick/context_switch 完成任務切換
  • ? 配套工具(如 chrt、schedtool)是日常開發/調試調度的關鍵武器


📖 推薦閱讀:《Yocto項目實戰教程:高效定制嵌入式Linux系統》
🎥 更多學習視頻請關注 B 站:嵌入式Jerry


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

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

相關文章

JAVA后端開發—— JWT(JSON Web Token)實踐

1. 什么是HTTP請求頭 (Request Headers)&#xff1f;當你的瀏覽器或手機App向服務器發起一個HTTP請求時&#xff0c;這個請求并不僅僅包含你要訪問的URL&#xff08;比如 /logout&#xff09;和可能的數據&#xff08;請求體&#xff09;&#xff0c;它還附帶了一堆“元數據&am…

【SVM smote】MAP - Charting Student Math Misunderstandings

針對數據不平衡問題&#xff0c;用調整類別權重的方式來處理數據不平衡問題&#xff0c;同時使用支持向量機&#xff08;SVM&#xff09;模型進行訓練。 我們通過使用 SMOTE&#xff08;Synthetic Minority Over-sampling Technique&#xff09;進行過采樣&#xff0c;增加少數…

repmgr+pgbouncer實現對業務透明的高可用切換

本方案說明 PostgreSQL repmgr&#xff1a;實現主從自動故障檢測與切換&#xff08;Failover&#xff09;。PgBouncer&#xff1a;作為連接池&#xff0c;屏蔽后端數據庫變動&#xff0c;提供透明連接。動態配置更新&#xff1a;通過repmgr組件的promote_command階段觸發腳本…

查找服務器上存在線程泄露的進程

以下是一個改進的命令&#xff0c;可以列出所有線程數大于200的進程及其PID和線程數&#xff1a; find /proc -maxdepth 1 -type d -regex /proc/[0-9] -exec sh -c for pid_dir dopid$(basename "$pid_dir")if [ -f "$pid_dir/status" ]; thenthreads$(aw…

Facebook 開源多季節性時間序列數據預測工具:Prophet 飽和預測 Saturating Forecasts

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 Prophet 是一種基于加法模型的時間序列數據預測程序&#xff0c;在該模型中&#xff0c;非線性趨勢與年、周、日季節性以及節假日效應相匹配。…

從單線程到云原生:Redis 二十年演進全景與內在機理深剖

——從 1.0 到 7.2&#xff0c;一窺數據結構、網絡模型、持久化、復制、高可用與生態協同的底層脈絡&#xff08;一&#xff09;序章&#xff1a;為什么是 Redis 1999 年&#xff0c;Salvatore Sanfilippo 在開發一個實時訪客分析系統時&#xff0c;發現傳統磁盤型數據庫無法在…

得了甲亢軍隊文職體檢能過嗎

根據軍隊文職體檢現行標準&#xff0c;甲亢患者能否通過體檢需分情況判定&#xff0c;核心取決于病情控制狀態、治療結果及穩定時長。結合《軍隊選拔軍官和文職人員體檢通用標準》及補充規定&#xff0c;具體分析如下&#xff1a;?? 一、可直接通過體檢的情況臨床治愈滿1年且…

【編程語言】C、C++、C#深度對比:三種語言的演進歷程與應用場景

一、語言概述與歷史背景 &#xff08;一&#xff09;C語言&#xff1a;系統編程的基石誕生背景 1972年由Dennis Ritchie在貝爾實驗室開發為了重寫UNIX操作系統而創造從B語言演化而來&#xff0c;增加了數據類型設計目標&#xff1a;簡潔、高效、可移植設計哲學 “相信程序員”&…

《計算機網絡》實驗報告五 DNS協議分析與測量

目 錄 1、實驗目的 2、實驗環境 3、實驗內容 3.1 查看和配置本機的DNS系統 3.2 DNS信息測量 3.3 DNS協議分析 4、實驗結果與分析 4.1 查看和配置本機的DNS系統 4.2 DNS信息測量 4.3 DNS協議分析 5、實驗小結 5.1 問題與解決辦法&#xff1a; 5.2 心得體會&#x…

Python工廠方法模式詳解:從理論到實戰

一、工廠方法模式核心概念 工廠方法模式&#xff08;Factory Method Pattern&#xff09;是一種創建型設計模式&#xff0c;屬于經典23種設計模式之一。其核心思想是&#xff1a;定義一個創建對象的接口&#xff0c;但將具體對象的實例化過程延遲到子類中實現。這種模式通過引入…

python爬蟲獲取PDF

【前提&#xff1a;菜鳥學習的記錄過程&#xff0c;如果有不足之處&#xff0c;還請各位大佬大神們指教&#xff08;感謝&#xff09;】 1.方法一&#xff1a;網站找到目標數據【單篇PDF】 https://bidding.sinopec.com/tpfront/xxgg/004005/ 按F12&#xff0c;----檢查------…

IFN影視官網入口 - 4K影視在線看網站|網頁|打不開|下載

IFN影視是一個專注于影視內容的網站&#xff0c;提供電影、電視劇、綜藝等各類影視資源的在線觀看服務。該網站以用戶需求為導向&#xff0c;致力于為用戶提供高清、流暢的觀影體驗&#xff0c;并不斷更新內容以滿足不同用戶的觀看習慣和偏好。IFN影視的特色在于其內容豐富、分…

《計算機網絡》實驗報告四 TCP協議分析

目 錄 1、實驗目的 2、實驗環境 3、實驗內容 3.1 利用wget下載新疆大學主頁 3.2 使用wireshark分析TCP報文結構 3.3 使用wireshark分析建立連接的三次握手 3.4 使用wireshark分析釋放連接的四次揮手 4、實驗結果與分析 4.1 利用wget下載新疆大學主頁 4.2 使用wiresh…

知識 IP 的突圍:從 “靠感覺” 到 “系統 + AI” 的變現躍遷

越來越多的知識付費從業者陷入 “努力無成果” 的困局&#xff1a;做了內容、上了課程&#xff0c;卻沒人看、沒人買。核心問題不在于能力不足&#xff0c;而在于仍在用 “靠感覺” 的原始方式打造 IP。在流量內卷、節奏加快的當下&#xff0c;“內容情懷” 已撐不起一門生意&a…

4.Java創建對象有幾種方式?

1.使用 new 關鍵字&#xff08;最常用&#xff09;通過調用類的構造函數直接實例化對象Person person new Person(); // 調用無參構造 Person person new Person("Alice", 25); // 調用有參構造2.反射機制&#xff08;動態創建&#xff09;利用Java反射 API 在運行…

【好題】洛谷 P1600 [NOIP 2016 提高組] 天天愛跑步(倍增LCA+桶)

前言沒做出來&#xff0c;看了很多篇題解后AC了&#xff0c;感覺大部分題解講得不清楚。題目思路結果有兩種求法模擬跑步過程&#xff0c;統計每個節點能觀察到的人數考慮每條路徑會對哪些節點作出貢獻&#xff08;當前路徑的玩家能被觀察到&#xff09;嘗試第一種求法必須遍歷…

valkey之網絡管理架構深度解析

一、連接類型實現體系 valkey通過ConnectionType結構體構建了靈活的網絡連接抽象&#xff0c;支持多種連接類型的統一管理。每種連接類型都通過填充該結構體的函數指針來實現特定功能&#xff0c;形成了面向接口的設計模式。1.1 socket連接 Socket連接提供了最基礎的TCP/IP通信…

【解碼文本世界的“隱形分界線”:Windows與Linux回車換行之謎】

在計算機的文本世界里&#xff0c;回車&#xff08;Carriage Return&#xff0c;CR&#xff09;和換行&#xff08;Line Feed&#xff0c;LF&#xff09;是兩個看似簡單卻意義非凡的字符。它們如同文本中的“隱形分界線”&#xff0c;默默地劃分著段落與行&#xff0c;影響著文…

【Project】ELK 7.17.16 日志分析系統部署

ELK 日志分析系統集群部署 本文檔基于 Rocky Linux 9.4 系統&#xff0c;部署 ELK 7.17.16&#xff08;長期支持版&#xff09;集群 案例準備 1. 節點規劃IP主機名部署組件角色說明192.168.100.150kafka01Elasticsearch、Kibana主節點&#xff08;master&#xff09; 可視化192…

分布式定時任務系列13:死循環是任務觸發的銀彈?

傳送門 分布式定時任務系列1&#xff1a;XXL-job安裝 分布式定時任務系列2&#xff1a;XXL-job使用 分布式定時任務系列3&#xff1a;任務執行引擎設計 分布式定時任務系列4&#xff1a;任務執行引擎設計續 分布式定時任務系列5&#xff1a;XXL-job中blockingQueue的應用 …