麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 服務器 > Linux服務器 > 正文

詳解Linux內核進程調度函數schedule()的觸發和執行時機

2024-09-05 23:04:34
字體:
來源:轉載
供稿:網友

內核的調度操作分為觸發和執行兩個部分,觸發時僅僅設置一下當前進程的TIF_NEED_RESCHED標志,執行的時候則是通過schedule()函數來完成進程的選擇和切換。當前進程的thread_info->flags中TIF_NEED_RESCHED位表示需要調用schedule()函數進行調度。內核在兩種情況下會設置該標志,一個是在時鐘中斷進行周期性的檢查時,另一個是在被喚醒進程的優先級比正在運行的進程的優先級高時。

周期性地更新當前任務的狀態時:

定時中斷處理函數中會調用schedule_tick()用于處理關于調度的周期性檢查和處理,其調用路徑是和時鐘處理有關的tick_periodic()->update_process_times()->scheduler_tick()或者tick_sched_handle()->update_process_times()->scheduler_tick(),主要用于更新就緒隊列的時鐘、CPU負載和當前任務的運行時間統計等,如下所示:

//linux-3.13/kernel/sched/core.cvoid scheduler_tick(void){  int cpu = smp_processor_id();         //獲取當前cpu編號  struct rq *rq = cpu_rq(cpu);         //取得對應cpu的rq(就緒隊列)  struct task_struct *curr = rq->curr;     //獲取當前運行的任務  sched_clock_tick();  raw_spin_lock(&rq->lock);  update_rq_clock(rq);             //更新隊列時鐘  curr->sched_class->task_tick(rq, curr, 0);  //調用當前任務的調度類對應的函數  update_cpu_load_active(rq);          //更新本處理器的負載  raw_spin_unlock(&rq->lock);  perf_event_task_tick();#ifdef CONFIG_SMP  rq->idle_balance = idle_cpu(cpu);  trigger_load_balance(rq, cpu);        //必要時進行負載均衡#endif  rq_last_tick_reset(rq);}

其中curr->sched_class->task_tick(rq, curr, 0);這行代碼調用了當前任務的調度類的task_tick()函數,這個函數根據具體情況決定是否需要對當前任務設置TIF_NEED_RESCHED標志,如果需要則最終調用set_tsk_need_resched()設置該標志。需要注意的是,此處僅僅是設置標志而沒有執行schedule()函數,在各種系統調用、中斷的返回代碼最后,才會根據這個標志來決定是否執行schedule()函數。

睡眠的任務被喚醒時:

當睡眠任務所等待的事件到達時,內核(例如驅動程序的中斷處理函數)將會調用wake_up()喚醒相關的任務,并最終調用try_to_wake_up()。它完成三件事:將任務重新添加到就緒隊列,將運行標志設置為TASK_RUNNING,如果被喚醒的任務可以搶占當前運行任務則設置當前任務的TIF_NEED_RESCHED標志。

設置了TIF_NEED_RESCHED標志之后,真正調用執行schedule()函數的時機只有兩種,第一種是系統調用或者中斷返回時,根據TIF_NEED_RESCHED標志決定是否調用schedule()函數(從效率方面考慮,趁著還在內核態把該處理的事情處理完畢);第二種情況是當前任務因為原因需要睡眠,進程睡眠后立即調用schedule()函數,在內核中這種情況也比較多,比如磁盤、網卡等設備驅動程序中。

參考文獻:《Linux技術內幕》

PS:剛開始學習Linux內核的時候很容易被各種結構體各種概念充斥腦海,一團亂麻。這時候需要把它們各自負責的功能以及之間相互的配合理清楚,推薦這本書。看完《Linux內核設計與實現》后可以相互比照,效果不錯。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: h视频免费在线观看 | 国产精品自拍片 | 日本高清无遮挡 | av影院在线播放 | 欧美四级在线观看 | 视频在线91 | 欧美日韩国产成人在线观看 | 免费看成人av | 99爱视频在线观看 | 成人做爰www免费看 欧美精品免费一区二区三区 | 中国产一级毛片 | 亚洲电影免费观看国语版 | 免费91在线 | 看片一区二区三区 | 欧美三级日本三级少妇99 | 免费看a级片 | 欧美久久久一区二区三区 | 久久亚洲成人网 | av在线免费观看播放 | 久久男| xxxxhd73国产| 免费黄色小视频网站 | 欧美性成人 | 国产精品99精品 | 渔夫荒淫艳史 | 日韩中文字幕三区 | 久久久电影电视剧免费看 | 国产一区二区三区四 | 成人在线观看一区 | 午夜视频国产 | 欧美人与性禽动交精品 | 欧美一级做a | 亚洲第一激情 | 国产成人自拍视频在线观看 | 久久精品视频首页 | 啊~用cao嗯力cao烂我视频 | 热99re久久免费视精品频软件 | 欧美一级片一区 | 毛片成人网 | 日韩毛片免费观看 | 日本成人在线播放 |