2011-01-19 57 views
4

爲什麼中斷處理程序正在執行時不能執行上下文切換?更具體地說,在linux內核中,中斷處理程序在被中斷的進程的上下文中運行。爲什麼不可能在中斷處理程序中執行上下文切換來安排另一個進程?中斷處理程序中的上下文切換

回答

7

在多處理器上,上下文切換當然可以在中斷處理程序執行時發生。事實上,這是很難預防的。

在單CPU機器上,根據定義,它一次只能運行一個控制線程。它只有一個寄存器組,一個ALU等。所以如果中斷處理程序正在運行,那麼根本沒有資源可以執行上下文切換。

現在,如果你的意思是,中斷處理程序實際上是否可以調用上下文切換代碼,並且會使發生,那麼,我想在一些可以工作的系統上。但對大多數人來說,這不會有太多的價值,而且很難安排。 CPU以高優先級運行,並且該優先級不能降低或中斷級之間的同步丟失。操作系統中的關鍵部分已經與中斷執行同步,這會引入複雜性。此外,上下文切換通過改變堆棧發生,就像在線程用戶模式程序中一樣,所以很難想象當需要中斷堆棧來從中斷返回時如何發生這種情況。

+0

感謝您的回覆。我的意思是調用schedule()的中斷處理程序。您能否詳細說明「很難想象當需要從中斷返回中斷堆棧時會發生什麼?」? – Bandicoot 2011-01-19 07:06:34

3

一對夫婦的原因,我想,這取決於你的問題的含義是:

  1. 中斷通常是硬件交互。硬件通常是時間敏感的,所以操作系統不能停止在某件事情中處理它,並在感覺到它時回來。

  2. 中斷髮生在特殊的中斷上下文中,而不是常規的過程上下文。由於它不在一個進程中,因此它不會像正常進程那樣受上下文切換的影響。

可能會有更好,更深入的解釋,但這是我對此事的理解程度。

相關問題