iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
自我挑戰組

當你凝視linux, linux也在凝視你系列 第 26

Day26 interrupt, exception

前言

終於講完了同步機制,了解到當今電腦為了更多的併行行程,與更多的CPU,在同步機制上做了許多努力,從mutex, semaphore.... 到最後的RCU ,都讓我大開眼界,今天要來講重要的機制---中斷。

中斷

中斷是指在CPU運行時,由於內外部事件或由行程預先安排的事件引起的,此時CPU會暫時停止正在運行的行程,轉而處理該內部或外部事件或預先安排的事件服務的行程中去,服務完畢後再返回去繼續運行被暫時中斷的程序。
同步中斷由CPU本身產生,又稱為內部中斷。這裏同步是指中斷請求信號與代碼指令之間的同步執行,在一條指令執行完畢後,CPU才能進行中斷,不能在指令的執行期間。所以也稱為異常(exception)。
異步中斷是由外部硬件設備產生,又稱為外部中斷,與同步中斷相反,異步中斷可在任何時間產生,包括指令執行期間,所以也被稱為中斷(interrupt)。

一般來說,中斷可以分為上下半部中斷,為什麼需要有這樣的規範呢?

  1. 中斷處理程序的局限性,使得他只能處理中斷處理流程的上半部。
  2. 為了解決一個矛盾,想要中斷處理程序執行很快,也想要中斷處理程式完成的工作量很多。

在第一點中的局限性有以下幾點:

  1. 中斷處理以非同步的方式執行,可能打斷其他重要程式碼,其中可能包含其他中斷城市的執行,所以中斷處理速度越快越好。
  2. 當中斷處理程序執行的時候,可能會有中斷遮蔽,讓其他中斷都無法完成
  3. 中斷處理程序需要對硬體操作,完成的速度越快越好

所以總歸來說,將interrupt 切為上下半部的理由就是想要降低interrupt的latency (中斷處理的延遲),上半部會負責接收硬體中斷的訊號,下半部會執行比較冗長的處理過程。
對於上半部的屬性與要求有:

  • 越快完成要求的處理越好
  • 在處理的時候會關閉interrupt,不接受被其他中斷打斷
  • 對處理時間的要求十分的嚴格,處理interrupt需要有硬體的幫助
  • 處理interrupt時,會儲存 process context,進入 interrupt context ,而且不能被 block 。

ref


上一篇
Day25 RCU 同步機制
下一篇
Day27 interrupt 的處理程序
系列文
當你凝視linux, linux也在凝視你30

尚未有邦友留言

立即登入留言