一種基于FPGA的棧空間管理器的研究和設計
航空航天、工業控制、汽車電子和核電站建設等領域的高速發展,對嵌入式操作系統實時性的要求越來越高。同時,由于FPGA的集成度和速度的不斷提高,使嵌入式操作系統硬件化實現成為發展趨勢。硬實時操作系統中的堆棧管理對系統的實時性和可靠性起著至關重要的作用,而傳統操作系統內核是將每個任務的堆棧空間直接進行最大化處理,導致大量存儲空間浪費,另外采用通用RAM尋址方式也不能滿足對被切換任務信息的快速保護。
基于上述問題,本文提出了一種堆棧空間結構,設計了一款具有自動檢驗功能的棧空間管理器,并在Xilinx公司的集成開發環境FPGA系統上實現。
1堆棧空間結構
堆棧空間是按先進后出(LIFO)原則分配的連續存儲器空間,可以滿足保護任務切換信息和中斷響應時保護處理器狀態和任務參數數據的需要[1],且對每個任務分配一個單獨的任務棧和一個響應系統中斷任務的中斷嵌套棧[2]。如圖1所示,棧空間劃分為n個任務棧和1個中斷嵌套棧。
任務棧主要保護被切換任務的信息。它存放的數據有:任務代碼首地址、任務參數、任務中定義的局部變量、被調用函數的參數和局部變量及任務中各個函數的返回地址。中斷嵌套棧存放被中斷任務的數據,包括發生中斷時需要保存的上下文、中斷嵌套時需要保存的上下文和中斷服務程序的局部變量。
在硬實時操作系統中,當發生中斷或中斷嵌套時,堆棧地址指針從任務棧切換到中斷嵌套棧。當所有的中斷服務程序全部執行完成后,堆棧地址指針從中斷嵌套棧切換到任務棧,繼續執行該被中斷的任務。這種管理方式同以往操作系統采用被中斷任務的數據保存到相應任務堆棧的方法相比,更有效節約了堆棧空間開銷[3,4]。
評論