如果無事可做(包括SMP),而不是「無所事事」,爲什麼linux內核運行空閒線程?爲什麼linux內核需要空閒線程?
3
A
回答
3
當調度程序決定切換到空閒任務時,此時動態滴答開始工作,通過禁用週期性滴答直到下一個定時器到期。在此時間段之後或者在某個時間發生中斷時,tick將被重新啓用。
與此同時,CPU將按照架構特定的方式進行當之無愧的睡眠,從而節省您的能量。看看arch/x86/kernel/process.c中的cpu_idle()
的定義。
/*
* The idle thread. There's no useful work to be
* done, so just try to conserve power and have a
* low exit latency (ie sit in a loop waiting for
* somebody to say that they'd like to reschedule)
*/
void cpu_idle(void)
2
你是什麼意思「無所事事」?
當CPU通電時,會發生一系列相當長的事情。一旦通電,CPU不能「無所事事」。由於存在電壓和週期性時鐘信號,它必須做一些事情。你可以再次關閉它,絕對不會做任何事情,但是當你再次需要時,你必須通過一長串事情來獲得穩定的時鐘信號。
所以空閒線程是一個線程,它是最小的。即如果乘以兩個浮點數需要最少的週期數和最少的電子電路數;那麼空閒線程會一直乘以兩個浮點數。另外,正如Wang所說,Linux內核(在某些配置中)會監視內核開始執行空閒線程並將其切換到較低頻率時禁用任何類型的定期OS內部維護。當需要內核時,這會導致一些延遲,但這樣會導致使用的功率更低。
相關問題
- 1. Linux內核空閒循環
- 2. 爲什麼需要線程
- 3. 爲什麼我們需要內核空間?
- 4. 爲什麼Linux內核線程會佔用cpu
- 5. linux - 內核線程搶佔
- 6. Linux內核線程問題
- 7. 爲什麼使用libusb需要卸載內核驅動程序?
- 8. linux內核的內核地址空間的佈局是什麼?
- 9. 爲什麼Netty需要線程池?
- 10. 爲什麼需要Java線程?
- 11. 什麼內核線程負責在Linux內核中發送網絡包
- 12. 什麼是Linux內核源
- 13. Linux內核源header.S,爲什麼歸零BSS時_end + 3需要的?
- 14. 爲什麼Linux內核函數filp_close中的posix線程id可能爲NULL?
- 15. 核心數據:爲什麼需要NSFetchedResultsControllerDelegate?
- 16. 一個線程需要2秒,10個線程需要16-18秒。爲什麼?
- 17. 爲什麼我需要在Linux內核升級後重新編譯vmware內核模塊?
- 18. Linux內核線程 - 調度程序
- 19. 什麼是內核線程調度?
- 20. 爲什麼要使用線程時需要子進程
- 21. 什麼時候Windows線程需要消息循環,爲什麼?
- 22. 外鍵可爲空。爲什麼需要?
- 23. 爲什麼我們需要cudaDeviceSynchronize();在device-printf的內核中?
- 24. 爲什麼系統調用需要切換到內核模式?
- 25. 爲什麼建立和使用內核模塊需要depmod?
- 26. 我需要爲Nexus 6p下載什麼內核?
- 27. 什麼是「內核(唯一)線程」而不是「內核級線程」?
- 28. 的Linux用戶空間線程,內核線程,輕量級進程
- 29. 線程空閒指針
- 30. 關閉空閒線程ExecutorService
你會在哪裏開空閒時間? – kmkaplan