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