對ARM來說,當發生中斷的時候,CPU進入的是中斷mode, 只是Linux在SVC mode下處理中斷了. 當然,理論上來說,不在SVC下,而在 中斷mode下處理也可以。我猜想Linux這樣做的原因是,Linux要相容絕大多數的ARCH,每一個ARCH相關的程式碼都放在arch/目錄下,比如ARM是放在arch/arm下。所以,如果arm要是不利用現有Linux的框架,把絕大多數的程式碼都放在arch/arm下(中斷處理的程式碼也放在arch/arm下的irq mode中處理),那linux就非常臃腫。所以,arm Linux為了最大程度的利用Linux已有的架構,就放在SVC模式下處理了(Linux最早是在i386上開發的,i386只利用了2個ring, 即,ring0 和 ring 3, ring 0,對應於ARM的svc mode)。 事實上,到了現在的ARMV8,AARCH64已經取消了這麼多的MODE,而採取了4個Level, 分別是 0,1,2,3. 對於OS來說,支援0和1 兩個Level就可以了, Level 2 是用於虛擬化,Level 3 是用於monitor. 當fiq中斷髮生的時候,也會進入FIQ mode, 只是 在ARM SOC中,很少有FIQ的外設。所以,Linux中,沒有對FIQ進行處理,但介面還是有的。
對ARM來說,當發生中斷的時候,CPU進入的是中斷mode, 只是Linux在SVC mode下處理中斷了. 當然,理論上來說,不在SVC下,而在 中斷mode下處理也可以。我猜想Linux這樣做的原因是,Linux要相容絕大多數的ARCH,每一個ARCH相關的程式碼都放在arch/目錄下,比如ARM是放在arch/arm下。所以,如果arm要是不利用現有Linux的框架,把絕大多數的程式碼都放在arch/arm下(中斷處理的程式碼也放在arch/arm下的irq mode中處理),那linux就非常臃腫。所以,arm Linux為了最大程度的利用Linux已有的架構,就放在SVC模式下處理了(Linux最早是在i386上開發的,i386只利用了2個ring, 即,ring0 和 ring 3, ring 0,對應於ARM的svc mode)。 事實上,到了現在的ARMV8,AARCH64已經取消了這麼多的MODE,而採取了4個Level, 分別是 0,1,2,3. 對於OS來說,支援0和1 兩個Level就可以了, Level 2 是用於虛擬化,Level 3 是用於monitor. 當fiq中斷髮生的時候,也會進入FIQ mode, 只是 在ARM SOC中,很少有FIQ的外設。所以,Linux中,沒有對FIQ進行處理,但介面還是有的。