2014-08-29 76 views
2

這個問題與linux調度和處理器活動有關,它可能正在做一些積極的事情,或者處於空閒/等待狀態或可能正在休眠的線程中的不同階段。當一個線程正在做某事時,處理器將執行指令(並且處理器吞吐量,即它每秒執行的指令數量)會很高。我的任務是處理器在線程正在等待還是在休眠時的行爲(可能大致)?等待的線程可以睡覺嗎?當線程正在休眠時,是否意味着處理器空閒?當處理器空閒時,是否意味着所有線程都在睡眠?當處理器空閒時,Linux是否真正將處理器置於不執行任何指令(即時鐘門控)的模式?等待的線程是否可以睡覺?

+0

可能的重複:http://stackoverflow.com/questions/1719071/how-is-sleep-implemented-at-os-level/1719092#1719092 – Coconop 2014-08-29 08:43:32

+0

'當線程正在休眠時,是否意味着處理器處於空閒狀態' - 只是提及'處理器空閒'。當你的進程正在休眠的時候_Linux內核實際上正在處理中斷並做很多事情。所以我認爲你必須考慮Linux內核活動以及你的線程活動。 – 2014-08-29 08:50:40

回答

0

當一個線程是睡眠它實際上是等待爲操作系統把它放入執行隊列。當線程要求操作系統在一段時間內中斷線程本身時發生睡眠。通常通過使用sleep()功能來實現。操作系統將線程從執行隊列中移除所需的時間,並在完成時繼續運行線程。其他I/O函數的作用方式類似:如果線程調用read(),則操作系統將從執行隊列中刪除線程,直到正在讀取資源中的數據。

另一方面,處理器是空閒當它沒有代碼運行,也沒有任何硬件事件要參加。空閒狀態是硬件狀態:CPU不運行代碼,只是等待某些事件發生(即:調度計時器或I/O中斷),這些事件會通知處理器運行代碼。 8086處理器可以通過執行HLT(停止)指令來實現空閒狀態。在運行HLT後,處理器停止運行代碼,直到收到硬件中斷(如上面列出的那些中斷)爲止。