日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h )

發布時間:2025/6/17 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、調度器
  • 二、sched_class 調度類結構體





一、調度器



上一篇博客 【Linux 內核】調度器 ( 調度器概念 | 調度器目的 | 調度器主要工作 | 調度器位置 | 進程優先級 | 搶占式調度器 | Linux 進程狀態 | Linux 內核進程狀態 ) 介紹了 " 調度器 " 概念 ,

Linux 內核的 " 進程調度 " 是按照 設計好的調度算法 安排的 , 該算法對應的功能模塊 稱為 " 調度器 " , 英文名稱是 Scheduler ;

" 調度器 " 可以 切換 " 進程狀態 " , 主要是 " 就緒狀態 "" 執行狀態 " 這兩個狀態之間相互切換 ;

" 搶占式調度器 " 概念 : 如果 " 調度器 " 支持 " 就緒狀態 " " 運行狀態 " 之間可以相互轉換 , 則該調度器稱為 " 搶占式調度器 " ;





二、sched_class 調度類結構體



Linux 內核源碼 linux-5.6.18\kernel\sched\sched.h 中 , 定義的 struct sched_class 調度類結構體 , 就是 " 調度器 " 對應的類 ;

struct sched_class 調度類結構體源碼如下 :

struct sched_class {const struct sched_class *next;#ifdef CONFIG_UCLAMP_TASKint uclamp_enabled; #endifvoid (*enqueue_task) (struct rq *rq, struct task_struct *p, int flags);void (*dequeue_task) (struct rq *rq, struct task_struct *p, int flags);void (*yield_task) (struct rq *rq);bool (*yield_to_task)(struct rq *rq, struct task_struct *p, bool preempt);void (*check_preempt_curr)(struct rq *rq, struct task_struct *p, int flags);struct task_struct *(*pick_next_task)(struct rq *rq);void (*put_prev_task)(struct rq *rq, struct task_struct *p);void (*set_next_task)(struct rq *rq, struct task_struct *p, bool first);#ifdef CONFIG_SMPint (*balance)(struct rq *rq, struct task_struct *prev, struct rq_flags *rf);int (*select_task_rq)(struct task_struct *p, int task_cpu, int sd_flag, int flags);void (*migrate_task_rq)(struct task_struct *p, int new_cpu);void (*task_woken)(struct rq *this_rq, struct task_struct *task);void (*set_cpus_allowed)(struct task_struct *p,const struct cpumask *newmask);void (*rq_online)(struct rq *rq);void (*rq_offline)(struct rq *rq); #endifvoid (*task_tick)(struct rq *rq, struct task_struct *p, int queued);void (*task_fork)(struct task_struct *p);void (*task_dead)(struct task_struct *p);/** The switched_from() call is allowed to drop rq->lock, therefore we* cannot assume the switched_from/switched_to pair is serliazed by* rq->lock. They are however serialized by p->pi_lock.*/void (*switched_from)(struct rq *this_rq, struct task_struct *task);void (*switched_to) (struct rq *this_rq, struct task_struct *task);void (*prio_changed) (struct rq *this_rq, struct task_struct *task,int oldprio);unsigned int (*get_rr_interval)(struct rq *rq,struct task_struct *task);void (*update_curr)(struct rq *rq);#define TASK_SET_GROUP 0 #define TASK_MOVE_GROUP 1#ifdef CONFIG_FAIR_GROUP_SCHEDvoid (*task_change_group)(struct task_struct *p, int type); #endif };

總結

以上是生活随笔為你收集整理的【Linux 内核】调度器 ② ( sched_class 调度类结构体源码 | 源码路径 linux-5.6.18\kernel\sched\sched.h )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。