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