虚拟化程序、模拟装置以及虚拟化方法

文档序号:6469091阅读:175来源:国知局
专利名称:虚拟化程序、模拟装置以及虚拟化方法
技术领域
本发明涉及一种在包括能够进行操作以进行多任务处理的OS (操作系统)的软件的模拟中,利用主CPU的本机代码模拟在目标 OS上生成的多任务的虚拟化程序、模拟装置和虚拟化方法。
背景技术
ISS (Instruction Set Simulation,指令集模拟)和本机代码才莫拟 作为 一般的计算机模拟技术是已知的。
利用ISS,符合目标CPU (作为模拟对象的计算机的CPU)的 架构的二进制代码的任务在执行时被解释并被模拟。利用ISS,任务 的模拟花费很长时间,从而包括OS在内的整个软件无法在现实的时 间段内模拟。另 一方面,利用本机代码模拟,符合主CPU (执行模拟 的计算机的处理器)的架构的二进制代码的任务直接由主CPU执行,
从而不需要对任务进行解释和将其转换成符合目标CPU的架构的二 进制代码,从而能够以高速执行模拟。
当目标OS (在目标CPU上运行的作为模拟对象的OS)是多任 务OS时,目标OS通过操作目标CPU具有的堆栈寄存器或PSR (Program Status Register,程序状态寄存器)等特殊的控制寄存器 来保存和复原任务的上下文,以实现多任务的上下文切换。这些特殊 控制寄存器的操作用汇编语言描述。
在与本发明有关的现有技术中,公开了一种硬件/软件协调验证 方法,该方法能够在不降低定时验证的精度的情况下,实现作为基于 C的本机代码模拟的高速模拟(例如参见专刮文献1:日本专利申请 公开No. 2004-234528 )。而且,公开了如下方法生成要安装在半导 体器件中的、执行硬件/软件的协调验证处理所需的软件验证模型,该方法能够通过使增加预算处理的技术最优化来维持精度水平,并且能
够提高性能(例如参见专利文献2:日本专利申请公开No. 2005-293219)。
但是,所有包括目标OS的软件需要用c语言重写以执行本机代
码模拟。
另外,上述的堆栈寄存器没有在本机代码模拟器中模型化。因此,
目标os不能保存和复原每个任务的上下文,从而当其执行多任务时, 模拟引擎和目标OS需要密切合作以管理该任务。目标OS主要负责 目标OS上的任务的管理。目标OS应当在模拟引擎所提供的虛拟CPU 上运行,并且任务应当在目标OS的管理下执行。当模拟引擎和目标 OS密切合作来管理任务时,本来的分层就会在结构上不匹配,从而 模拟引擎需要针对目标OS的每个类型来设置处理。

发明内容
鉴于上述问题,本发明的目的是提供一种模拟装置、虛拟化程序
以及虚拟化方法,可以使本机代码模拟器能够通过允许目标OS拥有 目标OS上的每个任务的堆栈区域并且使其能够在任务切换的定时进 行操作以进行上下文切换,来执行多任务OS上的任务的本机代码模拟。
在本发明的一个方面中,上述目的通过提供一种使计算机执行处
理的虛拟化程序来实现,该虚拟化程序包括在每次启动在目标OS
或模拟对象上产生的每个任务时,生成堆栈区域、寄存器保存区域和
任务状态存储区域(任务控制块TCB),其中,堆栈区域用于按照 将由每个任务顺序调用的函数的顺序,以LIFO (后进先出)结构存 储函数调用信息(Call Stack),寄存器保存区域逐个任务地存储每 个任务的最后的执行中断时的寄存器内容作为最新寄存器信息,任务 状态存储区域逐个任务地存储表示每个任务的状态的状态信息;在寄 存器保存区域中存储在调用至少紧接由正在执行的任务最后一次调 用的函数之前的函数时的寄存器内容,作为最新寄存器信息,并且在任务状态存储区域中存储表示正在执行的任务的状态的状态信息;以 及根据接着将执行的待机任务的最新寄存器信息和状态信息,从正在 执行的任务切换到待机任务,以进行适于执行多任务处理的目标OS 的本机代码模拟。
优选地,在上述的本发明的虚拟化程序中,上述切换是通过根据 待机任务的最新寄存器信息在主CPU的堆栈寄存器中存储寄存器内 容,来切换在本机代码模拟中的目标OS上正在执行的任务。
优选地,在上述的本发明的虚拟化程序中,上述在寄存器保存区
域中的存储是存储在主CPU的预定寄存器中存储的值,作为正在执
行的任务的最新寄存器信息。
优选地,在上述的本发明的虚拟化程序中,上述切换是通过在主
CPU的预定寄存器中存储待机任务的最新寄存器信息来切换正在执
行的任务。
在本发明的另一个方面中,提供一种虛拟化装置,包括上下文 生成部分,在每次启动在目标OS或模拟对象上产生的每个任务时, 生成堆栈区域、寄存器保存区域和任务状态存储区域(任务控制块 TCB),其中堆栈区域用于按照将由每个任务顺序调用的函数的顺序, 以LIFO (后进先出)结构存储函数调用信息(Call Stack),寄存器 保存区域逐个任务地存储每个任务的最后的执行中断时的寄存器内 容作为最新寄存器信息,任务状态存储区域逐个任务地存储表示每个 任务的状态的状态信息;上下文存储部分,在寄存器保存区域中存储 在调用至少紧接由正在执行的任务最后一次调用的函数之前的函数 时的寄存器内容,作为最新寄存器信息,并且在任务状态存储区域中 存储表示正在执行的任务的状态的状态信息;以及任务切换部分,根 据接着将执行的待机任务的最新寄存器信息和状态信息,从正在执行 的任务切换到待机任务,以进行适于执行多任务处理的目标OS的本 机代码模拟。
优选地,在上述的本发明的模拟装置中,任务切换部分通过根据 待机任务的最新寄存器信息在主CPU的堆栈寄存器中存储寄存器内
7容,来切换在本机代码模拟中的目标OS上正在执行的任务。
优选地,在上述的本发明的模拟装置中,上下文存储部分在寄存
器保存区域中存储在主CPU的预定寄存器中存储的值,作为正在执
行的任务的最新寄存器信息。
优选地,在上述的本发明的模拟装置中,任务切换部分通过在主
CPU的预定寄存器中存储待机任务的最新寄存器信息来切换正在执
行的任务。
在本发明的又一个方面中,提供一种虛拟化方法,包括在每次 启动在目标OS或模拟对象上产生的每个任务时,生成堆栈区域、寄 存器保存区域和任务状态存储区域(任务控制块TCB),其中,堆 栈区域用于按照将由每个任务顺序调用的函数的顺序,以LIFO(后 进先出)结构存储函数调用信息(Call Stack),寄存器保存区域逐 个任务地存储每个任务的最后的执行中断时的寄存器内容,作为最新 寄存器信息,任务状态存储区域逐个任务地存储表示每个任务的状态 的状态信息;在寄存器保存区域中存储在调用至少紧接由正在执行的 任务最后一次调用的函数之前的函数时的寄存器内容,作为最新寄存 器信息,并且在任务状态存储区域中存储表示正在执行的任务的状态 的状态信息;以及根据接着将执行的待机任务的最新寄存器信息和状 态信息,从正在执行的任务切换到待机任务,以进行适于执行多任务 处理的目标OS的本机代码模拟。
优选地,在上述的本发明的虛拟化方法中,上述切换是通过根据 待机任务的最新寄存器信息在主CPU的堆栈寄存器中存储寄存器内 容,来切换在本机代码模拟中的目标OS上正在执行的任务。
优选地,在上述的本发明的虚拟化方法中,上述在寄存器保存区 域中的存储是存储在主CPU的预定寄存器中存储的值,作为正在执
行的任务的最新寄存器信息。
优选地,在上述的本发明的虛拟化方法中,上述切换是通过在主 CPU的预定寄存器中存储待机任务的最新寄存器信息来切换正在执 行的任务。这样,根据本发明,对于适于执行多任务处理的os,可以切换
多个任务来高速地执行模拟。


图1是本发明的模拟装置的实施方式的示意性框图,示出其结构。
图2是本实施方式的模拟装置的示例性处理的流程图。
图3是本实施方式的上下文生成处理中的任务的函数结构以及 堆栈区域结构的示意图。
图4是本实施方式的上下文保存处理中的任务的函数结构以及 堆栈区域结构的示意图。
图5是本实施方式的上下文复原处理的任务的函数结构以及堆 栈区域结构的示意图。
具体实施例方式
以下参照示出装置结构的图1来说明本发明的模拟装置的实施方式。
模拟装置100具有主CPU 10 (中央处理单元)、主OS 11 (操 作系统)、模拟引擎l、虚拟CPU12、目标OS13、任务14A、另一 任务14B (这些任务中的两者或任一者将被总称为任务14) 、 HW模 型20 (硬件)。
主CPU 10是按照模拟装置100的预定架构作为硬件安装的处理 单元,主OS11是在主CPU10的架构上运行的OS。
模拟引擎1是为虛拟CPU 12和HW模型20提供激励环境的虛 拟程序,执行软件和硬件的模拟,调整调度每个模型的定时。
虚拟CPU 12在主OS 11上^f莫拟目标CPU的操作。在本实施方 式中假定虛拟CPU 12执行任务的执行模式始终是同一特权模式。虽 然堆栈寄存器在本机代码模拟器中没有模型化,但虚拟CPU 12的堆 栈寄存器映射主CPU 10的堆栈寄存器。换言之,当目标OS 12读/写堆栈寄存器时,主CPU10的堆栈寄存器被读/写。
目标OS 13是能够执行将在虚拟CPU 12上执行的多任务处理的 OS。假定本实施方式的目标OS13不是多重虛拟存储OS,而是整体 式空间OS。
任务14是用于在目标OS 13上执行预定处理的用户程序。任务 14是利用符合主CPU10的架构的本机代码生成(编译)的程序。
HW模型20典型地是用于将CCD相机、扫描仪等预定的外围 设备的操作模型化的软件。
本实施方式的才莫拟装置100祐z没计成验证虚拟CPU 12、目标OS 13、任务14和HW模型20的上述配置的硬件/软件环境的操作。注 意,在需要时可以将整个模型化环境称为验证对象。
模拟引擎l具有用于任务的上下文的生成、保存(保存)、复原 和擦除处理的API。其功能在每个API被目标OS13调用时实现。当 移植目标OS 13时,通过部分地改变代码以调用模拟引擎1的API, 来向每个任务分配固有的堆栈区域。当切换任务时,随着堆栈区域被 切换,上下文可以被切换。由于本机代码直接针对任务14执行,因 此通过使堆栈区域的内部结构与主OS 11在主CPU 10上使用的堆栈 区域相同,模拟引擎1具有其支持的每个主CPU 10和主OS 11的上 下文操作API的处理。
另外,模拟引擎1具有上下文生成部分2、上下文保存部分3(上 下文存储部分)和上下文复原部分4 (任务切换部分),从而可以并 行地执行任务14A和任务14B。在对上下文生成部分2、上下文保存 部分3和上下文复原部分4的下述说明中,假定任务14A正在执行, 并且任务14B将接着执行(作为待机任务),从而将正在执行的任务 从任务14A切换到任务14B。
上下文生成部分2生成堆栈区域和寄存器保存区域,堆栈区域用 于按照将由任务14A和任务14B中的每一个顺序调用的函数的顺序, 以LIFO (后进先出)结构存储函数调用信息(Call Stack),寄存器 保存区域用于存储任务14的最新寄存器信息。还生成任务状态存储区域(任务控制块TCB),用于逐个任务地存储表示每个任务14 的状态的状态信息。如本实施方式的情况,TCB可以在其内部具有寄 存器保存区域。在该情况下,寄存器保存区域和任务状态信息区域都 存在于TCB中。
上下文保存部分3将正在执行的任务14A调用了由正在执行的 任务最后一次调用的函数时的寄存器内容作为最新寄存器信息存储 在任务14A的TCB中。并且还在任务14A的TCB中存储表示正在 执行的任务14A的状态的任务状态信息。上下文保存部分3针对任务 14B执4亍同样的处理。
上下文复原部分4根据待机任务14B的最新寄存器信息和任务 状态信息,从正在执行的任务14A切换到接着将执行的待机任务14B。 上下文复原部分4执行从任务14B切换到任务14A的同样处理。
当上下文保存部分3的处理和上下文复原部分4的处理在预定定 时(例如在目标OS 13的中断例程调度器(IRS)产生中断时,或者 根据响应于用户的系统调用而发出的中断指示)执行时,任务切换在 适于执行多任务处理的目标OS 13上实现。
以下参照图2的流程图说明本实施方式的模拟装置100的处理。 注意,在以下说明中,任务14A生成任务14B,并且将任务14A切换 到任务14B。
当从任务14A针对任务14B发出了任务生成请求时,上下文生 成部分2生成对应于任务14B的TCB和堆栈区域。还生成其生成的 堆栈区域的根帧(存储有开始任务的执行所需的信息的管理区域)(步 骤S1)。
以下参照图3说明任务14A的函数结构、任务14A和任务14B 的堆栈区域、以及TCB。
生成上下文时的任务14A的函数调用如图3所示的"任务14A的 函数结构(上下文生成),,所示,是CRE-TASK()的调用,CRE-TASK ()是用于从函数func—a ()生成由目标OS准备的任务的API,其 中func a ()是用户程序,而main ()是主函数。该结构还包括是在CRE一TASK ()中由模拟引擎1准备的函数、并且具有上下文生 成部分2的功能特征的context_create ()。
在作为目标OS的任务生成功能特征的CRE—TASK ()被调用 时生成的堆栈区域中,如图3的"堆栈区域、TCB的关系,,所示,函数 调用信息以LIFO堆栈结构被存储。对于上述的任务14A,堆栈区域 的根帧在任务开始时生成,并且main()帧、func—a()帧、CRE—TASK ()帧、context—create ()帧(帧用于存储函数调用信息的单元) 按照在执行任务14A的处理进行时被顺序调用的函数的顺序被堆叠 在堆栈区域中。
任务14B由作为任务生成功能的CRE—TASK ()生成,必要的 设定由上下文生成部分2的context—create ()提供。以下说明 CRE_TASK ()的处理和在其内部调用的context—create ()的处理。
当任务14B被启动时,CRE—TASK ()作出TCB (以下将对应 于任务14A的TCB标记为TCB ( A),将对应于任务14B的TCB 标记为TCB (B)),并且定义与该任务相关的信息的初始值(寄存 器的初始值、任务状态信息的初始值)。另外,CREJTASK()分配 用于配置将作为被启动的任务执行的程序的地址空间(包括堆栈区 域)。由于目标OS 13是整体式空间OS,因此,本实施方式的 CRE一TASK ()将真实存储器的地址空间切分并将其作为堆栈区域分 配。另一方面,当目标OS是虛拟存储OS时,CRE—TASK()作出 页表等虛拟空间控制信息。
而context_create ()在根帧中在适当的位置设定在启动被启动 的任务的执行时所需的信息(例如,任务的环境变量、主函数的开始 地址等)。另外,将作出的TCB登记在目标OS 13管理的TCB队列 (例如任务就绪队列)中。
这样,由实现任务生成功能特征等的CRE一TASK ()和在其内 部调用的context—create ()作出存储任务14B的上下文的区域。所 作出的堆栈区域可以通过分割主OS 11分配给作为验证对象的线程的 堆栈区域,或者通过使用由存储器分配函数(maUoc函数)等主OS 11的存储区域分配服务获得的区域来作出。
当上下文生成处理结束时,context一create()结束(context_create ()调用帧从堆栈区域释放)并且CRE—TASK ()结束(CRE_TASK ()调用帧从堆栈区域释放)。
在上述说明中,由任务14A针对任务14B进行任务生成请求, 并且任务14A动态生成任务14B,但也可以配置成目标OS 13根据 OS结构信息静态地生成任务14B。
现在返回图2的流程图。以下说明在任务14B生成后并行地执 行任务14A和任务14B的任务切换处理。
上下文保存部分3在TCB中存储主CPU IO的堆栈中存储的、 当前帧的一帧之前的帧,作为当前帧指针。另外,上下文保存部分3 在TCB中存储作为虚拟CPU的控制寄存器的PSR(存储表示任务状 态的值的寄存器)中存储的值(步骤S2)。
以下参照图4针对任务14A说明上下文保存部分3执行的处理。
假定在TCB中保存上下文时由任务14A调用的函数具有图4A 所示的"任务14A的函数结构(上下文保存)"。更具体地,main () 是主函数,具有作为用户程序的函数的func一b (),而由目标OS13 提供的系统调用是从func—b()内部进行的(syscall()函数被调用)。 另外,在系统调用中,为了任务切换的目的而调用任务切换函数 (Task_switch ()),并且作为上下文保存部分3的功能特征的 context_save ()作为Task_switch ()的内部函数-皮调用。
在上述状况下,虛拟CPU 12当前正在执行context—save ()并 且虛拟CPU 12的堆栈寄存器存储context_save ()帧的地址(在图4 中标记为印)。现在,context_save ()在TCB (A)中存储其自身 的context—save ()的帧之前的函数的帧的地址。
而且,context一save ()在任务14A的寄存器保存区域中保存当 前存储在虛拟CPU 12的控制寄存器中的寄存器信息,从而存储在 TCB ( A)中。
当上述处理被执行并且context save ()结束时,context_save()的帧也被释放。
这样,作为上下文保存部分3的功能特征的context_save ()在 TCB (A)中存储调用了 context_save ()的函数的函数调用信息的 地址作为当前帧指针,并且在TCB(A)中存储当前存储在虛拟CPU 12的控制寄存器中的寄存器信息。这样,当某个时间之后任务14A 被切换到任务14B,接着任务14B被重新切换到任务14A时,任务 14A可以在切换之前的状态下继续执行处理。
现在再次返回到图2的流程图,说明在TCB (A)中保存了任务 14A的上下文之后的处理。
上下文复原部分4在任务14B (接着将执行的待机任务)的堆栈 区域中复制正在执行的任务14A的堆栈区域中存储的函数调用信息 中的、当前正在执行的函数的调用帧(当前帧)。上下文复原部分4 在虚拟CPU 12的控制寄存器中存储TCB ( B )中存储的寄存器信息, 并且在虛拟CPU 12的堆栈寄存器中存储通过将TCB ( B )中存储的 地址增加一帧而更新的地址,作为当前帧指针(步骤S3)。
以下参照图5说明上下文复原部分4执行的处理。
图5示出正在执行当前任务14A、上下文保存部分3的上述处理 (context—save ())已经结束、作为上下文复原部分4的功能特征 的context—restore ( ) -波调用的状态。
首先,当context—restore ()在任务14A中被Task—switch () 调用时,context一restore ()在任务14B的堆栈区域上复制其自身的 context—restore ()函数的调用帧(一帧)。接着,context—restore ()通过将存储在TCB (B)中的地址增加所复制的其自身的 context_restore ()函数的调用帧的大小,来进行更新。换言之, context_restore ()将TCB (B)的堆栈帧指针从Task—switch ()函 数的调用帧的地址更新为context一restore ()函数的调用帧的地址。
此后,context—restore ()在虚拟CPU 12的堆栈寄存器中存储 更新后的指针的内容,并且在虚拟CPU 12的控制寄存器中存储寄存 器保存区域中存储的寄存器信息(注意,寄存器信息未在图5中示出)。结果,虚拟CPU12在没有意识到任务被切换的情况下,简单地 执行对存储在其自身的堆栈寄存器中的地址的处理(即在任务14B的 堆栈区域中堆叠的context_restore ())。
此后,当一系列的切,换处理完成时,contextjrestore ()的处理 结束(从而context一restore ()帧4皮释访文),4壬务14B的Task—switch ()的处理也结束(从而Task_switch ()帧被释放)。另外,当任 务14B的系统调用(syscall ())结束(从而syscall ()帧被释放) 时,任务14B继续执行其被置入待机状态之前的处理(作为图5中的 用户函数的func—d ())。
在目标OS 13的中断调度器产生中断时、或者在产生系统调用 (syscall())时,随着上述的context一save()的处理或context—restore ()的处理从Tasl^switch ()被调用,任务14A或任务14B被切换 到另一个。
当任务14B进入正在执行的状态并且接着任务14B被切换到任 务14A时,在任务14B的执行处理过程中调用context_save (),并 且执行保存虚拟CPU 12的当前控制寄存器以及堆栈指针(通过增加 一帧而更新)的处理。接着,当context_restore ()为了任务14B的 处理而被调用时,context—restore ()在任务14A中复制其自身的 context_restore ()函数的调用帧,并且通过将存储在TCB (A)中 的堆栈帧指针增加一帧(context_restore ()函数的调用帧的大小) 来进行更新,从而将更新后的堆栈帧指针的内容存储在堆栈寄存器 中,并且在控制寄存器中存储TCB (A)中存储的状态信息。这样, 任务14A能够继续其自身的context_restore ()处理。
现在,再次返回到图2的流程图。以下针对任务14A说明任务 的结束。当任务14A中的函数逐个地结束(堆栈区域的帧被逐个地释 放)并且最后的main ()结束时,与根帧一起针对任务14A分配的 堆栈区域被释放以结束任务14A (步骤S4 )。
在上述实施方式的说明中,生成两个任务的上下文并且将两个任 务从一个切换到另一个,但根据本发明,可以生成更多个任务并从一个切换到另一个。
在上述实施方式中,上下文保存部分3在TCB中作为存储地址 信息来存储被存储在堆栈区域中、并且通过减去最后执行的函数的一 帧而更新的地址,并且上下文复原部分4在虛拟CPU 12的堆栈寄存 器中存储通过对存储地址信息加上所复制的 一帧而更新的地址,但 是,可能等于0的加或减的帧数可以取决于任务切换发生的程序位置 而变化。在上述实施方式的说明中,假定任务切换在Task_switch () 函数中发生。
在上述实施方式的说明中,虚拟CPU 12总是在同一特权才莫式下 执行任务,但只有中断调度器可以在另一特权模式下处理。这种情况 下,可以在启动目标OS13时生成用于中断处理的堆栈区域,并且在 中断调度器调度中断处理程序时可以进行向用于中断处理的堆栈的 切换。
在上述实施方式的说明中,目标OS13用于单一空间(整体式空 间OS),但在多重虚拟存储OS的情况下,不能同时参考和操作多个 任务的任务固有空间。换言之,与上述实施方式不同,不能通过直接 复制在多重虚拟存储器中实现堆栈帧复制操作。这种情况下,利用源 任务的上下文将堆栈帧一次复制到目标OS 13的系统区域等任务所共 用的区域,并且切换任务的上下文以将堆栈帧复制到目的地任务的堆 栈。这样,可以实现与上述实施方式同等的上下文切换。换言之,本 发明可适用于多重虛拟存储OS。
在上述实施方式的说明中,虛拟CPU 12始终在同一特权模式下 执行任务,但为了系统保护的目的,存在多个为任务的执行而提供的 不同模式,例如用户模式、特权模式和例外模式, 一般通过提供用于 库切换等切换的机构来切换当前执行模式。
当切换当前执行模式时,将切换前的执行模式的堆栈区域的当前 帧指针存储在切换后的执行模式的堆栈区域的帧中。然后,作为结果, 可以在从当前执行模式返回到前一执行模式时复原切换执行模式时 的当前帧指针。从本实施方式的模拟引擎l的角度看,虚拟CPU12、目标OS 13 和任务14是一个执行单元,从而从任务14A切换到任务14B的定时 和任务切换条件仅由目标OS 13决定,并且对^t拟引擎1是透明的。 因此,如果目标OS的任务切换算法改变,则虚拟引擎l不需要改变。
在上述说明中,预先在本实施方式的模拟装置内部安装了虚拟化 程序,但可以将本发明的虚拟化程序安装在存储介质中。可以用于本 发明的存储介质包括能够存储虚拟化程序的所有介质,从而相对于模 拟装置的计算机是可读的。这样的介质包括能够可拆卸地连接到模拟 装置的介质,例如磁带、磁盘(软盘、硬盘驱动器等)、光盘(CD-ROM、 DVD等)、磁光盘(MD等)、闪存等,以及能够接收通过网络传送 的虚拟化程序的介质。
权利要求
1. 一种使计算机执行处理的虚拟化程序,包括在每次启动在目标OS或模拟对象上产生的每个任务时,生成堆栈区域、寄存器保存区域和任务状态存储区域(任务控制块TCB),其中,堆栈区域用于按照将由每个任务顺序调用的函数的顺序,以LIFO(后进先出)结构存储函数调用信息,寄存器保存区域逐个任务地存储每个任务的最后的执行中断时的寄存器内容作为最新寄存器信息,任务状态存储区域逐个任务地存储表示每个任务的状态的状态信息;在寄存器保存区域中存储在调用至少紧接由正在执行的任务最后一次调用的函数之前的函数时的寄存器内容,作为最新寄存器信息,并且在任务状态存储区域中存储表示正在执行的任务的状态的状态信息;以及根据接着将执行的待机任务的最新寄存器信息和状态信息,从正在执行的任务切换到待机任务,以进行适于执行多任务处理的目标OS的本机代码模拟。
2. 如权利要求1所述的虛拟化程序,其中, 上述切换是通过根据待机任务的最新寄存器信息在主CPU的堆栈寄存器中存储寄存器内容,来切换在本机代码模拟中的目标OS上 正在执行的任务。
3. 如权利要求l所述的虛拟化程序,其中, 上述在寄存器保存区域中的存储是存储在主CPU的预定寄存器中存储的值,作为正在执行的任务的最新寄存器信息。
4. 如权利要求3所述的虛拟化程序,其中, 上述切换是通过在主CPU的预定寄存器中存储待机任务的最新寄存器信息来切换正在执行的任务。
5. —种虚拟化装置,包括上下文生成部分,在每次启动在目标OS或模拟对象上产生的每个任务时,生成堆栈区域、寄存器保存区域和任务状态存储区域(任务控制块TCB),其中堆栈区域用于按照将由每个任务顺序调用的 函数的顺序,以LIFO (后进先出)结构存储函数调用信息,寄存器 保存区域逐个任务地存储每个任务的最后的执行中断时的寄存器内 容作为最新寄存器信息,任务状态存储区域存储逐个任务地表示每个 任务的状态的状态信息;上下文存储部分,在寄存器保存区域中存储在调用至少紧接由正 在执行的任务最后一次调用的函数之前的函数时的寄存器内容,作为 最新寄存器信息,并且在任务状态存储区域中存储表示正在执行的任 务的状态的状态信息;以及任务切换部分,根据接着将执行的待机任务的最新寄存器信息和 状态信息,从正在执行的任务切换到待机任务,以进行适于执行多任 务处理的目标OS的本机代码模拟。
6. 如权利要求5所述的装置,其中,任务切换部分通过根据待机任务的最新寄存器信息在主CPU的 堆栈寄存器中存储寄存器内容,来切换在本机代码模拟中的目标OS 上正在执行的任务。
7. 如权利要求5所述的装置,其中,上下文存储部分在寄存器保存区域中存储在主CPU的预定寄存 器中存储的值,作为正在执行的任务的最新寄存器信息。
8,如权利要求7所述的装置,其中,任务切换部分通过在主CPU的预定寄存器中存储待机任务的最 新寄存器信息来切换正在执行的任务。
9. 一种虛拟化方法,包括在每次启动在目标OS或模拟对象上产生的每个任务时,生成堆 栈区域、寄存器保存区域和任务状态存储区域(任务控制块TCB), 其中,堆栈区域用于按照将由每个任务顺序调用的函数的顺序,以 LIFO (后进先出)结构存储函数调用信息,寄存器保存区域逐个任 务地存储每个任务的最后的执行中断时的寄存器内容作为最新寄存器信息,任务状态存储区域逐个任务地存储表示每个任务的状态的状态信息;在寄存器保存区域中存储在调用至少紧接由正在执行的任务最 后一次调用的函数之前的函数时的寄存器内容,作为最新寄存器信 息,并且在任务状态存储区域中存储表示正在执行的任务的状态的状 态信息;以及根据接着将执行的待机任务的最新寄存器信息和状态信息,从正 在执行的任务切换到待机任务,以进行适于执行多任务处理的目标 OS的本机代码模拟。
10. 如权利要求9所述的方法,其中,上述切换是通过根据待机任务的最新寄存器信息在主CPU的堆 栈寄存器中存储寄存器内容,来切换在本机代码模拟中的目标OS上正在执行的任务。
11. 如权利要求9所述的方法,其中,上述在寄存器保存区域中的存储是存储在主CPU的预定寄存器 中存储的值,作为正在执行的任务的最新寄存器信息。
12. 如权利要求11所述的方法,其中,上述切换是通过在主CPU的预定寄存器中存储待机任务的最新 寄存器信息来切换正在执行的任务。
全文摘要
本发明提供一种虚拟化程序、模拟装置以及虚拟化方法,可以高速地执行模拟,允许本机代码模拟器具有由多任务OS管理的每个任务固有的堆栈。由本机代码模拟器提供的API执行由目标CPU通过特殊控制寄存器操作执行的上下文的生成、保存、复原和擦除处理。当移植多任务OS时,源代码被改变以调用API。在API中分配任务固有的堆栈,并且切换堆栈以切换任务,从而可以进行上下文切换。
文档编号G06F9/455GK101470622SQ20081019068
公开日2009年7月1日 申请日期2008年12月26日 优先权日2007年12月27日
发明者由良浩司, 石井正悟 申请人:东芝解决方案株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1