嵌入式Linux中斷現場保護的改進方法
一、嵌入式系統的實時性
嵌入式系統是以應用為中心,以計算機技術為基礎,并且軟硬件可裁剪,適用于應用系統對功能、可靠性、成本、體積、功耗有嚴格要求的專用計算機系統,而高實時性是嵌入式系統的基本要求。
IEEE(美國電氣電子工程師協會)定義實時系統為“那些正確性不僅取決于計算的邏輯結果,也取決于產生結果所花費的時間的系統”。實時系統一般可分為硬件實時和軟件實時這兩大類:硬實時系統有一個強制性的、不可改變的時間限制,它不允許任何超出時限的錯誤。超時錯誤會帶來損害甚至導致系統失效、或者系統不能實現它的預期目標。軟實時系統的時限是柔性靈活的,它可以容忍偶然的超時錯誤。失敗造成的后果并不嚴重,僅僅是輕微的降低了系統的吞吐量。
二、中斷響應時間
中斷的實時性是實時系統的一個重要方面。中斷響應時間是影響中斷實時性的主要因素。中斷響應定義為從中斷發生到開始執行用戶的中斷服務代碼來處理這個中斷的時間[1>,其中包括中斷延遲時間和保護中斷現場的時間。所有實時系統在進入臨界區代碼段之前都要關中斷,執行完臨界代碼之后再開中斷。中斷延遲時間即是從發出中斷請求到任務開中斷的這段時間[1>。保護中斷現場有兩個作用。首先是為了保護中斷前任務的現場。其次,如果發生中斷嵌套,還必須保護上層中斷的現場。因此,整個中斷響應過程如圖1所示。要讓中斷服務盡快得到處理,就必須減少中斷響應時間。但是從圖中可以看出,中斷延遲時間是由中斷前任務決定的,在進入中斷時只能通過盡量縮短中斷現場保護的時間來達到減少中斷響應時間,從而提高中斷實時性。
圖1. 中斷響應示意圖
三、中斷現場保護的改進
3.1 傳統中斷現場保護方法
對于現在大多數嵌入式操作系統,在進入中斷時首先做的第一件事就是保護中斷發生前的現場,即保存返回地址、程序狀態字、堆棧指針以及所有通用寄存器到中斷堆棧,以防止用戶中斷服務子程序對中斷返回后現場的破壞。以μC/OS-II微內核為例,在arm和X86兩種體系結構微處理器上進入中斷后保存現場的過程如圖2所示。從代碼中可見,兩種不同的體系結構中,為保護現場,都需要執行三條訪存指令,其中一條為批量訪存指令(STMFD SP!,{R0-R12}和PUSHA)用以保護通用寄存器R0-R12和AX,CX,DX,BX,SP,BP,SI,DI。
圖2. arm、X86上μC/OS-II中斷現場保護
評論