<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

當沒有進程可調度時內核在做什么呢?

dyquk4xk2p3d ? 來源:卯時卯刻 ? 2023-05-08 10:02 ? 次閱讀

內核的主要職責是進程調度,比如當一個進程阻塞時,它會調度另外一個進程來執行。 那當沒有進程可以調度時,內核在做什么呢? 此時,內核會進入到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
    PID
    +關注

    關注

    35

    文章

    1449

    瀏覽量

    84218
  • 中斷
    +關注

    關注

    5

    文章

    885

    瀏覽量

    41082
  • TCP通信
    +關注

    關注

    0

    文章

    145

    瀏覽量

    4154

原文標題:當沒有進程可調度時,內核在做什么呢?

文章出處:【微信號:良許Linux,微信公眾號:良許Linux】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux內核進程管理與調度:策略優化與實踐分析

    一個與之相關的優先級,如果有多個可執行的進程等待CPU資源,那么具有更高優先級的進程將優先被調度執行。今天就給大家講解一下Linux內核中的進程
    發表于 05-08 09:42 ?655次閱讀
    Linux<b class='flag-5'>內核</b><b class='flag-5'>進程</b>管理與<b class='flag-5'>調度</b>:策略優化與實踐分析

    labview的工程師在做什么?

    會labview的工程師在做什么??要找工作了,想給自己一個定位,想問下大家,我本專業是機械的,碩士做了兩年關于labview控制的數據采集系統,想了解下大家的現狀!交流交流哈!
    發表于 03-30 09:39

    如何知道進程運行在哪個 CPU 內核上?

    (名為"prog")目前在CPU 內核 10 上運行著。如果該過程沒有被固定,PSR 列會根據內核可能調度進程到不同
    發表于 10-24 15:30

    kernel 26的進程調度

    2.4進程調度只設置了一個進程就緒隊列,這樣有的進程用完了自己時間片以后還要呆在就緒進程隊列里面。這樣這個
    發表于 08-05 07:14

    干貨分享:基于嵌入式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

    鴻蒙內核源碼分析(進程管理篇):進程內核的資源管理單元

    ,實現了進程之間的切換和通信,幫助用戶管理業務程序流程。這樣用戶可以將更多的精力投入到業務功能的實現中。OpenHarmony內核中的進程采用搶占式調度機制,支持時間片輪轉
    發表于 11-24 11:23

    嵌入式工程師必會的 Linux 進程調度所有知識點

    是面向服務器。此配置下,CPU 在計算時,輸入鍵盤之后,因為沒有搶占,可能需要一段時間等待鍵盤輸入的進程才會被 CPU 調度。CONFIG_PREEMPT : 打開搶占,一般多用于手
    發表于 08-01 07:00

    內核態是如何對task進行調度

    調度器在runqueue里的算法是如何去實現的?內核態是如何對task進行調度?
    發表于 12-24 07:59

    uClinux進程調度器的實現分析

    分享到:標簽:uClinux 調度策略 進程調度器 摘要:針對操作系統中進程調度機制,依次對其調度
    發表于 11-06 14:30 ?0次下載

    當 CPU 空閑時它都在做什么?

    人在空閑的時候免不了昏昏欲睡那cpu空閑時在做什么呢?
    的頭像 發表于 03-06 15:43 ?4634次閱讀
    當 CPU 空閑時它都<b class='flag-5'>在做什么</b>?

    Linux進程調度時機概念分析

    Linux在眾多進程中是怎么進行調度的,這個牽涉到Linux進程調度時機的概念,由Linux內核中Schedule()的函數來決定是否要進行
    的頭像 發表于 01-23 17:14 ?2589次閱讀
    Linux<b class='flag-5'>進程</b><b class='flag-5'>調度</b>時機概念分析

    帶大家看看Linux內核如何調度進程

    部分,打開調度器的黑匣子,來看看Linux內核如何調度進程的。實際上,進程調度器主要做兩件事:選
    的頭像 發表于 07-26 15:14 ?1841次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>