周霆 李運喜


摘 要:綜合化航空電子系統進一步提升綜合化水平以后,大量新開發與遺產應用希望通過分區操作系統提供的多個分區執行環境集成于同一硬件處理平臺,對分區操作系統提出了支持客戶OS以繼承遺產代碼的需求,因而分區操作系統需要為包括裸應用分區和客戶OS分區在內的分區運行環境提供中斷/中斷等硬件機制的虛擬化。本文提供一種分區操作系統的統一中斷處理方法,解決分區操作系統以虛擬化方式運行客戶OS時需要進行用戶級中斷處理的問題,解決目前分區操作系統內核直接調用用戶掛鉤的處理方式所存在的不足。
關鍵詞:分區操作系統;客戶OS;虛擬化中斷處理
中圖分類號:TP311 文獻標識碼:A
隨著航空電子技術的發展,在一個物理處理平臺上將集成越來越多,甚至來自于多個機載子系統的軟件任務,綜合化模塊化航空電子系統(Integrated Modular Avionics,簡稱IMA)進一步提升綜合化的水平成為必然發展趨勢。目前先進的IMA系統都采用了支持虛擬化客戶OS的分區操作系統進行不同程度的應用集成[ 1 ],如何在虛擬化分區執行環境中保持客戶OS本身的功能和性能,成為必須關注的問題[ 2 ]。在分區操作系統的分區中搭載客戶OS,可以使分區操作系統具備良好的遺產代碼繼承能力和靈活的綜合化集成能力,已經成為目前主流分區操作系統的重要特征。對于可同時配置裸應用分區和客戶OS分區的分區操作系統來說,需要提供一套同時支持這兩類分區進行用戶態中斷處理的虛擬化中斷處理方法,將物理中斷虛擬化后向分區投遞,使客戶OS有機會接管所關心的中斷,并透明的調用自身的用戶級中斷處理程序進行處理。
1 概述
典型的分區操作系統架構[ 3 ]包括多個裸應用分區和客戶OS分區。分區向用戶提供時間、空間隔離的獨立應用運行環境。分區操作系統向分區提供基本內核服務接口,以及處理器、存儲器和外圍設備的虛擬化支持。為滿足用戶定時器服務、設備訪問服務的需求,需要支持分區級中斷處理程序接管外部中斷。
中斷處理方法的設計,首先應該能夠兼容上述兩類分區同時存在時分別需要進行中斷處理的需求[ 4 ];其次中斷處理方法的設計不應該破壞客戶OS原始的中斷處理流程,對于客戶OS之上的應用應該是透明的;最后,從保證分區操作系統內核的安全可靠性角度出發,上述方法的設計應該盡可能的簡單通用,且盡量在分區實現,減少對內核的修改和功能擴展。目前已有的分區操作系統采用內核直接調用用戶掛鉤的方式來執行用戶級中斷服務程序,這種方式一方面對內核改動過多,降低了內核可靠性,并引入安全風險;另一方面,直接過程調用的方式增加了內核的處理負擔,降低了中斷處理的效率。
2 基于通知槽的任務化虛中斷處理方式
如圖1所示,本文所設計的統一中斷處理方法以任務的形式進行用戶級中斷處理,將中斷處理的工作分為內核級處理和分區級處理兩級,盡量不對內核進行修改和功能擴展,有利于降低內核復雜度,提升內核安全可靠性,提升中斷處理的效率。處于特權態的分區操作系統內核首先接管中斷,然后使用用戶級線程控制塊(T_UTCB)中的通知槽向分區投遞中斷處理通知,既方便的進行了中斷信息的投遞,又保證了由用戶級中斷處理任務對中斷現場進行全權接管的處理邏輯。
3 中斷處理單元設計
分區操作系統內核的中斷處理單元用于對中斷請求進行管理,完成中斷接管、中斷注冊、中斷等待和中斷通知的功能,以異步通知的方式通知關注當前中斷的分區進行用戶級中斷處理。
內核以系統調用的方式向分區提供中斷注冊和中斷等待的系統服務,且提供一個中斷通知操作以實現在內核處理完成系統級中斷處理后喚醒分區中的中斷線程,將中斷傳遞給中斷線程處理。
本方法設計了中斷請求描述符(T_IrqDesc)這個數據結構來描述一個具體的硬件設備中斷請求,在中斷請求描述符中主要記錄以下數據:中斷請求控制器、為中斷請求注冊的處理線程、中斷請求的通知槽、中斷請求的等待隊列以及用戶級中斷處理程序的內核副本。
本方法設計了一個中斷等待隊列,用于保存系統中用戶空間等待中斷通知的線程,隊列采用雙向鏈表結構,當中斷通知槽的值沒有發生改變時,需要創建中斷請求等待隊列;當向用戶空間通知中斷的發生情況時,需要從中斷請求等待隊列上喚醒等待線程。
在內核中斷結構中,為每個中斷維護一個中斷通知隊列,如圖2所示,用來維護需要投遞中斷的線程;在線程的用戶空間線程控制塊(T_UTCB)中維護一個通知槽數組,該數組大小為8,也就是每個線程含有8個通知槽,編號為0~7,通知槽的取值范圍0~255。
以下將針對中斷處理的4種功能(中斷接管、中斷注冊、中斷等待和中斷通知)的設計思想進行詳細闡述。
4 中斷接管
分區操作系統根據裸應用程序或者客戶OS對具體硬件物理中斷類型是否關注,提供兩種中斷處理方式:
1)如果用戶沒有注冊物理中斷,則物理中斷完全由內核處理;
2)如果用戶注冊具體類型的物理中斷,內核只做最簡單的中斷接管工作,然后,把真正的中斷交給用戶空間注冊的任務進行處理。
分區操作系統目前處理的中斷分為三種類型:時鐘中斷、I/O中斷和核間中斷。出于不向內核引入冗余代碼的設計思想,內核中只對時鐘中斷進行真正處理,而對于I/O中斷(例如,網絡中斷或者串口中斷)在內核中只進行簡單的接管,而不進行真正的處理,真正的I/O中斷處理由客戶OS中注冊的中斷處理線程進行。
5 中斷注冊
中斷注冊用于根據輸入的中斷通知槽號和中斷向量號把一個用戶空間線程注冊為一個中斷請求的處理程序。
每個中斷都有中斷向量號、中斷處理程序、中斷線程通知隊列。中斷線程通知隊列包含一個通知隊列和等待隊列,及注冊的線程數量。通知隊列上的結點是中斷線程結構,該結構包括通知槽號、線程控制塊及雙向鏈指針。
分區中的線程通過系統調用方式,將自己的某個中斷通知槽注冊到指定中斷向量。注冊前首先將當前線程的用戶空間線程控制塊(T_UTCB)空間映射到內核空間中,使得在內核中也能訪問該線程的用戶空間線程控制塊(T_UTCB);然后創建一個中斷線程控制塊,用當前線程控制塊和通知槽號賦值,把它插入到通知隊列尾部。
6 中斷等待
中斷線程通知隊列中的等待隊列掛接的是等待該中斷喚醒的線程。當前運行線程通過系統調用方式將自己掛接到等待隊列上。
在掛接到中斷等待隊列時,首先當前線程需要將自己的用戶空間線程控制塊(T_UTCB)映射到內核空間,內核空間必須訪問線程的用戶空間線程控制塊(T_UTCB);然后檢查當前線程是否在通知隊列上,只有在通知隊列的線程才能掛接到等待隊列中;最后檢查線程的用戶空間線程控制塊(T_UTCB)中的對應編號的通知槽的值是否為0,只中通知槽值為0才能掛接到等待隊列中,否則直接返回。
7 中斷通知
分區操作系統的內核系統級中斷處理程序執行完成后,再給分區投遞中斷通知。中斷通知的流程是逐一檢查是否可以訪問通知隊列中線程的用戶空間線程控制塊(T_UTCB)并更新各用戶空間線程控制塊(T_UTCB)中對應的通知槽值,然后再以異步方式喚醒等待隊列中的所有線程。
8 完整的中斷處理過程
本方法中完整的中斷處理流程分為系統級和用戶級兩部分來實現。如圖3所示。
當中斷發生后,內核中斷處理程序進行必要的處理后,將中斷事件通知給用戶級中斷處理線程,喚醒等待隊列中的線程,然后中斷返回,由用戶級中斷處理線程完成后續處理。該兩級方式的中斷處理模式保證了系統中斷響應的及時性,并且可以通過對用戶級中斷處理線程優先級的配置,靈活的實現中斷響應。
9 結語
本文深入研究了機載嵌入式分區操作系統在綜合化程度提升以后如何向虛擬化的裸應用分區和客戶OS分區提供高效、安全的中斷處理虛擬化機制的問題,給出了基于通知槽的任務化中斷處理方法。通過在某分區實時操作系統中的實現,證實文中涉及的設計和實現方法是有效的,有效緩解了目前已有的掛鉤函數處理方式對內核改動過多,降低內核可靠性,并引入安全風險,增加了內核處理負擔的問題。在今后的工作中,我們將進一步考慮新型處理器的硬件虛擬化支持,利用硬件虛擬化機制設計更為高效的分區操作系統中斷處理方法。
參考文獻:
[1] 張逢,董耀祖,李少凡,等.系統虛擬化——原理與實現[M].北京:清華大學出版社,2009.
[2] Heiser G.Hypervisor for Consumer Electronics[C]//Proc.of 2009 Conference on Consumer Communications and Networking.Las Vegas,USA:[s. n.],2009.
[3] OKL4 Microkernel Reference Manual[R].Open Kernel Labs Inc.,Tech. Rep.OK 10000:2006,2008.
[4] Heiser G. The Role of Virtualization in Embedded Systems[C]//Proc.of the 1st Workshop on Isolation and Integration in Embedded Systems.Glasgow,UK:[s. n.],2008.
作者簡介:周霆(1984-),男,陜西洋縣人,工作于中航工業西安計算技術研究所,主要從事嵌入式實時操作系統方向的研究。