2012-02-22 27 views
0

我正在關注Linux設備驅動程序。當它引入自旋鎖時,它給出以下示例:如果中斷處理程序開始旋轉會發生什麼?

驅動程序正在執行並剛剛取出了一個控制對其設備的訪問的鎖。在鎖定期間,器件發出中斷,這會導致中斷處理程序運行。在訪問設備之前,中斷處理程序還必須獲取該鎖。在中斷處理程序中取出自旋鎖是一件合理的事情;這是螺旋鎖操作不能入睡的原因之一。但是,如果中斷例程與最初取出鎖的代碼在同一處理器中執行,會發生什麼情況? 當中斷處理程序正在旋轉時,非中斷代碼將無法運行以釋放鎖。該處理器將永遠旋轉。

我不明白爲什麼如果中斷處理程序正在旋轉,則無法執行非中斷代碼。

是否因爲中斷處理程序中的例程不能被搶佔?如果是這樣,是說中斷程序必須是原子的?

+0

中斷處理程序正在旋轉,因爲它試圖獲取已由非中斷代碼保持的自旋鎖,後者在中斷完成之前可能不一定會運行。 – 2012-02-22 23:13:49

回答

2

是因爲中斷處理程序中的例程不能被搶佔?

不是通過過程上下文代碼。

如果是這樣,是說中斷程序必須是原子?

它可能被更高優先級的中斷或NMI(或SMM)中斷。

相關問題