Linux
系統呼叫可以中斷嗎?
請評論以下句子:
在沒有 rt 更新檔的標準 Linux 核心上,中斷不能中斷正在進行的系統呼叫。從硬碟讀取數據時我們的機器沒有停止工作的原因是因為我們用於該操作的系統呼叫是阻塞的。阻塞意味著一旦它向硬碟發出請求,它就會將程序狀態更改為阻塞,並自願放棄處理器時間。沒有辦法中斷非實時核心上正在進行的系統呼叫。
這是我對該主題的理解,但是我不確定它是否正確。
系統呼叫可以通過使用信號來中斷,例如
SIGINT
(由CTRL
+生成C
)SIGHUP
等。您只能通過 PID 與系統呼叫互動來中斷它們,但是在使用 Unix 信號和kill
命令時。rt_patch 和系統呼叫
@Alan 提出了以下後續問題:
中斷系統呼叫的可能性是否與主線 Linux 核心中接受 rt_patch 直接相關?
我的回复:
我會這麼認為。在研究這個時,我找不到一個確鑿的證據說你可以/不能這樣做,這讓我相信你可以。
另一個讓我想到這一點的數據點是,Unix 中內置的底層信號機制對於能夠與程序互動是必要的。我看不出帶有這些更新檔的系統在沒有使用信號的能力的情況下如何執行。
順便說一下,信號在過程級別執行。我知道沒有任何方法/API可以直接向系統呼叫注入中斷。
參考