內(nèi)核的調(diào)度操作分為觸發(fā)和執(zhí)行兩個(gè)部分,觸發(fā)時(shí)僅僅設(shè)置一下當(dāng)前進(jìn)程的TIF_NEED_RESCHED標(biāo)志,執(zhí)行的時(shí)候則是通過schedule()函數(shù)來完成進(jìn)程的選擇和切換。當(dāng)前進(jìn)程的thread_info->flags中TIF_NEED_RESCHED位表示需要調(diào)用schedule()函數(shù)進(jìn)行調(diào)度。內(nèi)核在兩種情況下會(huì)設(shè)置該標(biāo)志,一個(gè)是在時(shí)鐘中斷進(jìn)行周期性的檢查時(shí),另一個(gè)是在被喚醒進(jìn)程的優(yōu)先級(jí)比正在運(yùn)行的進(jìn)程的優(yōu)先級(jí)高時(shí)。
周期性地更新當(dāng)前任務(wù)的狀態(tài)時(shí):
定時(shí)中斷處理函數(shù)中會(huì)調(diào)用schedule_tick()用于處理關(guān)于調(diào)度的周期性檢查和處理,其調(diào)用路徑是和時(shí)鐘處理有關(guān)的tick_periodic()->update_process_times()->scheduler_tick()或者tick_sched_handle()->update_process_times()->scheduler_tick(),主要用于更新就緒隊(duì)列的時(shí)鐘、CPU負(fù)載和當(dāng)前任務(wù)的運(yùn)行時(shí)間統(tǒng)計(jì)等,如下所示:
//linux-3.13/kernel/sched/core.c void scheduler_tick(void) { int cpu = smp_processor_id(); //獲取當(dāng)前cpu編號(hào) struct rq *rq = cpu_rq(cpu); //取得對(duì)應(yīng)cpu的rq(就緒隊(duì)列) struct task_struct *curr = rq->curr; //獲取當(dāng)前運(yùn)行的任務(wù) sched_clock_tick(); raw_spin_lock(&rq->lock); update_rq_clock(rq); //更新隊(duì)列時(shí)鐘 curr->sched_class->task_tick(rq, curr, 0); //調(diào)用當(dāng)前任務(wù)的調(diào)度類對(duì)應(yīng)的函數(shù) update_cpu_load_active(rq); //更新本處理器的負(fù)載 raw_spin_unlock(&rq->lock); perf_event_task_tick(); #ifdef CONFIG_SMP rq->idle_balance = idle_cpu(cpu); trigger_load_balance(rq, cpu); //必要時(shí)進(jìn)行負(fù)載均衡 #endif rq_last_tick_reset(rq); }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞標(biāo)題:詳解Linux內(nèi)核進(jìn)程調(diào)度函數(shù)schedule()的觸發(fā)和執(zhí)行時(shí)機(jī)-創(chuàng)新互聯(lián)
分享鏈接:http://m.newbst.com/article46/dcephg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄、網(wǎng)站建設(shè)、電子商務(wù)、域名注冊、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容