CN101470622B - 模拟装置以及虚拟化方法 - Google Patents
模拟装置以及虚拟化方法 Download PDFInfo
- Publication number
- CN101470622B CN101470622B CN2008101906836A CN200810190683A CN101470622B CN 101470622 B CN101470622 B CN 101470622B CN 2008101906836 A CN2008101906836 A CN 2008101906836A CN 200810190683 A CN200810190683 A CN 200810190683A CN 101470622 B CN101470622 B CN 101470622B
- Authority
- CN
- China
- Prior art keywords
- task
- register
- carrying
- information
- context
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45537—Provision of facilities of other operating environments, e.g. WINE
Abstract
本发明提供一种虚拟化程序、模拟装置以及虚拟化方法,可以高速地执行模拟,允许本机代码模拟器具有由多任务OS管理的每个任务固有的堆栈。由本机代码模拟器提供的API执行由目标CPU通过特殊控制寄存器操作执行的上下文的生成、保存、复原和擦除处理。当移植多任务OS时,源代码被改变以调用API。在API中分配任务固有的堆栈,并且切换堆栈以切换任务,从而可以进行上下文切换。
Description
技术领域
本发明涉及一种在包括能够进行操作以进行多任务处理的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的堆栈寄存器中存储寄存器内 容,来切换在本机代码模拟中的目标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(操作系统)、模拟引擎1、虚拟CPU 12、目标OS 13、任务14A、另一任务14B(这些任务中的两者或任一者将被总称为任务14)、HW模型20(硬件)。
主CPU 10是按照模拟装置100的预定架构作为硬件安装的处理单元,主OS 11是在主CPU 10的架构上运行的OS。
模拟引擎1是为虚拟CPU 12和HW模型20提供激励环境的虚拟程序,执行软件和硬件的模拟,调整调度每个模型的定时。
虚拟CPU 12在主OS 11上模拟目标CPU的操作。在本实施方式中假定虚拟CPU 12执行任务的执行模式始终是同一特权模式。虽然堆栈寄存器在本机代码模拟器中没有模型化,但虚拟CPU 12的堆栈寄存器映射主CPU 10的堆栈寄存器。换言之,当目标OS 12读/ 写堆栈寄存器时,主CPU 10的堆栈寄存器被读/写。
目标OS 13是能够执行将在虚拟CPU 12上执行的多任务处理的OS。假定本实施方式的目标OS 13不是多重虚拟存储OS,而是整体式空间OS。
任务14是用于在目标OS 13上执行预定处理的用户程序。任务14是利用符合主CPU 10的架构的本机代码生成(编译)的程序。
HW模型20典型地是用于将CCD相机、扫描仪等预定的外围设备的操作模型化的软件。
本实施方式的模拟装置100被设计成验证虚拟CPU 12、目标OS
13、任务14和HW模型20的上述配置的硬件/软件环境的操作。注意,在需要时可以将整个模型化环境称为验证对象。
模拟引擎1具有用于任务的上下文的生成、保存(保存)、复原和擦除处理的API。其功能在每个API被目标OS 13调用时实现。当移植目标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根据待机任务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()是用于从函数fune_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)),并且定义与该任务相关的信息的初始值(寄存器的初始值、任务状态信息的初始值)。另外,CRE_TASK()分配用于配置将作为被启动的任务执行的程序的地址空间(包括堆栈区域)。由于目标OS 13是整体式空间OS,因此,本实施方式的CRE_TASK()将真实存储器的地址空间切分并将其作为堆栈区域分配。另一方面,当目标OS是虚拟存储OS时,CRE_TASK()作出页表等虚拟空间控制信息。
而context_create()在根帧中在适当的位置设定在启动被启动的任务的执行时所需的信息(例如,任务的环境变量、主函数的开始地址等)。另外,将作出的TCB登记在目标OS 13管理的TCB队列(例如任务就绪队列)中。
这样,由实现任务生成功能特征等的CRE_TASK()和在其内部调用的context_create()作出存储任务14B的上下文的区域。所作出的堆栈区域可以通过分割主OS 11分配给作为验证对象的线程的堆栈区域,或者通过使用由存储器分配函数(malloc函数)等主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 10的堆栈中存储的、当前帧的一帧之前的帧,作为当前帧指针。另外,上下文保存部分3在TCB中存储作为虚拟CPU的控制寄存器的PSR(存储表示任务状态的值的寄存器)中存储的值(步骤S2)。
以下参照图4针对任务14A说明上下文保存部分3执行的处理。
假定在TCB中保存上下文时由任务14A调用的函数具有图4A所示的“任务14A的函数结构(上下文保存)”。更具体地,main()是主函数,具有作为用户程序的函数的func_b(),而由目标OS 13提供的系统调用是从func_b()内部进行的(syscall()函数被调用)。另外,在系统调用中,为了任务切换的目的而调用任务切换函数(Task_switch()),并且作为上下文保存部分3的功能特征的context_save()作为Task_switch()的内部函数被调用。
在上述状况下,虚拟CPU 12当前正在执行context_save()并且虚拟CPU 12的堆栈寄存器存储context_save()帧的地址(在图4中标记为fp)。现在,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)中存储当前存储在虚拟CPU12的控制寄存器中的寄存器信息。这样,当某个时间之后任务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中示出)。
结果,虚拟CPU 12在没有意识到任务被切换的情况下,简单地执行对存储在其自身的堆栈寄存器中的地址的处理(即在任务14B的堆栈区域中堆叠的context_restore())。
此后,当一系列的切换处理完成时,context_restore()的处理结束(从而context_restore()帧被释放),任务14B的Task_switch()的处理也结束(从而Task_switch()帧被释放)。另外,当任务14B的系统调用(syscall())结束(从而syscall()帧被释放)时,任务14B继续执行其被置入待机状态之前的处理(作为图5中的用户函数的func d())。
在目标OS 13的中断调度器产生中断时、或者在产生系统调用(syscall())时,随着上述的context_save()的处理或context_restore()的处理从Task_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总是在同一特权模式下执行任务,但只有中断调度器可以在另一特权模式下处理。这种情况下,可以在启动目标OS 13时生成用于中断处理的堆栈区域,并且在中断调度器调度中断处理程序时可以进行向用于中断处理的堆栈的切换。
在上述实施方式的说明中,目标OS 13用于单一空间(整体式空间OS),但在多重虚拟存储OS的情况下,不能同时参考和操作多个任务的任务固有空间。换言之,与上述实施方式不同,不能通过直接复制在多重虚拟存储器中实现堆栈帧复制操作。这种情况下,利用源任务的上下文将堆栈帧一次复制到目标OS 13的系统区域等任务所共用的区域,并且切换任务的上下文以将堆栈帧复制到目的地任务的堆栈。这样,可以实现与上述实施方式同等的上下文切换。换言之,本发明可适用于多重虚拟存储OS。
在上述实施方式的说明中,虚拟CPU 12始终在同一特权模式下执行任务,但为了系统保护的目的,存在多个为任务的执行而提供的不同模式,例如用户模式、特权模式和例外模式,一般通过提供用于库切换等切换的机构来切换当前执行模式。
当切换当前执行模式时,将切换前的执行模式的堆栈区域的当前帧指针存储在切换后的执行模式的堆栈区域的帧中。然后,作为结果,可以在从当前执行模式返回到前一执行模式时复原切换执行模式时的当前帧指针。
从本实施方式的模拟引擎1的角度看,虚拟CPU 12、目标OS 13和任务14是一个执行单元,从而从任务14A切换到任务14B的定时和任务切换条件仅由目标OS 13决定,并且对模拟引擎1是透明的。因此,如果目标OS的任务切换算法改变,则虚拟引擎1不需要改变。
在上述说明中,预先在本实施方式的模拟装置内部安装了虚拟化程序,但可以将本发明的虚拟化程序安装在存储介质中。可以用于本发明的存储介质包括能够存储虚拟化程序的所有介质,从而相对于模拟装置的计算机是可读的。这样的介质包括能够可拆卸地连接到模拟装置的介质,例如磁带、磁盘(软盘、硬盘驱动器等)、光盘(CD-ROM、DVD等)、磁光盘(MD等)、闪存等,以及能够接收通过网络传送的虚拟化程序的介质。
Claims (8)
1.一种模拟装置,包括:
上下文生成部分,在每次启动在目标OS或模拟对象上产生的每个任务时,生成对应于每个任务的任务控制块TCB和堆栈区域,其中,所述TCB包括寄存器保存区域和任务状态存储区域,堆栈区域用于按照将由每个任务顺序调用的函数的顺序,以后进先出结构存储函数调用信息,寄存器保存区域存储每个任务的最后的执行中断时的寄存器内容作为最新寄存器信息,任务状态存储区域存储表示每个任务的状态的状态信息;
上下文存储部分,当从正在执行的任务切换到将执行的待机任务时,在正在执行的任务的寄存器保存区域中存储在调用至少紧接由正在执行的任务最后一次调用的函数之前的函数时的寄存器内容,作为最新寄存器信息,并且在正在执行的任务的任务状态存储区域中存储表示正在执行的任务的状态的状态信息;以及
任务切换部分,根据存储在接着将执行的待机任务的寄存器保存区域中的最新寄存器信息和存储在接着将执行的待机任务的任务状态存储区域中的状态信息,从正在执行的任务切换到待机任务,以进行适于执行多任务处理的目标OS的本机代码模拟。
2.如权利要求1所述的装置,其中,
任务切换部分通过根据待机任务的最新寄存器信息在主CPU的堆栈寄存器中存储寄存器内容,来切换在本机代码模拟中的目标OS上正在执行的任务。
3.如权利要求1所述的装置,其中,
上下文存储部分在寄存器保存区域中存储在主CPU的预定寄存器中存储的值,作为正在执行的任务的最新寄存器信息。
4.如权利要求3所述的装置,其中,
任务切换部分通过在主CPU的预定寄存器中存储待机任务的最新寄存器信息来切换正在执行的任务。
5.一种虚拟化方法,包括:
在每次启动在目标OS或模拟对象上产生的每个任务时,生成对应于每个任务的任务控制块TCB和堆栈区域,其中,所述TCB包括寄存器保存区域和任务状态存储区域,堆栈区域用于按照将由每个任务顺序调用的函数的顺序,以后进先出结构存储函数调用信息,寄存器保存区域存储每个任务的最后的执行中断时的寄存器内容作为最新寄存器信息,任务状态存储区域存储表示每个任务的状态的状态信息;
当从正在执行的任务切换到将执行的待机任务时,在正在执行的任务的寄存器保存区域中存储在调用至少紧接由正在执行的任务最后一次调用的函数之前的函数时的寄存器内容,作为最新寄存器信息,并且在正在执行的任务的任务状态存储区域中存储表示正在执行的任务的状态的状态信息;以及
根据存储在接着将执行的待机任务的寄存器保存区域中的最新寄存器信息和存储在接着将执行的待机任务的任务状态存储区域中的状态信息,从正在执行的任务切换到待机任务,以进行适于执行多任务处理的目标OS的本机代码模拟。
6.如权利要求5所述的方法,其中,
上述切换是通过根据待机任务的最新寄存器信息在主CPU的堆栈寄存器中存储寄存器内容,来切换在本机代码模拟中的目标OS上正在执行的任务。
7.如权利要求5所述的方法,其中,
上述在寄存器保存区域中的存储是存储在主CPU的预定寄存器中存储的值,作为正在执行的任务的最新寄存器信息。
8.如权利要求7所述的方法,其中,
上述切换是通过在主CPU的预定寄存器中存储待机任务的最新寄存器信息来切换正在执行的任务。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007335724A JP4873423B2 (ja) | 2007-12-27 | 2007-12-27 | 仮想化プログラム、シミュレーション装置、仮想化方法 |
JP2007-335724 | 2007-12-27 | ||
JP2007335724 | 2007-12-27 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101470622A CN101470622A (zh) | 2009-07-01 |
CN101470622B true CN101470622B (zh) | 2012-08-29 |
Family
ID=40799540
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101906836A Expired - Fee Related CN101470622B (zh) | 2007-12-27 | 2008-12-26 | 模拟装置以及虚拟化方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US8290764B2 (zh) |
JP (1) | JP4873423B2 (zh) |
CN (1) | CN101470622B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101799767B (zh) * | 2010-03-05 | 2013-03-06 | 中国人民解放军国防科学技术大学 | 一种利用模拟器多种运行模式反复切换进行并行模拟的方法 |
JP5450271B2 (ja) | 2010-06-10 | 2014-03-26 | 株式会社東芝 | シミュレーション装置、シミュレーションプログラム及び方法 |
CN102156632A (zh) * | 2011-04-06 | 2011-08-17 | 北京北大众志微系统科技有限责任公司 | 数据访问方法和装置 |
CN102521042A (zh) * | 2011-12-16 | 2012-06-27 | 中船重工(武汉)凌久电子有限责任公司 | 基于哈佛结构dsp的快速正文切换方法 |
US11003464B2 (en) * | 2012-04-19 | 2021-05-11 | Microsoft Technology Licensing, Llc | Control flow integrity enforcement at scale |
CN107810475B (zh) * | 2015-06-30 | 2021-09-10 | 威睿公司 | 用于虚拟计算环境的软件生命周期管理的方法和装置 |
JP6493190B2 (ja) * | 2015-12-10 | 2019-04-03 | 株式会社デンソー | 情報処理装置 |
MA44821A (fr) * | 2016-02-27 | 2019-01-02 | Kinzinger Automation Gmbh | Procédé d'allocation d'une pile de registres virtuels dans une machine à pile |
CN107729050B (zh) * | 2017-09-22 | 2021-01-22 | 中国科学技术大学苏州研究院 | 基于let编程模型的实时系统及任务构建方法 |
CN113127100B (zh) * | 2021-05-14 | 2022-07-12 | 武汉深之度科技有限公司 | 一种异构程序执行方法、装置、计算设备及可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101042660A (zh) * | 2006-03-23 | 2007-09-26 | 松下电器产业株式会社 | 多任务系统中的任务执行环境切换方法 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63127330A (ja) * | 1986-11-17 | 1988-05-31 | Nippon Telegr & Teleph Corp <Ntt> | タスク開発方式 |
JP3137094B2 (ja) * | 1997-11-11 | 2001-02-19 | 日本電気株式会社 | シミュレーション方法、シミュレーション装置及びその記録媒体 |
JP2000066904A (ja) * | 1998-08-21 | 2000-03-03 | Canon Inc | マルチタスク制御方法及び記憶媒体 |
JP2000259445A (ja) * | 1999-03-05 | 2000-09-22 | Nec Corp | ソフトウェア/ハードウェア協調シミュレーション方法 |
US6672963B1 (en) * | 2000-09-18 | 2004-01-06 | Nintendo Co., Ltd. | Software implementation of a handheld video game hardware platform |
JP3951925B2 (ja) | 2003-01-31 | 2007-08-01 | セイコーエプソン株式会社 | ハードウェア/ソフトウェア協調検証方法 |
JP4563669B2 (ja) * | 2003-11-25 | 2010-10-13 | 三菱電機株式会社 | 命令模擬装置 |
JP4271072B2 (ja) | 2004-03-31 | 2009-06-03 | Okiセミコンダクタ株式会社 | ソフトウェア検証モデル生成方法 |
KR100679050B1 (ko) * | 2005-12-12 | 2007-02-06 | 삼성전자주식회사 | 태스크간 빠른 문맥 교환을 위해 레지스터 문맥을 저장,복구하는 방법 및 장치 |
JP4119945B2 (ja) * | 2006-08-24 | 2008-07-16 | ネットクリアスシステムズ株式会社 | タスク処理装置 |
GB2471138B (en) * | 2009-06-19 | 2014-08-13 | Advanced Risc Mach Ltd | Handling integer and floating point registers during a context switch |
-
2007
- 2007-12-27 JP JP2007335724A patent/JP4873423B2/ja not_active Expired - Fee Related
-
2008
- 2008-12-22 US US12/341,902 patent/US8290764B2/en active Active
- 2008-12-26 CN CN2008101906836A patent/CN101470622B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101042660A (zh) * | 2006-03-23 | 2007-09-26 | 松下电器产业株式会社 | 多任务系统中的任务执行环境切换方法 |
Also Published As
Publication number | Publication date |
---|---|
JP4873423B2 (ja) | 2012-02-08 |
US8290764B2 (en) | 2012-10-16 |
CN101470622A (zh) | 2009-07-01 |
US20090171652A1 (en) | 2009-07-02 |
JP2009157684A (ja) | 2009-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101470622B (zh) | 模拟装置以及虚拟化方法 | |
US7313793B2 (en) | Method for forking or migrating a virtual machine | |
US9323550B2 (en) | Mechanism for providing virtual machines for use by multiple users | |
CN102707900B (zh) | 虚拟盘存储技术 | |
US10564996B2 (en) | Parentless virtual machine forking | |
US8191063B2 (en) | Method for migrating a plurality of virtual machines by associating files and state information with a single logical container | |
CN102906691B (zh) | 虚拟机迁移技术 | |
US11182188B2 (en) | Elastic replication of virtual machines | |
US9164784B2 (en) | Signalizing an external event using a dedicated virtual central processing unit | |
CN103493027A (zh) | 虚拟磁盘存储技术 | |
CN103699459A (zh) | 基于qcow2快照的虚拟机数据增量备份方法及系统 | |
US20140337594A1 (en) | Systems and methods for collapsing a derivative version of a primary storage volume | |
JP2017037370A (ja) | 計算機、プロセス制御方法およびプロセス制御プログラム | |
Ahmed et al. | Docker container deployment in distributed fog infrastructures with checkpoint/restart | |
US6256751B1 (en) | Restoring checkpointed processes without restoring attributes of external data referenced by the processes | |
WO2020040958A1 (en) | Providing consistent database recovery after database failure for distributed databases with non-durable storage leveraging background synchronization point | |
Sun et al. | Fast live cloning of virtual machine based on xen | |
CN103631648A (zh) | 一种任务处理方法及系统 | |
Sun et al. | Lsovc: A framework for taking live snapshot of virtual cluster in the cloud | |
KR101809380B1 (ko) | 가상머신 기반 통합항해시스템을 위한 스케줄링 방법 및 장치 | |
US11593159B2 (en) | External exception handling | |
CN117093332B (zh) | 一种虚拟机克隆的实现方法和装置 | |
JPH09134292A (ja) | 割り込み制御方法 | |
GB2379294A (en) | Data caching process output using a status register | |
Shi et al. | Be United in Actions: Taking Live Snapshots of Heterogeneous Edge–Cloud Collaborative Cluster With Low Overhead |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120829 Termination date: 20211226 |