2013-10-12 178 views
-1

我對某些Linux內核調度有些懷疑。Linux內核多核問題

1) Does linux kernel(schedular to be specific) always runs on CPU-0? 
2) One Scenario:  
    One kernel thread running on CPU - 0, goes into sleep with interrupts disabled.  
    In this case, will the schedular run on other CPU? 
    if Yes, how is the selection made out of the remaining core so as to which will run  
    the schedular, is this decision made while disabling interrupts on CPU - 0? 

回答

3

調度器只是一段代碼(尤其是schedule()函數)。像大多數內核的其他部分一樣,它可以在任何被調用的CPU上運行。

調度程序在某個線程想要休眠或處理中斷後被調用;這可能發生在所有的CPU上。

1

1)Linux內核(schedular具體)總是運行在CPU-0上嗎? (不,調度器可以在任何CPU內核的運行。)

2)一個場景:
CPU上運行一個內核線程 - 0,進入禁用中斷睡眠。
在這種情況下,它會在其他CPU上運行嗎? (在CPU-0上運行的線程進入睡眠狀態,這意味着線程 會自動退出CPU。睡眠代碼將調用Linux調度程序,調度程序將選擇另一個線程/進程來運行。這要注意與中斷。禁用中斷(例如,定時器中斷),可以停止線程被中斷並按照其意願調度到CPU。)

如果是,那麼選擇如何從剩餘的核心至於哪個將會運行
schedular,這是在禁止CPU-0上的中斷的同時作出的決定?

(希望對您有所幫助!)