爲什麼中斷處理程序正在執行時不能執行上下文切換?更具體地說,在linux內核中,中斷處理程序在被中斷的進程的上下文中運行。爲什麼不可能在中斷處理程序中執行上下文切換來安排另一個進程?中斷處理程序中的上下文切換
4
A
回答
7
在多處理器上,上下文切換當然可以在中斷處理程序執行時發生。事實上,這是很難預防的。
在單CPU機器上,根據定義,它一次只能運行一個控制線程。它只有一個寄存器組,一個ALU等。所以如果中斷處理程序正在運行,那麼根本沒有資源可以執行上下文切換。
現在,如果你的意思是,中斷處理程序實際上是否可以調用上下文切換代碼,並且會使發生,那麼,我想在一些可以工作的系統上。但對大多數人來說,這不會有太多的價值,而且很難安排。 CPU以高優先級運行,並且該優先級不能降低或中斷級之間的同步丟失。操作系統中的關鍵部分已經與中斷執行同步,這會引入複雜性。此外,上下文切換通過改變堆棧發生,就像在線程用戶模式程序中一樣,所以很難想象當需要中斷堆棧來從中斷返回時如何發生這種情況。
3
一對夫婦的原因,我想,這取決於你的問題的含義是:
中斷通常是硬件交互。硬件通常是時間敏感的,所以操作系統不能停止在某件事情中處理它,並在感覺到它時回來。
中斷髮生在特殊的中斷上下文中,而不是常規的過程上下文。由於它不在一個進程中,因此它不會像正常進程那樣受上下文切換的影響。
可能會有更好,更深入的解釋,但這是我對此事的理解程度。
相關問題
- 1. 如何在中斷處理程序中進行上下文切換?
- 2. 線程上下文切換vs進程上下文切換
- 3. 當中斷處理程序被另一箇中斷中斷時,中斷上下文如何「恢復」?
- 4. 在中斷處理程序
- 5. 切斷預處理程序行
- 6. 處理中斷的程序,即中斷處理程序存儲在哪裏?
- 7. python如何處理線程鎖定/上下文切換?
- 8. 程序檢測上下文切換
- 9. 文件處理程序下載中斷+會話不見了
- 10. 如何在python程序中處理文件從窗口切換
- 11. 程序集編程和中斷處理
- 12. 如何在多核處理器上完成線程的上下文切換?
- 13. 處理應用程序上下文
- 14. 處理中斷下載
- 15. 從進程上下文切換切換線程上下文有多好?
- 16. 在軟件中斷期間,cpu是否切換到中斷上下文?
- 17. 阻止調度程序在Java中執行上下文切換
- 18. 上下文切換問題:管理上下文切換涉及哪部分OS?
- 19. 當中斷髮生時內核如何處理進程上下文中的鎖?
- 20. 在e4 rcp中處理程序的切換圖像
- 21. 如何在netty中的2組處理程序之間切換
- 22. 下拉切換不能從事件處理程序工作
- 23. EmberJS中的上下文RSVP錯誤處理程序
- 24. 關於Android中的活動上下文和處理程序
- 25. BlockingQueue中的上下文切換開銷
- 26. C中的切換上下文
- 27. javascript中的雙上下文切換
- 28. x86:中斷處理程序循環
- 29. 起價中斷處理程序
- 30. 中斷處理程序時間記帳
感謝您的回覆。我的意思是調用schedule()的中斷處理程序。您能否詳細說明「很難想象當需要從中斷返回中斷堆棧時會發生什麼?」? – Bandicoot 2011-01-19 07:06:34