張 軍
摘要:文章通過對嵌入式內核中斷管理技術的討論,提出“中斷前一后段處理”模型;利用單向量多中斷處理映射技術,解決一些處理器中多個外部中斷共用一個向量的問題,并在提出根據中斷服務子程序對通用寄存器的需求而進行中斷現場保護的策略。
關鍵詞:中斷管理模式;嵌入式實時系統;中斷響應
中圖分類號:TP3文獻標識碼:A
文章編號:1674-1145(2009)06-0126-02
一、概述
嵌入式操作系統是一種支持嵌入式系統應用的操作系統軟件。與通用操作系統相比較,嵌入式操作系統在系統實時高效性、硬件的相關依賴性、軟件固態化以及應用的專用性等方面具有較為突出的特點。在嵌入式系統的應用開發中,采和嵌入式實時操作系統(簡稱RTOS)能夠支持多任務,使得程序開發更加容易,便于維護,同時能夠提高系統的穩定性和可靠性。嵌入式實時系統中斷管理技術直接影響到系統的實時響應性能。
二、關于嵌入式內核的中斷管理模式的討論
實時多任務操作系統是嵌入式應用開發的基礎平臺。嵌入式操作系統相當于一個通用而復雜的主控程序,為嵌入式應用軟件提供更強大的開發平臺和運行環境。因為嵌入式系統已經將處理器、中斷、定時器、I/O等資源包裝起來,用一系列的API提供給用戶,應用程序可以不關注底層硬件,直接借用操作系統提供的功能進行開發,此時的嵌入式操作系統可以視為一個虛擬機。隨著嵌入式實時系統的發展,為了方便對中斷的處理,系統內核常接管中斷的處理。根據系統內核的可搶占或者非搶占性,系統內核接管中斷又有兩種不同處理模式。
(一)嵌入式內核接管中斷的處理機制
嵌入式內核接管中斷的處理機制主要包括兩個部分:面向應用的編程接口部分和面向底層的處理部分。面向用戶應用的編程接口的任務之一是供支持用戶安裝中斷處理例程。面向底層處理部分可以分為兩個部分:中斷向量表部分和中斷處理部分。中斷向量表部分主要指中斷向量表的定位和向量表中表項內容的形式,最常見的形式就是在具體的向量位置存儲的是一些轉移程序,轉到具體的中斷處理部分;另一種形式也就是中斷向量位置存放具體的中斷處理程序,此僅針對向量號之間彼此有一定的距離,此距離足以存放中斷處理程序。面向底層部分的中斷處理部分,是整個嵌入式內核中斷管理的核心。以下是嵌入式內核中一些專用的處理方式:(1)在嵌入式內核中一般有兩個堆棧:系統棧和任務棧;(2)一般嵌入式內核有兩種形式:搶占式和非搶占式;(3)在嵌入式內核中,中斷時機和調度時機直接影響到系統的實時性。
(二)中斷管理模型
1、中斷前一后段處理模型。在前面嵌入式內核中斷管理模式分析中,嵌入式內核一般采用中斷統一接管思想,在中斷統一接管中調用用戶的中斷服務程序。中斷管理模式中的中斷處理部分又可以細化,如嵌入式Hnux系統中關于中斷管理機制中提出了“前半部”和“后半部”的處理思想。其實這種中斷管理的思想把中斷處理部分按照重要性分兩部分,將必須要做的中斷處理部分歸為“前半部”,即這部分在中斷處理部分實施;而將中斷處理中可以延遲操作且影響不大的部分歸為“后半部”,這部分在退出中斷服務程序后實施。通過這樣的中斷管理思想減少的中斷服務時間,為其他外部事件的中斷響應提供了更多的時機。在實時內核中還有其他的中斷處理機制,它們的思想都是盡量減少中斷處理的時間。“中斷前部”主要完成外部事件發生中斷請求時,系統對其響應所完成的必要功能,如中斷現場保護、數據預取和預放等;“置標”部分主要通知某個任務或者線程已有一個中斷發生,且中斷的前部已完成;“中斷后部”并不是在中斷服務程序里執行。麗是由接收到標記或者通知的任務或者線程來完成的,主要是完成本應在中斷服務里完成的后繼工作。
在此“中斷前一后段處理模型”中,應該注意兩個方面:一是如何劃分“中斷前部”和“中斷后部”;二是要考慮“中斷后部”何時執行,取決于用于完成“中斷后部”功能的任務或者線程的優先級。
2、單向量多中斷處理映射技術。不同嵌入式處理器體系中斷向量的支持也不同。為了處理這種多個外部中斷共用一個向量的情況,提出了單向量多中斷處理技術。當外設中斷觸發時,首先定位到實向量位置,調用中斷統一接口函數,中斷統一接口函數對外設中斷觸發的參數進行測試,尋找到其對應的虛向量,從而觸發虛向量處的回調函數,從而實現多個外部中斷通過同一的實向量到多個虛向量的映射,解決了單向量多中斷處理的問題。
三、實時嵌入式系統中斷的優化
中斷的實時性是實時系統的一個重要方面。中斷響應時間是影響中斷實時性的主要因素。中斷響應定義為從中斷發生到開始執行用戶的中斷服務代碼來處理這個中斷的時間。所有實時系統在進入臨界區代碼段之前都要關中斷,執行完臨界代碼之后再開中斷。中斷延遲時間即是從發出中斷請求到任務開中斷的這段時間。保護中斷現場有兩個作用。首先是為了保護中斷前任務的現場。其次,如果發生中斷嵌套,還必須保護上層中斷的現場。要讓中斷服務盡快得到處理,就必須減少中斷響應時間。但中斷延遲時間是由中斷前任務決定的,在進入中斷時只能通過盡量縮短中斷現場保護的時間來達到減少中斷響應時間,從而提高中斷實時性。我們可以從中斷現場的保護的角度對其優化。
(一)傳統中斷現場保護方法
對于現在大多數嵌入式操作系統,在進人中斷時首先做的第一件事就是保護中斷發生前的現場,即保存返回地址、程序狀態字、堆棧指針以及所有通用寄存器到中斷堆棧,以防止用戶中斷服務子程序對中斷返回后現場的破壞。在處理器內核中在處理諸如任務切換和進入中斷的現場保護的批量訪存指令時,系統將等待,從而影響實時性。
(二)中斷現場保護的優化策略
中斷現場保護中,保護返回地址、程序狀態字、堆棧指針是必需的。否則中斷結束后將無法順利返回。而保護通用寄存器的目的在于防止用戶中斷服務子程序使用其中的寄存器,造成對原有內容的覆蓋而在中斷返回后任務執行出錯。因此在中斷里對通用寄存器的保護完全可以取決于中斷服務子程序對通用寄存器的使用情況,僅僅保存中斷服務子程序中所用到的有限的幾個通用寄存器,而不必保存所有通用寄存器。首先,每個中斷服務子程序中所需要的通用寄存器是可知的。其次,在現有的嵌入式操作系統中,往往要求中斷服務子程序盡可能的短小。因此,在大多數中斷服務子程序中并沒有用到所保護的全部通用寄存器,造成對其余通用寄存器的多余保護。
(三)u C/OS-II時鐘中斷現場保護優化
時鐘中斷是操作系統中比較重要的一個部分,也是實時性要求較高的部分。在時鐘中斷處理中,操作最多的集中在OS-TimeTick()和OSIntExit()這兩個函數上。它們進行保護即可,從而能更進一步縮短中斷響應時間,大大縮短中斷響應時間,提高中斷實時性。
四、結語
在這我們主要討論了嵌入式實時系統中斷管理技術及優化,從硬件體系和系統管理兩方面闡述了影響中斷性能的因素,而且從傳統的中斷現場保護保存所有寄存器的內容看,雖然使得程序的設計得到簡化,但是同時造成了多余的寄存器保護,增加了中斷響應的時間。有限中斷現場保護策略能夠根據具體中斷服務中所需要使用的通用寄存器而進行相應的有限的保護,縮短了現場保護的時間,使用戶中斷服務能夠盡早的到處理,提高了中斷實時性。效率高的編譯器能夠在不犧牲代碼效率的情況下使用盡可能少的寄存器來完成中斷服務,從而減少了需要中斷現場保護的寄存器數,達到提高中斷實時性的要求。