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