本發(fā)明屬于嵌入式操作系統(tǒng)領(lǐng)域涉及一種基于PowerPC處理器的嵌入式操作系統(tǒng)分區(qū)虛擬中斷處理方法。
背景技術(shù):
嵌入式實(shí)時(shí)操作系統(tǒng)的分區(qū)是指運(yùn)行在同一個(gè)處理器上,但是在執(zhí)行時(shí)間和存儲(chǔ)空間上相互隔離的代碼段。操作系統(tǒng)內(nèi)核對各個(gè)分區(qū)按照一定的調(diào)度規(guī)則循環(huán)調(diào)度,每個(gè)分區(qū)在自己的執(zhí)行時(shí)間內(nèi)獨(dú)占處理器資源。同時(shí),通過內(nèi)存配置,各分區(qū)擁有自己的內(nèi)存空間,分區(qū)相互之間無法直接訪問,分區(qū)間的通信必須通過內(nèi)核來進(jìn)行。嵌入式操作系統(tǒng)的分區(qū)為不同功能組、不同安全級別、不同執(zhí)行周期、不同觸發(fā)方式的任務(wù)集成在同一個(gè)處理器中運(yùn)行提供了便捷,由于各分區(qū)之間相互隔離,運(yùn)行于不同分區(qū)上的程序互不影響,因此各分區(qū)內(nèi)運(yùn)行的軟件的變動(dòng)不會(huì)直接影響其他分區(qū),某個(gè)分區(qū)內(nèi)的軟件錯(cuò)誤不會(huì)向其他分區(qū)擴(kuò)散,從而可以極大的減少軟件升級或變動(dòng)造成的驗(yàn)證時(shí)間和成本。
為了實(shí)現(xiàn)分區(qū)間在空間上相互隔離,同時(shí)也為了保證分區(qū)內(nèi)運(yùn)行的軟件的錯(cuò)誤不會(huì)對其他分區(qū)和整個(gè)操作系統(tǒng)造成影響,各分區(qū)需要運(yùn)行于處理器的用戶態(tài),這時(shí)分區(qū)的內(nèi)的軟件只能訪問特定的一些寄存器,相對應(yīng)的,操作系統(tǒng)的內(nèi)核運(yùn)行與內(nèi)核態(tài),可以訪問全部的寄存器。當(dāng)一個(gè)分區(qū)的運(yùn)行時(shí)間用完時(shí),操作系統(tǒng)內(nèi)核會(huì)切換其他分區(qū)進(jìn)入處理器,這時(shí)處理器會(huì)經(jīng)歷從用戶態(tài)切換到內(nèi)核態(tài),最后再回到用戶態(tài)的過程。
一般情況下,上述過程可以保證嵌入式操作系統(tǒng)各分區(qū)的獨(dú)立性,但是,由于PowerPC處理器響應(yīng)外部中斷時(shí)需要進(jìn)入內(nèi)核態(tài),這時(shí)運(yùn)行的程序可以訪問全部寄存器和內(nèi)存地址空間,因此,操作系統(tǒng)各分區(qū)互不干擾的特性被破壞,這表現(xiàn)在兩個(gè)方面:首先是一個(gè)分區(qū)內(nèi)的軟件錯(cuò)誤可能會(huì)擴(kuò)散至其他分區(qū),例如某個(gè)分區(qū)的外部中斷處理函數(shù)中出現(xiàn)堆棧溢出時(shí),就有可能修改了其他分區(qū)的數(shù)據(jù)或代碼,造成不可預(yù)計(jì)的錯(cuò)誤;其次,由于多個(gè)分區(qū)可能對同一個(gè)外部中斷源有不同的處理邏輯,但按照PowerPC處理器提供的中斷方式,所有的外部中斷都在同一個(gè)入口點(diǎn)進(jìn)行處理,這時(shí)就需要在該入口進(jìn)行分區(qū)的判斷,根據(jù)不同分區(qū)號進(jìn) 入不同處理流程,因此各分區(qū)的外部中斷處理程序在這里出現(xiàn)了耦合,這與分區(qū)相互獨(dú)立的思想是違背的,同時(shí)也增加了各分區(qū)中斷處理程序的測試與驗(yàn)證復(fù)雜度。
在此條件下,需要提出一種方法,使嵌入式操作系統(tǒng)的各分區(qū)能夠在處理器的用戶態(tài)下,在各自分區(qū)的上下文環(huán)境中,獨(dú)立的控制和響應(yīng)外部中斷信號,實(shí)現(xiàn)對中斷的開關(guān)、鎖存、循環(huán)嵌套、優(yōu)先級搶占、中斷函數(shù)調(diào)用等功能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是,能夠使基于PowerPC處理器的嵌入式操作系統(tǒng)中不同分區(qū)的中斷處理解藕,從而使每個(gè)分區(qū)對的中斷處理不會(huì)影響到其他分區(qū),同時(shí)各分區(qū)擁有完整的中斷控制能力以及在用戶態(tài)下對中斷的處理能力。此方法為嵌入式操作系統(tǒng)實(shí)現(xiàn)各分區(qū)之間相互獨(dú)立,互不干擾提供了必要的技術(shù)支撐,降低了分區(qū)內(nèi)的軟件設(shè)計(jì)與驗(yàn)證復(fù)雜性。
本發(fā)明提供了一種基于PowerPC處理器的嵌入式操作系統(tǒng)分區(qū)虛擬中斷機(jī)制,其特征在于:發(fā)生硬件中斷時(shí),當(dāng)前正在運(yùn)行的分區(qū)可以按照本分區(qū)的中斷配置策略依次完成以下步驟,以實(shí)現(xiàn)對中斷的控制和在用戶態(tài)下的中斷處理:
步驟1):處理器進(jìn)入內(nèi)核態(tài),跳轉(zhuǎn)到硬件中斷入口,保存當(dāng)前硬件中斷的上下文,然后判斷當(dāng)前分區(qū)的虛擬中斷控制器是否打開,如果沒有打開則直接轉(zhuǎn)到外部中斷出口,重新恢復(fù)上下文并退出中斷,繼續(xù)在用戶態(tài)下運(yùn)行當(dāng)前分區(qū)的程序,否則進(jìn)入步驟2);
步驟2):判斷當(dāng)前分區(qū)的虛擬中斷控制器是否屏蔽了當(dāng)前中斷位,若屏蔽了該中斷位,則鎖存當(dāng)前中斷并轉(zhuǎn)到外部中斷出口,否則進(jìn)入步驟3);
步驟3):判斷當(dāng)前中斷的優(yōu)先級,如果比正在執(zhí)行的虛擬中斷優(yōu)先級低,則將當(dāng)前中斷鎖存起來,并進(jìn)入外部中斷出口;否則復(fù)制上下文到當(dāng)前分區(qū)的堆棧內(nèi),并進(jìn)入步驟4);
步驟4):將SRR0寄存器的值改為當(dāng)前中斷在本分區(qū)內(nèi)的虛擬中斷處理函數(shù)的入口地址,然后退出中斷,跳轉(zhuǎn)到相應(yīng)的虛擬中斷處理函數(shù),在用戶態(tài)下對當(dāng)前中斷進(jìn)行處理,然后進(jìn)入步驟5);
步驟5):通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核態(tài),判斷是否有仍然鎖存且未處理的中斷。如果有鎖存未處理的中斷,則將優(yōu)先級最高的鎖存中斷作為當(dāng)前待處理中斷,然 后跳轉(zhuǎn)到步驟4);如果沒有鎖存未處理的中斷則將保存在當(dāng)前分區(qū)堆棧內(nèi)的上下文恢復(fù)到寄存器中。退出系統(tǒng)調(diào)用,重新回到用戶態(tài),并在中斷前的上下文中繼續(xù)運(yùn)行程序。
處理器的硬件中斷發(fā)生后,會(huì)自動(dòng)進(jìn)入內(nèi)核態(tài),并且在中斷堆棧中保存中斷現(xiàn)場的上下文,如步驟1)所述。在判斷當(dāng)前分區(qū)的虛擬中斷開關(guān)打開后,僅需要將之前保存在中斷堆棧的上下文復(fù)制到分區(qū)的堆棧內(nèi),并釋放中斷堆棧相應(yīng)空間,如步驟3)所述。
各分區(qū)的虛擬中斷控制器需要在分區(qū)初始化的時(shí)候進(jìn)行配置,在每次切換分區(qū)的同時(shí)也切換相應(yīng)的虛擬中斷控制器。每個(gè)分區(qū)可以指定自己的虛擬中斷控制器的開關(guān)狀態(tài),各中斷的屏蔽狀態(tài),是否支持中斷嵌套。每個(gè)虛擬中斷控制器提供16個(gè)中斷優(yōu)先級,在分區(qū)初始化階段可以按照硬件的優(yōu)先級配置虛擬中斷的優(yōu)先級,高優(yōu)先級的中斷可以搶占當(dāng)前正在運(yùn)行的低優(yōu)先級中斷。
此方法中,處理器的外部中斷入口,外部中斷出口,虛擬中斷入口和出口程序都是相同的,并且對操作系統(tǒng)的用戶透明,用戶只需要在操作系統(tǒng)的分區(qū)初始化時(shí)按照自己的需求對虛擬中斷控制器進(jìn)行相應(yīng)配置。
本發(fā)明具有的優(yōu)點(diǎn)和有益效果:本發(fā)明是一種基于PowerPC處理器的虛擬中斷處理方法,通過這種方法,可以使嵌入式操作系統(tǒng)各分區(qū)的中斷處理過程相互解藕,互不影響,提高了分區(qū)的獨(dú)立性。
附圖說明
圖1是原始的外部中斷處理流程示意圖;
圖2是使用本發(fā)明的分區(qū)虛擬中斷流程示意圖;
具體實(shí)施方式
下面結(jié)合說明書附圖對本發(fā)明做詳細(xì)說明,圖1顯示的是原始的中斷處理流程,外部中斷發(fā)生時(shí),程序自動(dòng)跳轉(zhuǎn)到外部中斷入口地址,當(dāng)前處理器狀態(tài)也隨之進(jìn)入內(nèi)核態(tài)。在外部中斷入口程序中,對中斷上下文進(jìn)行保存,然后按照中斷向量號查找并跳轉(zhuǎn)到相應(yīng)中斷處理程序。
使用本方法后,當(dāng)發(fā)生硬件中斷時(shí),操作系統(tǒng)進(jìn)入內(nèi)核態(tài),SRR0寄存器自動(dòng)保存中斷發(fā)生時(shí)要執(zhí)行的下一條指令地址,SRR1寄存器自動(dòng)保存中斷發(fā)生時(shí) 的處理器狀態(tài),指令指針跳轉(zhuǎn)到外部中斷處理入口地址。在該入口程序中,對當(dāng)前上下文進(jìn)行保存,并判斷是否進(jìn)入虛擬中斷處理流程,如步驟S1所示。
如果當(dāng)前分區(qū)的虛擬中斷控制器的開關(guān)是打開的,則進(jìn)一步判斷當(dāng)前類型的中斷是否被屏蔽,如果被屏蔽則將當(dāng)前中斷鎖存起來,如步驟S2所示。中斷鎖存可以有多種實(shí)現(xiàn)方法,例如用一個(gè)整型變量記錄一種類型中斷的發(fā)生次數(shù),每次鎖存該中斷時(shí)相應(yīng)變量做自加操作,每次處理該中斷時(shí)該變量做自減操作。
若當(dāng)前中斷沒有屏蔽,則進(jìn)一步判斷當(dāng)前中斷的優(yōu)先級是否比分區(qū)內(nèi)正在處理的中斷的優(yōu)先級高,如果分區(qū)內(nèi)沒有正在處理的中斷或當(dāng)前中斷比正在處理的中斷優(yōu)先級高,則將中斷棧中保存的中斷上下文轉(zhuǎn)存到當(dāng)前分區(qū)的堆棧中,如步驟3所示。
將SRR0寄存器的值修改為分區(qū)內(nèi)配置當(dāng)前中斷所對應(yīng)的虛擬中斷處理函數(shù)的入口地址,然后退出中斷,則處理器進(jìn)入用戶態(tài),并且開始運(yùn)行虛擬中斷處理函數(shù)處理當(dāng)前中斷,如步驟4所示。
在虛擬中斷處理結(jié)束后,判斷是否還有鎖存未處理的中斷,如果有則找出當(dāng)前鎖存的所有中斷中優(yōu)先級最高的一個(gè)進(jìn)行處理,否則恢復(fù)中斷上下文并退出中斷,如步驟5所示。
通過以上步驟,各分區(qū)可以實(shí)現(xiàn)用戶態(tài)下的虛擬中斷處理。
在具體應(yīng)用場景中:在PowerPC755處理器上,運(yùn)行嵌入式分時(shí)分區(qū)操作系統(tǒng),使用處理器外部中斷,實(shí)現(xiàn)并驗(yàn)證操作系統(tǒng)各分區(qū)的中斷處理過程。該操作系統(tǒng)共分兩個(gè)分區(qū),按時(shí)間規(guī)劃輪流調(diào)度,并且共享兩個(gè)定時(shí)器中斷作為中斷源。定時(shí)器1的優(yōu)先級高于定時(shí)器2。其中分區(qū)A在定時(shí)器1的中斷處理函數(shù)中通過串口打印字符串“A1”,在定時(shí)器2的中斷處理函數(shù)中循環(huán)打印字符串“A2”;分區(qū)B在定時(shí)器1的中斷處理函數(shù)中,先屏蔽了該分區(qū)的虛擬中斷控制器的定時(shí)器1中斷,然后通過串口打印字符串“B1”,在定時(shí)器2的中斷處理函數(shù)中,先屏蔽了該分區(qū)虛擬中斷控制器的定時(shí)器2中斷,然后循環(huán)打印字符串“B2”。兩個(gè)分區(qū)對定時(shí)中斷的實(shí)現(xiàn)各不相同,而且分區(qū)B屏蔽定時(shí)中斷后沒有打開,如果采用原始的中斷處理方式,在分區(qū)B執(zhí)行中斷處理后,分區(qū)A將無法再接收到定時(shí)中斷信號。
此時(shí),即可使用本發(fā)明的方法,具體步驟如下:
首先,在操作系統(tǒng)的初始化階段,分別打開分區(qū)A和分區(qū)B的虛擬中斷控制器,使能定時(shí)器1和定時(shí)器2的中斷位,并且為各自的定時(shí)器中斷配置中斷處理函數(shù)。
分區(qū)A運(yùn)行時(shí),若定時(shí)中斷發(fā)生,則按照虛擬中斷處理流程,在用戶態(tài)下調(diào)用相應(yīng)的中斷處理函數(shù)。由于定時(shí)器2的中斷處理函數(shù)中要循環(huán)多次打印字符串“A2”,所需時(shí)間較長,如果中間出現(xiàn)定時(shí)器1中斷,則定時(shí)器1的中斷會(huì)搶占定時(shí)器2中斷,打印字符串“A1”后,又回到定時(shí)器2的中斷處理函數(shù)中繼續(xù)運(yùn)行,一直到完成循環(huán)次數(shù)后,退出中斷處理。
分區(qū)B的運(yùn)行和分區(qū)A結(jié)果類似,但是由于分區(qū)B的中斷處理中屏蔽的自己的虛擬中斷控制器中的定時(shí)器中斷,而且在退出中斷處理時(shí)沒有重新使能該中斷,因此定時(shí)器1和定時(shí)器2的中斷處理函數(shù)只會(huì)執(zhí)行一次。但是由于分區(qū)B對本分區(qū)虛擬中斷控制器的配置不會(huì)影響到真實(shí)硬件中斷,因此,該操作不會(huì)影響分區(qū)A的中斷處理結(jié)果。
本發(fā)明還可以有其它多種實(shí)施例,在不背離本發(fā)明精神和實(shí)質(zhì)的情況下,熟悉本領(lǐng)域的技術(shù)人員當(dāng)可根據(jù)本發(fā)明做出各種相應(yīng)的改變和變形,但這些相應(yīng)的改變和變形都應(yīng)屬于本發(fā)明所附的權(quán)利要求的保護(hù)范圍。