最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Linux內(nèi)核進程調(diào)度函數(shù)schedule()的觸發(fā)和執(zhí)行時機

 更新時間:2018年01月24日 11:23:07   作者:Q_AN1314  
這篇文章主要介紹了詳解Linux內(nèi)核進程調(diào)度函數(shù)schedule()的觸發(fā)和執(zhí)行時機,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

周期性地更新當前任務(wù)的狀態(tài)時:

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

//linux-3.13/kernel/sched/core.c
void scheduler_tick(void)
{
  int cpu = smp_processor_id();         //獲取當前cpu編號
  struct rq *rq = cpu_rq(cpu);         //取得對應(yīng)cpu的rq(就緒隊列)
  struct task_struct *curr = rq->curr;     //獲取當前運行的任務(wù)

  sched_clock_tick();

  raw_spin_lock(&rq->lock);
  update_rq_clock(rq);             //更新隊列時鐘
  curr->sched_class->task_tick(rq, curr, 0);  //調(diào)用當前任務(wù)的調(diào)度類對應(yīng)的函數(shù)
  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);這行代碼調(diào)用了當前任務(wù)的調(diào)度類的task_tick()函數(shù),這個函數(shù)根據(jù)具體情況決定是否需要對當前任務(wù)設(shè)置TIF_NEED_RESCHED標志,如果需要則最終調(diào)用set_tsk_need_resched()設(shè)置該標志。需要注意的是,此處僅僅是設(shè)置標志而沒有執(zhí)行schedule()函數(shù),在各種系統(tǒng)調(diào)用、中斷的返回代碼最后,才會根據(jù)這個標志來決定是否執(zhí)行schedule()函數(shù)。

睡眠的任務(wù)被喚醒時:

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

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

參考文獻:《Linux技術(shù)內(nèi)幕》

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux實現(xiàn)驅(qū)動模塊傳參過程解析

    Linux實現(xiàn)驅(qū)動模塊傳參過程解析

    這篇文章主要介紹了Linux實現(xiàn)驅(qū)動模塊傳參過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Linux的第二網(wǎng)卡的配置全過程

    Linux的第二網(wǎng)卡的配置全過程

    這篇文章主要介紹了Linux的第二網(wǎng)卡的配置全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Linux進程等待和進程替換詳解

    Linux進程等待和進程替換詳解

    本文介紹了Linux系統(tǒng)中進程等待的重要性,包括防止內(nèi)存泄露和獲取子進程狀態(tài),詳細講解了wait()和waitpid()函數(shù)的使用,接著,探討了進程替換的概念,通過exec系列函數(shù)實現(xiàn)程序替換,講解了不同函數(shù)的用法和參數(shù)含義,需要的朋友可以參考下
    2024-12-12
  • Linux下SVN服務(wù)器自動更新文件到Web目錄的方法

    Linux下SVN服務(wù)器自動更新文件到Web目錄的方法

    這篇文章主要介紹了Linux下SVN服務(wù)器自動更新文件到Web目錄的方法,需要的朋友可以參考下
    2015-07-07
  • Linux(CentOS)??同步服務(wù)器chrony的安裝配置和常用命令

    Linux(CentOS)??同步服務(wù)器chrony的安裝配置和常用命令

    Chrony是一款開源的網(wǎng)絡(luò)時間協(xié)議(NTP)客戶端和服務(wù)端軟件,旨在提供高精度的時間同步功能,相較于傳統(tǒng)的NTP實現(xiàn)如ntpd,Chrony提供了一些改進和優(yōu)勢,包括更快的同步速度、低延遲、低CPU占用和低內(nèi)存消耗,本文介紹Linux(CentOS)??同步服務(wù)器chrony的安裝配置和常用命令
    2024-06-06
  • Linux防火墻的配置全過程

    Linux防火墻的配置全過程

    這篇文章主要介紹了Linux防火墻的配置全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • CentOS6升級glibc操作步驟

    CentOS6升級glibc操作步驟

    大家好,本篇文章主要講的是CentOS6升級glibc操作步驟,感興趣的小伙伴趕緊來看一看吧,對你有幫助的話記得收藏本篇文章哦!方便下次瀏覽
    2021-11-11
  • APACHE 配置文件中文版 httpd.conf FOR Apache 2.2.13

    APACHE 配置文件中文版 httpd.conf FOR Apache 2.2.13

    APACHE配置文件中文版 httpd.conf FOR Apache 2.2.13 ,綜合網(wǎng)上2.0版本的翻譯,加入自己的理解,補充完善。
    2009-11-11
  • CentOS 6.4安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)

    CentOS 6.4安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)

    這篇文章主要介紹了CentOS 6.4安裝配置LAMP服務(wù)器(Apache+PHP5+MySQL)的方法,需要的朋友可以參考下
    2013-06-06
  • Ubuntu設(shè)置國內(nèi)鏡像的全部流程

    Ubuntu設(shè)置國內(nèi)鏡像的全部流程

    Ubuntu作為廣泛使用的Linux發(fā)行版,其默認的鏡像源可能因為地理位置和網(wǎng)絡(luò)問題導致下載速度緩慢,本文將指導用戶如何根據(jù)自己所在的地理位置,選擇并設(shè)置最適合的國內(nèi)鏡像源,需要的朋友可以參考下
    2024-06-06

最新評論

孙吴县| 手游| 平湖市| 交城县| 平武县| 巴彦淖尔市| 新安县| 镇沅| 桐乡市| 吉安县| 桐梓县| 锡林郭勒盟| 饶平县| 疏勒县| 昔阳县| 望江县| 长垣县| 琼海市| 合川市| 攀枝花市| 巴彦县| 界首市| 高青县| 汶上县| 洛阳市| 怀远县| 镇江市| 汾阳市| 隆子县| 岗巴县| 福建省| 玛纳斯县| 普兰县| 周口市| 通河县| 墨竹工卡县| 资阳市| 资源县| 蒙阴县| 镇康县| 襄城县|