專利名稱:操作系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及操作系統(tǒng)。更具體地說,本發(fā)明涉及用于并行地運(yùn)行多個(gè)操作系統(tǒng)的系統(tǒng)、方法以及計(jì)算機(jī)程序。
背景技術(shù):
對(duì)于某些計(jì)算機(jī)程序,在限定的時(shí)段內(nèi)或在限定的時(shí)刻執(zhí)行程序中的步驟是至關(guān)重要的。這種程序的示例有用于對(duì)移動(dòng)電話進(jìn)行操作的控制程序,或用于對(duì)專用交換分機(jī)(PBX)或蜂窩基站進(jìn)行操作的控制程序。通常,該程序必須在外部事件或狀態(tài)變化之后的特定時(shí)間或特定時(shí)間之內(nèi)按始終如一的方式對(duì)該事件進(jìn)行響應(yīng)。這被稱為“實(shí)時(shí)”操作。
然而,對(duì)于許多其他程序,執(zhí)行該程序的時(shí)間并不是很重要。這適用于大部分普通計(jì)算機(jī)程序,包括電子表格程序、字處理程序、薪酬軟件包、以及通用的報(bào)告或分析程序。另一方面,盡管由這種程序花費(fèi)的確切時(shí)間并不是至關(guān)重要,但是在大部分情況下,只要有可能,用戶就更喜歡更快的執(zhí)行。
應(yīng)用程序通過操作系統(tǒng)與它們?cè)谄渖线\(yùn)行的計(jì)算機(jī)交互。通過利用操作系統(tǒng)的應(yīng)用編程接口(API),可按照可移植方式來編寫應(yīng)用程序,使其可以在具有不同硬件資源的不同計(jì)算機(jī)上執(zhí)行。此外,諸如Linux或Windows的通用操作系統(tǒng)提供多任務(wù)處理;換言之,這些操作系統(tǒng)允許幾個(gè)程序并行運(yùn)行。為此,這些操作系統(tǒng)提供調(diào)度;換言之,它們根據(jù)調(diào)度算法為各個(gè)程序分配時(shí)間,從而在不同的程序之間共享對(duì)計(jì)算機(jī)資源的使用。這種操作系統(tǒng)被廣泛采用,但是它們通常不能用于運(yùn)行實(shí)時(shí)應(yīng)用,因此它們對(duì)于很多控制或通信任務(wù)都不適合。
因此,針對(duì)這種任務(wù),已經(jīng)開發(fā)了實(shí)時(shí)操作系統(tǒng);一個(gè)示例是ChorusOS(也稱作Chorus)及其衍生物。作為開放源碼軟件,Chorus可以從http//www.experimentalstuff.com/Technologies/ChorusOS/index.html以及http//www.jaluna.com/處的Jaluna獲得。
在“ChorusOS Features and Architecture overview”,F(xiàn)rancois Armand,Sun Technical Report(2001年8月,第222頁)(可以從http//www.jaluna.com/developer/papers/COSDESPERF.pdf獲得)中,對(duì)其進(jìn)行了描述。
這些操作系統(tǒng)也可以用于運(yùn)行其他類型的程序。然而,可以理解,用戶希望能夠運(yùn)行為諸如Windows或Linux的通用操作系統(tǒng)編寫的大量“傳統(tǒng)”程序,而不必為在實(shí)時(shí)操作系統(tǒng)中運(yùn)行而重寫這些程序。
可以提供“雙引導(dǎo)”系統(tǒng),使得用戶可以運(yùn)行一個(gè)操作系統(tǒng)或另一個(gè)操作系統(tǒng),但是存在很多希望在運(yùn)行實(shí)時(shí)程序的同時(shí)能夠運(yùn)行“傳統(tǒng)”程序的情況。例如,電信網(wǎng)絡(luò)基礎(chǔ)設(shè)施設(shè)備、第三代移動(dòng)電話和其他高級(jí)電話、以及高級(jí)電子游戲設(shè)備,可能既需要實(shí)時(shí)應(yīng)用(例如,游戲播放圖形)又需要非實(shí)時(shí)應(yīng)用(游戲下載)。
在US 5903752和US 5721922中,嘗試通過在非實(shí)時(shí)操作系統(tǒng)(例如Windows)的中斷處理環(huán)境中提供實(shí)時(shí)多任務(wù)內(nèi)核而將實(shí)時(shí)環(huán)境并入非實(shí)時(shí)操作系統(tǒng)中。
一種已廣泛應(yīng)用的方案是“仿真”。通常,編寫仿真程序以在實(shí)時(shí)操作系統(tǒng)下運(yùn)行,該仿真程序?qū)橥ㄓ貌僮飨到y(tǒng)編寫的程序的各個(gè)指令進(jìn)行解析,并在實(shí)時(shí)操作系統(tǒng)下執(zhí)行對(duì)應(yīng)的一系列指令。然而,由于總是由很多指令來代替一條指令,所以仿真使計(jì)算機(jī)負(fù)擔(dān)更重,并導(dǎo)致性能更慢。基于提供虛擬機(jī)(例如,JavaTM虛擬機(jī))的方法存在類似的問題。虛擬機(jī)實(shí)現(xiàn)的示例有EP 1059582、US 5499379、以及US 4764864。
US 5995745(Yodaiken)中描述了另一種類似的技術(shù)。Yodaiken描述了這樣一種系統(tǒng)其中,多任務(wù)實(shí)時(shí)操作系統(tǒng)將通用操作系統(tǒng)作為其任務(wù)之一來運(yùn)行,必要時(shí)優(yōu)先執(zhí)行實(shí)時(shí)任務(wù)。
另一方法是如在例如EP 0360135和1990年9月的ELECTRONICS中第62頁的論文“Merging real-time processing and UNIX V”(Gosch)中所描述的,將實(shí)時(shí)操作系統(tǒng)作為通用操作系統(tǒng)的一個(gè)模塊來運(yùn)行。在這種情況下,為了使得與通用操作系統(tǒng)有關(guān)的硬件中斷不應(yīng)優(yōu)先于實(shí)時(shí)操作系統(tǒng)而選擇性地屏蔽硬件中斷。
另一方法是在http//opersys.com/ftp/pub/Adeos/adeos.pdf的白皮書中描述的ADEOS(操作系統(tǒng)的自適應(yīng)域環(huán)境)方法。
ADEOS提供了超微內(nèi)核,超微內(nèi)核除了其他功能之外還用于運(yùn)行多個(gè)操作系統(tǒng),盡管它看起來僅是利用Linux而實(shí)現(xiàn)的。對(duì)ADEOS的一個(gè)建議使用是允許ADEOS向RTAI(Linux的實(shí)時(shí)應(yīng)用接口)發(fā)布中斷,對(duì)此參見http//www.aero.polimi.it/~rtai/applications/。
EP 1054332描述了其中由“切換單元”(并未為了充分理解而對(duì)其進(jìn)行充分詳細(xì)的描述)來運(yùn)行實(shí)時(shí)操作系統(tǒng)和通用操作系統(tǒng)的系統(tǒng)。由公共中斷處理器來處理硬件中斷,而在一些實(shí)施例中,由實(shí)時(shí)操作系統(tǒng)來處理硬件中斷,該實(shí)時(shí)操作系統(tǒng)然后生成較低優(yōu)先級(jí)的軟件中斷,這些軟件中斷由次要操作系統(tǒng)中的例程來處理。
發(fā)明內(nèi)容
本發(fā)明的一個(gè)目的是提供一種即使多個(gè)操作系統(tǒng)是出于不同的目的而設(shè)計(jì)出來的也能夠同時(shí)運(yùn)行這些操作系統(tǒng)的改進(jìn)系統(tǒng)、方法以及計(jì)算機(jī)程序。具體來說,本發(fā)明旨在使得所述多個(gè)操作系統(tǒng)中的一個(gè)操作系統(tǒng)(例如,實(shí)時(shí)操作系統(tǒng))可以不受打擾地運(yùn)行、而另一個(gè)操作系統(tǒng)(例如,通用操作系統(tǒng))可以利用計(jì)算機(jī)的剩余資源盡可能好地運(yùn)行。更具體地說,本發(fā)明旨在提供可以使用精簡(jiǎn)指令集計(jì)算機(jī)(RISC)(例如使用ARM處理器的精簡(jiǎn)指令集計(jì)算機(jī))的系統(tǒng)。
因此,在權(quán)利要求中限定了本發(fā)明的多個(gè)方面。本說明書通過引用并入我們先前提交的以下申請(qǐng)2003年4月9日提交的歐洲申請(qǐng)EP03290894.9、2004年4月7日在EPO提交的PCT/EP04/003731以及2003年10月1日提交的EP03292428.4。
對(duì)于基于ARM處理器的許多架構(gòu),一個(gè)特別的問題是高速緩存單元使用虛擬尋址模式。當(dāng)運(yùn)行多個(gè)操作系統(tǒng)時(shí),每個(gè)操作系統(tǒng)都在其自己的存儲(chǔ)器空間中,每個(gè)操作系統(tǒng)都使用虛擬存儲(chǔ)器到物理存儲(chǔ)器地址的不同映射。這會(huì)導(dǎo)致在切換到另一操作系統(tǒng)之后從高速緩存中獲取到錯(cuò)誤的數(shù)據(jù)。解決該問題的一個(gè)途徑是在每次進(jìn)行操作系統(tǒng)切換時(shí)都對(duì)高速緩存的內(nèi)容進(jìn)行刷新。然而,我們已經(jīng)認(rèn)識(shí)到,這對(duì)于實(shí)時(shí)應(yīng)用來說是不受歡迎的,因?yàn)槭紫冗@增大了切換的延遲、其次在刷新高速緩存之后在初始時(shí)會(huì)使存儲(chǔ)器存取變慢。因此,在本發(fā)明的一個(gè)方面中,我們強(qiáng)制這些操作系統(tǒng)全部使用同一內(nèi)核虛擬映射。
另一問題是ARM處理器具有許多輔助執(zhí)行模式(5或6個(gè),這與在大部分處理器上看到的平常的“用戶”和“管理員”模式不同)。因此,在操作系統(tǒng)之間進(jìn)行改變可能會(huì)涉及附加地在執(zhí)行模式之間發(fā)生改變。為了使得可以發(fā)生這種改變,每次在操作系統(tǒng)之間進(jìn)行切換時(shí)都需要保存所有寄存器的狀態(tài)(例如,保存到堆棧中)。這將使這種切換變慢。因此,在本發(fā)明的一個(gè)方面中,我們要求所有的操作系統(tǒng)都按“擦除(scratch)”模式使用有關(guān)的寄存器(例如寄存器13到15),從而這些操作系統(tǒng)不關(guān)心如何找到或留下它們。我們的觀察結(jié)果是,許多操作系統(tǒng)都是這樣做的;在其他情況下,可能有必要對(duì)操作系統(tǒng)的一些部分進(jìn)行改寫。然后操作系統(tǒng)切換回到“管理員”模式,從而到超微內(nèi)核(由此到其他操作系統(tǒng))的所有轉(zhuǎn)移都只從管理員模式進(jìn)行。這樣,當(dāng)操作系統(tǒng)切換(例如,在它完成了操作時(shí)通過調(diào)用空閑任務(wù)來切換)到另一操作系統(tǒng)時(shí),它不必保存這些寄存器狀態(tài)。
在本發(fā)明的一個(gè)方面中,我們規(guī)定,當(dāng)處于較高模式時(shí),操作系統(tǒng)不能被先占——我們已經(jīng)發(fā)現(xiàn),操作系統(tǒng)通常只針對(duì)非常短的代碼段使用這種模式。
根據(jù)以下說明、權(quán)利要求書以及附圖,其他方面、實(shí)施例以及優(yōu)選特征及對(duì)應(yīng)的優(yōu)點(diǎn)將變得明了。
現(xiàn)在將參照附圖僅以示例的方式對(duì)本發(fā)明的實(shí)施例進(jìn)行描述,在附圖中
圖1是示出可以執(zhí)行本發(fā)明的計(jì)算機(jī)系統(tǒng)的部件的框圖;圖2a是例示了現(xiàn)有技術(shù)中的軟件結(jié)構(gòu)的圖;圖2b是例示了根據(jù)本實(shí)施例的軟件結(jié)構(gòu)的對(duì)應(yīng)圖;圖3是示出為圖1的計(jì)算機(jī)創(chuàng)建圖2b的軟件的多個(gè)階段的流程圖;圖4示出了形成圖2b的一部分的硬件資源分配程序的組成部分;圖5例示了在引導(dǎo)和初始化序列中使用的程序;圖6例示了在引導(dǎo)或初始化處理中使用的系統(tǒng)存儲(chǔ)器映像;圖7例示了從主要操作系統(tǒng)到次要操作系統(tǒng)的轉(zhuǎn)移;圖8例示了從次要操作系統(tǒng)到主要操作系統(tǒng)的轉(zhuǎn)移;圖9a例示了根據(jù)本發(fā)明的在不同操作系統(tǒng)上運(yùn)行的應(yīng)用程序之間的通信;圖9b例示了根據(jù)本發(fā)明的在不同計(jì)算機(jī)上的不同操作系統(tǒng)上運(yùn)行的應(yīng)用程序之間的通信;圖10例示了操作系統(tǒng)使用的存儲(chǔ)器映射;以及圖11例示了超微內(nèi)核與操作系統(tǒng)之間的接口。
具體實(shí)施例方式
總體介紹系統(tǒng)硬件可以應(yīng)用本系統(tǒng)的計(jì)算機(jī)系統(tǒng)100包括中央處理單元(CPU)102,例如可以從ARM有限公司(www.arm.com)獲得并且如http//www.arm.com/documentation/ARMProcessor_Cores/index.html處的技術(shù)手冊(cè)和數(shù)據(jù)表中所描述的ARM處理器,該CPU 102經(jīng)由系統(tǒng)總線104(包括控制、數(shù)據(jù)和地址總線)連接到只讀存儲(chǔ)器(ROM)芯片106;一組或更多組(bank)隨機(jī)存取存儲(chǔ)器(RAM)芯片108;盤控制器裝置110(例如,IDE或SCSI控制器,其與軟盤驅(qū)動(dòng)器、硬盤驅(qū)動(dòng)器以及諸如DVD驅(qū)動(dòng)器的附加可移除介質(zhì)驅(qū)動(dòng)器相連接);一個(gè)或更多個(gè)輸入/輸出端口112(例如,一個(gè)或更多個(gè)USB端口控制器,和/或用于與打印機(jī)等相連接的并行端口控制器);用于與外部或內(nèi)部外設(shè)進(jìn)行總線連接的擴(kuò)展總線114(例如,PCI總線);以及其他系統(tǒng)芯片116(例如,圖形或聲音設(shè)備)。這種類型的計(jì)算機(jī)的示例為個(gè)人計(jì)算機(jī)(PC)和工作站。然而,這里還公開了將本發(fā)明應(yīng)用于其他計(jì)算設(shè)備,例如大型機(jī)、控制系統(tǒng)中的嵌入式微計(jì)算機(jī)和PDA(在這種情況下可以省略的所示裝置中的一部分,例如盤驅(qū)動(dòng)器控制器)。
軟件的管理參照?qǐng)D2a,在使用時(shí),圖1的計(jì)算機(jī)100運(yùn)行常駐程序,這些常駐程序包括操作系統(tǒng)內(nèi)核202(其提供使得CPU可以訪問圖1所示的其他裝置的輸出例程);操作系統(tǒng)用戶接口或表示層204(例如X Windows);中間件層206(提供聯(lián)網(wǎng)軟件和協(xié)議,例如TCP/IP棧);以及應(yīng)用程序208a、208b,其通過調(diào)用構(gòu)成操作系統(tǒng)內(nèi)核202的API例程來運(yùn)行。
該操作系統(tǒng)內(nèi)核具有多個(gè)任務(wù),具體來說·調(diào)度(即,在運(yùn)行的不同應(yīng)用程序之間共享CPU和相關(guān)資源);·存儲(chǔ)器管理(即,向各個(gè)任務(wù)分配存儲(chǔ)器,并且在需要的情況下,將數(shù)據(jù)和程序從存儲(chǔ)器換出來、添加到盤驅(qū)動(dòng)器);·提供文件系統(tǒng);·提供對(duì)設(shè)備的訪問(通常通過驅(qū)動(dòng)程序);·中斷處理;·提供應(yīng)用編程接口,使得應(yīng)用程序能夠與系統(tǒng)資源和用戶進(jìn)行交互。
對(duì)于Unix,內(nèi)核可以是所謂的“單內(nèi)核”,在這種情況下設(shè)備驅(qū)動(dòng)程序構(gòu)成該內(nèi)核本身的一部分。另選的是,對(duì)于Chorus,內(nèi)核可以是“微內(nèi)核”,在這種情況下設(shè)備驅(qū)動(dòng)程序與內(nèi)核是分開的。
然后,在使用時(shí),當(dāng)啟動(dòng)計(jì)算機(jī)100時(shí),存儲(chǔ)在ROM 106中的自舉程序訪問盤控制器110,以從盤上的永久性存儲(chǔ)器將操作系統(tǒng)的文件處理部分讀取到RAM 108中,然后將操作系統(tǒng)的其余部分加載到RAM 108的區(qū)域中。操作系統(tǒng)然后通過盤控制器110從盤驅(qū)動(dòng)器讀取任何應(yīng)用程序,在RAM 108中為每個(gè)應(yīng)用程序分配空間,并將各個(gè)應(yīng)用程序存儲(chǔ)在其所分配的存儲(chǔ)器空間中。
在應(yīng)用程序的操作期間,操作系統(tǒng)的調(diào)度程序部分根據(jù)調(diào)度策略在不同應(yīng)用程序之間劃分CPU的使用,使得各個(gè)應(yīng)用程序可以分享處理器的時(shí)間。該調(diào)度程序部分還通過“換出”不常用的應(yīng)用程序或數(shù)據(jù)(即,將它們從RAM 108去除以釋放空間,并將它們存儲(chǔ)到盤上)來管理存儲(chǔ)器資源的使用。
最后,從應(yīng)用程序調(diào)用構(gòu)成應(yīng)用編程接口(API)的例程,以執(zhí)行諸如輸入和輸出的功能,并且操作系統(tǒng)的中斷處理例程對(duì)中斷和事件進(jìn)行響應(yīng)。
優(yōu)選實(shí)施例的原理的概述在優(yōu)選實(shí)施例中,對(duì)要在計(jì)算機(jī)100上使用的各個(gè)操作系統(tǒng)201、202略微進(jìn)行改寫,并創(chuàng)建新的低層程序400(在此被稱為“硬件資源分配程序”,并且有時(shí)被稱為“超微內(nèi)核”,盡管其并不是操作系統(tǒng)的內(nèi)核)。硬件資源分配程序400是特定類型的CPU 102專用的,這是因?yàn)樗c處理器進(jìn)行交互。由于將變得顯而易見的原因,經(jīng)修改的操作系統(tǒng)的版本201、202也是硬件專用的操作系統(tǒng)。
硬件資源分配程序400本身不是操作系統(tǒng)。其根本不與應(yīng)用程序進(jìn)行交互,并具有非常有限的功能。它也不是虛擬機(jī)或者仿真器;為了進(jìn)行協(xié)作,它需要修改操作系統(tǒng),盡管它將大部分的處理留給了操作系統(tǒng)本身,這些操作系統(tǒng)在處理器上運(yùn)行它們的本機(jī)碼。
硬件資源分配程序400執(zhí)行下面的基本功能·加載并啟動(dòng)多個(gè)操作系統(tǒng)中的每一個(gè);·為這些操作系統(tǒng)中的每一個(gè)分配存儲(chǔ)器和其他系統(tǒng)資源;·對(duì)不同操作系統(tǒng)的操作進(jìn)行調(diào)度(即,在它們之間劃分CPU時(shí)間,并管理它們之間的切換);·提供對(duì)需要由操作系統(tǒng)共享的那些系統(tǒng)設(shè)備進(jìn)行間接訪問的“虛擬化設(shè)備”方法(使設(shè)備“虛擬化”);·在這些操作系統(tǒng)之間提供通信鏈路,以使得在不同操作系統(tǒng)上運(yùn)行的應(yīng)用程序能夠彼此進(jìn)行通信。
本實(shí)施例并不平等地對(duì)待這些操作系統(tǒng)。而是將這些操作系統(tǒng)中的一個(gè)選擇作為“關(guān)鍵”操作系統(tǒng)(這將是實(shí)時(shí)操作系統(tǒng)),而將各個(gè)其他操作系統(tǒng)視為“非關(guān)鍵”或“次要”操作系統(tǒng)(這將是各個(gè)通用操作系統(tǒng),例如Linux)。
當(dāng)設(shè)計(jì)硬件資源分配程序時(shí),其設(shè)置有對(duì)可用系統(tǒng)資源(即,設(shè)備和存儲(chǔ)器)進(jìn)行列表的數(shù)據(jù)結(jié)構(gòu)(例如表),以使得能夠?qū)⒈M可能多的系統(tǒng)設(shè)備靜態(tài)唯一地分配給這些操作系統(tǒng)中的一個(gè)或另一個(gè)。
例如,可以將并行打印機(jī)端口靜態(tài)地分配給經(jīng)常運(yùn)行需要產(chǎn)生打印機(jī)輸出的應(yīng)用程序的通用操作系統(tǒng)202。另一方面,可以將ISDN數(shù)字線適配器端口永久地分配給實(shí)時(shí)操作系統(tǒng)201以進(jìn)行通信。只要有可能就對(duì)設(shè)備進(jìn)行這種靜態(tài)分配意味著各個(gè)操作系統(tǒng)可以使用其現(xiàn)有的驅(qū)動(dòng)程序來訪問靜態(tài)分配的設(shè)備而無需調(diào)用硬件資源分配程序。因此,在訪問這些設(shè)備的執(zhí)行速度方面沒有損失(如果這些設(shè)備用作虛擬機(jī)或仿真器則將存在該損失)。
在必須共享系統(tǒng)設(shè)備的情況下,硬件資源分配程序?qū)τ煞顷P(guān)鍵操作系統(tǒng)對(duì)這些設(shè)備的使用進(jìn)行虛擬化,并使用提供給關(guān)鍵操作系統(tǒng)的驅(qū)動(dòng)程序來進(jìn)行訪問。同樣,為了進(jìn)行中斷處理,將中斷傳遞給關(guān)鍵操作系統(tǒng)中斷處理例程,該例程對(duì)中斷進(jìn)行處理(如果該中斷是針對(duì)關(guān)鍵操作系統(tǒng)的話)、或者通過硬件資源分配程序?qū)⑵鋫鬟f回去以轉(zhuǎn)發(fā)給非關(guān)鍵操作系統(tǒng)(如果該中斷是針對(duì)非關(guān)鍵操作系統(tǒng)的話)。
在引導(dǎo)時(shí),首先加載硬件資源分配程序,然后其按照如下的預(yù)定順序加載各個(gè)操作系統(tǒng)從關(guān)鍵操作系統(tǒng)開始,然后依次是各個(gè)次要操作系統(tǒng)。根據(jù)所述表向關(guān)鍵操作系統(tǒng)分配其所需的資源,并且該關(guān)鍵操作系統(tǒng)具有固定的存儲(chǔ)器空間以在其中進(jìn)行操作。然后從可用的剩余資源中依次向各個(gè)次要操作系統(tǒng)分配其所需的資源和存儲(chǔ)器空間。
因此,根據(jù)本實(shí)施例,通過為各個(gè)操作系統(tǒng)分配其自己的存儲(chǔ)器空間,并且通過向這些操作系統(tǒng)排他地提供靜態(tài)設(shè)備分配,使得由這些操作系統(tǒng)使用的資源在物理上盡可能地分離;僅共享必需共享的設(shè)備。
在操作中,硬件資源分配調(diào)度程序允許關(guān)鍵操作系統(tǒng)進(jìn)行操作直到其結(jié)束其任務(wù)為止,然后依次將控制傳遞回各個(gè)非關(guān)鍵操作系統(tǒng),直到出現(xiàn)下一中斷或事件為止。
因此,本實(shí)施例允許多操作系統(tǒng)環(huán)境,其中關(guān)鍵操作系統(tǒng)的操作實(shí)際上不變(因?yàn)樗褂闷湓简?qū)動(dòng)程序,并第一個(gè)訪問任何中斷和事件處理)。次要操作系統(tǒng)能夠在剩余的處理器時(shí)間內(nèi)有效地進(jìn)行操作,這是因?yàn)樵诖蠖鄶?shù)情況下它們將使用它們自己原有的驅(qū)動(dòng)程序并獨(dú)占地訪問多個(gè)系統(tǒng)設(shè)備。最后,由于硬件資源分配程序僅處理有限的功能,所以硬件資源分配程序本身可以是很小的程序,從而可以節(jié)省系統(tǒng)資源。
因?yàn)樵搩?yōu)選實(shí)施例僅涉及對(duì)標(biāo)準(zhǔn)商業(yè)操作系統(tǒng)(它們已經(jīng)適用于特定的計(jì)算機(jī)100)的有限改變,所以該優(yōu)選實(shí)施例在創(chuàng)建和維護(hù)方面也是經(jīng)濟(jì)的。此外,由于對(duì)操作系統(tǒng)的改變限于處理例如中斷處理的事務(wù)的架構(gòu)特定文件、以及與特定類型的計(jì)算機(jī)100交互并且不可能像操作系統(tǒng)的其余部分那樣頻繁地改變的初始化時(shí)的構(gòu)造,所以在使相同操作系統(tǒng)的新版本適應(yīng)以多操作系統(tǒng)的方式進(jìn)行工作方面要做的事情可能很少或沒有。
對(duì)優(yōu)選實(shí)施例的詳細(xì)描述在本實(shí)施例中,計(jì)算機(jī)100是Intel 386系列處理器(例如Pentium處理器)和Motorola PowerPC 750(精簡(jiǎn)指令集計(jì)算機(jī)或“RISC”)計(jì)算機(jī)(步驟302)。關(guān)鍵操作系統(tǒng)201是C5操作系統(tǒng)(Jaluna-1實(shí)時(shí)微內(nèi)核,ChorusOS系統(tǒng)的第五代開放源碼版本,可以從http//www.jaluna.com免費(fèi)下載而得到)。
在步驟306,將ChorusOS操作系統(tǒng)內(nèi)核201進(jìn)行修改,以在多操作系統(tǒng)模式下進(jìn)行操作,以支持新平臺(tái)的相同方式來進(jìn)行處理(即,編寫新的板卡支持包以使得能夠在具有相同CPU但不同系統(tǒng)設(shè)備的新計(jì)算機(jī)上執(zhí)行)。將引導(dǎo)和初始化序列修改為使得實(shí)時(shí)操作系統(tǒng)可以由硬件資源分配程序在其所分配的存儲(chǔ)器空間中啟動(dòng),而不是自己?jiǎn)?dòng)。對(duì)初始化序列的硬件搜索階段進(jìn)行修改,以防止關(guān)鍵操作系統(tǒng)訪問分配給其他輔助系統(tǒng)的硬件資源。其從硬件資源分配程序讀取靜態(tài)硬件分配表以檢測(cè)其可用的設(shè)備。
向關(guān)鍵操作系統(tǒng)添加陷阱(trap)調(diào)用2012,以檢測(cè)狀態(tài)并請(qǐng)求某些動(dòng)作作為響應(yīng)。陷阱調(diào)用在此是指使得處理器保存當(dāng)前上下文(context)(例如,寄存器的狀態(tài))并加載新上下文的調(diào)用。因此,在使用虛擬存儲(chǔ)器編址的情況下,改變地址指針。
例如,當(dāng)實(shí)時(shí)操作系統(tǒng)201到達(dá)終止點(diǎn)(并停止要求處理器資源)時(shí),可以將控制傳遞回硬件資源分配程序,并發(fā)送“空閑”陷阱調(diào)用,以啟動(dòng)次要操作系統(tǒng)。許多處理器都具有“停止”指令。在某些情況下,僅管理員層代碼(例如操作系統(tǒng)而不是應(yīng)用程序)才可以包括這種“停止”指令。在本實(shí)施例中,對(duì)所有操作系統(tǒng)都進(jìn)行重寫,以去除“停止”指令并將它們替換為在被調(diào)用時(shí)發(fā)出“空閑”陷阱調(diào)用的“空閑”例程(例如,執(zhí)行線程)。
板卡支持包的一些驅(qū)動(dòng)程序特別有助于硬件資源分配程序?qū)τ糜诖我僮飨到y(tǒng)的共享設(shè)備進(jìn)行虛擬化。
添加附加的“虛擬”驅(qū)動(dòng)程序2014,該“虛擬”驅(qū)動(dòng)程序2014對(duì)于操作系統(tǒng)表現(xiàn)為提供對(duì)輸入/輸出(I/O)總線的訪問,使得能夠向總線寫數(shù)據(jù)。實(shí)際上,虛擬總線驅(qū)動(dòng)程序2014使用存儲(chǔ)器作為通信介質(zhì);其導(dǎo)出一些專用存儲(chǔ)器(用于輸入數(shù)據(jù))并導(dǎo)入(import)由其他系統(tǒng)導(dǎo)出的存儲(chǔ)器(用于輸出數(shù)據(jù))。這樣,操作系統(tǒng)201(或在操作系統(tǒng)上運(yùn)行的應(yīng)用程序)可以向另一操作系統(tǒng)(或在其上運(yùn)行的應(yīng)用程序)傳遞數(shù)據(jù),好像它們是在由真實(shí)I/O總線連接的獨(dú)立機(jī)器上運(yùn)行的兩個(gè)操作系統(tǒng)一樣。
將次要操作系統(tǒng)202選擇(步驟308)為具有內(nèi)核版本2.4.18的Linux(步驟308)。
在步驟310,將次要操作系統(tǒng)內(nèi)核202修改為使得其能夠在多操作系統(tǒng)環(huán)境下運(yùn)行,該多操作系統(tǒng)環(huán)境被視為新的硬件架構(gòu)。如在步驟306一樣,對(duì)引導(dǎo)和初始化序列進(jìn)行修改,以使得次要操作系統(tǒng)可以由硬件資源分配程序來啟動(dòng),并防止其訪問分配給其他系統(tǒng)的硬件資源(如在硬件資源分配程序表中所指定的)。如在步驟306一樣,添加陷阱調(diào)用2022,以將控制傳遞給硬件資源分配程序。
將用于共享系統(tǒng)設(shè)備的本地驅(qū)動(dòng)程序替換為用于處理被硬件資源分配程序進(jìn)行了虛擬化的設(shè)備(中斷控制器、I/O總線橋、系統(tǒng)定時(shí)器和實(shí)時(shí)時(shí)鐘)的新驅(qū)動(dòng)程序2028。這些驅(qū)動(dòng)程序執(zhí)行對(duì)硬件資源分配程序的虛擬設(shè)備處理程序416的調(diào)用,以對(duì)計(jì)算機(jī)100的各個(gè)設(shè)備執(zhí)行某些操作。硬件資源分配程序的各個(gè)這種虛擬設(shè)備處理程序416與關(guān)鍵操作系統(tǒng)中的“對(duì)等”驅(qū)動(dòng)例程配對(duì),該驅(qū)動(dòng)例程用于與系統(tǒng)設(shè)備直接進(jìn)行交互。因此,將對(duì)虛擬設(shè)備處理程序的調(diào)用中繼到關(guān)鍵系統(tǒng)中的用于該虛擬化設(shè)備的對(duì)等驅(qū)動(dòng)程序,以進(jìn)行實(shí)際的設(shè)備訪問。如在步驟306,設(shè)置對(duì)于虛擬I/O總線的讀寫驅(qū)動(dòng)程序2024,以使得能夠進(jìn)行操作系統(tǒng)間通信。
對(duì)次要操作系統(tǒng)的中斷服務(wù)例程進(jìn)行修改,以提供多個(gè)虛擬中斷服務(wù)例程2026,各個(gè)虛擬中斷服務(wù)例程2026對(duì)相應(yīng)的虛擬中斷(所述虛擬中斷為由硬件資源分配程序的中斷處理例程412發(fā)出的調(diào)用的形式)進(jìn)行響應(yīng),而不對(duì)實(shí)際中斷或事件進(jìn)行響應(yīng)。還對(duì)次要操作系統(tǒng)的例程(包括中斷服務(wù)例程)進(jìn)行修改,以去除對(duì)硬件中斷的屏蔽(至少在除了關(guān)鍵操作的所有操作中去除)。這樣,關(guān)鍵操作系統(tǒng)201因此優(yōu)先于次要操作系統(tǒng)202......;換言之,對(duì)虛擬中斷的次要操作系統(tǒng)響應(yīng)本身可以被關(guān)鍵操作系統(tǒng)201的實(shí)際中斷而中斷。這通常包括·屏蔽/去屏蔽事件(處理器級(jí)的中斷);·保存/恢復(fù)事件屏蔽狀態(tài);·識(shí)別中斷源(中斷控制器設(shè)備);·在源級(jí)屏蔽/去屏蔽中斷(中斷控制器設(shè)備)。
添加新的虛擬設(shè)備驅(qū)動(dòng)程序2028,用于訪問所共享的硬件設(shè)備(I/O總線橋、系統(tǒng)控制臺(tái)、系統(tǒng)定時(shí)器和實(shí)時(shí)時(shí)鐘)。這些驅(qū)動(dòng)程序執(zhí)行對(duì)硬件資源分配程序的虛擬設(shè)備處理程序416的調(diào)用,以向計(jì)算機(jī)100的各個(gè)設(shè)備寫入數(shù)據(jù)或從其讀取數(shù)據(jù)。
為實(shí)現(xiàn)該操作,在本實(shí)施例中通過添加具有少量經(jīng)修改文件的新的虛擬硬件資源分配程序架構(gòu)子樹(用于I-386和PowerPC變體的nk-i386和nk-ppc)來修改Linux內(nèi)核207。以原有的形式重新使用未改變的文件。保留原始子樹但并不使用。
在步驟312,編寫硬件資源分配程序400。硬件資源分配程序包括提供用于以下功能(如圖4所示)的例程的代碼·引導(dǎo)并初始化自身(402);·存儲(chǔ)用于存儲(chǔ)硬件資源(諸如端口的設(shè)備)的列表以及表示各個(gè)資源被唯一分配給哪個(gè)操作系統(tǒng)的分配目錄的表(403);·引導(dǎo)并初始化完成了硬件資源分配程序分配表的關(guān)鍵操作系統(tǒng)(404);·引導(dǎo)并初始化次要操作系統(tǒng)(406);·在操作系統(tǒng)之間進(jìn)行切換(408);·在操作系統(tǒng)之間進(jìn)行調(diào)度(410);·處理中斷(使用實(shí)時(shí)操作系統(tǒng)中斷服務(wù)例程,并在必要的情況下向次要操作系統(tǒng)的虛擬中斷服務(wù)例程供應(yīng)數(shù)據(jù))(412);·處理來自各個(gè)操作系統(tǒng)的陷阱調(diào)用(414);·處理來自次要操作系統(tǒng)的對(duì)共享設(shè)備的訪問(416);·處理在虛擬I/O總線上的操作系統(tǒng)間通信(418)。
在進(jìn)一步的實(shí)施例(下面描述)中,還可以提供系統(tǒng)調(diào)試框架。
操作系統(tǒng)切換程序408為了從一個(gè)操作系統(tǒng)切換到另一操作系統(tǒng),將操作系統(tǒng)切換程序408設(shè)置為保存當(dāng)前執(zhí)行的操作系統(tǒng)的“上下文”——狀態(tài)變量組的當(dāng)前值,例如寄存器值;恢復(fù)所存儲(chǔ)的另一操作系統(tǒng)的上下文;以及調(diào)用該另一操作系統(tǒng)以在其退出的地方重新開始執(zhí)行。在處理器使用多段存儲(chǔ)器以及虛擬或間接尋址技術(shù)的情況下,由此交換存儲(chǔ)有指向當(dāng)前存儲(chǔ)器空間的指針的寄存器或數(shù)據(jù)結(jié)構(gòu)。例如,操作系統(tǒng)分別在由包括指向不同的這些存儲(chǔ)器空間的指針值的上下文限定的這些空間中進(jìn)行操作。
具體地說,切換程序提供·在當(dāng)前操作系統(tǒng)空閑時(shí),從當(dāng)前運(yùn)行的操作系統(tǒng)顯式切換(例如,陷阱調(diào)用)到下一個(gè)所調(diào)度的操作系統(tǒng);以及·當(dāng)產(chǎn)生硬件中斷時(shí),從次要操作系統(tǒng)隱式切換到關(guān)鍵操作系統(tǒng)。
如下所述,這些切換可以在陷阱調(diào)用或者實(shí)際或虛擬中斷時(shí)產(chǎn)生。
調(diào)度程序410調(diào)度程序410通過在退出一個(gè)操作系統(tǒng)之后選擇下一個(gè)要切換到的次要操作系統(tǒng)(如果存在一個(gè)以上的次要操作系統(tǒng)),向各個(gè)操作系統(tǒng)分配可用處理時(shí)間中的一部分。在本實(shí)施例中,基于固定的優(yōu)先級(jí)調(diào)度來選擇各個(gè)操作系統(tǒng)。這里也可以考慮其他實(shí)施例,這些實(shí)施例允許基于分時(shí)或保證處理器時(shí)間的最小百分比的規(guī)范。然而,在各種情況下,關(guān)鍵操作系統(tǒng)僅在處于空閑狀態(tài)時(shí)被搶占。
在進(jìn)一步的實(shí)施例中,關(guān)鍵操作系統(tǒng)可以在其可以被搶占時(shí)明確地通知調(diào)度程序410,從而使得所有次要操作系統(tǒng)可以對(duì)CPU進(jìn)行一些訪問,以執(zhí)行優(yōu)先級(jí)比仍在關(guān)鍵系統(tǒng)中運(yùn)行的任務(wù)高的任務(wù)。因此,在一個(gè)示例中,關(guān)鍵操作系統(tǒng)的中斷服務(wù)例程不能被搶占,從而關(guān)鍵操作系統(tǒng)始終可以對(duì)來自實(shí)時(shí)時(shí)鐘的外部事件或定時(shí)信號(hào)進(jìn)行響應(yīng),以保持實(shí)時(shí)操作。
處理虛擬化處理器異常硬件資源分配程序被設(shè)置為提供如下的對(duì)處理器異常(例如,CPU中斷或協(xié)處理器中斷)進(jìn)行處理的機(jī)制·首先,通過關(guān)鍵操作系統(tǒng)攔截處理器異常;·其次,向一個(gè)或更多個(gè)次要操作系統(tǒng)發(fā)布對(duì)應(yīng)的虛擬異常;存儲(chǔ)該數(shù)據(jù),并在調(diào)度程序下一次調(diào)用該次要操作系統(tǒng)時(shí),調(diào)用該次要操作系統(tǒng)中的對(duì)應(yīng)虛擬中斷服務(wù)例程2026;·第三,對(duì)來自次要操作系統(tǒng)內(nèi)的任何待處理虛擬異常進(jìn)行屏蔽或去屏蔽。
虛擬化的異常通常用于兩個(gè)不同的目的·首先,向次要操作系統(tǒng)轉(zhuǎn)發(fā)硬件設(shè)備中斷(作為異步處理器異常來傳遞這些硬件設(shè)備中斷);·其次,實(shí)現(xiàn)操作系統(tǒng)間交叉中斷,即由一個(gè)系統(tǒng)對(duì)另一中斷而產(chǎn)生的中斷(作為同步異常來傳遞這些中斷)。
陷阱調(diào)用處理程序414陷阱調(diào)用處理程序的操作將根據(jù)以下描述而變得明了。其主要目的是在第一個(gè)操作系統(tǒng)停止(因此不需要CPU資源)時(shí)允許調(diào)度程序和切換程序改變到另一操作系統(tǒng)。另一作用是調(diào)用諸如系統(tǒng)控制臺(tái)的硬件資源分配程序服務(wù),以在與后面的實(shí)施例相關(guān)描述的調(diào)試中使用。
虛擬化設(shè)備416如上所述,對(duì)于各個(gè)共享設(shè)備(例如,中斷控制器、總線橋、系統(tǒng)定時(shí)器、實(shí)時(shí)時(shí)鐘),各個(gè)操作系統(tǒng)都提供構(gòu)成用于該裝置的對(duì)等級(jí)驅(qū)動(dòng)程序組的設(shè)備驅(qū)動(dòng)程序。該實(shí)時(shí)操作系統(tǒng)提供用于實(shí)際訪問該設(shè)備的驅(qū)動(dòng)程序,而其他操作系統(tǒng)提供虛擬設(shè)備驅(qū)動(dòng)程序。
硬件資源分配程序的共享設(shè)備處理程序416為各個(gè)設(shè)備提供存儲(chǔ)數(shù)據(jù)結(jié)構(gòu),以由該設(shè)備的所有對(duì)等設(shè)備驅(qū)動(dòng)程序進(jìn)行訪問。當(dāng)要訪問或已經(jīng)訪問該設(shè)備時(shí),設(shè)備驅(qū)動(dòng)程序使用該訪問的細(xì)節(jié)來更新存儲(chǔ)在對(duì)應(yīng)數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)。對(duì)等驅(qū)動(dòng)程序使用交叉中斷(如上所述)來通過信號(hào)發(fā)送事件,以通知其他對(duì)等設(shè)備剛更新了數(shù)據(jù)結(jié)構(gòu)。
用于訪問中斷控制器設(shè)備的驅(qū)動(dòng)程序使用上述的虛擬化異常機(jī)制來如下處理硬件中斷·關(guān)鍵操作系統(tǒng)設(shè)備驅(qū)動(dòng)程序?qū)τ布袛噙M(jìn)行處理,并將它們作為虛擬化異常轉(zhuǎn)發(fā)給次要對(duì)等驅(qū)動(dòng)程序;·次要操作系統(tǒng)通過使用上述的虛擬化異常屏蔽和去屏蔽例程而使能和禁用中斷。
只有在與I/O總線及其橋相連接的設(shè)備并非全部分配給同一操作系統(tǒng)的情況下才必須共享I/O總線及其橋。因此,在分配設(shè)備時(shí),盡可能地將與同一I/O總線相連接的設(shè)備分配給同一操作系統(tǒng)。在必須共享的情況下,資源分配表404存儲(chǔ)表示總線上的資源(地址空間、中斷線和I/O端口)的分配的描述符數(shù)據(jù),以表示哪個(gè)操作系統(tǒng)具有哪些資源。
本實(shí)施例的實(shí)現(xiàn)最后,在步驟314,硬件資源分配程序和操作系統(tǒng)的代碼編譯為與計(jì)算機(jī)100一起提供的可發(fā)布二進(jìn)制計(jì)算機(jī)程序產(chǎn)品。
根據(jù)本發(fā)明的一方面可以提供的產(chǎn)品是開發(fā)環(huán)境產(chǎn)品,其包括如下的計(jì)算機(jī)程序所述計(jì)算機(jī)程序使得用戶能夠選擇要使用的不同操作系統(tǒng),為各個(gè)操作系統(tǒng)建立并選擇不同的應(yīng)用程序,將該應(yīng)用程序和操作系統(tǒng)嵌入到可交付的產(chǎn)品中,并提供對(duì)操作系統(tǒng)的引導(dǎo)以及對(duì)應(yīng)用程序的可執(zhí)行二進(jìn)制代碼的啟動(dòng)。這基于并類似于可以從www.jaluna.com獲得的C5開發(fā)環(huán)境。
本實(shí)施例在引導(dǎo)和初始化期間的操作參照?qǐng)D5,如下地執(zhí)行根據(jù)本實(shí)施例的引導(dǎo)和初始化處理。
在開始供電時(shí)執(zhí)行存儲(chǔ)在ROM 106中的自舉程序(“trampoline”)4022,這啟動(dòng)程序4024,程序4024將硬件資源分配程序400的其余部分安裝到存儲(chǔ)器中并將其啟動(dòng),作為自變量傳遞描述系統(tǒng)映像構(gòu)造的數(shù)據(jù)結(jié)構(gòu)(如下所述)。
硬件資源分配程序?qū)捎糜谙到y(tǒng)控制臺(tái)的串行線進(jìn)行初始化。然后,該硬件資源分配程序從關(guān)鍵操作系統(tǒng)開始依次為各個(gè)操作系統(tǒng)分配存儲(chǔ)器空間(操作系統(tǒng)環(huán)境)。因此硬件資源分配程序用作第二級(jí)系統(tǒng)內(nèi)核引導(dǎo)加載程序。
然后,各個(gè)操作系統(tǒng)內(nèi)核經(jīng)過其自己的初始化階段,在資源分配表404中的其余資源中選擇該操作系統(tǒng)獨(dú)有的資源,并啟動(dòng)其初始服務(wù)和應(yīng)用程序。
圖6表示構(gòu)成系統(tǒng)映像的存儲(chǔ)器地址分配的示例。當(dāng)編譯硬件資源分配程序和操作系統(tǒng)時(shí),分配存儲(chǔ)器內(nèi)的位置。存儲(chǔ)器中的這些位置的集合限定了圖6所示的系統(tǒng)映像。該系統(tǒng)映像包括第一存儲(chǔ)區(qū)602,硬件資源分配程序位于該存儲(chǔ)區(qū);第二存儲(chǔ)區(qū)604,實(shí)時(shí)操作系統(tǒng)位于該存儲(chǔ)區(qū);第三存儲(chǔ)區(qū)606,次要操作系統(tǒng)位于該存儲(chǔ)區(qū);以及本實(shí)施例中的第四存儲(chǔ)區(qū)608,包含次要操作系統(tǒng)(Linux)的根文件系統(tǒng)的RAM盤位于該存儲(chǔ)區(qū)。
該系統(tǒng)映像存儲(chǔ)在永久性存儲(chǔ)器(例如,用于諸如移動(dòng)電話或PBX的典型實(shí)時(shí)裝置的只讀存儲(chǔ)器)中。其余存儲(chǔ)區(qū)可用于分配給各個(gè)操作系統(tǒng),作為該操作系統(tǒng)可以在其中加載和運(yùn)行應(yīng)用程序的環(huán)境。
對(duì)操作系統(tǒng)上下文的存儲(chǔ)器分配在引導(dǎo)時(shí),各個(gè)操作系統(tǒng)隨后對(duì)補(bǔ)充的存儲(chǔ)器部分進(jìn)行分配,以滿足其自身構(gòu)造需要的總大小。一旦分配給了操作系統(tǒng),就使用該操作系統(tǒng)本身的物理存儲(chǔ)器管理方案來管理存儲(chǔ)區(qū)。該操作系統(tǒng)忽略所有其他存儲(chǔ)器。
虛擬存儲(chǔ)器分配對(duì)各個(gè)操作系統(tǒng)分配獨(dú)立的虛擬存儲(chǔ)器空間,以確保多個(gè)操作系統(tǒng)不會(huì)彼此干擾或者與硬件資源分配程序干擾。對(duì)各個(gè)操作系統(tǒng)的用戶地址空間(即,范圍)和管理者地址空間(即,范圍)各自分配不同的存儲(chǔ)器管理單元(MMU)上下文標(biāo)識(shí)符(ID),這使得能夠區(qū)分具有交疊地址的不同虛擬存儲(chǔ)器空間。在編譯各個(gè)操作系統(tǒng)時(shí)向各個(gè)操作系統(tǒng)分配MMU上下文ID(圖3的步驟314)。
該方案避免了當(dāng)硬件資源分配程序在不同的操作系統(tǒng)之間進(jìn)行切換時(shí)刷新轉(zhuǎn)換高速緩存(translation cash)(TLB)的需要,該刷新會(huì)花費(fèi)額外的時(shí)間。相反地,通過存儲(chǔ)當(dāng)前運(yùn)行的操作系統(tǒng)的MMU上下文ID、并調(diào)回所切換的兩個(gè)操作系統(tǒng)的先前存儲(chǔ)的MMU上下文ID,從而實(shí)現(xiàn)不同操作系統(tǒng)之間的切換。
對(duì)輸入/輸出設(shè)備的分配如上所述,分配表404表示向各個(gè)操作系統(tǒng)唯一地分配了的哪些設(shè)備。此外,表404表示向這些設(shè)備獨(dú)占地分配了哪些輸入/輸出資源(直接存儲(chǔ)器存取(DMA)設(shè)備、輸入/輸出端口、中斷等),因此使得可以直接使用這些資源而沒有任何沖突。通常,許多設(shè)備是雙份的,所以這樣可以顯著減少潛在的沖突。
該分配基于操作系統(tǒng)構(gòu)造方案(例如,在C5的情況下是在設(shè)備樹中指定的設(shè)備)。在引導(dǎo)時(shí)按照引導(dǎo)順序?qū)⑺鼈兎峙浣o操作系統(tǒng),從而關(guān)鍵操作系統(tǒng)可以第一個(gè)選擇表404中的可用設(shè)備,而次要操作系統(tǒng)依次接收在其余設(shè)備中對(duì)它們的分配。當(dāng)各個(gè)操作系統(tǒng)初始化時(shí),檢測(cè)這些設(shè)備的存在,并對(duì)它們使用其原有的驅(qū)動(dòng)程序而不與硬件資源分配程序進(jìn)行交互。
次要操作系統(tǒng)的“熱”重啟根據(jù)本實(shí)施例,可以在其他操作系統(tǒng)繼續(xù)運(yùn)行的同時(shí)重啟次要操作系統(tǒng)(例如,因?yàn)楸罎⒍貑?。因?yàn)橄到y(tǒng)資源的獨(dú)立,所以次要操作系統(tǒng)的崩潰不會(huì)干擾關(guān)鍵操作系統(tǒng)(或其他次要操作系統(tǒng))的正在進(jìn)行的操作,并且該次要操作系統(tǒng)的重啟也不會(huì)干擾關(guān)鍵操作系統(tǒng)(或其他次要操作系統(tǒng))的正在進(jìn)行的操作。
在本實(shí)施例中,對(duì)硬件資源分配程序的系統(tǒng)“停止”和“啟動(dòng)”陷阱調(diào)用有助于從關(guān)鍵操作系統(tǒng)內(nèi)關(guān)閉和重啟次要操作系統(tǒng)。此外,硬件資源分配程序在引導(dǎo)時(shí)將原始系統(tǒng)映像的副本保存在硬件資源分配程序分配的存儲(chǔ)器內(nèi)的永久性存儲(chǔ)器中。作為示例,如下地對(duì)本實(shí)施例中的熱重啟進(jìn)行管理在初始啟動(dòng)時(shí),硬件資源分配程序保存次要操作系統(tǒng)存儲(chǔ)器映像的副本。
關(guān)鍵操作系統(tǒng)包括用于周期性地監(jiān)視次要操作系統(tǒng)的運(yùn)行(例如,通過設(shè)定超時(shí)并等待由在次要操作系統(tǒng)中運(yùn)行的對(duì)等驅(qū)動(dòng)程序觸發(fā)的事件,以檢查它們的繼續(xù)操作)的軟件看門狗驅(qū)動(dòng)例程。
如果關(guān)鍵操作系統(tǒng)檢測(cè)到次要操作系統(tǒng)出故障或停止,則其對(duì)硬件資源分配程序觸發(fā)(該次要操作系統(tǒng)的)“停止”陷阱調(diào)用、然后觸發(fā)(該次要操作系統(tǒng)的)“啟動(dòng)”陷阱調(diào)用。
然后,硬件資源分配程序恢復(fù)所保存的該次要操作系統(tǒng)映像的副本,并從存儲(chǔ)器中重新引導(dǎo)它,以重新啟動(dòng)??梢园l(fā)現(xiàn),在對(duì)實(shí)施例進(jìn)行測(cè)試時(shí),Linux次要操作系統(tǒng)可以在幾秒鐘內(nèi)從鎖定狀態(tài)重啟。
在其他方面中,熱重啟基于在Chorus操作系統(tǒng)中可用的熱重啟來進(jìn)行,例如在以下文獻(xiàn)中所述可以從http//www.jaluna.com/developer/papers/CSI-TR-96-34.pdf獲得的“Fast Error Recovery in CHORUS/OS.The Hot-RestartTechnology”,Abrossimov,F(xiàn).Hermann.J.C.Hugly等人,Chorus Systems Inc.Technical Report,1996年8月,14p。
運(yùn)行時(shí)的操作下面將更詳細(xì)地描述在安裝和引導(dǎo)之后本實(shí)施例的操作。
在已引導(dǎo)和初始化之后,實(shí)時(shí)操作系統(tǒng)運(yùn)行一個(gè)或多個(gè)應(yīng)用程序207(例如UDP/IP棧——UDP/IP表示通用數(shù)據(jù)報(bào)協(xié)議/互聯(lián)網(wǎng)協(xié)議),并且次要操作系統(tǒng)運(yùn)行若干個(gè)應(yīng)用程序208a、208b(例如,字處理程序和電子表格程序)。實(shí)時(shí)操作系統(tǒng)微內(nèi)核201和次要操作系統(tǒng)內(nèi)核202通過硬件資源分配程序接口與硬件資源分配程序進(jìn)行通信,該硬件資源分配程序接口包括·表示操作系統(tǒng)上下文的數(shù)據(jù)結(jié)構(gòu)(即,需要被保存和恢復(fù)以切換到該操作系統(tǒng)的狀態(tài)變量組),以及硬件庫(repository);·在操作系統(tǒng)環(huán)境中執(zhí)行的函數(shù)組;以及·在硬件資源分配程序環(huán)境中執(zhí)行的陷阱調(diào)用例程組。
如果操作系統(tǒng)都不需要處理器時(shí)間(例如,都已經(jīng)達(dá)到“等待”狀態(tài)),則硬件資源分配程序400切換到關(guān)鍵操作系統(tǒng)的空閑線程,其中其等待中斷或事件。因此,可以由關(guān)鍵操作系統(tǒng)的服務(wù)例程立即對(duì)中斷進(jìn)行處理,而無需首先切換到關(guān)鍵操作系統(tǒng)。
在某些情況下,將產(chǎn)生中斷或事件。例如,可能在數(shù)據(jù)端口接收到分組,導(dǎo)致中斷,以使所述分組可以由執(zhí)行UDP/IP棧的實(shí)時(shí)操作系統(tǒng)進(jìn)行處理。另選的是,用戶可能操縱鍵盤或鼠標(biāo),導(dǎo)致中斷,以操作次要操作系統(tǒng)202的GUI從而與字處理應(yīng)用程序208進(jìn)行交互。另選的是,系統(tǒng)時(shí)鐘可能指示已經(jīng)過了預(yù)定時(shí)間,并且應(yīng)該開始重新執(zhí)行應(yīng)用程序或者應(yīng)該執(zhí)行操作系統(tǒng)功能。
然后,關(guān)鍵操作系統(tǒng)服務(wù)例程如下所述地對(duì)中斷進(jìn)行服務(wù)。
中斷和事件處理如果不是已經(jīng)在關(guān)鍵操作系統(tǒng)中,則硬件資源分配程序中斷處理程序412調(diào)用操作系統(tǒng)切換程序408以切換至關(guān)鍵操作系統(tǒng),然后中斷處理程序例程412調(diào)用關(guān)鍵操作系統(tǒng)201中的中斷服務(wù)例程(ISR)。如果該中斷針對(duì)關(guān)鍵操作系統(tǒng),則因?yàn)槠鋪碜晕ㄒ环峙浣o關(guān)鍵操作系統(tǒng)的設(shè)備或者因?yàn)槠鋪碜怨蚕碓O(shè)備并具有特定的預(yù)定值,所以關(guān)鍵操作系統(tǒng)ISR采取處理中斷所需的動(dòng)作。如果該中斷不針對(duì)關(guān)鍵操作系統(tǒng),則將控制傳遞回硬件資源分配程序。
關(guān)鍵操作系統(tǒng)到次要操作系統(tǒng)的切換參照?qǐng)D7,對(duì)于該示例,系統(tǒng)正在執(zhí)行在關(guān)鍵操作系統(tǒng)201上運(yùn)行的應(yīng)用程序207a的線程702。
如果產(chǎn)生了中斷,則關(guān)鍵操作系統(tǒng)中斷服務(wù)例程704進(jìn)行中斷服務(wù)。在結(jié)束時(shí)將控制傳遞回線程702和由關(guān)鍵操作系統(tǒng)201的調(diào)度程序執(zhí)行的任何其他線程。當(dāng)完成對(duì)所有線程的處理時(shí),關(guān)鍵操作系統(tǒng)完成執(zhí)行,它調(diào)度其“空閑”線程。因此,關(guān)鍵操作系統(tǒng)中的“空閑”陷阱例程向硬件資源分配程序400發(fā)出“空閑”陷阱調(diào)用。然后,硬件資源分配程序執(zhí)行進(jìn)行以下處理的例程·如果中斷處理程序412當(dāng)前具有一些所存儲(chǔ)的虛擬中斷,則中斷處理程序412將這些虛擬中斷轉(zhuǎn)發(fā)給次要操作系統(tǒng)。
·硬件資源分配程序操作系統(tǒng)調(diào)度程序410選擇要執(zhí)行的次要操作系統(tǒng)202。OS切換程序408隨后將當(dāng)前上下文(通常為處理器MMU和狀態(tài)寄存器、指令和堆棧指針)保存在關(guān)鍵OS上下文存儲(chǔ)區(qū)706中。其隨后獲取所存儲(chǔ)的次要操作系統(tǒng)202的執(zhí)行上下文708,并將它們寫到相關(guān)的寄存器中。
·如果存在針對(duì)相關(guān)的次要OS的虛擬中斷,則中斷處理程序412調(diào)用次要操作系統(tǒng)內(nèi)的用于對(duì)中斷進(jìn)行服務(wù)的相關(guān)中斷服務(wù)例程710,然后在完成時(shí)返回執(zhí)行次要操作系統(tǒng)退出處的線程712。
如果中斷處理程序412當(dāng)前不具有未處理的中斷,則操作切換程序408的硬件資源分配程序使用存儲(chǔ)在所恢復(fù)的操作系統(tǒng)上下文內(nèi)的程序計(jì)數(shù)器值,使得次要操作系統(tǒng)在其退出處(在本示例中為線程712處)重新開始執(zhí)行。
因此,在關(guān)鍵操作系統(tǒng)201執(zhí)行了某一功能(對(duì)其自己的應(yīng)用程序或服務(wù)進(jìn)行服務(wù),或者對(duì)針對(duì)另一操作系統(tǒng)的中斷進(jìn)行服務(wù))之后,硬件資源分配程序?qū)⒖刂苽鬟f回如調(diào)度程序410所確定的下一個(gè)次要操作系統(tǒng)202。
在中斷時(shí)次要操作系統(tǒng)到關(guān)鍵操作系統(tǒng)的切換參照?qǐng)D8,下面將公開從次要操作系統(tǒng)轉(zhuǎn)移到關(guān)鍵操作系統(tǒng)的處理。在這種情況下,系統(tǒng)正在執(zhí)行在關(guān)鍵操作系統(tǒng)202上運(yùn)行的應(yīng)用程序208a的線程712。
當(dāng)產(chǎn)生了硬件中斷時(shí),硬件資源分配程序啟動(dòng)OS切換程序,以將次要操作系統(tǒng)上下文保存在上下文存儲(chǔ)區(qū)708中。硬件資源分配程序然后切換到主要操作系統(tǒng)201,從上下文存儲(chǔ)區(qū)706恢復(fù)狀態(tài)變量的值,并調(diào)用主要操作系統(tǒng)201的中斷服務(wù)例程704。在對(duì)中斷進(jìn)行服務(wù)之后,主要操作系統(tǒng)201的調(diào)度程序可以將控制從ISR 704傳遞回先前正在執(zhí)行的任何線程704(或要執(zhí)行的線程)。
當(dāng)對(duì)ISR和所有線程進(jìn)行了處理時(shí),主要操作系統(tǒng)201將控制傳回硬件資源分配程序,該硬件資源分配程序以上面參照?qǐng)D7所述的方式從主要操作系統(tǒng)201進(jìn)行切換(將狀態(tài)變量保存在上下文存儲(chǔ)區(qū)706中),并切換到所選擇的次要操作系統(tǒng)201(從上下文存儲(chǔ)區(qū)708獲取狀態(tài)變量)。
操作系統(tǒng)間的通信——虛擬總線418在各個(gè)操作系統(tǒng)中,虛擬總線例程與虛擬總線驅(qū)動(dòng)程序協(xié)作。其仿效連接操作系統(tǒng)的物理總線,類似于插入到Compact PCI(cPCI)背板中的cPCI板。各個(gè)操作系統(tǒng)都具有用于該虛擬總線上的虛擬總線橋設(shè)備的驅(qū)動(dòng)例程,使得操作系統(tǒng)及其應(yīng)用程序可以通過任何期望的協(xié)議(從原始數(shù)據(jù)傳輸?shù)酵耆獻(xiàn)P協(xié)議棧)進(jìn)行通信。
硬件資源分配程序虛擬總線基于上面已經(jīng)討論過的共享存儲(chǔ)器和系統(tǒng)交叉中斷原理。具體地說,虛擬總線例程418仿效C5 buscom DDI限定虛擬總線橋共享設(shè)備的syscom,使得能夠在虛擬總線上導(dǎo)出(共享)存儲(chǔ)器并觸發(fā)對(duì)其他操作系統(tǒng)的交叉中斷。
在各個(gè)次要操作系統(tǒng)中,各個(gè)虛擬總線驅(qū)動(dòng)程序在啟動(dòng)時(shí)在硬件資源分配程序硬件庫中生成這種虛擬總線橋。這樣,其導(dǎo)出(共享)其專用存儲(chǔ)器的區(qū)域,并提供了在其主機(jī)系統(tǒng)內(nèi)產(chǎn)生中斷的方法。
這樣,第一操作系統(tǒng)的虛擬總線驅(qū)動(dòng)程序通過以下處理向第二操作系統(tǒng)發(fā)送數(shù)據(jù)·寫入到由第二操作系統(tǒng)的對(duì)等虛擬總線驅(qū)動(dòng)程序?qū)С龅拇鎯?chǔ)器中,然后;
·觸發(fā)交叉中斷以通知第二操作系統(tǒng)中的對(duì)等總線驅(qū)動(dòng)程序可獲得數(shù)據(jù)。
在相反(輸入)方向上,虛擬總線驅(qū)動(dòng)程序在接收到表示這種數(shù)據(jù)已存儲(chǔ)在其自己的導(dǎo)出存儲(chǔ)器區(qū)域中的交叉中斷時(shí),向上游傳播輸入數(shù)據(jù)(以由其針對(duì)的應(yīng)用程序或例程使用)。
參照?qǐng)D9a,要與在同一操作系統(tǒng)202上運(yùn)行的另一應(yīng)用程序208b進(jìn)行通信的應(yīng)用程序208a可以通過該操作系統(tǒng)來實(shí)現(xiàn)該操作。要與在一個(gè)操作系統(tǒng)202上運(yùn)行的另一應(yīng)用程序208b進(jìn)行通信的在不同操作系統(tǒng)201上運(yùn)行的應(yīng)用程序207b通過使用其操作系統(tǒng)的API向虛擬總線寫入數(shù)據(jù)來進(jìn)行該操作,其操作系統(tǒng)使用虛擬總線驅(qū)動(dòng)例程將該數(shù)據(jù)傳遞給另一操作系統(tǒng)202,該另一操作系統(tǒng)將該數(shù)據(jù)從其虛擬總線驅(qū)動(dòng)程序傳遞給應(yīng)用程序208b。
參照?qǐng)D9b,將該結(jié)構(gòu)轉(zhuǎn)換為其中第一和第二操作系統(tǒng)在不同的計(jì)算機(jī)100、101上運(yùn)行的結(jié)構(gòu)所需的變化很小;僅僅需要改變操作系統(tǒng)所使用的驅(qū)動(dòng)程序,以使得它們使用用于真實(shí)總線103的驅(qū)動(dòng)程序而不是虛擬總線驅(qū)動(dòng)程序。因此,使得該系統(tǒng)更獨(dú)立于該系統(tǒng)在其上進(jìn)行操作的硬件。
通過硬件資源分配程序虛擬總線進(jìn)行通信是應(yīng)用程序可以使用的,而且也可以由操作系統(tǒng)內(nèi)核內(nèi)部使用,從而它們可以在實(shí)現(xiàn)在多個(gè)操作系統(tǒng)之間分配的服務(wù)時(shí)進(jìn)行協(xié)作。這種“智能”分配的服務(wù)包括用于(上述的)系統(tǒng)熱重啟的軟件看門狗,或者分布式網(wǎng)絡(luò)協(xié)議棧。
EP 1054332專利使用信號(hào)量(sernaphore)鎖來使對(duì)公共通信存儲(chǔ)器的訪問同步。這種鎖引入了RT與GP操作系統(tǒng)之間的額外的依賴性。在本實(shí)施例中,使用無鎖通信協(xié)議而避免了該依賴性。
調(diào)試在優(yōu)選實(shí)施例中,硬件資源分配程序具有第二操作模式,其中該硬件資源分配程序用作調(diào)試代理。
根據(jù)本實(shí)施例,在該第二模式下,硬件資源分配程序可以通過串行通信線路與在另一機(jī)器(“主”機(jī))上運(yùn)行的調(diào)試軟件工具進(jìn)行通信。
這種調(diào)試工具提供高級(jí)圖形用戶接口(GUI),以對(duì)硬件資源分配程序進(jìn)行遠(yuǎn)程控制。使用硬件資源分配程序虛擬化的異常機(jī)制來攔截所定義的異常。然后用戶可以構(gòu)造并控制在處理器異常的情況下硬件資源分配程序如何動(dòng)作,并且還顯示機(jī)器和系統(tǒng)狀態(tài),以使得能夠診斷代碼或其他系統(tǒng)錯(cuò)誤或問題。
用戶可以選擇一個(gè)或更多個(gè)這種處理器異常作為從操作系統(tǒng)到硬件資源分配程序的陷阱調(diào)用的基礎(chǔ)。基于所選擇的異常,當(dāng)在執(zhí)行期間產(chǎn)生各個(gè)異常時(shí),操作系統(tǒng)停止,并對(duì)硬件資源分配程序執(zhí)行陷阱調(diào)用,然后該硬件資源分配程序保存當(dāng)前上下文并使得能夠與主機(jī)上的調(diào)試工具進(jìn)行交互。然后用戶可以使得顯示狀態(tài)變量(例如堆棧指針、程序和地址計(jì)數(shù)器)的當(dāng)前狀態(tài)和/或所選擇的存儲(chǔ)器塊的內(nèi)容。用戶可以指定在要調(diào)試的特定操作系統(tǒng)中應(yīng)該俘獲的給定類型的異常,或者可以指定在任何操作系統(tǒng)中都應(yīng)該在它們出現(xiàn)的任何時(shí)候?qū)⑵浞@。作為響應(yīng),僅在一個(gè)操作系統(tǒng)或在所有操作系統(tǒng)中實(shí)現(xiàn)陷阱調(diào)用。用戶也可以指定是在重新開始執(zhí)行時(shí)將給定類型的異常正常地轉(zhuǎn)發(fā)給系統(tǒng)還是簡(jiǎn)單地將其忽略。
因?yàn)橛布Y源分配程序在其自己的環(huán)境中執(zhí)行,所以與在操作系統(tǒng)內(nèi)可以進(jìn)行的調(diào)試相比,其能夠?qū)υ摬僮飨到y(tǒng)進(jìn)行更多的調(diào)試。重要的是,在用作調(diào)試代理的硬件資源分配程序與所調(diào)試的系統(tǒng)之間沒有共享代碼。這例如使得能夠調(diào)試甚至內(nèi)核低級(jí)代碼,例如異常向量或中斷服務(wù)例程。
根據(jù)本實(shí)施例的總體(主機(jī)/目標(biāo))調(diào)試架構(gòu)的一些其他方面與在以下文獻(xiàn)中描述的用于Chorus和C5調(diào)試系統(tǒng)的情況相似,所述文獻(xiàn)是由Jaluna發(fā)表的“C51.0 Debugging Guide”,可以從http//www.jaluna.com/doc/c5/html/DebugGuide/book1.html獲得。
安全架構(gòu)應(yīng)該清楚的是,上述實(shí)施例給出了安全架構(gòu)的堅(jiān)實(shí)基礎(chǔ)。這是因?yàn)橛脩敉ǔT诖我僮飨到y(tǒng)上運(yùn)行不安全的應(yīng)用程序,該次要操作系統(tǒng)與指定的系統(tǒng)資源隔離開來,從而只能通過硬件資源分配程序(和主要操作系統(tǒng)的驅(qū)動(dòng)程序)對(duì)這些系統(tǒng)資源進(jìn)行訪問。因此,可以在主要操作系統(tǒng)上運(yùn)行安全應(yīng)用程序,其例如執(zhí)行加密/解密;使得能夠訪問加密文件;管理、存儲(chǔ)并提供密碼和其他訪問信息;管理并記錄對(duì)版權(quán)材料的訪問和復(fù)制。在次要操作系統(tǒng)上運(yùn)行的應(yīng)用程序不能訪問并非分配給該操作系統(tǒng)的系統(tǒng)資源,并且,在操作系統(tǒng)按不同的存儲(chǔ)器上下文運(yùn)行(即,使用指向不同空間的不同尋址指針)的情況下,在次要操作系統(tǒng)上運(yùn)行的應(yīng)用程序不能用于干預(yù)在主系統(tǒng)上運(yùn)行的應(yīng)用程序從而削弱其操作的安全性。
以下是對(duì)具體的優(yōu)選實(shí)施例的描述。
1總體介紹本文獻(xiàn)描述了ARM架構(gòu)上的Jaluna超微內(nèi)核環(huán)境。在我們?cè)缦鹊奈墨I(xiàn)Jaluna-2A Multi-System Programming Environment(JL/TR-02-80.03)中已經(jīng)描述了Jaluna超微內(nèi)核設(shè)計(jì)的一般原理。而本文獻(xiàn)關(guān)注于超微內(nèi)核實(shí)現(xiàn)的ARM具體方面,具體來說,關(guān)注于作為超微內(nèi)核環(huán)境的基石的超微內(nèi)核執(zhí)行程序。
本文獻(xiàn)描述了如何使用ARM處理器架構(gòu)以實(shí)現(xiàn)超微內(nèi)核執(zhí)行程序,該超微內(nèi)核執(zhí)行程序能夠運(yùn)行多個(gè)獨(dú)立的操作系統(tǒng),這些操作系統(tǒng)在它們之間并行地共享中央處理器(CPU)以及存儲(chǔ)器管理單元(MMU)。
本文獻(xiàn)還描述了超微內(nèi)核執(zhí)行程序如何處理硬件中斷。具體來說,本文獻(xiàn)描述了用于攔截硬件中斷并向主要操作系統(tǒng)轉(zhuǎn)發(fā)硬件中斷的機(jī)制和提供給次要操作系統(tǒng)的軟件中斷機(jī)制。
注意,在本文獻(xiàn)中,我們假設(shè)超微內(nèi)核運(yùn)行在單處理器計(jì)算機(jī)上,因此,這里不涉及與對(duì)稱多處理器(SMP)架構(gòu)有關(guān)的方面。
2概述2.1虛擬地址空間如果在ARM架構(gòu)的給定實(shí)現(xiàn)上存在MMU,則所有操作系統(tǒng)和超微內(nèi)核都總是在虛擬地址空間中運(yùn)行,換句話說,總是使能MMU。注意,其中執(zhí)行超微內(nèi)核代碼的存儲(chǔ)器上下文可能隨時(shí)間而變化。另一方面,超微內(nèi)核不需要MMU,它在沒有MMU的情況下也可以支持ARM處理器。在此情況下,所有操作系統(tǒng)和超微內(nèi)核都在物理地址空間中運(yùn)行。
在本說明中,術(shù)語“存儲(chǔ)器上下文”表示硬件地址轉(zhuǎn)換樹,由系統(tǒng)控制協(xié)處理器(CP15)中的轉(zhuǎn)換表基礎(chǔ)寄存器來執(zhí)行根目錄表。
通常,支持用戶模式保護(hù)的操作系統(tǒng)創(chuàng)建多個(gè)存儲(chǔ)器上下文(每個(gè)用戶進(jìn)程一個(gè))以使得能夠處理專用用戶虛擬地址空間。內(nèi)核每次從一個(gè)用戶進(jìn)程切換到另一個(gè)時(shí)都改變存儲(chǔ)器上下文。另一方面,連同用戶地址空間一起,操作系統(tǒng)內(nèi)核還對(duì)在所有存儲(chǔ)器上下文中復(fù)制的唯一管理員地址空間進(jìn)行處理。用戶虛擬地址和管理員虛擬地址在ARM架構(gòu)上永遠(yuǎn)不交疊。
如果不存在MMU,則操作系統(tǒng)在所有進(jìn)程之間共享同一地址空間,因此不需要進(jìn)行存儲(chǔ)器上下文切換。在此情況下,我們可以說該操作系統(tǒng)針對(duì)管理員空間只使用一個(gè)存儲(chǔ)器上下文。
管理員地址空間映射可以是靜態(tài)的或動(dòng)態(tài)的。靜態(tài)映射是在系統(tǒng)初始化時(shí)創(chuàng)建的,它通常(整體地或部分地)對(duì)可用物理存儲(chǔ)器進(jìn)行映射。這種映射也稱為一對(duì)一映射或內(nèi)核虛擬(KV)映射。具體地說,KV映射通常覆蓋操作系統(tǒng)內(nèi)核代碼、數(shù)據(jù)以及bss段。動(dòng)態(tài)映射是在運(yùn)行時(shí)創(chuàng)建的,用以動(dòng)態(tài)地訪問裝載的內(nèi)核模塊或動(dòng)態(tài)分配的(非連續(xù))存儲(chǔ)器塊。
當(dāng)超微內(nèi)核調(diào)度了在CPU上運(yùn)行新的操作系統(tǒng)時(shí),自然應(yīng)當(dāng)對(duì)存儲(chǔ)器上下文(轉(zhuǎn)換表基礎(chǔ)寄存器)進(jìn)行切換。ARM架構(gòu)只支持虛擬高速緩存,從而避免存儲(chǔ)器上下文切換時(shí)的代價(jià)非常高的高速緩存刷新(由于高速緩存混疊現(xiàn)象,高速緩存刷新可能是必要的),我們決定要求所有KV映射都使用相同的轉(zhuǎn)換規(guī)則。換句話說,在所有操作系統(tǒng)的所有KV映射中,物理存儲(chǔ)器位置的管理員地址應(yīng)該是相同的。它應(yīng)當(dāng)使用相同的訪問和高速緩存屬性。可以說,所有操作系統(tǒng)都共享相同的管理員地址空間(但是不共享轉(zhuǎn)換樹,轉(zhuǎn)換樹可以是不同的)。各個(gè)操作系統(tǒng)在該管理員空間中的專用時(shí)隙中運(yùn)行。注意,當(dāng)不存在MMU時(shí),所描述的要求也是非常自然的。
在超微內(nèi)核環(huán)境中區(qū)分3種存儲(chǔ)器上下文主要、次要以及超微內(nèi)核上下文。
主要存儲(chǔ)器上下文是主要操作系統(tǒng)內(nèi)核當(dāng)前使用的存儲(chǔ)器上下文。注意,在主要操作系統(tǒng)支持用戶地址空間的情況下,主要內(nèi)核可能使用多個(gè)存儲(chǔ)器上下文,但是,如上所述,管理員地址空間在所有這種上下文中都是相同的。由于超微內(nèi)核并不關(guān)心用戶空間映射,因此從超微內(nèi)核角度來看,主要存儲(chǔ)器上下文是唯一的,并且主要存儲(chǔ)器上下文包括由主要內(nèi)核建立的靜態(tài)和動(dòng)態(tài)管理員映射。
次要存儲(chǔ)器上下文是次要操作系統(tǒng)內(nèi)核當(dāng)前使用的存儲(chǔ)器上下文。它類似于主要存儲(chǔ)器上下文。從超微內(nèi)核角度來看,(對(duì)于給定的次要內(nèi)核來說)次要存儲(chǔ)器上下文是唯一的,并且它包括由次要內(nèi)核建立的靜態(tài)和動(dòng)態(tài)管理員映射。
我們要求所有的操作系統(tǒng)映射超微內(nèi)核擁有的物理存儲(chǔ)器,因此它們可以直接調(diào)用超微內(nèi)核(即,不需要改變執(zhí)行模式和存儲(chǔ)器上下文的陷阱或其他特殊指令,見2.2部分)。這樣,它們還可以訪問由超微內(nèi)核導(dǎo)出的數(shù)據(jù)結(jié)構(gòu)(操作系統(tǒng)上下文,見2.3部分)。
每個(gè)操作系統(tǒng)都應(yīng)當(dāng)能夠在接收到來自通信機(jī)制實(shí)現(xiàn)的對(duì)應(yīng)請(qǐng)求時(shí)對(duì)其他操作系統(tǒng)擁有的一些物理存儲(chǔ)器進(jìn)行映射。
由超微內(nèi)核本身來建立超微內(nèi)核存儲(chǔ)器上下文。該上下文對(duì)所有操作系統(tǒng)擁有的所有存儲(chǔ)器組以及合成的系統(tǒng)映像進(jìn)行映射。主要在超微內(nèi)核初始化階段使用該上下文。
注意,所有考慮的存儲(chǔ)器上下文都應(yīng)當(dāng)使用相同的轉(zhuǎn)換規(guī)則。
圖1示出了主要、次要以及超微內(nèi)核存儲(chǔ)器上下文的示例。在該示例中,物理存儲(chǔ)器的大小是128兆字節(jié)。所有操作系統(tǒng)和超微內(nèi)核都使用從0xc0000000開始的移位一對(duì)一(KV)映射(與Linux內(nèi)核一樣)。
2.2超微內(nèi)核調(diào)用和先占通過函數(shù)調(diào)用顯式地調(diào)用超微內(nèi)核,或者通過中斷/異常處理程序隱式地調(diào)用超微內(nèi)核。在前一情況下,我們說操作系統(tǒng)內(nèi)核調(diào)用超微內(nèi)核。在后一情況下,我們說超微內(nèi)核先占操作系統(tǒng)。強(qiáng)調(diào)這樣一點(diǎn)是重要的總是從在管理員地址空間中運(yùn)行的具有特權(quán)的操作系統(tǒng)代碼來調(diào)用超微內(nèi)核。另一方面,超微內(nèi)核可以先占操作系統(tǒng)內(nèi)核本身以及在內(nèi)核控制下運(yùn)行的用戶進(jìn)程。
一旦引導(dǎo)了合成系統(tǒng)映像,就首先激活超微內(nèi)核,然后其開始執(zhí)行主要操作系統(tǒng)內(nèi)核和次要操作系統(tǒng)內(nèi)核。一旦完成了初始化階段,超微內(nèi)核就扮演被動(dòng)角色。這意味著由顯式地調(diào)用超微內(nèi)核的主要和次要內(nèi)核或者由外部生成的同步事件(即異常)和異步事件(即中斷)來驅(qū)動(dòng)在超微內(nèi)核中執(zhí)行的代碼。
在ARM架構(gòu)上,從主要操作系統(tǒng)和次要操作系統(tǒng)用以進(jìn)行超微內(nèi)核調(diào)用的機(jī)制幾乎相同。在兩種情況下都是間接的函數(shù)調(diào)用。另一方面,超微內(nèi)核按不同的方式先占主要操作系統(tǒng)和次要操作系統(tǒng)。
在執(zhí)行環(huán)境方面,超微內(nèi)核相當(dāng)接近于主要操作系統(tǒng)內(nèi)核。它常常使用相同的存儲(chǔ)器上下文,并且有時(shí)使用相同的管理員堆棧。這樣,超微內(nèi)核與主要操作系統(tǒng)大致具有相同的可用性。另一方面,在次要操作系統(tǒng)與提供免受次要內(nèi)核故障影響的某些保護(hù)功能的超微內(nèi)核之間存在屏障。然而,注意,這種保護(hù)并不是絕對(duì)的,次要內(nèi)核仍然能夠使主要內(nèi)核以及超微內(nèi)核崩潰。
2.2.1主要調(diào)用主要操作系統(tǒng)內(nèi)核通過簡(jiǎn)單的間接調(diào)用來調(diào)用超微內(nèi)核。該調(diào)用不會(huì)切換存儲(chǔ)器上下文。
2.2.2主要先占實(shí)際上,ARM架構(gòu)上的超微內(nèi)核的當(dāng)前實(shí)現(xiàn)永遠(yuǎn)不會(huì)先占主要操作系統(tǒng)??梢允褂弥饕僮飨到y(tǒng)先占來實(shí)現(xiàn)操作系統(tǒng)之間的FPU共享的懶惰策略。
2.2.3次要調(diào)用次要操作系統(tǒng)內(nèi)核通過簡(jiǎn)單的間接調(diào)用來調(diào)用超微內(nèi)核。超微內(nèi)核本身在必要的情況下對(duì)存儲(chǔ)器上下文和執(zhí)行堆棧進(jìn)行切換。
2.2.4次要先占為了能夠先占次要操作系統(tǒng),超微內(nèi)核將它自己的低層處理程序安裝在處理器異常表中。當(dāng)次要操作系統(tǒng)被中斷先占時(shí),這些低層處理程序跳到超微內(nèi)核代碼。注意,存儲(chǔ)器上下文仍然不變,直到當(dāng)超微內(nèi)核調(diào)度另一操作系統(tǒng)在CPU上運(yùn)行時(shí)執(zhí)行了顯式切換。
2.3操作系統(tǒng)上下文可以將超微內(nèi)核數(shù)據(jù)分成兩類全局?jǐn)?shù)據(jù)和每操作系統(tǒng)的數(shù)據(jù)。全局?jǐn)?shù)據(jù)保持全局超微內(nèi)核狀態(tài)(例如超微內(nèi)核轉(zhuǎn)換樹),而每操作系統(tǒng)的數(shù)據(jù)保持與給定的主要或次要操作系統(tǒng)內(nèi)核相關(guān)聯(lián)的狀態(tài)。也將每操作系統(tǒng)的數(shù)據(jù)稱為操作系統(tǒng)上下文。
實(shí)際上,超微內(nèi)核對(duì)每操作系統(tǒng)保持兩個(gè)數(shù)據(jù)結(jié)構(gòu)。第一數(shù)據(jù)結(jié)構(gòu)是操作系統(tǒng)上下文本身。它是公用的,從任何操作系統(tǒng)都可以看到并且充當(dāng)超微內(nèi)核接口的一部分。所有的操作系統(tǒng)上下文都放置在超微內(nèi)核擁有的專用存儲(chǔ)器組中。在與超微內(nèi)核接口有關(guān)的其他部分中對(duì)操作系統(tǒng)上下文進(jìn)行詳細(xì)描述。
第二數(shù)據(jù)結(jié)構(gòu)是為超微內(nèi)核而設(shè)置的。它包含由超微內(nèi)核執(zhí)行程序內(nèi)部地使用的每操作系統(tǒng)的信息。
3超微內(nèi)核執(zhí)行程序接口本章描述導(dǎo)出到主要操作系統(tǒng)內(nèi)核和次要操作系統(tǒng)內(nèi)核的超微內(nèi)核執(zhí)行程序接口。這種接口包括在內(nèi)核與超微內(nèi)核之間共享的數(shù)據(jù)(即可見操作系統(tǒng)上下文)以及超微內(nèi)核方法。注意,超微內(nèi)核接口是操作系統(tǒng)角色特定的,并且(嚴(yán)格地說)對(duì)于主要內(nèi)核和次要內(nèi)核來說是不同的。另一方面,這兩個(gè)接口之間存在相當(dāng)大的交集,可以根據(jù)操作系統(tǒng)角色對(duì)這兩個(gè)接口進(jìn)行獨(dú)立的描述。
3.1操作系統(tǒng)上下文圖11例示了操作系統(tǒng)上下文。
所有操作系統(tǒng)上下文(主要操作系統(tǒng)上下文和次要操作系統(tǒng)上下文)都具有固定長度并被放置在按操作系統(tǒng)id進(jìn)行索引的表中。注意,在操作系統(tǒng)上下文中,通過物理地址進(jìn)行所有的外部引用。操作系統(tǒng)必須(根據(jù)KV映射)將這種物理地址轉(zhuǎn)換成虛擬地址以訪問所引用的數(shù)據(jù)結(jié)構(gòu)。該圖示出了只具有兩個(gè)內(nèi)核的結(jié)構(gòu)主要內(nèi)核和次要內(nèi)核。
待處理VEX和已使能VEX字段反映虛擬異常(VEX)的當(dāng)前狀態(tài)。在本文獻(xiàn)中連同次要操作系統(tǒng)內(nèi)核執(zhí)行模型一起對(duì)虛擬化異常機(jī)制進(jìn)行進(jìn)一步詳細(xì)描述。
標(biāo)簽字段是所謂的標(biāo)簽列表。它包含引導(dǎo)信息并由引導(dǎo)裝載器給出。注意,在所有操作系統(tǒng)上下文中都對(duì)超微內(nèi)核環(huán)境中的標(biāo)簽列表進(jìn)行了虛擬化和復(fù)制。在其他標(biāo)簽中,標(biāo)簽列表結(jié)構(gòu)包含指定引導(dǎo)時(shí)間參數(shù)的引導(dǎo)命令行。這些參數(shù)是由引導(dǎo)裝載器給出的,或者是通過超微內(nèi)核環(huán)境變量來傳遞的。該命令行是操作系統(tǒng)特定的。超微內(nèi)核對(duì)初始命令行進(jìn)行解析,以創(chuàng)建只包含與操作系統(tǒng)有關(guān)的參數(shù)的操作系統(tǒng)特定命令行。
RAM信息字段指向RAM描述表。RAM描述表是由所有操作系統(tǒng)內(nèi)核共享的全局?jǐn)?shù)據(jù)結(jié)構(gòu)。它描述RAM資源在操作系統(tǒng)之間是如何分配的。
dev信息字段指向目標(biāo)板卡上存在的設(shè)備描述符的列表。由主要操作系統(tǒng)對(duì)它進(jìn)行創(chuàng)建和管理。它描述了設(shè)備在操作系統(tǒng)之間是如何分配的(設(shè)備不能被不同操作系統(tǒng)共享)。次要操作系統(tǒng)使用該列表來注冊(cè)關(guān)閉函數(shù),在次要操作系統(tǒng)重啟過程中可能調(diào)用該關(guān)閉函數(shù)。
VIL字段是待處理硬件中斷的FIFO列表。每個(gè)條目都包含中斷ID——小整數(shù)。通常,基于ARM的板卡使用大量的不同中斷源(通常大于64個(gè))。因此決定將待處理中斷組表示為列表而非位掩碼。實(shí)際上超微內(nèi)核本身永遠(yuǎn)都不會(huì)使用該字段。將它放置在這里是為了簡(jiǎn)化主要操作系統(tǒng)和次要操作系統(tǒng)中的中斷管理代碼。超微內(nèi)核只使用待處理VEX和已使能VEX字段中的中斷VEX位來進(jìn)行中斷管理。
待處理XIRQ字段是對(duì)于待處理交叉中斷的表的引用。通過操作系統(tǒng)id對(duì)該表進(jìn)行索引。每個(gè)條目都對(duì)應(yīng)于每個(gè)操作系統(tǒng)的32個(gè)可能交叉中斷。超微內(nèi)核本身不使用該表。上下文結(jié)構(gòu)引用該表,以輔助主要操作系統(tǒng)和次要操作系統(tǒng)進(jìn)行交叉中斷交換。只有一個(gè)專用于交叉中斷傳遞的虛擬異常——交叉中斷VEX。待處理XIRQ表使得可以將交叉中斷的數(shù)量擴(kuò)展到32個(gè)(每個(gè)交叉中斷源一位)。交叉中斷位由源操作系統(tǒng)(即,發(fā)送該交叉中斷的操作系統(tǒng)內(nèi)核)置位,并由目的地操作系統(tǒng)(即,接收該交叉中斷的操作系統(tǒng)內(nèi)核)復(fù)位。
ID字段包含唯一的操作系統(tǒng)標(biāo)識(shí)符。該字段是只讀的。將標(biāo)識(shí)符0分配給超微內(nèi)核本身,將標(biāo)識(shí)符1分配給主要操作系統(tǒng)內(nèi)核。操作系統(tǒng)標(biāo)識(shí)符指定超微內(nèi)核接口中的操作系統(tǒng)。例如,使用操作系統(tǒng)標(biāo)識(shí)符來對(duì)分配給給定內(nèi)核的資源(例如,RAM描述表中的存儲(chǔ)器塊)加標(biāo)簽。
操作系統(tǒng)上下文的最后部分指定超微內(nèi)核接口方法的地址。它們是KV映射中的地址,因此不必進(jìn)行任何額外的轉(zhuǎn)換就可以使用它們來調(diào)用超微內(nèi)核?;貞浺幌?,所有的KV映射都應(yīng)當(dāng)使用相同的地址轉(zhuǎn)換規(guī)則。
注意,超微內(nèi)核對(duì)于主要操作系統(tǒng)和次要操作系統(tǒng)導(dǎo)出不同的函數(shù)。例如,當(dāng)主要操作系統(tǒng)和次要操作系統(tǒng)調(diào)用idle方法時(shí),它們實(shí)際上調(diào)用兩個(gè)不同的超微內(nèi)核函數(shù)。
3.2超微內(nèi)核方法超微內(nèi)核提供了兩組方法控制臺(tái)I/O操作和執(zhí)行程序操作??刂婆_(tái)I/O組使得內(nèi)核可以向超微內(nèi)核控制臺(tái)串行線發(fā)送字符并從超微內(nèi)核控制臺(tái)串行線接收字符。本文獻(xiàn)不對(duì)控制臺(tái)I/O方法(其或多或少地是通用的)進(jìn)行具體闡述,而是關(guān)注于ARM架構(gòu)所特有的執(zhí)行程序方法。
3.2.1安裝異常處理程序在RAM架構(gòu)上,異常表是唯一的,位于地址0x00000000或地址0xffff0000處。在超微內(nèi)核環(huán)境中,將該異常表虛擬化,因此操作系統(tǒng)應(yīng)當(dāng)調(diào)用該超微內(nèi)核方法而不是將異常向量直接安裝到ARM異常表中。將異常號(hào)(即,未定義指令、預(yù)取異常中止、數(shù)據(jù)異常中止或軟件中斷)以及異常處理程序地址作為參數(shù)傳遞。
將異常處理程序地址存儲(chǔ)在操作系統(tǒng)上下文中。超微內(nèi)核稍后可以使用該異常處理程序地址,從而以最小的額外間接調(diào)用開銷來直接引發(fā)對(duì)操作系統(tǒng)的對(duì)應(yīng)異常。
在RAM架構(gòu)上,異常表不包含異常處理程序的地址,而是對(duì)每個(gè)異常包含一個(gè)處理器指令。使用該指令來跳到實(shí)際異常處理程序。在超微內(nèi)核環(huán)境中,我們跳到由超微內(nèi)核本身提供的非常小的序碼(prologuecode)。它從當(dāng)前操作系統(tǒng)上下文讀取異常處理程序地址并跳到該地址。將當(dāng)前操作系統(tǒng)上下文指針保持在序碼可以容易地訪問的全局變量中。每當(dāng)調(diào)度新的操作系統(tǒng)內(nèi)核在CPU上執(zhí)行時(shí),超微內(nèi)核都對(duì)該變量進(jìn)行更新。
這樣,在與在本地情況(執(zhí)行模式和寄存器內(nèi)容)相同的執(zhí)行環(huán)境下調(diào)用異常處理程序。注意,超微內(nèi)核序碼對(duì)于未定義指令、預(yù)取異常中止以及數(shù)據(jù)異常中止處理程序擦除堆棧指針寄存器組。將軟件中斷處理程序的堆棧指針寄存器組保持原樣。
3.2.2安裝中斷處理程序使用該超微內(nèi)核方法來安裝直接和間接中斷VEX處理程序。將其地址作為參數(shù)傳遞。
直接中斷處理程序類似于異常處理程序。僅由主要操作系統(tǒng)當(dāng)其在CPU上運(yùn)行時(shí)使用這些直接中斷處理程序來處理硬件中斷。在與本地情況(執(zhí)行模式和寄存器內(nèi)容)相同的執(zhí)行環(huán)境下調(diào)用這些直接中斷處理程序。
由超微內(nèi)核來調(diào)用間接中斷處理程序以處理由其他操作系統(tǒng)內(nèi)核轉(zhuǎn)發(fā)的中斷。與直接中斷處理程序相比,在稍微不同的執(zhí)行環(huán)境下調(diào)用間接中斷處理程序。在本文獻(xiàn)中將進(jìn)一步對(duì)它們進(jìn)行詳細(xì)討論。
3.2.3安裝交叉中斷處理程序超微內(nèi)核支持在真實(shí)CPU上并不存在的其他虛擬異常。它是交叉中斷VEX。它是操作系統(tǒng)間通信的基石。交叉中斷非常類似于普通中斷,但是它是由操作系統(tǒng)而非硬件設(shè)備引發(fā)的。
使用該超微內(nèi)核方法來存儲(chǔ)對(duì)應(yīng)的交叉中斷處理程序。將在與間接中斷處理程序相同的執(zhí)行環(huán)境(執(zhí)行模式和寄存器內(nèi)容)下調(diào)用它。
3.2.4發(fā)布交叉中斷使用該超微內(nèi)核方法來在目的地操作系統(tǒng)上引發(fā)交叉中斷VEX。它還在待處理XIRQ表中設(shè)置對(duì)應(yīng)位。將目的地操作系統(tǒng)id和交叉中斷號(hào)作為參數(shù)傳遞。
3.2.5空閑超微內(nèi)核提供了必須由操作系統(tǒng)內(nèi)核在空閑循環(huán)內(nèi)調(diào)用的空閑方法。它通知超微內(nèi)核進(jìn)行調(diào)用的操作系統(tǒng)內(nèi)核沒有事情可做,直到下一中斷。
空閑方法調(diào)用導(dǎo)致系統(tǒng)切換到下一個(gè)準(zhǔn)備運(yùn)行的次要操作系統(tǒng)內(nèi)核(如果有的話),或者當(dāng)所有次要操作系統(tǒng)內(nèi)核都為空閑時(shí)導(dǎo)致從主要空閑方法返回。
超微內(nèi)核對(duì)主要空閑方法提供了兩種不同實(shí)現(xiàn)無狀態(tài)的和有狀態(tài)的。當(dāng)從無狀態(tài)空閑方法返回時(shí),擦除所有寄存器。當(dāng)從有狀態(tài)空閑方法返回時(shí),保持永久性寄存器(r1到r13)。
空閑方法的正確實(shí)現(xiàn)取決于主要操作系統(tǒng)空閑循環(huán)實(shí)現(xiàn),并且可以在對(duì)應(yīng)的配置.xml文件中來選擇。
3.2.6重啟超微內(nèi)核提供了可以由主要操作系統(tǒng)以及次要操作系統(tǒng)調(diào)用以將次要操作系統(tǒng)內(nèi)核重啟的重啟方法。將被重啟的操作系統(tǒng)的id作為參數(shù)傳遞。
超微內(nèi)核停止目的地操作系統(tǒng)的執(zhí)行,從操作系統(tǒng)內(nèi)核映像的副本中恢復(fù)操作系統(tǒng)內(nèi)核映像,最后在初始入口點(diǎn)啟動(dòng)操作系統(tǒng)內(nèi)核的執(zhí)行。
3.2.7次要停止超微內(nèi)核向次要操作系統(tǒng)提供該停止方法。超微內(nèi)核使調(diào)用方操作進(jìn)入非運(yùn)行狀態(tài)以防止超微內(nèi)核調(diào)度程序切換到它。
可以由上述重啟超微內(nèi)核方法再次啟動(dòng)已停止的操作系統(tǒng)。
4主要執(zhí)行環(huán)境基本上,主要操作系統(tǒng)內(nèi)核在本地執(zhí)行環(huán)境中執(zhí)行。ARM處理器上的超微內(nèi)核實(shí)現(xiàn)盡量使超微內(nèi)核環(huán)境對(duì)主要操作系統(tǒng)特性(性能、中斷等待時(shí)間、先占等待時(shí)間)的影響最小化。由于主要操作系統(tǒng)通常是實(shí)時(shí)操作系統(tǒng),因此,即使在同一處理器上同時(shí)運(yùn)行有其他(次要)操作系統(tǒng)也保持主要內(nèi)核行為不變是很重要的。
4.1初始化主要操作系統(tǒng)提供小蹦床程序,該程序執(zhí)行加電處理器初始化、將超微內(nèi)核數(shù)據(jù)安裝在RAM中(如果有必要的話)、準(zhǔn)備初始轉(zhuǎn)換樹、使能MMU(如果它存在的話)并跳到超微內(nèi)核入口點(diǎn)。初始轉(zhuǎn)換樹應(yīng)當(dāng)對(duì)蹦床程序和超微內(nèi)核進(jìn)行映射。執(zhí)行模式是管理員模式,將所有硬件中斷禁用。
繼而超微內(nèi)核將操作系統(tǒng)存儲(chǔ)器組安裝在RAM中,對(duì)操作系統(tǒng)上下文進(jìn)行初始化,并且在使能MMU(如果存在的話)并禁用硬件中斷的情況下跳到主要入口點(diǎn)。執(zhí)行模式仍然是管理員模式。
使用位于其數(shù)據(jù)段中的靜態(tài)超微內(nèi)核堆棧來執(zhí)行超微內(nèi)核初始化代碼。當(dāng)跳到主要操作系統(tǒng)內(nèi)核時(shí),該堆棧仍然是有效的。盡管如此,主要操作系統(tǒng)內(nèi)核仍然應(yīng)當(dāng)盡可能快地切換到它自己的堆棧并且將來應(yīng)當(dāng)永遠(yuǎn)不使用該超微內(nèi)核堆棧。不僅在初始化階段而且在運(yùn)行時(shí)使用超微內(nèi)核堆棧,以如在下一章中所述地對(duì)次要調(diào)用和先占進(jìn)行處理。
當(dāng)跳到主要操作系統(tǒng)內(nèi)核時(shí),管理員模式成組堆棧指針寄存器指向主要操作系統(tǒng)上下文。在主要初始化階段的開始時(shí)將處理器中斷禁用。一旦完成了關(guān)鍵的初始化階段,主要操作系統(tǒng)內(nèi)核通常就使能中斷。
在初始化階段,主要操作系統(tǒng)內(nèi)核通常調(diào)用超微內(nèi)核方法,以建立異常和中斷處理程序。最后主要操作系統(tǒng)進(jìn)入空閑循環(huán)并調(diào)用超微內(nèi)核空閑方法。
當(dāng)?shù)谝淮握{(diào)用空閑方法時(shí),超微內(nèi)核認(rèn)為主要操作系統(tǒng)內(nèi)核已完全將其執(zhí)行環(huán)境初始化,它進(jìn)行到后初始化階段。
在這種后初始化階段中,超微內(nèi)核完成超微內(nèi)核存儲(chǔ)器上下文。注意,這是主要操作系統(tǒng)的責(zé)任發(fā)現(xiàn)所有可用物理存儲(chǔ)器并將其注冊(cè)在由RAM信息字段指向的對(duì)應(yīng)描述符中,因此超微內(nèi)核可以完成其存儲(chǔ)器上下文。一旦完成了后初始化,超微內(nèi)核就調(diào)用調(diào)度程序以切換到對(duì)運(yùn)行次要內(nèi)核的就緒狀態(tài)、或者在所有次要內(nèi)核都空閑的情況下從主要空閑方法返回。
超微內(nèi)核要求主要操作系統(tǒng)內(nèi)核對(duì)全局共享的數(shù)據(jù)結(jié)構(gòu)(RAM描述符和設(shè)備列表)進(jìn)行初始化。必須在調(diào)用空閑方法之前執(zhí)行這種初始化。該要求是自然的,因?yàn)樵谠摃r(shí)機(jī)之后次要內(nèi)核可以訪問全局共享的數(shù)據(jù)結(jié)構(gòu)。
具體來說,主要內(nèi)核負(fù)責(zé)對(duì)在板上可用的物理存儲(chǔ)器進(jìn)行檢測(cè)并將空閑的物理存儲(chǔ)器塊注冊(cè)在RAM描述符中。
根據(jù)主要板支持包(BSP),主要內(nèi)核應(yīng)當(dāng)啟動(dòng)超微內(nèi)核意識(shí)(aware)驅(qū)動(dòng)程序,尤其是中斷控制器驅(qū)動(dòng)程序。
4.2主要異常基本上,超微內(nèi)核不攔截當(dāng)主要操作系統(tǒng)在處理器上運(yùn)行時(shí)出現(xiàn)的異常。由本地主要處理程序來處理所有編程異常。超微內(nèi)核僅執(zhí)行小序碼以跳到對(duì)應(yīng)的異常處理程序。當(dāng)移植到ARM超微內(nèi)核架構(gòu)時(shí),無需修改主要低層處理程序。
注意,由未定義指令、預(yù)取異常中止以及數(shù)據(jù)異常中止處理程序的超微內(nèi)核序碼來擦除成組堆棧指針寄存器。將軟件中斷處理程序的成組堆棧指針寄存器保持原樣。
4.3主要中斷當(dāng)主要操作系統(tǒng)在CPU上運(yùn)行時(shí)出現(xiàn)了中斷時(shí),在超微內(nèi)核不引入任何附加代碼的情況下調(diào)用本地低層(直接)中斷處理程序。將成組堆棧指針寄存器保持原樣。
4.4轉(zhuǎn)發(fā)的中斷當(dāng)次要操作系統(tǒng)在CPU上運(yùn)行時(shí)出現(xiàn)了中斷時(shí),將該中斷轉(zhuǎn)發(fā)給主要操作系統(tǒng)。這種中斷轉(zhuǎn)發(fā)處理經(jīng)過以下主要步驟●超微內(nèi)核攔截該中斷;●將被先占的次要操作系統(tǒng)內(nèi)核的執(zhí)行掛起,然后超微內(nèi)核切換到主要執(zhí)行環(huán)境;●超微內(nèi)核觸發(fā)針對(duì)主要操作系統(tǒng)內(nèi)核的對(duì)應(yīng)中斷。
按這種方式,(在主要執(zhí)行環(huán)境中)調(diào)用對(duì)應(yīng)的主要低層間接中斷處理程序以處理該中斷。一旦處理了該中斷,主要操作系統(tǒng)內(nèi)核就返回到超微內(nèi)核。
在從主要間接中斷處理程序返回之后,超微內(nèi)核調(diào)用其調(diào)度程序,以確定要運(yùn)行的下一次要操作系統(tǒng)。注意,在中斷之后不一定繼續(xù)被先占的次要系統(tǒng)。由于該中斷,另一(較高優(yōu)先級(jí))次要系統(tǒng)可能變得準(zhǔn)備運(yùn)行。
在ARM架構(gòu)上,CPU可以在7種不同的執(zhí)行模式下運(yùn)行用戶、系統(tǒng)、管理員、未定義、異常中止、中斷以及快速中斷,這些執(zhí)行模式中的5個(gè)具有其專用/成組的r13和r14寄存器。因此,理想的是,當(dāng)超微內(nèi)核從一個(gè)操作系統(tǒng)內(nèi)核切換到另一操作系統(tǒng)內(nèi)核時(shí),還應(yīng)當(dāng)切換所有的成組寄存器。為了使操作系統(tǒng)切換和中斷轉(zhuǎn)發(fā)加速,我們決定將除管理員寄存器組以外的所有寄存器組視為擦除式,我們還決定總是在管理員模式下執(zhí)行這種切換。
注意,如果當(dāng)次要操作系統(tǒng)在用戶模式下運(yùn)行時(shí)出現(xiàn)中斷,則中斷處理程序?qū)⒈4鎸?duì)應(yīng)的堆棧寄存器組,因?yàn)樗偸潜4嫦惹暗臓顟B(tài)。如果當(dāng)次要系統(tǒng)在管理員模式下運(yùn)行時(shí)出現(xiàn)中斷,則操作系統(tǒng)自身已保存用戶模式寄存器組。
滿足我們的要求的最容易的方式是修改次要操作系統(tǒng)異常處理程序。它們應(yīng)當(dāng)總是將成組堆棧指針寄存器設(shè)定為預(yù)定義值并盡可能快地切換到管理員模式。應(yīng)當(dāng)僅在完成了到管理員模式的切換時(shí)才使能硬件中斷。
對(duì)于主要操作系統(tǒng)運(yùn)行時(shí)的CPU執(zhí)行模式?jīng)]有限制,因?yàn)樵谶@種情況下不能發(fā)生操作系統(tǒng)切換。
當(dāng)超微內(nèi)核向主要操作系統(tǒng)內(nèi)核轉(zhuǎn)發(fā)中斷時(shí),它調(diào)用主要間接中斷處理程序。在r10到r15和cpsr寄存器已保存在操作系統(tǒng)上下文中的情況下在管理員模式下調(diào)用該主要間接中斷處理程序。r10包含指向該上下文的指針。注意,當(dāng)超微內(nèi)核向主要操作系統(tǒng)轉(zhuǎn)發(fā)中斷時(shí),主要操作系統(tǒng)由于其結(jié)構(gòu)而總是處于不活動(dòng)狀態(tài)(即,它調(diào)用空閑超微內(nèi)核方法)。
作為間接中斷處理程序執(zhí)行的結(jié)果,主要操作系統(tǒng)可以調(diào)度新任務(wù),因此,如果它執(zhí)行無狀態(tài)空閑循環(huán)(如果當(dāng)在空閑狀態(tài)下調(diào)用它時(shí)它不要求中斷處理程序保存所有寄存器、或者簡(jiǎn)單地切換到新任務(wù)而不需要保存空閑循環(huán)寄存器),則超微內(nèi)核應(yīng)當(dāng)將所有寄存器(和僅r10到r15)都保存在操作系統(tǒng)上下文中。當(dāng)超微內(nèi)核切換回到次要操作系統(tǒng)時(shí)可以恢復(fù)這些寄存器。
如果主要操作系統(tǒng)執(zhí)行有狀態(tài)空閑循環(huán)(例如,如果將空閑循環(huán)實(shí)現(xiàn)為普通最低優(yōu)先級(jí)任務(wù)、并且在中斷處理結(jié)束時(shí)直接調(diào)用操作系統(tǒng)調(diào)度程序),那么我們可以推遲保存r0到r9寄存器,因?yàn)樗鼈儠?huì)被主要操作系統(tǒng)保存。超微內(nèi)核僅在其調(diào)度不同的次要操作系統(tǒng)時(shí)才需要保存/恢復(fù)它們。如果我們?cè)诔?nèi)核環(huán)境中只運(yùn)行兩個(gè)操作系統(tǒng)(一個(gè)主要操作系統(tǒng)和一個(gè)次要操作系統(tǒng)),則可以完全不用進(jìn)行r0到r9寄存器保存。
超微內(nèi)核支持普通(非優(yōu)化)中斷轉(zhuǎn)發(fā)(當(dāng)在間接中斷處理程序調(diào)用之前保存了所有寄存器時(shí))和優(yōu)化中斷轉(zhuǎn)發(fā)。正確的實(shí)現(xiàn)取決于主要操作系統(tǒng),并且可以在對(duì)應(yīng)的配置.xml文件中來選擇。
5次要執(zhí)行環(huán)境基本上,除了中斷管理以外,次要操作系統(tǒng)內(nèi)核執(zhí)行環(huán)境相當(dāng)接近于本地執(zhí)行環(huán)境。超微內(nèi)核環(huán)境對(duì)中斷管理的本地機(jī)制進(jìn)行修改,以使得完全可以由其他操作系統(tǒng)來先占次要操作系統(tǒng)。移植到超微內(nèi)核架構(gòu)的次要操作系統(tǒng)內(nèi)核不再禁用處理器級(jí)的中斷,而是使用由超微內(nèi)核提供的軟件中斷機(jī)制(即,虛擬異常)。不再由這種次要操作系統(tǒng)內(nèi)核來直接處理中斷,而是由超微內(nèi)核攔截中斷并將中斷轉(zhuǎn)發(fā)給主要操作系統(tǒng)內(nèi)核。繼而,主要操作系統(tǒng)將在必要的情況下針對(duì)次要操作系統(tǒng)發(fā)出中斷VEX。如果該中斷VEX沒有被屏蔽,則次要間接中斷處理程序立即處理該中斷VEX,如果已將該中斷VEX屏蔽,則將其推遲。
5.1初始化在初始化時(shí)超微內(nèi)核將次要存儲(chǔ)器組連同主要組一起安裝。另一方面,將對(duì)次要內(nèi)核的最終初始化推遲到后初始化階段。
在該階段時(shí),超微內(nèi)核對(duì)存儲(chǔ)器進(jìn)行分配以保持次要存儲(chǔ)器組的副本。然后在重啟時(shí)使用這種副本來恢復(fù)次要系統(tǒng)的初始映像。不過次要系統(tǒng)重啟是可選的,可以將它禁用以減少物理存儲(chǔ)器耗用。
類似于主要內(nèi)核,在管理員模式成組堆棧指針寄存器中傳遞操作系統(tǒng)上下文。另一方面,與主要內(nèi)核不同,即使在次要內(nèi)核初始化階段期間也使能硬件中斷。顯然,將對(duì)應(yīng)的次要中斷VEX禁用。應(yīng)當(dāng)指出的是,主要系統(tǒng)甚至可以完全先占次要內(nèi)核初始化代碼。為了在次要操作系統(tǒng)重啟時(shí)不干擾主要操作系統(tǒng),這是尤其重要的。
盡管使能硬件中斷,但是當(dāng)啟動(dòng)次要內(nèi)核時(shí)禁用虛擬異常(對(duì)應(yīng)于硬件中斷的虛擬異常)。因此,超微內(nèi)核不會(huì)傳遞中斷,直到在關(guān)鍵初始化階段結(jié)束時(shí)由內(nèi)核顯式地使能這些中斷。在本文獻(xiàn)中進(jìn)一步對(duì)軟件中斷屏蔽機(jī)制(基于虛擬異常的軟件中斷屏蔽機(jī)制)進(jìn)行詳細(xì)描述。
在使能MM的情況下啟動(dòng)次要操作系統(tǒng)。使用超微內(nèi)核上下文作為初始存儲(chǔ)器上下文。將這種初始一對(duì)一映射暫時(shí)地提供給次要內(nèi)核。注意,初始化代碼不應(yīng)修改或永久使用該映射,相反,次要內(nèi)核應(yīng)當(dāng)建立其自己的KV映射并盡快切換到該KV映射。
通常,次要內(nèi)核使用位于數(shù)據(jù)段中的靜態(tài)初始堆棧,以執(zhí)行其初始化代碼。
類似于主要內(nèi)核,在初始化階段期間,次要內(nèi)核通常調(diào)用超微內(nèi)核以安裝異常和中斷處理程序。最后,次要內(nèi)核進(jìn)入空閑循環(huán)并調(diào)用超微內(nèi)核空閑陷阱。
5.2次要異?;旧希?nèi)核不攔截當(dāng)次要操作系統(tǒng)在處理器上運(yùn)行時(shí)出現(xiàn)的異常。由本地次要異常處理程序來處理所有編程異常。超微內(nèi)核僅執(zhí)行小序碼以跳到對(duì)應(yīng)的異常處理程序。當(dāng)移植到ARM超微內(nèi)核架構(gòu)時(shí),不必修改次要低層處理程序。
注意,由未定義指令、預(yù)取異常中止以及數(shù)據(jù)異常中止處理程序的超微內(nèi)核序碼來擦除成組堆棧指針寄存器。將軟件中斷處理程序的成組堆棧指針寄存器保持原樣。
5.3虛擬異常虛擬異常(VEX)是由超微內(nèi)核提供的機(jī)制,其使得操作系統(tǒng)內(nèi)核可以將異常發(fā)布給一操作系統(tǒng)內(nèi)核并按推遲方式傳遞該異常。具體來說,在ARM超微內(nèi)核架構(gòu)中使用VEX機(jī)制以將硬件中斷替換為針對(duì)次要操作系統(tǒng)內(nèi)核的軟件中斷。
VEX接口包括位于內(nèi)核上下文中的兩個(gè)字段待處理和已使能。這些字段只對(duì)于次要操作系統(tǒng)上下文有意義,但是它們被主要操作系統(tǒng)內(nèi)核和次要操作系統(tǒng)內(nèi)核二者訪問。
自然,在待處理(或已使能)字段中由位位置來枚舉所有虛擬異常。因此,在ARM架構(gòu)上存在總共32種可能的虛擬異常(待處理和已使能字段是32位整數(shù)值)。
在ARM架構(gòu)上超微內(nèi)核僅支持4種虛擬異常中斷、快速中斷、交叉中斷、以及“運(yùn)行中”。
下表示出了如何將這些虛擬異常映射到真實(shí)異常
虛擬異?!斑\(yùn)行中”并不對(duì)應(yīng)于任何真實(shí)異常,實(shí)際上它是超微內(nèi)核內(nèi)部地使用以檢測(cè)內(nèi)核是否空閑的偽虛擬異常。在本文獻(xiàn)中進(jìn)一步對(duì)這種偽虛擬異常如何工作進(jìn)行詳細(xì)描述。
由于在同一時(shí)間可能存在多個(gè)待處理的虛擬異常、但是每次只可以處理它們中的一個(gè),因此根據(jù)其編號(hào)來設(shè)置所有虛擬異常的優(yōu)先級(jí)。將最高優(yōu)先級(jí)分配給快速中斷VEX,而將最低優(yōu)先級(jí)分配給“運(yùn)行中”VEX。
通常由主要內(nèi)核(其提供針對(duì)中斷控制器的驅(qū)動(dòng)程序)對(duì)次要上下文的待處理VEX字段進(jìn)行更新。這種驅(qū)動(dòng)程序通常通過在待處理VEX字段中對(duì)恰當(dāng)位進(jìn)行置位來向次要內(nèi)核發(fā)布虛擬異常。
由次要內(nèi)核來對(duì)已使能VEX字段進(jìn)行更新以使能或禁用虛擬異常。如果在已使能VEX字段中置位了對(duì)應(yīng)的位,則使能給定的虛擬異常。使用已使能VEX字段,次要內(nèi)核執(zhí)行被保護(hù)為免受中斷影響的關(guān)鍵段。換句話說,次要內(nèi)核不再對(duì)CPSR寄存器進(jìn)行操縱以禁用/使能處理器中斷,而是修改其內(nèi)核上下文的已使能VEX字段。
如果給定的虛擬異常同時(shí)是待處理的和已使能的,則由超微內(nèi)核來傳遞該虛擬異常。超微內(nèi)核剛好在跳到VEX處理程序之前復(fù)位對(duì)應(yīng)的待處理位。
注意,所有VEX處理程序?qū)嶋H上都是間接處理程序。在已在操作系統(tǒng)上下文中保存了r10到r15和cpsr寄存器的情況下在管理員模式下由超微內(nèi)核來調(diào)用這些VEX處理程序。r10包含指向該上下文的指針。
當(dāng)在ARM超微內(nèi)核架構(gòu)上移植次要內(nèi)核時(shí),仍然必須修改低層異常處理程序以將取代硬件中斷屏蔽機(jī)制的軟件中斷屏蔽機(jī)制考慮進(jìn)來。當(dāng)調(diào)用中斷處理程序時(shí),超微內(nèi)核將對(duì)應(yīng)值寫入已使能字段,從而僅僅禁用所有虛擬異常。當(dāng)運(yùn)行次要操作系統(tǒng)時(shí)總是在處理器級(jí)使能硬件中斷,因此即使在低層中斷處理程序內(nèi)部也可以由主要操作系統(tǒng)將其先占。按這種方式,在超微內(nèi)核環(huán)境中,次要操作系統(tǒng)變得完全可以被主要操作系統(tǒng)先占。
當(dāng)虛擬異常處于禁用狀態(tài)時(shí),可以由主要操作系統(tǒng)內(nèi)核來發(fā)布虛擬異常。在此情況下,不將異常傳遞給次要操作系統(tǒng)內(nèi)核,而是將其保持待處理,直到再次重新使能該虛擬異常。因此,當(dāng)次要操作系統(tǒng)內(nèi)核重新使能虛擬異常時(shí),應(yīng)當(dāng)對(duì)是否存在任何待處理虛擬異常進(jìn)行檢查。如果該檢查是肯定的,則次要操作系統(tǒng)內(nèi)核應(yīng)當(dāng)調(diào)用超微內(nèi)核以處理這種待處理虛擬異常。
大體上,次要內(nèi)核在以下兩種情況下重新使能虛擬異常●當(dāng)次要內(nèi)核先前禁用了虛擬異常以保護(hù)關(guān)鍵代碼段時(shí);●當(dāng)超微內(nèi)核由于間接中斷處理程序調(diào)用而禁用了虛擬異常時(shí)。
5.4超微內(nèi)核再進(jìn)入大多在處理器級(jí)禁用中斷的情況下執(zhí)行超微內(nèi)核代碼,以防止再進(jìn)入超微內(nèi)核。另一方面,某些超微內(nèi)核調(diào)用可能耗費(fèi)很長時(shí)間,因此當(dāng)執(zhí)行這種長操作時(shí)超微內(nèi)核必須使能中斷以保持主要中斷等待時(shí)間短。
存在兩種類型的長超微內(nèi)核操作●同步控制臺(tái)輸出該操作持續(xù)時(shí)間取決于串行線速度。例如,在9600波特率線上,單個(gè)字符輸出可能耗時(shí)多至1毫秒。
●次要內(nèi)核重啟該操作持續(xù)時(shí)間取決于從副本恢復(fù)的內(nèi)核映像大小。
對(duì)于以上列出的所有操作,超微內(nèi)核使能中斷、因此使能從主要內(nèi)核再進(jìn)入。另一方面,在使能中斷時(shí),將超微內(nèi)核調(diào)度程序禁用以防止在從主要中斷處理程序返回時(shí)調(diào)度另一次要內(nèi)核。換句話說,超微內(nèi)核只能(由于中斷而)被主要內(nèi)核先占,但是禁止從次要內(nèi)核再進(jìn)入。這種限制使得超微內(nèi)核可以使用次要執(zhí)行環(huán)境的全局資源。
可以在主要存儲(chǔ)器上下文中執(zhí)行從次要內(nèi)核發(fā)出的某些長操作。換句話說,在執(zhí)行這種操作之前,超微內(nèi)核切換到主要執(zhí)行上下文、然后使能中斷。一旦完成了該操作,超微內(nèi)核就禁用中斷并通過超微內(nèi)核調(diào)度程序返回到調(diào)用方次要內(nèi)核。
還應(yīng)注意,優(yōu)選的是,在超微內(nèi)核存儲(chǔ)器上下文中執(zhí)行頻繁使用的超微內(nèi)核方法(即使它們也可以在主要存儲(chǔ)器上下文中執(zhí)行),以避免由到主要執(zhí)行環(huán)境/從主要執(zhí)行環(huán)境的切換所引入的額外開銷。這種頻繁操作的典型示例為在超微內(nèi)核控制臺(tái)上進(jìn)行的同步輸出。
6調(diào)度程序操作系統(tǒng)調(diào)度程序的主要作用是選擇要運(yùn)行的下一任務(wù)。由于超微內(nèi)核對(duì)操作系統(tǒng)的執(zhí)行進(jìn)行控制,因此超微內(nèi)核調(diào)度程序選擇要運(yùn)行的下一次要操作系統(tǒng)。換句話說,超微內(nèi)核向整個(gè)系統(tǒng)增加了額外的調(diào)度級(jí)。
注意,在超微內(nèi)核架構(gòu)中,主要操作系統(tǒng)相對(duì)于次要系統(tǒng)具有更高的優(yōu)先級(jí),并且僅當(dāng)主要系統(tǒng)處于空閑循環(huán)時(shí)才將CPU給予次要系統(tǒng)。我們可以說主要內(nèi)核是不可被先占的,并且它通過在空閑循環(huán)中調(diào)用的空閑方法來顯式地調(diào)用超微內(nèi)核調(diào)度程序。一旦在運(yùn)行次要系統(tǒng)時(shí)出現(xiàn)中斷,就調(diào)用主要內(nèi)核中斷處理程序。從主要內(nèi)核的角度來看,這種中斷先占了執(zhí)行空閑循環(huán)的后臺(tái)線程。一旦處理了該中斷并完成了所有有關(guān)任務(wù),主要內(nèi)核就返回到超微內(nèi)核,超微內(nèi)核調(diào)用超微內(nèi)核調(diào)度程序以確定要運(yùn)行的下一次要系統(tǒng)。從主要角度來看,內(nèi)核就是返回到被中斷占先的后臺(tái)線程。對(duì)于主要內(nèi)核來說,次要的活動(dòng)是透明的,并且它不改變主要系統(tǒng)行為。
超微內(nèi)核可以執(zhí)行不同的調(diào)度策略。不過,在默認(rèn)情況下,使用基于優(yōu)先級(jí)的算法。注意,在相同的優(yōu)先級(jí),超微內(nèi)核使用循環(huán)調(diào)度策略。在系統(tǒng)映像建立時(shí)靜態(tài)地配置給定次要內(nèi)核的優(yōu)先級(jí)。
無論執(zhí)行什么調(diào)度策略,調(diào)度程序都必須對(duì)給定次要系統(tǒng)是否準(zhǔn)備好運(yùn)行進(jìn)行檢測(cè)。將該條件計(jì)算為內(nèi)核上下文的待處理VEX與已使能VEX字段之間的按位邏輯與操作。非零結(jié)果表示該系統(tǒng)準(zhǔn)備好運(yùn)行。
如上所述,待處理VEX和已使能VEX對(duì)中的每一位都表示虛擬異常。對(duì)準(zhǔn)備好運(yùn)行準(zhǔn)則換一種說法,我們可以說如果存在至少一個(gè)沒有被屏蔽的待處理虛擬異常,則次要系統(tǒng)處于準(zhǔn)備好運(yùn)行的狀態(tài)。
在通常被映射到硬件和軟件(交叉)中斷的所有虛擬異常中,存在反映該內(nèi)核當(dāng)前是否空閑的特殊虛擬異常(運(yùn)行中)。
每當(dāng)次要內(nèi)核調(diào)用空閑方法時(shí),在待處理VEX字段中清零“運(yùn)行中”位,每當(dāng)向次要內(nèi)核傳遞虛擬異常時(shí),在待處理VEX字段中置位“運(yùn)行中”位。
對(duì)于在運(yùn)行的次要內(nèi)核,在已使能VEX字段中通??偸侵梦挥小斑\(yùn)行中”位。當(dāng)啟動(dòng)次要內(nèi)核時(shí),超微內(nèi)核置位該位,當(dāng)停止次要內(nèi)核時(shí),超微內(nèi)核將該位復(fù)位。當(dāng)對(duì)映射到虛擬異常的中斷進(jìn)行屏蔽/去屏蔽時(shí),次要內(nèi)核永遠(yuǎn)不應(yīng)將“運(yùn)行中”位清零。
注意,外部代理能夠通過對(duì)次要內(nèi)核的內(nèi)核上下文中的已使能VEX字段進(jìn)行清零/恢復(fù)來掛起/恢復(fù)次要內(nèi)核的執(zhí)行。該特征提供了如下可能性在超微內(nèi)核的外部實(shí)現(xiàn)調(diào)度策略代理,作為主要內(nèi)核任務(wù)。此外,這還使得能夠?qū)⑨槍?duì)次要內(nèi)核的調(diào)試代理作為位于主要內(nèi)核上層的任務(wù)來運(yùn)行。這種次要調(diào)試代理的優(yōu)點(diǎn)在于由主要操作系統(tǒng)提供的所有服務(wù)都變得可以用于進(jìn)行調(diào)試(例如,網(wǎng)絡(luò)連接堆棧),并且可以在主要操作系統(tǒng)上正在運(yùn)行關(guān)鍵任務(wù)的同時(shí)進(jìn)行次要內(nèi)核調(diào)試。
7交叉中斷本部分主要對(duì)與超微內(nèi)核交叉中斷機(jī)制有關(guān)的信息(在前面的部分中已給出)進(jìn)行鞏固。
這里考慮以下兩種類型的交叉中斷●發(fā)送給次要操作系統(tǒng)內(nèi)核的交叉中斷●發(fā)送給主要操作系統(tǒng)內(nèi)核的交叉中斷為了向目的地次要操作系統(tǒng)發(fā)送交叉中斷,源操作系統(tǒng)內(nèi)核首先對(duì)與操作系統(tǒng)上下文的待處理XIRQ字段指向的交叉中斷表對(duì)應(yīng)的位進(jìn)行置位。然后源操作系統(tǒng)內(nèi)核將交叉中斷VEX發(fā)布給目的地操作系統(tǒng),目的地操作系統(tǒng)對(duì)目的地操作系統(tǒng)上下文的待處理VEX字段中的對(duì)應(yīng)位進(jìn)行置位。一旦超微內(nèi)核調(diào)用交叉中斷處理程序,交叉中斷處理程序就檢查待處理XIRQ字段,將對(duì)應(yīng)于待處理交叉中斷源的位清零,最后調(diào)用隸屬于該源的處理程序。源操作系統(tǒng)內(nèi)核和目的地操作系統(tǒng)內(nèi)核都使用極微指令來更新待處理XIRQ字段。注意,兩種類型的源操作系統(tǒng)內(nèi)核(主要和次要)都使用相同的算法。
為了向主要操作系統(tǒng)發(fā)送交叉中斷,次要操作系統(tǒng)內(nèi)核首先對(duì)與操作系統(tǒng)上下文的待處理XIRQ字段指向的交叉中斷表對(duì)應(yīng)的位進(jìn)行置位。超微內(nèi)核立即先占次要操作系統(tǒng),并調(diào)用主要低層交叉中斷處理程序,主要低層交叉中斷處理程序檢查待處理XIRQ字段,將對(duì)應(yīng)于待處理交叉中斷源的位清零,最后調(diào)用隸屬于該源的處理程序。
操作系統(tǒng)內(nèi)核一定不能使用交叉中斷號(hào)零。將該中斷預(yù)留給超微內(nèi)核以通知操作系統(tǒng)已啟動(dòng)被停止的操作系統(tǒng),或者已停止正在運(yùn)行的操作系統(tǒng)。換句話說,交叉中斷號(hào)零通知運(yùn)行的操作系統(tǒng)全局系統(tǒng)配置已改變。每當(dāng)在操作系統(tǒng)上下文中改變了“運(yùn)行中”字段的狀態(tài)時(shí),將交叉中斷號(hào)零廣泛地傳送給所有運(yùn)行的操作系統(tǒng)。
其他方面和實(shí)施例根據(jù)以上說明,很明顯,上述實(shí)施例僅為示例,還可能存在許多其他實(shí)施例。上述操作系統(tǒng)、平臺(tái)以及編程技術(shù)全都可以自由地改變。將本領(lǐng)域技術(shù)人員顯見的任何其他修改、替代以及變型都視為在本發(fā)明的范圍內(nèi),無論它們是否被所附權(quán)利要求書覆蓋。為了避免疑慮,要求對(duì)本文公開的任何和所有新穎的主題及其組合的保護(hù)。
權(quán)利要求
1.一種使得多個(gè)不同操作系統(tǒng)能夠在同一計(jì)算機(jī)上同時(shí)運(yùn)行的方法,該方法包括以下步驟選擇第一操作系統(tǒng)以使其具有相對(duì)較高的優(yōu)先級(jí);選擇至少一個(gè)第二操作系統(tǒng)以使其具有相對(duì)較低的優(yōu)先級(jí);提供被設(shè)置為在預(yù)定條件下在所述多個(gè)操作系統(tǒng)之間進(jìn)行切換的公共程序;以及對(duì)所述第一操作系統(tǒng)和第二操作系統(tǒng)提供修改,以使得它們可以被所述公共程序控制。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述第一操作系統(tǒng)是實(shí)時(shí)操作系統(tǒng)。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述第二操作系統(tǒng)是非實(shí)時(shí)、通用操作系統(tǒng)。
4.根據(jù)權(quán)利要求1所述的方法,其中,所述第二操作系統(tǒng)是Linux、或者Linux的一個(gè)版本或變體。
5.根據(jù)權(quán)利要求1所述的方法,其中,將所述公共程序設(shè)置為保存在所述多個(gè)操作系統(tǒng)之間進(jìn)行切換所需要的處理器狀態(tài)、并從所保存的版本恢復(fù)該處理器狀態(tài)。
6.根據(jù)權(quán)利要求1所述的方法,其中,由所述公共程序按虛擬方式來處理針對(duì)所述第二操作系統(tǒng)的處理器異常。
7.根據(jù)權(quán)利要求1所述的方法,其中,將所述公共程序設(shè)置為攔截某些處理器異常、并調(diào)用所述第一操作系統(tǒng)的異常處理例程以對(duì)這些處理器異常進(jìn)行服務(wù)。
8.根據(jù)權(quán)利要求7所述的方法,其中,將針對(duì)所述第二操作系統(tǒng)的處理器異常通知為虛擬異常。
9.根據(jù)權(quán)利要求8所述的方法,其中,將所述公共程序設(shè)置為調(diào)用所述第二操作系統(tǒng)的與待處理的所述虛擬異常相對(duì)應(yīng)的異常處理例程。
10.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟為所述多個(gè)操作系統(tǒng)中的每一個(gè)提供獨(dú)立的存儲(chǔ)器空間,在所述獨(dú)立的存儲(chǔ)器空間中各個(gè)操作系統(tǒng)可以獨(dú)占地進(jìn)行操作。
11.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟為所述多個(gè)操作系統(tǒng)中的每一個(gè)提供所述計(jì)算機(jī)的第一輸入和/或輸出設(shè)備,各個(gè)操作系統(tǒng)可以獨(dú)占地訪問所述第一輸入和/或輸出設(shè)備。
12.根據(jù)權(quán)利要求11所述的方法,其中,各個(gè)操作系統(tǒng)使用基本沒有修改的本地例程來訪問所述第一輸入和/或輸出設(shè)備。
13.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟為所述多個(gè)操作系統(tǒng)中的每一個(gè)提供對(duì)所述計(jì)算機(jī)的第二輸入和/或輸出設(shè)備的訪問,各個(gè)操作系統(tǒng)可以共享地訪問所述第二輸入和/或輸出設(shè)備。
14.根據(jù)權(quán)利要求13所述的方法,其中,所有操作系統(tǒng)都使用所述第一操作系統(tǒng)的例程來訪問所述第二輸入和/或輸出設(shè)備。
15.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟提供重啟例程,該重啟例程用于在不打斷所述第一操作系統(tǒng)或所述公共程序的操作的情況下重啟所述第二操作系統(tǒng)。
16.根據(jù)權(quán)利要求15所述的方法,其中,所述公共程序提供用于控制所述第二操作系統(tǒng)的操作的陷阱調(diào)用機(jī)制、和/或用于將所述第二操作系統(tǒng)中的狀態(tài)變化通知給所述第一操作系統(tǒng)的事件機(jī)制。
17.根據(jù)權(quán)利要求15所述的方法,其中,所述公共程序存儲(chǔ)所述第二操作系統(tǒng)的內(nèi)核的系統(tǒng)映像的副本,并且被設(shè)置為從這種保存的副本來恢復(fù)所述第二操作系統(tǒng)的內(nèi)核。
18.根據(jù)權(quán)利要求15所述的方法,其中,所述第一操作系統(tǒng)和第二操作系統(tǒng)具有協(xié)作例程,以使得所述第一操作系統(tǒng)能夠?qū)λ龅诙僮飨到y(tǒng)的連續(xù)操作進(jìn)行監(jiān)視,從而可以檢測(cè)所述第二操作系統(tǒng)的崩潰。
19.根據(jù)權(quán)利要求1所述的方法,該方法還包括提供調(diào)試?yán)痰牟襟E,其中,將所述公共程序設(shè)置為在所述多個(gè)操作系統(tǒng)的操作中出現(xiàn)了預(yù)定義條件時(shí)輸出機(jī)器狀態(tài)變量的狀態(tài)。
20.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟將所述多個(gè)操作系統(tǒng)與公共程序組合為單個(gè)代碼產(chǎn)品。
21.根據(jù)權(quán)利要求1所述的方法,該方法還包括以下步驟將所述多個(gè)操作系統(tǒng)和公共程序嵌入計(jì)算機(jī)產(chǎn)品上的永久性存儲(chǔ)器上。
22.根據(jù)權(quán)利要求1所述的方法,其中,將所述公共程序設(shè)置為提供操作系統(tǒng)間通信機(jī)制,該操作系統(tǒng)間通信機(jī)制使得可以在所述第一操作系統(tǒng)與第二操作系統(tǒng)之間和/或在這些操作系統(tǒng)上運(yùn)行的應(yīng)用之間進(jìn)行通信。
23.根據(jù)權(quán)利要求22所述的方法,其中,所述公共程序定義對(duì)應(yīng)于通信總線橋的虛擬輸入和/或輸出設(shè)備,使得所述多個(gè)操作系統(tǒng)可以就像通過通信總線一樣進(jìn)行通信。
24.根據(jù)權(quán)利要求23所述的方法,其中,修改所述多個(gè)操作系統(tǒng)的步驟包括以下步驟添加對(duì)所述虛擬總線橋設(shè)備進(jìn)行管理的驅(qū)動(dòng)例程。
25.一種開發(fā)套件計(jì)算機(jī)程序產(chǎn)品,該開發(fā)套件計(jì)算機(jī)程序產(chǎn)品包括用于執(zhí)行權(quán)利要求1的步驟的代碼。
26.一種計(jì)算機(jī)程序產(chǎn)品,該計(jì)算機(jī)程序產(chǎn)品包括根據(jù)權(quán)利要求20組合的代碼。
27.一種嵌入式計(jì)算機(jī)系統(tǒng),該嵌入式計(jì)算機(jī)系統(tǒng)包括中央處理器、存儲(chǔ)設(shè)備以及輸入/輸出設(shè)備,在其中的永久性存儲(chǔ)器上存儲(chǔ)有根據(jù)權(quán)利要求24嵌入的程序。
28.一種計(jì)算機(jī)系統(tǒng),該計(jì)算機(jī)系統(tǒng)包括中央處理器、存儲(chǔ)設(shè)備以及輸入/輸出設(shè)備,該計(jì)算機(jī)系統(tǒng)在其上執(zhí)行的計(jì)算機(jī)代碼包括具有相對(duì)較高優(yōu)先級(jí)的第一操作系統(tǒng);具有相對(duì)較低優(yōu)先級(jí)的第二操作系統(tǒng);以及公共程序,其被設(shè)置為通過在預(yù)定條件下在所述多個(gè)操作系統(tǒng)之間進(jìn)行切換來同時(shí)運(yùn)行所述多個(gè)操作系統(tǒng)。
29.根據(jù)權(quán)利要求28所述的計(jì)算機(jī)系統(tǒng),該計(jì)算機(jī)系統(tǒng)被設(shè)置為使用根據(jù)權(quán)利要求1到24中的任一項(xiàng)所述的方法來同時(shí)運(yùn)行所述第一操作系統(tǒng)和第二操作系統(tǒng)。
30.根據(jù)權(quán)利要求1所述的方法,其中,每一個(gè)所述操作系統(tǒng)都設(shè)置有空閑例程,在該空閑例程中該操作系統(tǒng)將控制傳遞給所述公共程序。
31.根據(jù)權(quán)利要求30所述的方法,其中,所述空閑例程替代處理器停止指令。
32.根據(jù)權(quán)利要求1所述的方法,其中,當(dāng)在正在執(zhí)行的操作系統(tǒng)的執(zhí)行過程中出現(xiàn)處理器異常時(shí),(a)所述公共程序被設(shè)置為調(diào)用所述第一操作系統(tǒng)的異常處理例程以對(duì)這些處理器異常進(jìn)行服務(wù);(b)如果所述異常是針對(duì)預(yù)定的第二操作系統(tǒng)的,則創(chuàng)建虛擬異常;(c)所述公共程序被設(shè)置為在所述第一操作系統(tǒng)對(duì)所述處理器異常進(jìn)行了服務(wù)之后返回執(zhí)行所述正在執(zhí)行的操作系統(tǒng);(d)當(dāng)所述公共程序接下來切換到所述預(yù)定第二操作系統(tǒng)時(shí),將待處理的虛擬異常通知給所述預(yù)定第二操作系統(tǒng);并且調(diào)用所述預(yù)定第二操作系統(tǒng)的與所述虛擬異常相對(duì)應(yīng)的異常處理例程以對(duì)所述虛擬異常進(jìn)行服務(wù)。
33.根據(jù)權(quán)利要求1所述的方法,其中,對(duì)所述第二操作系統(tǒng)進(jìn)行修改以防止它屏蔽中斷。
34.根據(jù)權(quán)利要求1所述的方法,其中,所有的硬件中斷最初都由所述第一操作系統(tǒng)來處理,并且,將針對(duì)第二操作系統(tǒng)的硬件中斷虛擬化并推遲,直到所述公共程序接下來調(diào)度到該第二操作系統(tǒng),此時(shí)由該第二操作系統(tǒng)對(duì)所述針對(duì)第二操作系統(tǒng)的硬件中斷進(jìn)行服務(wù)。
35.根據(jù)權(quán)利要求8所述的方法,其中,將所述公共程序設(shè)置為對(duì)每一個(gè)第二操作系統(tǒng)提供用于屏蔽虛擬異常的手段以代替該第二操作系統(tǒng)中的硬件中斷掩碼,以使得該第二操作系統(tǒng)可以完全被第一操作系統(tǒng)先占。
36.根據(jù)權(quán)利要求9所述的方法,其中,不屏蔽所述第二虛擬異常。
全文摘要
本發(fā)明提供操作系統(tǒng)。本發(fā)明提供一種使得多個(gè)不同操作系統(tǒng)能夠在諸如高級(jí)精簡(jiǎn)指令集計(jì)算機(jī)機(jī)器的同一精簡(jiǎn)指令集計(jì)算機(jī)上同時(shí)運(yùn)行的方法,該方法包括以下步驟選擇具有相對(duì)較高優(yōu)先級(jí)的第一操作系統(tǒng),即實(shí)時(shí)操作系統(tǒng),例如C5;選擇具有相對(duì)較低優(yōu)先級(jí)的至少一個(gè)第二操作系統(tǒng),即通用操作系統(tǒng),如Linux;提供一種公共程序,即類似于超微內(nèi)核的硬件資源分配程序,其被設(shè)置為在預(yù)定條件下在所述多個(gè)操作系統(tǒng)之間進(jìn)行切換;以及對(duì)所述第一操作系統(tǒng)和第二操作系統(tǒng)提供修改以使得它們可以被所述公共程序控制。
文檔編號(hào)G06F9/46GK101052949SQ200580031580
公開日2007年10月10日 申請(qǐng)日期2005年8月18日 優(yōu)先權(quán)日2004年8月18日
發(fā)明者吉利斯·邁涅, 蓋納蒂·馬斯洛夫 申請(qǐng)人:扎魯納股份有限公司