Reliable Signals

Signal Lifecycle

Signal 在產生的那一刻不會被立即處理,而是會有一系列過程:

Generate

在 Signal 產生的那一刻,OS 會解析 Signal 傳送的對象,並且將其在 PCB 中 Pending Flag 對應的 bit 設為 true,代表這個 process 有收到此 Signal

Pending

這是在 signal 被 generation 和 delivery 之間的時間

Deliver (移除肝臟)

Process 在兩種情況下會處理上面產生的 signal

  1. 如果 process A 正在跑而 process B 有 signal 需要處理,那當 process A 進行 mode switch 回 user mode 時可能會處理一下 process B 的 signal
  2. 第二種可能就是 process B 排到隊開始跑了

Block

  • 我們可以用 PCB 中的 signal mask 來決定每個 process 的哪些 signal 要被 block from delivery
  • 當 signal 被 blocked 時,signal 就會被暫緩 deliver,但在 pending flag 還是 true
  • 當我們從 blocked 轉回 unblocked,signal 會先從最嚴重的開始處理而非到達的先後順序
  • 取決於 signal mask 的實作,我們在 block 時產生了多個同樣的 signal 可能在 unblock 後只會 deliver 一個