Driver: 中斷時期 vs 一般行程
作業系統負責打理程式的大小事, 其中很重要的一件工作就是行程管理。 然而行程除了按照設計的執行流程進行之外, 也有可能被其他工作打斷,其中大致可分兩類:硬體中斷與軟體中斷。 硬體中斷:來自硬體裝置發出的中斷訊號。 軟體中斷:計時器、SIGNAL或者PRE-EMPTY都屬於這類訊號。 對應到Driver層,也可把核心函示劃分回一般核心函示與中斷時期函示。 中斷時期函示:中斷處理函示跟計時器call back 一般核心函示:不屬於上列函示的都是一般核心函示。 為什麼要區分這兩者呢? 因為很多核心API像是: schedule, wait_event, bottom_half, task_list等 是只能在一般核心函示中執行!而不能中斷正在高優先權等級的中斷時期函示執行。 要是一個沒注意,一執行到相對區段,就馬上oops或者panic給你看。 如果不知道這兩者的分別,DEBUG到死都不知道發生什麼事 ... 以上就是今天發生在本人身上的事情,冏rz.... 那要是無法確定到底是不是屬於中斷時期的函示呢? 核心有提供兩個API供檢查用,一是in_interrupt(),一是in_atomic(), 下次遇到oops時,可以拿來檢查一下。 分享完畢。