信號執行細節

信號執行細節

我正在閱讀一些有關「訊號」的 Linux 文檔,但我的腦海中仍然有這些問題:

1)「訊號」處理程序執行當「目標」進程接收到它時完成執行令牌來自調度程式

2) 或「訊號」處理程序執行發生在任何進程「上下文」發生待執行“信號”何時發送? (與硬體 ISR 風格相同)。

3)流程執行如何優先事項?他們在處理「訊號」時是否被沖走了?

答案1

1) 訊號處理程序在下次執行時執行目標行程從核心態返回到用戶態。

當進程被安排在硬體中斷後再次運行時(並且它尚未在內核模式下運行),或者當進程從系統呼叫返回時(在某些體系結構上,這些是同一件事),就會發生這種情況。

在正常操作中,當離開核心模式時,您的進程將簡單地返回到最初離開使用者模式的點之後的下一條指令。

但是,如果您的進程有一個信號待處理,內核將改寫您的進程上下文,以便返回到使用者模式將轉至訊號處理程序的第一條指令,並且您的堆疊將被修改為看起來像您在最初的位置對訊號處理程序進行了「特殊」子例程呼叫離開使用者模式(從這個「特殊」子例程呼叫返回涉及進行系統呼叫以恢復原始狀態)。

欲了解詳細信息,請閱讀,

所以「目標」進程可能會收到它的執行令牌來自調度程式在訊號處理程序最終執行之前任意多次(如果它由於某種原因恰好停留在內核模式)。

2) 否 - 訊號處理程序只會在進程的使用者模式上下文中執行。

3)實際上並沒有任何執行優先事項在像Linux這樣的分時系統中,除非你算上好的過程的價值,所以你不能掃走一些不存在的東西。


事情因線程和所謂的即時的調度策略,因此上面的註解僅對使用非即時調度策略運行的單執行緒進程有效(唯一存在的進程類型)在過去的美好時光:-)。

相關內容