
圖4 中斷前-后段處理模型
在圖4中,“中斷前部”主要完成外部事件發(fā)生中斷請(qǐng)求時(shí),系統(tǒng)對(duì)其響應(yīng)所完成的必要功能,如中斷現(xiàn)場(chǎng)保護(hù)、數(shù)據(jù)預(yù)取和預(yù)放等;“置標(biāo)”部分主要通知某個(gè)任務(wù)或者線程已有一個(gè)中斷發(fā)生,且中斷的前部已完成;“中斷后部”并不是在中斷服務(wù)程序里執(zhí)行,而是由接收到標(biāo)記或者通知的任務(wù)或者線程來(lái)完成的,主要是完成本應(yīng)在中斷服務(wù)里完成的后繼工作。舉個(gè)例子,當(dāng)網(wǎng)絡(luò)接口卡報(bào)告新的數(shù)據(jù)包到達(dá)時(shí),“中斷前部”主要將數(shù)據(jù)包送到協(xié)議層;“中斷后部”完成對(duì)數(shù)據(jù)包的具體處理。
在此“中斷前-后段處理模型”中,應(yīng)該注意兩個(gè)方面:
① 如何劃分“中斷前部”和“中斷后部”;镜膭澐謽(biāo)準(zhǔn)是,應(yīng)該立即處理的和必要的功能部分放在“中斷前部”完成,可以推遲處理或者可以在中斷外處理的功能部分放在“中斷后部”完成。
② “中斷后部”何時(shí)執(zhí)行,取決于用于完成“中斷后部”功能的任務(wù)或者線程的優(yōu)先級(jí)。如果要讓中斷的后繼部分較快地執(zhí)行,則可以通過(guò)提高獲得標(biāo)記的任務(wù)或者線程的優(yōu)先級(jí)。從極限角度思維,當(dāng)獲得標(biāo)記的任務(wù)或者優(yōu)先級(jí)很高時(shí),在“中斷前部”完成退出中斷后,立即就執(zhí)行獲得標(biāo)記的任務(wù)或者線程,這相當(dāng)于獲得標(biāo)記的任務(wù)或者線程執(zhí)行部分就在中斷里執(zhí)行。如果中斷的后繼部分并不要求較快的執(zhí)行,則可以賦給獲得標(biāo)記的任務(wù)或者線程為普通的優(yōu)先級(jí)。
2.2 單向量多中斷處理映射技術(shù)
(1) 問(wèn)題的提出
在前面的嵌入式內(nèi)核中斷管理模式圖中,中斷向量表部分也屬于模式圖的一部分,不同嵌入式處理器體系中斷向量的支持也不同。在PowerPC 8xx 系列的處理器中,所有外部中斷對(duì)應(yīng)的向量都是0x500。為了處理這種多個(gè)外部中斷共用一個(gè)向量的情況,本節(jié)提出了單向量多中斷處理技術(shù)。此技術(shù)的思想如下:
當(dāng)外設(shè)中斷觸發(fā)時(shí),首先定位到實(shí)向量位置,調(diào)用中斷統(tǒng)一接口函數(shù),中斷統(tǒng)一接口函數(shù)對(duì)外設(shè)中斷觸發(fā)的參數(shù)進(jìn)行測(cè)試,尋找到其對(duì)應(yīng)的虛向量,從而觸發(fā)虛向量處的回調(diào)函數(shù),從而實(shí)現(xiàn)多個(gè)外部中斷通過(guò)同一的實(shí)向量到多個(gè)虛向量的映射,解決了單向量多中斷處理的問(wèn)題。
單向量多中斷處理映射技術(shù)的示意圖如圖5。

圖5 單向量多中斷處理映射圖
在上面的單向量多中斷處理映射圖中,V表示多個(gè)外設(shè)共享的中斷請(qǐng)求向量號(hào),V1,V2,…,Vn-1,Vn表示不同外設(shè)對(duì)應(yīng)的虛向量號(hào);Fi表示與Vi對(duì)應(yīng)的回調(diào)函數(shù)(i=1…n)。
(2) 實(shí)現(xiàn)方法
基于前面的分析,將單向量多中斷處理映射技術(shù)運(yùn)用于Delta OS 移植到PowerPC MPC860平臺(tái)上。PowerPC MPC860處理器的外部中斷向量號(hào)為0x500。在單向量多中斷處理模型圖中,V=0x500。設(shè)有n個(gè)外部設(shè)備分別為D1,D2,D3,…,Dn,這些外部設(shè)備中斷觸發(fā)時(shí)的中斷標(biāo)志分別為 PPC_D1,PPC_D2,PPC_D3,…,PPC_Dn;Delta OS 內(nèi)核為這些外部設(shè)備分配的虛向量號(hào)分別為V_D1,V_D2,V_D3,…,V_Dn,在實(shí)現(xiàn)中分別取值:0x2000、0x2100、0x2200等,即每個(gè)虛向量號(hào)間距256個(gè)字節(jié)。在Delta OS內(nèi)核中聲明了一個(gè)全局虛向量表_ISR_VECTOR_TABLE,通過(guò)系統(tǒng)調(diào)用delta_interrupt_catch,將用戶的中斷服務(wù)程序安裝到指定的虛向量號(hào)處。Delta OS 用統(tǒng)一的中斷接口函數(shù)_ISR_Handler 來(lái)處理外部中斷。在模型實(shí)現(xiàn)中有兩個(gè)重要的功能模塊:用戶中斷安裝模塊和中斷處理模塊。下面分別用偽代碼描述這兩個(gè)模塊的功能。
用戶中斷安裝模塊delta_interrupt_catch 的偽代碼實(shí)現(xiàn)如下:
delta_interrupt_catch(vector, new_isr_handler,old_isr_handler){
、 檢查向量號(hào)的有效性
、 檢查新中斷服務(wù)程序的有效性
、 保存舊的中斷服務(wù)程序指針
④ 安裝用戶指定的新中斷服務(wù)程序
_ISR_VECTOR_TALBE[vector]=new_isr_handler
}
外設(shè)中斷觸發(fā)時(shí),中斷處理模塊_ISR_Handler的偽代碼實(shí)現(xiàn)如下:
_ISR_Handler(void){
、 中斷現(xiàn)場(chǎng)的保護(hù)
、 中斷屏蔽位的設(shè)置
③ 外設(shè)中斷標(biāo)志的檢測(cè)
switch ( 標(biāo)志) {
case PPC_D1:
F1=_ISR_VECTOR_TABLE[V_D1]且執(zhí)行F1的功能
case PPC_D2:
F2=_ISR_VECTOR_TABLE[V_D2]且執(zhí)行F2的功能
case PPC_D3:
F3=_ISR_VECTOR_TABLE[V_D3]且執(zhí)行F3的功能
…
case PPC_Dn:
Fn=_ISR_VECTOR_TABLE[V_Dn]且執(zhí)行Fn的功能
default:
執(zhí)行系統(tǒng)默認(rèn)的中斷處理程序
}
、 中斷屏蔽位的恢復(fù)
、 根據(jù)調(diào)度標(biāo)志進(jìn)行調(diào)度
、 中斷現(xiàn)場(chǎng)的恢復(fù)
}
此技術(shù)已成功解決了PowerPC MPC860中單向量多中斷處理的問(wèn)題,而且其實(shí)現(xiàn)并不影響嵌入式內(nèi)核的體系,具有較好的移植性。
3 小結(jié)
本文主要研究了嵌入式實(shí)時(shí)系統(tǒng)中斷管理技術(shù),從硬件體系和系統(tǒng)管理兩方面闡述了影響中斷性能的因素,著重分析了嵌入式內(nèi)核中斷管理模式。在嵌入式內(nèi)核中斷管理中,歸結(jié)出“中斷前-后段處理”模型,并針對(duì)一些處理器的多中斷共用一個(gè)向量的問(wèn)題,引入了單向量多中斷處理的映射技術(shù),并給以實(shí)現(xiàn),對(duì)提高嵌入式實(shí)時(shí)系統(tǒng)的實(shí)時(shí)性提供了一定的參考價(jià)值。
本文為期刊縮寫版,全文詳見(jiàn)本刊網(wǎng)站:www.dpj.com.cn。
參考文獻(xiàn)
1 Installing ISRs in Spectra for PowerPC By Marks Saunders, Technical Marketing Solutions Engineer , 2000
2 MPC860 PowerQUICCTM User’s Manual. 1998
3 Programming Enviroments Manual for the PowerPC Architecture. 1997
4 Labrosse Jean J. uC/OS The Real-time Kernel. R&D Publications,Inc, 1992
5 Savitzky Stephen R. Real-time Microprocessor Systems.1997
6 Beck, Michael. Linux Kernel Internals. Addison-Wesley, 1997





