內(nèi)核的主要職責(zé)是進(jìn)程調(diào)度,比如當(dāng)一個進(jìn)程阻塞時,它會調(diào)度另外一個進(jìn)程來執(zhí)行。 那當(dāng)沒有進(jìn)程可以調(diào)度時,內(nèi)核在做什么呢? 此時,內(nèi)核會進(jìn)入到idle狀態(tài),其大致邏輯是:
while(1) {
while(!need_resched()) {// 判斷是否有其他進(jìn)程可執(zhí)行
asm("hlt");// 如果沒有,則執(zhí)行hlt指令
}
schedule_idle();// 如果有,則轉(zhuǎn)而執(zhí)行其他進(jìn)程
}
由上可見,當(dāng)沒有其他進(jìn)程可執(zhí)行時,idle循環(huán)里會一直執(zhí)行hlt匯編指令,該指令的作用是暫停cpu的執(zhí)行,直到有中斷等情況發(fā)生時。 當(dāng)有中斷發(fā)生時,比如內(nèi)核接收到了新的tcp包,此時某個進(jìn)程會從阻塞狀態(tài)轉(zhuǎn)變?yōu)榭蓤?zhí)行狀態(tài)。
當(dāng)中斷邏輯執(zhí)行完畢后,上面的idle循環(huán)也會從halt狀態(tài)退出,繼續(xù)循環(huán)執(zhí)行need_resched()函數(shù),此時該函數(shù)返回true,表示有其他進(jìn)程可執(zhí)行,這樣該邏輯會退出hlt循環(huán),繼續(xù)執(zhí)行schedule_idle()函數(shù),schedule_idle()函數(shù)的作用是從idle進(jìn)程切換到目標(biāo)進(jìn)程,進(jìn)而執(zhí)行其對應(yīng)的代碼。
這樣,內(nèi)核就從idle狀態(tài),退回到了正常的進(jìn)程調(diào)度狀態(tài)。
當(dāng)其他所有進(jìn)程又都執(zhí)行完畢,又都進(jìn)入到了阻塞狀態(tài),導(dǎo)致內(nèi)核沒有進(jìn)程可調(diào)度時,內(nèi)核邏輯又會切換到上述idle循環(huán)代碼,從schedule_idle()函數(shù)后繼續(xù)執(zhí)行,即進(jìn)入下一次循環(huán)。
上面的idle循環(huán)在內(nèi)核中也是以一個進(jìn)程來表示的,它的pid是0,它的名字是swapper。
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
PID
+關(guān)注
關(guān)注
38文章
1500瀏覽量
91252 -
中斷
+關(guān)注
關(guān)注
5文章
917瀏覽量
43772 -
TCP通信
+關(guān)注
關(guān)注
0文章
146瀏覽量
4846
原文標(biāo)題:當(dāng)沒有進(jìn)程可調(diào)度時,內(nèi)核在做什么呢?
文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
Linux內(nèi)核進(jìn)程管理與調(diào)度:策略優(yōu)化與實(shí)踐分析
與之相關(guān)的優(yōu)先級,如果有多個可執(zhí)行的進(jìn)程等待CPU資源,那么具有更高優(yōu)先級的進(jìn)程將優(yōu)先被調(diào)度執(zhí)行。今天就給大家講解一下Linux內(nèi)核中的進(jìn)程
發(fā)表于 05-08 09:42
?1606次閱讀
深入Linux內(nèi)核:進(jìn)程調(diào)度的核心邏輯與實(shí)現(xiàn)細(xì)節(jié)
,背后都離不開內(nèi)核調(diào)度算法的精準(zhǔn)操控。今天,我們就從優(yōu)先級、調(diào)度算法、時間片分配到底層實(shí)現(xiàn),全方位拆解Linux內(nèi)核進(jìn)程
labview的工程師在做什么呢?
會labview的工程師在做什么呢??要找工作了,想給自己一個定位,想問下大家,我本專業(yè)是機(jī)械的,碩士做了兩年關(guān)于labview控制的數(shù)據(jù)采集系統(tǒng),想了解下大家的現(xiàn)狀!交流交流哈!
發(fā)表于 03-30 09:39
干貨分享:基于嵌入式Linux中進(jìn)程調(diào)度實(shí)現(xiàn)方法
。處于該狀態(tài)的進(jìn)程通過其他進(jìn)程的信號才能被喚醒。 2.2 調(diào)度方式Linux 中的每個進(jìn)程都分配有一個相對獨(dú)立的虛擬地址空間。該虛存空間分為兩部分:用戶空間包含了
發(fā)表于 12-10 14:17
【HarmonyOS】鴻蒙內(nèi)核源碼分析(調(diào)度機(jī)制篇)
的不同,Task是調(diào)度層面的概念,線程是進(jìn)程層面概念。比如 main() 函數(shù)中首個函數(shù) OsSetMainTask(); 就是設(shè)置啟動任務(wù),但此時啥都還沒開始呢,Kprocess 進(jìn)程
發(fā)表于 10-14 14:00
鴻蒙內(nèi)核源碼分析(調(diào)度機(jī)制篇):Task是如何被調(diào)度執(zhí)行的
(); 就是設(shè)置啟動任務(wù),但此時啥都還沒開始呢,Kprocess 進(jìn)程都沒創(chuàng)建,怎么會有大家一般意義上所理解的線程呢。狹義上的后續(xù)有 鴻蒙內(nèi)核源碼分析(啟動過程篇) 來說明。不知道大家
發(fā)表于 11-23 10:53
鴻蒙內(nèi)核源碼分析(調(diào)度隊列篇):進(jìn)程和Task的就緒隊列對調(diào)度的作用
OsTaskPriQueueTop查最高優(yōu)先級任務(wù)OsDequeEmptySchedMap進(jìn)程出列[td]OsGetTopTask獲取被調(diào)度選擇的task鴻蒙內(nèi)核進(jìn)程和線程各有32個就
發(fā)表于 11-23 11:09
Linux進(jìn)程調(diào)度的原理解析
進(jìn)程調(diào)度依據(jù) 調(diào)度程序運(yùn)行時,要在所有可運(yùn)行狀態(tài)的進(jìn)程中選擇最值得運(yùn)行的進(jìn)程投入運(yùn)行。選擇進(jìn)程的
發(fā)表于 11-02 11:01
?1次下載
uClinux進(jìn)程調(diào)度器的實(shí)現(xiàn)分析
分享到:標(biāo)簽:uClinux 調(diào)度策略 進(jìn)程調(diào)度器 摘要:針對操作系統(tǒng)中進(jìn)程的調(diào)度機(jī)制,依次對其調(diào)度
發(fā)表于 11-06 14:30
?0次下載
Linux 進(jìn)程調(diào)度淺析
的優(yōu)先級,如果有多個進(jìn)程同時處于可執(zhí)行狀態(tài),那么誰優(yōu)先級高誰就去執(zhí)行,沒有什么好糾結(jié)的了。那么,進(jìn)程的優(yōu)先級該如何確定呢?有兩種方式:由用戶程序指定、由
發(fā)表于 04-02 14:40
?556次閱讀
linux進(jìn)程調(diào)度淺析
進(jìn)程定義優(yōu)先級。定義了進(jìn)程的優(yōu)先級,如果有多個進(jìn)程同時處于可執(zhí)行狀態(tài),那么誰優(yōu)先級高誰就去執(zhí)行,沒有什么好糾結(jié)的了。那么,進(jìn)程的優(yōu)先級該如何
發(fā)表于 04-02 14:45
?540次閱讀
鴻蒙內(nèi)核源碼分析:task是內(nèi)核調(diào)度的單元
從系統(tǒng)的角度看,線程是競爭系統(tǒng)資源的最小運(yùn)行單元。線程可以使用或等待CPU、使用內(nèi)存空間等系統(tǒng)資源,并獨(dú)立于其它線程運(yùn)行。
鴻蒙內(nèi)核每個進(jìn)程內(nèi)的線程獨(dú)立運(yùn)行、獨(dú)立調(diào)度,當(dāng)前進(jìn)程內(nèi)線程
發(fā)表于 11-23 15:51
?22次下載
鴻蒙內(nèi)核源碼分析:進(jìn)程和Task的就緒隊列對調(diào)度的作用
鴻蒙內(nèi)核代碼中有兩個源文件是關(guān)于隊列的,一個是用于調(diào)度的隊列,另一個是用于線程間通訊的IPC隊列。 鴻蒙內(nèi)核進(jìn)程和線程各有32個就緒隊列,進(jìn)程
發(fā)表于 11-23 15:48
?31次下載
帶大家看看Linux內(nèi)核如何調(diào)度進(jìn)程的
部分,打開調(diào)度器的黑匣子,來看看Linux內(nèi)核如何調(diào)度進(jìn)程的。實(shí)際上,進(jìn)程調(diào)度器主要做兩件事:選
當(dāng)沒有進(jìn)程可調(diào)度時內(nèi)核在做什么呢?
評論