亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

虛擬化程序、模擬裝置以及虛擬化方法

文檔序號:6469091閱讀:198來源:國知局
專利名稱:虛擬化程序、模擬裝置以及虛擬化方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種在包括能夠進(jìn)行操作以進(jìn)行多任務(wù)處理的OS (操作系統(tǒng))的軟件的模擬中,利用主CPU的本機代碼模擬在目標(biāo) OS上生成的多任務(wù)的虛擬化程序、模擬裝置和虛擬化方法。
背景技術(shù)
ISS (Instruction Set Simulation,指令集模擬)和本機代碼才莫擬 作為 一般的計算機模擬技術(shù)是已知的。
利用ISS,符合目標(biāo)CPU (作為模擬對象的計算機的CPU)的 架構(gòu)的二進(jìn)制代碼的任務(wù)在執(zhí)行時被解釋并被模擬。利用ISS,任務(wù) 的模擬花費很長時間,從而包括OS在內(nèi)的整個軟件無法在現(xiàn)實的時 間段內(nèi)模擬。另 一方面,利用本機代碼模擬,符合主CPU (執(zhí)行模擬 的計算機的處理器)的架構(gòu)的二進(jìn)制代碼的任務(wù)直接由主CPU執(zhí)行,
從而不需要對任務(wù)進(jìn)行解釋和將其轉(zhuǎn)換成符合目標(biāo)CPU的架構(gòu)的二 進(jìn)制代碼,從而能夠以高速執(zhí)行模擬。
當(dāng)目標(biāo)OS (在目標(biāo)CPU上運行的作為模擬對象的OS)是多任 務(wù)OS時,目標(biāo)OS通過操作目標(biāo)CPU具有的堆棧寄存器或PSR (Program Status Register,程序狀態(tài)寄存器)等特殊的控制寄存器 來保存和復(fù)原任務(wù)的上下文,以實現(xiàn)多任務(wù)的上下文切換。這些特殊 控制寄存器的操作用匯編語言描述。
在與本發(fā)明有關(guān)的現(xiàn)有技術(shù)中,公開了一種硬件/軟件協(xié)調(diào)驗證 方法,該方法能夠在不降低定時驗證的精度的情況下,實現(xiàn)作為基于 C的本機代碼模擬的高速模擬(例如參見專刮文獻(xiàn)1:日本專利申請 公開No. 2004-234528 )。而且,公開了如下方法生成要安裝在半導(dǎo) 體器件中的、執(zhí)行硬件/軟件的協(xié)調(diào)驗證處理所需的軟件驗證模型,該方法能夠通過使增加預(yù)算處理的技術(shù)最優(yōu)化來維持精度水平,并且能
夠提高性能(例如參見專利文獻(xiàn)2:日本專利申請公開No. 2005-293219)。
但是,所有包括目標(biāo)OS的軟件需要用c語言重寫以執(zhí)行本機代
碼模擬。
另外,上述的堆棧寄存器沒有在本機代碼模擬器中模型化。因此,
目標(biāo)os不能保存和復(fù)原每個任務(wù)的上下文,從而當(dāng)其執(zhí)行多任務(wù)時, 模擬引擎和目標(biāo)OS需要密切合作以管理該任務(wù)。目標(biāo)OS主要負(fù)責(zé) 目標(biāo)OS上的任務(wù)的管理。目標(biāo)OS應(yīng)當(dāng)在模擬引擎所提供的虛擬CPU 上運行,并且任務(wù)應(yīng)當(dāng)在目標(biāo)OS的管理下執(zhí)行。當(dāng)模擬引擎和目標(biāo) OS密切合作來管理任務(wù)時,本來的分層就會在結(jié)構(gòu)上不匹配,從而 模擬引擎需要針對目標(biāo)OS的每個類型來設(shè)置處理。

發(fā)明內(nèi)容
鑒于上述問題,本發(fā)明的目的是提供一種模擬裝置、虛擬化程序
以及虛擬化方法,可以使本機代碼模擬器能夠通過允許目標(biāo)OS擁有 目標(biāo)OS上的每個任務(wù)的堆棧區(qū)域并且使其能夠在任務(wù)切換的定時進(jìn) 行操作以進(jìn)行上下文切換,來執(zhí)行多任務(wù)OS上的任務(wù)的本機代碼模擬。
在本發(fā)明的一個方面中,上述目的通過提供一種使計算機執(zhí)行處
理的虛擬化程序來實現(xiàn),該虛擬化程序包括在每次啟動在目標(biāo)OS
或模擬對象上產(chǎn)生的每個任務(wù)時,生成堆棧區(qū)域、寄存器保存區(qū)域和
任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊TCB),其中,堆棧區(qū)域用于按照 將由每個任務(wù)順序調(diào)用的函數(shù)的順序,以LIFO (后進(jìn)先出)結(jié)構(gòu)存 儲函數(shù)調(diào)用信息(Call Stack),寄存器保存區(qū)域逐個任務(wù)地存儲每 個任務(wù)的最后的執(zhí)行中斷時的寄存器內(nèi)容作為最新寄存器信息,任務(wù) 狀態(tài)存儲區(qū)域逐個任務(wù)地存儲表示每個任務(wù)的狀態(tài)的狀態(tài)信息;在寄 存器保存區(qū)域中存儲在調(diào)用至少緊接由正在執(zhí)行的任務(wù)最后一次調(diào) 用的函數(shù)之前的函數(shù)時的寄存器內(nèi)容,作為最新寄存器信息,并且在任務(wù)狀態(tài)存儲區(qū)域中存儲表示正在執(zhí)行的任務(wù)的狀態(tài)的狀態(tài)信息;以 及根據(jù)接著將執(zhí)行的待機任務(wù)的最新寄存器信息和狀態(tài)信息,從正在 執(zhí)行的任務(wù)切換到待機任務(wù),以進(jìn)行適于執(zhí)行多任務(wù)處理的目標(biāo)OS 的本機代碼模擬。
優(yōu)選地,在上述的本發(fā)明的虛擬化程序中,上述切換是通過根據(jù) 待機任務(wù)的最新寄存器信息在主CPU的堆棧寄存器中存儲寄存器內(nèi) 容,來切換在本機代碼模擬中的目標(biāo)OS上正在執(zhí)行的任務(wù)。
優(yōu)選地,在上述的本發(fā)明的虛擬化程序中,上述在寄存器保存區(qū)
域中的存儲是存儲在主CPU的預(yù)定寄存器中存儲的值,作為正在執(zhí)
行的任務(wù)的最新寄存器信息。
優(yōu)選地,在上述的本發(fā)明的虛擬化程序中,上述切換是通過在主
CPU的預(yù)定寄存器中存儲待機任務(wù)的最新寄存器信息來切換正在執(zhí)
行的任務(wù)。
在本發(fā)明的另一個方面中,提供一種虛擬化裝置,包括上下文 生成部分,在每次啟動在目標(biāo)OS或模擬對象上產(chǎn)生的每個任務(wù)時, 生成堆棧區(qū)域、寄存器保存區(qū)域和任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊 TCB),其中堆棧區(qū)域用于按照將由每個任務(wù)順序調(diào)用的函數(shù)的順序, 以LIFO (后進(jìn)先出)結(jié)構(gòu)存儲函數(shù)調(diào)用信息(Call Stack),寄存器 保存區(qū)域逐個任務(wù)地存儲每個任務(wù)的最后的執(zhí)行中斷時的寄存器內(nèi) 容作為最新寄存器信息,任務(wù)狀態(tài)存儲區(qū)域逐個任務(wù)地存儲表示每個 任務(wù)的狀態(tài)的狀態(tài)信息;上下文存儲部分,在寄存器保存區(qū)域中存儲 在調(diào)用至少緊接由正在執(zhí)行的任務(wù)最后一次調(diào)用的函數(shù)之前的函數(shù) 時的寄存器內(nèi)容,作為最新寄存器信息,并且在任務(wù)狀態(tài)存儲區(qū)域中 存儲表示正在執(zhí)行的任務(wù)的狀態(tài)的狀態(tài)信息;以及任務(wù)切換部分,根 據(jù)接著將執(zhí)行的待機任務(wù)的最新寄存器信息和狀態(tài)信息,從正在執(zhí)行 的任務(wù)切換到待機任務(wù),以進(jìn)行適于執(zhí)行多任務(wù)處理的目標(biāo)OS的本 機代碼模擬。
優(yōu)選地,在上述的本發(fā)明的模擬裝置中,任務(wù)切換部分通過根據(jù) 待機任務(wù)的最新寄存器信息在主CPU的堆棧寄存器中存儲寄存器內(nèi)
7容,來切換在本機代碼模擬中的目標(biāo)OS上正在執(zhí)行的任務(wù)。
優(yōu)選地,在上述的本發(fā)明的模擬裝置中,上下文存儲部分在寄存
器保存區(qū)域中存儲在主CPU的預(yù)定寄存器中存儲的值,作為正在執(zhí)
行的任務(wù)的最新寄存器信息。
優(yōu)選地,在上述的本發(fā)明的模擬裝置中,任務(wù)切換部分通過在主
CPU的預(yù)定寄存器中存儲待機任務(wù)的最新寄存器信息來切換正在執(zhí)
行的任務(wù)。
在本發(fā)明的又一個方面中,提供一種虛擬化方法,包括在每次 啟動在目標(biāo)OS或模擬對象上產(chǎn)生的每個任務(wù)時,生成堆棧區(qū)域、寄 存器保存區(qū)域和任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊TCB),其中,堆 棧區(qū)域用于按照將由每個任務(wù)順序調(diào)用的函數(shù)的順序,以LIFO(后 進(jìn)先出)結(jié)構(gòu)存儲函數(shù)調(diào)用信息(Call Stack),寄存器保存區(qū)域逐 個任務(wù)地存儲每個任務(wù)的最后的執(zhí)行中斷時的寄存器內(nèi)容,作為最新 寄存器信息,任務(wù)狀態(tài)存儲區(qū)域逐個任務(wù)地存儲表示每個任務(wù)的狀態(tài) 的狀態(tài)信息;在寄存器保存區(qū)域中存儲在調(diào)用至少緊接由正在執(zhí)行的 任務(wù)最后一次調(diào)用的函數(shù)之前的函數(shù)時的寄存器內(nèi)容,作為最新寄存 器信息,并且在任務(wù)狀態(tài)存儲區(qū)域中存儲表示正在執(zhí)行的任務(wù)的狀態(tài) 的狀態(tài)信息;以及根據(jù)接著將執(zhí)行的待機任務(wù)的最新寄存器信息和狀 態(tài)信息,從正在執(zhí)行的任務(wù)切換到待機任務(wù),以進(jìn)行適于執(zhí)行多任務(wù) 處理的目標(biāo)OS的本機代碼模擬。
優(yōu)選地,在上述的本發(fā)明的虛擬化方法中,上述切換是通過根據(jù) 待機任務(wù)的最新寄存器信息在主CPU的堆棧寄存器中存儲寄存器內(nèi) 容,來切換在本機代碼模擬中的目標(biāo)OS上正在執(zhí)行的任務(wù)。
優(yōu)選地,在上述的本發(fā)明的虛擬化方法中,上述在寄存器保存區(qū) 域中的存儲是存儲在主CPU的預(yù)定寄存器中存儲的值,作為正在執(zhí)
行的任務(wù)的最新寄存器信息。
優(yōu)選地,在上述的本發(fā)明的虛擬化方法中,上述切換是通過在主 CPU的預(yù)定寄存器中存儲待機任務(wù)的最新寄存器信息來切換正在執(zhí) 行的任務(wù)。這樣,根據(jù)本發(fā)明,對于適于執(zhí)行多任務(wù)處理的os,可以切換
多個任務(wù)來高速地執(zhí)行模擬。


圖1是本發(fā)明的模擬裝置的實施方式的示意性框圖,示出其結(jié)構(gòu)。
圖2是本實施方式的模擬裝置的示例性處理的流程圖。
圖3是本實施方式的上下文生成處理中的任務(wù)的函數(shù)結(jié)構(gòu)以及 堆棧區(qū)域結(jié)構(gòu)的示意圖。
圖4是本實施方式的上下文保存處理中的任務(wù)的函數(shù)結(jié)構(gòu)以及 堆棧區(qū)域結(jié)構(gòu)的示意圖。
圖5是本實施方式的上下文復(fù)原處理的任務(wù)的函數(shù)結(jié)構(gòu)以及堆 棧區(qū)域結(jié)構(gòu)的示意圖。
具體實施例方式
以下參照示出裝置結(jié)構(gòu)的圖1來說明本發(fā)明的模擬裝置的實施方式。
模擬裝置100具有主CPU 10 (中央處理單元)、主OS 11 (操 作系統(tǒng))、模擬引擎l、虛擬CPU12、目標(biāo)OS13、任務(wù)14A、另一 任務(wù)14B (這些任務(wù)中的兩者或任一者將被總稱為任務(wù)14) 、 HW模 型20 (硬件)。
主CPU 10是按照模擬裝置100的預(yù)定架構(gòu)作為硬件安裝的處理 單元,主OS11是在主CPU10的架構(gòu)上運行的OS。
模擬引擎1是為虛擬CPU 12和HW模型20提供激勵環(huán)境的虛 擬程序,執(zhí)行軟件和硬件的模擬,調(diào)整調(diào)度每個模型的定時。
虛擬CPU 12在主OS 11上^f莫擬目標(biāo)CPU的操作。在本實施方 式中假定虛擬CPU 12執(zhí)行任務(wù)的執(zhí)行模式始終是同一特權(quán)模式。雖 然堆棧寄存器在本機代碼模擬器中沒有模型化,但虛擬CPU 12的堆 棧寄存器映射主CPU 10的堆棧寄存器。換言之,當(dāng)目標(biāo)OS 12讀/寫堆棧寄存器時,主CPU10的堆棧寄存器被讀/寫。
目標(biāo)OS 13是能夠執(zhí)行將在虛擬CPU 12上執(zhí)行的多任務(wù)處理的 OS。假定本實施方式的目標(biāo)OS13不是多重虛擬存儲OS,而是整體 式空間OS。
任務(wù)14是用于在目標(biāo)OS 13上執(zhí)行預(yù)定處理的用戶程序。任務(wù) 14是利用符合主CPU10的架構(gòu)的本機代碼生成(編譯)的程序。
HW模型20典型地是用于將CCD相機、掃描儀等預(yù)定的外圍 設(shè)備的操作模型化的軟件。
本實施方式的才莫擬裝置100祐z沒計成驗證虛擬CPU 12、目標(biāo)OS 13、任務(wù)14和HW模型20的上述配置的硬件/軟件環(huán)境的操作。注 意,在需要時可以將整個模型化環(huán)境稱為驗證對象。
模擬引擎l具有用于任務(wù)的上下文的生成、保存(保存)、復(fù)原 和擦除處理的API。其功能在每個API被目標(biāo)OS13調(diào)用時實現(xiàn)。當(dāng) 移植目標(biāo)OS 13時,通過部分地改變代碼以調(diào)用模擬引擎1的API, 來向每個任務(wù)分配固有的堆棧區(qū)域。當(dāng)切換任務(wù)時,隨著堆棧區(qū)域被 切換,上下文可以被切換。由于本機代碼直接針對任務(wù)14執(zhí)行,因 此通過使堆棧區(qū)域的內(nèi)部結(jié)構(gòu)與主OS 11在主CPU 10上使用的堆棧 區(qū)域相同,模擬引擎1具有其支持的每個主CPU 10和主OS 11的上 下文操作API的處理。
另外,模擬引擎1具有上下文生成部分2、上下文保存部分3(上 下文存儲部分)和上下文復(fù)原部分4 (任務(wù)切換部分),從而可以并 行地執(zhí)行任務(wù)14A和任務(wù)14B。在對上下文生成部分2、上下文保存 部分3和上下文復(fù)原部分4的下述說明中,假定任務(wù)14A正在執(zhí)行, 并且任務(wù)14B將接著執(zhí)行(作為待機任務(wù)),從而將正在執(zhí)行的任務(wù) 從任務(wù)14A切換到任務(wù)14B。
上下文生成部分2生成堆棧區(qū)域和寄存器保存區(qū)域,堆棧區(qū)域用 于按照將由任務(wù)14A和任務(wù)14B中的每一個順序調(diào)用的函數(shù)的順序, 以LIFO (后進(jìn)先出)結(jié)構(gòu)存儲函數(shù)調(diào)用信息(Call Stack),寄存器 保存區(qū)域用于存儲任務(wù)14的最新寄存器信息。還生成任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊TCB),用于逐個任務(wù)地存儲表示每個任務(wù)14 的狀態(tài)的狀態(tài)信息。如本實施方式的情況,TCB可以在其內(nèi)部具有寄 存器保存區(qū)域。在該情況下,寄存器保存區(qū)域和任務(wù)狀態(tài)信息區(qū)域都 存在于TCB中。
上下文保存部分3將正在執(zhí)行的任務(wù)14A調(diào)用了由正在執(zhí)行的 任務(wù)最后一次調(diào)用的函數(shù)時的寄存器內(nèi)容作為最新寄存器信息存儲 在任務(wù)14A的TCB中。并且還在任務(wù)14A的TCB中存儲表示正在 執(zhí)行的任務(wù)14A的狀態(tài)的任務(wù)狀態(tài)信息。上下文保存部分3針對任務(wù) 14B執(zhí)4亍同樣的處理。
上下文復(fù)原部分4根據(jù)待機任務(wù)14B的最新寄存器信息和任務(wù) 狀態(tài)信息,從正在執(zhí)行的任務(wù)14A切換到接著將執(zhí)行的待機任務(wù)14B。 上下文復(fù)原部分4執(zhí)行從任務(wù)14B切換到任務(wù)14A的同樣處理。
當(dāng)上下文保存部分3的處理和上下文復(fù)原部分4的處理在預(yù)定定 時(例如在目標(biāo)OS 13的中斷例程調(diào)度器(IRS)產(chǎn)生中斷時,或者 根據(jù)響應(yīng)于用戶的系統(tǒng)調(diào)用而發(fā)出的中斷指示)執(zhí)行時,任務(wù)切換在 適于執(zhí)行多任務(wù)處理的目標(biāo)OS 13上實現(xiàn)。
以下參照圖2的流程圖說明本實施方式的模擬裝置100的處理。 注意,在以下說明中,任務(wù)14A生成任務(wù)14B,并且將任務(wù)14A切換 到任務(wù)14B。
當(dāng)從任務(wù)14A針對任務(wù)14B發(fā)出了任務(wù)生成請求時,上下文生 成部分2生成對應(yīng)于任務(wù)14B的TCB和堆棧區(qū)域。還生成其生成的 堆棧區(qū)域的根幀(存儲有開始任務(wù)的執(zhí)行所需的信息的管理區(qū)域)(步 驟S1)。
以下參照圖3說明任務(wù)14A的函數(shù)結(jié)構(gòu)、任務(wù)14A和任務(wù)14B 的堆棧區(qū)域、以及TCB。
生成上下文時的任務(wù)14A的函數(shù)調(diào)用如圖3所示的"任務(wù)14A的 函數(shù)結(jié)構(gòu)(上下文生成),,所示,是CRE-TASK()的調(diào)用,CRE-TASK ()是用于從函數(shù)func—a ()生成由目標(biāo)OS準(zhǔn)備的任務(wù)的API,其 中func a ()是用戶程序,而main ()是主函數(shù)。該結(jié)構(gòu)還包括是在CRE一TASK ()中由模擬引擎1準(zhǔn)備的函數(shù)、并且具有上下文生 成部分2的功能特征的context_create ()。
在作為目標(biāo)OS的任務(wù)生成功能特征的CRE—TASK ()被調(diào)用 時生成的堆棧區(qū)域中,如圖3的"堆棧區(qū)域、TCB的關(guān)系,,所示,函數(shù) 調(diào)用信息以LIFO堆棧結(jié)構(gòu)被存儲。對于上述的任務(wù)14A,堆棧區(qū)域 的根幀在任務(wù)開始時生成,并且main()幀、func—a()幀、CRE—TASK ()幀、context—create ()幀(幀用于存儲函數(shù)調(diào)用信息的單元) 按照在執(zhí)行任務(wù)14A的處理進(jìn)行時被順序調(diào)用的函數(shù)的順序被堆疊 在堆棧區(qū)域中。
任務(wù)14B由作為任務(wù)生成功能的CRE—TASK ()生成,必要的 設(shè)定由上下文生成部分2的context—create ()提供。以下說明 CRE_TASK ()的處理和在其內(nèi)部調(diào)用的context—create ()的處理。
當(dāng)任務(wù)14B被啟動時,CRE—TASK ()作出TCB (以下將對應(yīng) 于任務(wù)14A的TCB標(biāo)記為TCB ( A),將對應(yīng)于任務(wù)14B的TCB 標(biāo)記為TCB (B)),并且定義與該任務(wù)相關(guān)的信息的初始值(寄存 器的初始值、任務(wù)狀態(tài)信息的初始值)。另外,CREJTASK()分配 用于配置將作為被啟動的任務(wù)執(zhí)行的程序的地址空間(包括堆棧區(qū) 域)。由于目標(biāo)OS 13是整體式空間OS,因此,本實施方式的 CRE一TASK ()將真實存儲器的地址空間切分并將其作為堆棧區(qū)域分 配。另一方面,當(dāng)目標(biāo)OS是虛擬存儲OS時,CRE—TASK()作出 頁表等虛擬空間控制信息。
而context_create ()在根幀中在適當(dāng)?shù)奈恢迷O(shè)定在啟動被啟動 的任務(wù)的執(zhí)行時所需的信息(例如,任務(wù)的環(huán)境變量、主函數(shù)的開始 地址等)。另外,將作出的TCB登記在目標(biāo)OS 13管理的TCB隊列 (例如任務(wù)就緒隊列)中。
這樣,由實現(xiàn)任務(wù)生成功能特征等的CRE一TASK ()和在其內(nèi) 部調(diào)用的context—create ()作出存儲任務(wù)14B的上下文的區(qū)域。所 作出的堆棧區(qū)域可以通過分割主OS 11分配給作為驗證對象的線程的 堆棧區(qū)域,或者通過使用由存儲器分配函數(shù)(maUoc函數(shù))等主OS 11的存儲區(qū)域分配服務(wù)獲得的區(qū)域來作出。
當(dāng)上下文生成處理結(jié)束時,context一create()結(jié)束(context_create ()調(diào)用幀從堆棧區(qū)域釋放)并且CRE—TASK ()結(jié)束(CRE_TASK ()調(diào)用幀從堆棧區(qū)域釋放)。
在上述說明中,由任務(wù)14A針對任務(wù)14B進(jìn)行任務(wù)生成請求, 并且任務(wù)14A動態(tài)生成任務(wù)14B,但也可以配置成目標(biāo)OS 13根據(jù) OS結(jié)構(gòu)信息靜態(tài)地生成任務(wù)14B。
現(xiàn)在返回圖2的流程圖。以下說明在任務(wù)14B生成后并行地執(zhí) 行任務(wù)14A和任務(wù)14B的任務(wù)切換處理。
上下文保存部分3在TCB中存儲主CPU IO的堆棧中存儲的、 當(dāng)前幀的一幀之前的幀,作為當(dāng)前幀指針。另外,上下文保存部分3 在TCB中存儲作為虛擬CPU的控制寄存器的PSR(存儲表示任務(wù)狀 態(tài)的值的寄存器)中存儲的值(步驟S2)。
以下參照圖4針對任務(wù)14A說明上下文保存部分3執(zhí)行的處理。
假定在TCB中保存上下文時由任務(wù)14A調(diào)用的函數(shù)具有圖4A 所示的"任務(wù)14A的函數(shù)結(jié)構(gòu)(上下文保存)"。更具體地,main () 是主函數(shù),具有作為用戶程序的函數(shù)的func一b (),而由目標(biāo)OS13 提供的系統(tǒng)調(diào)用是從func—b()內(nèi)部進(jìn)行的(syscall()函數(shù)被調(diào)用)。 另外,在系統(tǒng)調(diào)用中,為了任務(wù)切換的目的而調(diào)用任務(wù)切換函數(shù) (Task_switch ()),并且作為上下文保存部分3的功能特征的 context_save ()作為Task_switch ()的內(nèi)部函數(shù)-皮調(diào)用。
在上述狀況下,虛擬CPU 12當(dāng)前正在執(zhí)行context—save ()并 且虛擬CPU 12的堆棧寄存器存儲context_save ()幀的地址(在圖4 中標(biāo)記為印)?,F(xiàn)在,context_save ()在TCB (A)中存儲其自身 的context—save ()的幀之前的函數(shù)的幀的地址。
而且,context一save ()在任務(wù)14A的寄存器保存區(qū)域中保存當(dāng) 前存儲在虛擬CPU 12的控制寄存器中的寄存器信息,從而存儲在 TCB ( A)中。
當(dāng)上述處理被執(zhí)行并且context save ()結(jié)束時,context_save()的幀也被釋放。
這樣,作為上下文保存部分3的功能特征的context_save ()在 TCB (A)中存儲調(diào)用了 context_save ()的函數(shù)的函數(shù)調(diào)用信息的 地址作為當(dāng)前幀指針,并且在TCB(A)中存儲當(dāng)前存儲在虛擬CPU 12的控制寄存器中的寄存器信息。這樣,當(dāng)某個時間之后任務(wù)14A 被切換到任務(wù)14B,接著任務(wù)14B被重新切換到任務(wù)14A時,任務(wù) 14A可以在切換之前的狀態(tài)下繼續(xù)執(zhí)行處理。
現(xiàn)在再次返回到圖2的流程圖,說明在TCB (A)中保存了任務(wù) 14A的上下文之后的處理。
上下文復(fù)原部分4在任務(wù)14B (接著將執(zhí)行的待機任務(wù))的堆棧 區(qū)域中復(fù)制正在執(zhí)行的任務(wù)14A的堆棧區(qū)域中存儲的函數(shù)調(diào)用信息 中的、當(dāng)前正在執(zhí)行的函數(shù)的調(diào)用幀(當(dāng)前幀)。上下文復(fù)原部分4 在虛擬CPU 12的控制寄存器中存儲TCB ( B )中存儲的寄存器信息, 并且在虛擬CPU 12的堆棧寄存器中存儲通過將TCB ( B )中存儲的 地址增加一幀而更新的地址,作為當(dāng)前幀指針(步驟S3)。
以下參照圖5說明上下文復(fù)原部分4執(zhí)行的處理。
圖5示出正在執(zhí)行當(dāng)前任務(wù)14A、上下文保存部分3的上述處理 (context—save ())已經(jīng)結(jié)束、作為上下文復(fù)原部分4的功能特征 的context—restore ( ) -波調(diào)用的狀態(tài)。
首先,當(dāng)context—restore ()在任務(wù)14A中被Task—switch () 調(diào)用時,context一restore ()在任務(wù)14B的堆棧區(qū)域上復(fù)制其自身的 context—restore ()函數(shù)的調(diào)用幀(一幀)。接著,context—restore ()通過將存儲在TCB (B)中的地址增加所復(fù)制的其自身的 context_restore ()函數(shù)的調(diào)用幀的大小,來進(jìn)行更新。換言之, context_restore ()將TCB (B)的堆棧幀指針從Task—switch ()函 數(shù)的調(diào)用幀的地址更新為context一restore ()函數(shù)的調(diào)用幀的地址。
此后,context—restore ()在虛擬CPU 12的堆棧寄存器中存儲 更新后的指針的內(nèi)容,并且在虛擬CPU 12的控制寄存器中存儲寄存 器保存區(qū)域中存儲的寄存器信息(注意,寄存器信息未在圖5中示出)。結(jié)果,虛擬CPU12在沒有意識到任務(wù)被切換的情況下,簡單地 執(zhí)行對存儲在其自身的堆棧寄存器中的地址的處理(即在任務(wù)14B的 堆棧區(qū)域中堆疊的context_restore ())。
此后,當(dāng)一系列的切,換處理完成時,contextjrestore ()的處理 結(jié)束(從而context一restore ()幀4皮釋訪文),4壬務(wù)14B的Task—switch ()的處理也結(jié)束(從而Task_switch ()幀被釋放)。另外,當(dāng)任 務(wù)14B的系統(tǒng)調(diào)用(syscall ())結(jié)束(從而syscall ()幀被釋放) 時,任務(wù)14B繼續(xù)執(zhí)行其被置入待機狀態(tài)之前的處理(作為圖5中的 用戶函數(shù)的func—d ())。
在目標(biāo)OS 13的中斷調(diào)度器產(chǎn)生中斷時、或者在產(chǎn)生系統(tǒng)調(diào)用 (syscall())時,隨著上述的context一save()的處理或context—restore ()的處理從Tasl^switch ()被調(diào)用,任務(wù)14A或任務(wù)14B被切換 到另一個。
當(dāng)任務(wù)14B進(jìn)入正在執(zhí)行的狀態(tài)并且接著任務(wù)14B被切換到任 務(wù)14A時,在任務(wù)14B的執(zhí)行處理過程中調(diào)用context_save (),并 且執(zhí)行保存虛擬CPU 12的當(dāng)前控制寄存器以及堆棧指針(通過增加 一幀而更新)的處理。接著,當(dāng)context_restore ()為了任務(wù)14B的 處理而被調(diào)用時,context—restore ()在任務(wù)14A中復(fù)制其自身的 context_restore ()函數(shù)的調(diào)用幀,并且通過將存儲在TCB (A)中 的堆棧幀指針增加一幀(context_restore ()函數(shù)的調(diào)用幀的大小) 來進(jìn)行更新,從而將更新后的堆棧幀指針的內(nèi)容存儲在堆棧寄存器 中,并且在控制寄存器中存儲TCB (A)中存儲的狀態(tài)信息。這樣, 任務(wù)14A能夠繼續(xù)其自身的context_restore ()處理。
現(xiàn)在,再次返回到圖2的流程圖。以下針對任務(wù)14A說明任務(wù) 的結(jié)束。當(dāng)任務(wù)14A中的函數(shù)逐個地結(jié)束(堆棧區(qū)域的幀被逐個地釋 放)并且最后的main ()結(jié)束時,與根幀一起針對任務(wù)14A分配的 堆棧區(qū)域被釋放以結(jié)束任務(wù)14A (步驟S4 )。
在上述實施方式的說明中,生成兩個任務(wù)的上下文并且將兩個任 務(wù)從一個切換到另一個,但根據(jù)本發(fā)明,可以生成更多個任務(wù)并從一個切換到另一個。
在上述實施方式中,上下文保存部分3在TCB中作為存儲地址 信息來存儲被存儲在堆棧區(qū)域中、并且通過減去最后執(zhí)行的函數(shù)的一 幀而更新的地址,并且上下文復(fù)原部分4在虛擬CPU 12的堆棧寄存 器中存儲通過對存儲地址信息加上所復(fù)制的 一幀而更新的地址,但 是,可能等于0的加或減的幀數(shù)可以取決于任務(wù)切換發(fā)生的程序位置 而變化。在上述實施方式的說明中,假定任務(wù)切換在Task_switch () 函數(shù)中發(fā)生。
在上述實施方式的說明中,虛擬CPU 12總是在同一特權(quán)才莫式下 執(zhí)行任務(wù),但只有中斷調(diào)度器可以在另一特權(quán)模式下處理。這種情況 下,可以在啟動目標(biāo)OS13時生成用于中斷處理的堆棧區(qū)域,并且在 中斷調(diào)度器調(diào)度中斷處理程序時可以進(jìn)行向用于中斷處理的堆棧的 切換。
在上述實施方式的說明中,目標(biāo)OS13用于單一空間(整體式空 間OS),但在多重虛擬存儲OS的情況下,不能同時參考和操作多個 任務(wù)的任務(wù)固有空間。換言之,與上述實施方式不同,不能通過直接 復(fù)制在多重虛擬存儲器中實現(xiàn)堆棧幀復(fù)制操作。這種情況下,利用源 任務(wù)的上下文將堆棧幀一次復(fù)制到目標(biāo)OS 13的系統(tǒng)區(qū)域等任務(wù)所共 用的區(qū)域,并且切換任務(wù)的上下文以將堆棧幀復(fù)制到目的地任務(wù)的堆 棧。這樣,可以實現(xiàn)與上述實施方式同等的上下文切換。換言之,本 發(fā)明可適用于多重虛擬存儲OS。
在上述實施方式的說明中,虛擬CPU 12始終在同一特權(quán)模式下 執(zhí)行任務(wù),但為了系統(tǒng)保護(hù)的目的,存在多個為任務(wù)的執(zhí)行而提供的 不同模式,例如用戶模式、特權(quán)模式和例外模式, 一般通過提供用于 庫切換等切換的機構(gòu)來切換當(dāng)前執(zhí)行模式。
當(dāng)切換當(dāng)前執(zhí)行模式時,將切換前的執(zhí)行模式的堆棧區(qū)域的當(dāng)前 幀指針存儲在切換后的執(zhí)行模式的堆棧區(qū)域的幀中。然后,作為結(jié)果, 可以在從當(dāng)前執(zhí)行模式返回到前一執(zhí)行模式時復(fù)原切換執(zhí)行模式時 的當(dāng)前幀指針。從本實施方式的模擬引擎l的角度看,虛擬CPU12、目標(biāo)OS 13 和任務(wù)14是一個執(zhí)行單元,從而從任務(wù)14A切換到任務(wù)14B的定時 和任務(wù)切換條件僅由目標(biāo)OS 13決定,并且對^t擬引擎1是透明的。 因此,如果目標(biāo)OS的任務(wù)切換算法改變,則虛擬引擎l不需要改變。
在上述說明中,預(yù)先在本實施方式的模擬裝置內(nèi)部安裝了虛擬化 程序,但可以將本發(fā)明的虛擬化程序安裝在存儲介質(zhì)中??梢杂糜诒?發(fā)明的存儲介質(zhì)包括能夠存儲虛擬化程序的所有介質(zhì),從而相對于模 擬裝置的計算機是可讀的。這樣的介質(zhì)包括能夠可拆卸地連接到模擬 裝置的介質(zhì),例如磁帶、磁盤(軟盤、硬盤驅(qū)動器等)、光盤(CD-ROM、 DVD等)、磁光盤(MD等)、閃存等,以及能夠接收通過網(wǎng)絡(luò)傳送 的虛擬化程序的介質(zhì)。
權(quán)利要求
1. 一種使計算機執(zhí)行處理的虛擬化程序,包括在每次啟動在目標(biāo)OS或模擬對象上產(chǎn)生的每個任務(wù)時,生成堆棧區(qū)域、寄存器保存區(qū)域和任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊TCB),其中,堆棧區(qū)域用于按照將由每個任務(wù)順序調(diào)用的函數(shù)的順序,以LIFO(后進(jìn)先出)結(jié)構(gòu)存儲函數(shù)調(diào)用信息,寄存器保存區(qū)域逐個任務(wù)地存儲每個任務(wù)的最后的執(zhí)行中斷時的寄存器內(nèi)容作為最新寄存器信息,任務(wù)狀態(tài)存儲區(qū)域逐個任務(wù)地存儲表示每個任務(wù)的狀態(tài)的狀態(tài)信息;在寄存器保存區(qū)域中存儲在調(diào)用至少緊接由正在執(zhí)行的任務(wù)最后一次調(diào)用的函數(shù)之前的函數(shù)時的寄存器內(nèi)容,作為最新寄存器信息,并且在任務(wù)狀態(tài)存儲區(qū)域中存儲表示正在執(zhí)行的任務(wù)的狀態(tài)的狀態(tài)信息;以及根據(jù)接著將執(zhí)行的待機任務(wù)的最新寄存器信息和狀態(tài)信息,從正在執(zhí)行的任務(wù)切換到待機任務(wù),以進(jìn)行適于執(zhí)行多任務(wù)處理的目標(biāo)OS的本機代碼模擬。
2. 如權(quán)利要求1所述的虛擬化程序,其中, 上述切換是通過根據(jù)待機任務(wù)的最新寄存器信息在主CPU的堆棧寄存器中存儲寄存器內(nèi)容,來切換在本機代碼模擬中的目標(biāo)OS上 正在執(zhí)行的任務(wù)。
3. 如權(quán)利要求l所述的虛擬化程序,其中, 上述在寄存器保存區(qū)域中的存儲是存儲在主CPU的預(yù)定寄存器中存儲的值,作為正在執(zhí)行的任務(wù)的最新寄存器信息。
4. 如權(quán)利要求3所述的虛擬化程序,其中, 上述切換是通過在主CPU的預(yù)定寄存器中存儲待機任務(wù)的最新寄存器信息來切換正在執(zhí)行的任務(wù)。
5. —種虛擬化裝置,包括上下文生成部分,在每次啟動在目標(biāo)OS或模擬對象上產(chǎn)生的每個任務(wù)時,生成堆棧區(qū)域、寄存器保存區(qū)域和任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊TCB),其中堆棧區(qū)域用于按照將由每個任務(wù)順序調(diào)用的 函數(shù)的順序,以LIFO (后進(jìn)先出)結(jié)構(gòu)存儲函數(shù)調(diào)用信息,寄存器 保存區(qū)域逐個任務(wù)地存儲每個任務(wù)的最后的執(zhí)行中斷時的寄存器內(nèi) 容作為最新寄存器信息,任務(wù)狀態(tài)存儲區(qū)域存儲逐個任務(wù)地表示每個 任務(wù)的狀態(tài)的狀態(tài)信息;上下文存儲部分,在寄存器保存區(qū)域中存儲在調(diào)用至少緊接由正 在執(zhí)行的任務(wù)最后一次調(diào)用的函數(shù)之前的函數(shù)時的寄存器內(nèi)容,作為 最新寄存器信息,并且在任務(wù)狀態(tài)存儲區(qū)域中存儲表示正在執(zhí)行的任 務(wù)的狀態(tài)的狀態(tài)信息;以及任務(wù)切換部分,根據(jù)接著將執(zhí)行的待機任務(wù)的最新寄存器信息和 狀態(tài)信息,從正在執(zhí)行的任務(wù)切換到待機任務(wù),以進(jìn)行適于執(zhí)行多任 務(wù)處理的目標(biāo)OS的本機代碼模擬。
6. 如權(quán)利要求5所述的裝置,其中,任務(wù)切換部分通過根據(jù)待機任務(wù)的最新寄存器信息在主CPU的 堆棧寄存器中存儲寄存器內(nèi)容,來切換在本機代碼模擬中的目標(biāo)OS 上正在執(zhí)行的任務(wù)。
7. 如權(quán)利要求5所述的裝置,其中,上下文存儲部分在寄存器保存區(qū)域中存儲在主CPU的預(yù)定寄存 器中存儲的值,作為正在執(zhí)行的任務(wù)的最新寄存器信息。
8,如權(quán)利要求7所述的裝置,其中,任務(wù)切換部分通過在主CPU的預(yù)定寄存器中存儲待機任務(wù)的最 新寄存器信息來切換正在執(zhí)行的任務(wù)。
9. 一種虛擬化方法,包括在每次啟動在目標(biāo)OS或模擬對象上產(chǎn)生的每個任務(wù)時,生成堆 棧區(qū)域、寄存器保存區(qū)域和任務(wù)狀態(tài)存儲區(qū)域(任務(wù)控制塊TCB), 其中,堆棧區(qū)域用于按照將由每個任務(wù)順序調(diào)用的函數(shù)的順序,以 LIFO (后進(jìn)先出)結(jié)構(gòu)存儲函數(shù)調(diào)用信息,寄存器保存區(qū)域逐個任 務(wù)地存儲每個任務(wù)的最后的執(zhí)行中斷時的寄存器內(nèi)容作為最新寄存器信息,任務(wù)狀態(tài)存儲區(qū)域逐個任務(wù)地存儲表示每個任務(wù)的狀態(tài)的狀態(tài)信息;在寄存器保存區(qū)域中存儲在調(diào)用至少緊接由正在執(zhí)行的任務(wù)最 后一次調(diào)用的函數(shù)之前的函數(shù)時的寄存器內(nèi)容,作為最新寄存器信 息,并且在任務(wù)狀態(tài)存儲區(qū)域中存儲表示正在執(zhí)行的任務(wù)的狀態(tài)的狀 態(tài)信息;以及根據(jù)接著將執(zhí)行的待機任務(wù)的最新寄存器信息和狀態(tài)信息,從正 在執(zhí)行的任務(wù)切換到待機任務(wù),以進(jìn)行適于執(zhí)行多任務(wù)處理的目標(biāo) OS的本機代碼模擬。
10. 如權(quán)利要求9所述的方法,其中,上述切換是通過根據(jù)待機任務(wù)的最新寄存器信息在主CPU的堆 棧寄存器中存儲寄存器內(nèi)容,來切換在本機代碼模擬中的目標(biāo)OS上正在執(zhí)行的任務(wù)。
11. 如權(quán)利要求9所述的方法,其中,上述在寄存器保存區(qū)域中的存儲是存儲在主CPU的預(yù)定寄存器 中存儲的值,作為正在執(zhí)行的任務(wù)的最新寄存器信息。
12. 如權(quán)利要求11所述的方法,其中,上述切換是通過在主CPU的預(yù)定寄存器中存儲待機任務(wù)的最新 寄存器信息來切換正在執(zhí)行的任務(wù)。
全文摘要
本發(fā)明提供一種虛擬化程序、模擬裝置以及虛擬化方法,可以高速地執(zhí)行模擬,允許本機代碼模擬器具有由多任務(wù)OS管理的每個任務(wù)固有的堆棧。由本機代碼模擬器提供的API執(zhí)行由目標(biāo)CPU通過特殊控制寄存器操作執(zhí)行的上下文的生成、保存、復(fù)原和擦除處理。當(dāng)移植多任務(wù)OS時,源代碼被改變以調(diào)用API。在API中分配任務(wù)固有的堆棧,并且切換堆棧以切換任務(wù),從而可以進(jìn)行上下文切換。
文檔編號G06F9/455GK101470622SQ20081019068
公開日2009年7月1日 申請日期2008年12月26日 優(yōu)先權(quán)日2007年12月27日
發(fā)明者由良浩司, 石井正悟 申請人:東芝解決方案株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1