CN101236489B - 虚拟硬件系统及其指令执行方法、以及虚拟机 - Google Patents

虚拟硬件系统及其指令执行方法、以及虚拟机 Download PDF

Info

Publication number
CN101236489B
CN101236489B CN2008101009205A CN200810100920A CN101236489B CN 101236489 B CN101236489 B CN 101236489B CN 2008101009205 A CN2008101009205 A CN 2008101009205A CN 200810100920 A CN200810100920 A CN 200810100920A CN 101236489 B CN101236489 B CN 101236489B
Authority
CN
China
Prior art keywords
code segment
instruction
address
command
file
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
Application number
CN2008101009205A
Other languages
English (en)
Other versions
CN101236489A (zh
Inventor
孙吉平
韩勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Senseshield Technology Co Ltd
Original Assignee
Beijing Senselock Software Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Senselock Software Technology Co Ltd filed Critical Beijing Senselock Software Technology Co Ltd
Priority to CN2008101009205A priority Critical patent/CN101236489B/zh
Publication of CN101236489A publication Critical patent/CN101236489A/zh
Application granted granted Critical
Publication of CN101236489B publication Critical patent/CN101236489B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

本发明公开了一种虚拟硬件系统中的指令执行方法,该方法包括:在同一进程中加载多个指令文件;在执行指令时,确定待执行指令所在指令文件以及在指令文件中的程序地址,从所确定的指令文件中读取所述程序地址上的指令并执行。在跨代码段指令调用时,保存当前执行指令所在代码段信息和程序地址,然后再执行指令调用;调用返回时,返回调用前保存的代码段信息和程序地址指示的物理地址,继续执行后续指令。本发明还公开了一种虚拟硬件系统和一种虚拟机。使用本发明能够实现虚拟硬件系统中多个指令文件的加载和执行,省略了为指令文件分配互不相同程序地址的步骤,不会产生因程序地址冲突而需要重定位的情况。

Description

虚拟硬件系统及其指令执行方法、以及虚拟机 
技术领域
本发明涉及计算机技术,特别涉及虚拟硬件系统、应用于虚拟硬件系统的指令执行方法,以及虚拟机。 
背景技术
虚拟硬件技术是指通过软件实现硬件功能。图1为目前虚拟硬件系统的结构示意图。如图1所示,虚拟硬件系统包括在硬件平台上构建起来的文件子系统和虚拟机子系统。其中,文件子系统是由存储介质实现的,用于存储指令文件。目前的文件子系统由单个指令文件组成,该单个指令文件中的指令构成一个完整的固件程序。虚拟机子系统负责加载指令文件并执行,具体包括以下步骤: 
步骤1:在初始化时将文件子系统中唯一的指令文件加载为一个代码段(Segment)。 
现有的虚拟硬件系统只运行加载一个代码段。 
其中,加载是执行程序之前的必要操作。加载并不是将指令文件中的内容读取到某个存储介质,而是一个记录指令在指令文件中的物理起始地址的过程。指令文件是实际存储在存储介质中的,指令文件中的每条语言都具有其物理地址。指令文件中包括描述语言部分和指令部分,指令部分即代码段。在加载时,只记录指令部分的物理起始地址,即代码段物理起始地址。指令文件中指令的读取地址都采用程序地址表示,程序地址是指令在指令文件中的偏移量。程序地址的0000H是从指令部分开始的。描述语言不涉及程序地址。 
步骤2:逐一执行代码段中的指令,通过执行指令文件从而构建虚拟硬 件运行环境。 
本步骤中,虚拟机子系统获取待执行指令的程序地址,将程序地址与记录的代码段物理起始地址相加,从相加结果指示的物理地址上读取指令并执行。 
在实际中,不同虚拟硬件系统可能需要实现相同的子功能,这些子功能对应的指令内容相同。由于现有文件子系统是由单个指令文件组成,因此需要在不同虚拟硬件系统中的指令文件中设计并存储相同的指令文件,这些指令文件不能在其它虚拟硬件系统中使用。如果其它虚拟硬件也需要实现相同功能,则需要重复设计并保存在其唯一的指令文件中。设想,如果在虚拟硬件系统中保存多个指令文件,以实现不同子功能,通过指令文件的相互调用实现虚拟硬件系统的功能,那么实现不同子功能的指令文件可以在其它需要该子功能的虚拟硬件系统中重复使用,将大大降低虚拟硬件系统的设计重复性。 
由于虚拟硬件系统只支持单指令文件的加载,只允许将指令文件加载到一个代码段,因此,如果将多个指令文件加载到一个代码段,那么需要预先设置多个被加载指令文件的程序地址空间相互不能冲突。不然,地址冲突将造成无法正确读取指令。但是,由于虚拟硬件系统的开放性,使得应用开发工作相互独立,不可能让虚拟硬件系统平台开发者和子功能开发者设计的各指令文件的程序地址空间互不重叠,仍会出现地址冲突问题,不能实现指令文件之间的相互调用。 
发明内容
有鉴于此,本发明提供了一种虚拟硬件系统中的指令执行方法,能够实现虚拟硬件系统中多个指令文件的加载和执行。 
在同一进程中,将多个指令文件分别加载为代码段,记录各代码段和代码段物理起始地址之间的对应关系; 
在执行指令时,确定待执行指令所在代码段,从所述对应关系中查找所在代码段的物理起始地址;将所查找到的物理起始地址与所述待执行指令的程序地址相加,从相加结果指示的物理地址上读取指令,并执行。 
在跨代码段指令调用时,记录当前执行指令的程序地址和所在代码段,将被调用指令的程序地址和被调用指令所在代码段确定为当前待执行指令的程序地址和所在代码段,从所述对应关系中查找当前待执行指令所在代码段的物理起始地址;将所查找到的物理起始地址与当前待执行指令的程序地址相加,从相加结果指示的物理地址上读取被调用指令,并执行;调用返回时,返回调用前记录的程序地址和代码段指示的物理地址,继续执行后续指令。 
其中,所述将多个指令文件分别加载为代码段包括: 
a、将指令文件中的主文件加载为代码段; 
b、根据主文件中所需调用指令文件信息,依次将与主文件中的所需调用指令文件信息对应的副文件分别加载为代码段; 
c、遍历每个已加载的副文件,根据已加载副文件中的所需调用指令文件信息,依次将与已加载副文件中的所需调用指令文件信息对应的副文件加载为代码段。 
其中,所述将多个指令文件分别加载为代码段,记录各代码段和代码段物理起始地址之间的对应关系为: 
在所述系统启动时,将指令文件中的主文件加载为代码段,记录得到的代码段及其物理起始地址之间的对应关系; 
在系统的当前执行指令为加载指令时,将加载指令指示的指令文件加载为代码段,记录得到的代码段及其物理起始地址之间的对应关系。 
所述加载为:将一个指令文件加载为一个代码段;或者,将一个指令文件加载为多个代码段。 
其中,所述记录当前执行指令的程序地址和所在代码段为:将当前执行指令所在代码段信息和当前执行指令的程序地址入栈; 
所述执行被调用代码段中的被调用指令为:将被调用指令的程序地址和所在代码段确定为当前待执行指令的程序地址和所在代码段,从所述对应关系中查找该所在代码段的物理起始地址;将所查找到的物理起始地址与所述待执行指令的程序地址相加,从相加结果指示的物理地址上读取被调用指令; 
所述返回调用前记录的程序地址和代码段指示的物理地址为:将调用前保存的当前执行指令的程序地址和代码段信息出栈。 
较佳地,所述对应关系进一步包括各代码段和代码段程序起始地址之间的对应关系; 
所述从所述对应关系中查找所在代码段的物理起始地址的步骤进一步包括:查找所述所在代码段的程序起始地址; 
所述将所查找到的物理起始地址与所述待执行指令的程序地址相加的步骤进一步包括:将所查找到的物理起始地址减去查找到的程序起始地址后,与所述待执行指令的程序地址相加。 
其中,所述跨代码段指令调用是根据当前执行指令的类型判断的; 
在当前执行指令的类型为预先设置的调用函数时,判定为跨代码段指令调用;或者,在当前执行指令调用预先设置的特定地址时,判定为跨代码段指令调用。 
本发明还提供了一种虚拟机,能够实现多个指令文件的加载和执行。 
该虚拟机包括加载单元和执行单元; 
所述加载单元包括加载模块和发送模块; 
所述加载模块,用于在同一进程中,将多个指令文件分别加载为代码段; 
所述发送模块,用于将所述加载过程中得到的代码段标识和该代码段物理起始地址之间的对应关系发送给所述执行单元; 
所述执行单元包括映射关系存储模块和指令处理模块; 
所述映射关系存储模块,用于存储接收到的对应关系; 
所述指令处理模块包括处理子模块、段维护子模块和程序计数器; 
所述处理子模块,用于从段维护子模块获取当前代码段标识,从程序计数器获取程序地址,从映射关系存储模块的对应关系中查找与所获取的代码段标识对应的物理起始地址,将所述对应的物理起始地址与从程序计数器获取的程序地址相加,从相加结果指示的物理地址上读取待执行指令并执行;当前指令执行完毕时,将程序计数器的值更新为下一个待执行指令的程序地址; 
所述段维护子模块,用于记录当前运行程序所在代码段标识; 
所述程序计数器,用于记录当前运行程序的程序地址; 
所述处理子模块进一步用于,在跨代码段指令调用时,向所述段维护子模块发送携带待调用指令所在代码段标识的调用通知,并保存当前程序计数器的值;在调用返回时,向所述段维护子模块发送调用返回通知,将调用前保存的程序计数器的值赋值给程序计数器; 
所述段维护子模块,进一步用于在接收到所述调用通知时,将当前代码段标识保存,将调用通知中的代码段标识确定为提供给处理子模块的当前代码段标识;在接收到调用返回通知时,将调用前保存的代码段标识确定为提供给处理子模块的当前代码段标识。 
本发明还提供了一种虚拟硬件系统,能够实现虚拟硬件系统中多个指令文件的加载和执行。 
该系统包括文件子系统和如前所述的虚拟机; 
所述文件子系统,用于保存指令文件。 
根据以上技术方案可见,采用本发明指令执行方案,无需为指令文件分配互不相同程序地址,在同一进程中加载多个指令文件,每个指令文件使用相同的程序地址空间,在执行指令时,确定待执行指令所在指令文件,然后根据待执行指令的程序地址从所确定的指令文件中读取指令并执行。可见,由于在读取指令之前增加了确定指令所在指令文件的步骤,只需要利用指令在该指令文件中的程序地址从该指令文件中读取指令即可,省略了为指令文件分配互不相同程序地址的步骤,不会产生因程序地址冲突而需要重定位的情况。 
同时,加载多个指令文件支持指令文件之间的相互调用,那么,可以设计不同指令文件具有不同子功能,具有不同子功能的指令文件可以重复应用于不同的虚拟硬件系统,为虚拟硬件系统实现动态链接库提供了可能,指令文件的重复使用还减少了虚拟硬件系统的设计重复性。当同一虚拟硬件系统实现多种应用时,每个应用都能调用系统中指令文件提供的子功能,使得同一指令文件被多个应用复用,节省了文件子系统的存储空间,此外,模块化的指令文件,更加便于应用升级和维护。 
由于多个指令文件加载在同一进程中,因此本发明在跨指令文件调用时,采用进程内部的函数调用和返回方式,不需要进程间的切换,执行效率高,内存消耗少,而且简化编程。 
附图说明
图1为现有技术中虚拟硬件系统的结构示意图。 
图2为本发明实施例中指令执行方法的流程图。 
图3为本发明另一实施例中指令执行方法的流程图。 
图4为本发明实施例中虚拟硬件系统的结构示意图。 
具体实施方式
本发明在设计指令文件时,每一个指令文件使用相同的程序地址空间,程序地址都可以从0000H开始。加载时,在同一进程中加载多个指令文件;在执行指令时,确定待执行指令所在指令文件以及在指令文件中的程序地址,从所确定的指令文件中读取所述程序地址上的指令并执行,从而实现了多个指令文件的加载和执行。 
其中,进程是指应用程序的运行实例。当在同一进程加载多个文件时,被加载的多个文件共享同一进程的运行环境。运行环境包括程序空间、数据空间等资源。 
可见,采用本发明指令执行方案,采用指令文件信息和程序地址二维信息定位待指令执行的物理地址,因此无需为指令文件分配互不相同的程序地址,不同指令文件可以使用相同的程序地址,省略了分配互不相同程序地址的步骤,并且从根本上避免了重定位问题的产生。 
那么,利用本发明,虚拟硬件系统的开发者就可以设计多个具有不同子功能的指令文件,这些实现不同子功能的指令文件可以在其他需要该子功能的虚拟硬件系统中重复使用,从而大大降低虚拟硬件系统的设计重复性。 
图2为本发明实施例中指令执行方法的流程图。如图2所示,该方法包括以下步骤: 
步骤201:在同一进程中,将多个指令文件分别加载为代码段,记录各代码段和代码段物理起始地址之间的对应关系。 
本步骤中,一个指令文件可以加载为一个代码段。 
步骤202:在代码段内执行指令时,将当前执行的代码段确定为待执行指令所在代码段,从步骤201记录的对应关系中查找所在代码段的物理起始地址。 
其中,当前执行的代码段信息由系统提供的变量或寄存器维护,并实时更新。 
步骤203:将所查找到的物理起始地址与待执行指令的程序地址相加,从相加结果指示的物理地址上读取指令。 
在跨代码段指令调用时,将被调用指令所在代码段确定为待执行指令所在代码段,从步骤201记录的对应关系中查找所在代码段的物理起始地址,将所查找到的物理起始地址与待执行指令的程序地址相加,从相加结果指示的物理地址上读取指令,从而实现了跨代码段调用。 
当然,为了实现调用后的返回,在判断跨代码段指令调用时,保存当前执行指令所在代码段标识和程序地址,然后再执行指令调用;调用返回时,返回调用前保存的代码段标识和程序地址指示的物理地址,继续执行后续指令。其中,跨代码段的指令调用的实现同时解决了跨指令文件的指令调用,实现了指令文件相互调用。 
如果代码段的长度受到硬件限制,且指令文件较长,则指令文件设计时,可以将一个指令文件设计为包括多个代码段。加载时,一个指令文件加载为多个代码段,记录各代码段的物理起始地址。在设计指令文件时,可以将一个指令文件中的多个代码段的程序起始地址都设置为0000H,也可以设置为互不相同的程序起始地址。 
对于每个代码段的程序起始地址都为0000H的情况,在步骤203确定待读取指令的物理地址时,可以直接将所查找到的物理起始地址与待执行指令的程序地址相加,得到待读取指令的物理地址。举一个例子,指令文件2加载出代码段S2和S3,其中,S2的物理起始地址为A000H;S3的物理起始地址为C000H,S2和S3的程序起始地址都为0000H;当待读取指令为S3中程序地址为0001H的指令时,可以从(C000H+0001H)指示的物理地 址读取到该指令。 
对于一个指令文件加载出来的多个代码段的起始程序地址不同的情况,由于指令的程序地址不是相对于所在代码段起始位置的偏移量,因此,在步骤203确定待读取指令的物理地址时,需要先将查找到的物理起始地址减去待执行指令所在代码段的程序起始地址,然后再与待执行指令的程序地址相加,得到待读取指令的物理地址。其中,待执行指令所在代码段的程序起始地址可以在步骤201中记录,具体为:在步骤201在记录对应关系时,进一步记录各代码段和代码段程序起始地址之间的对应关系。举一个例子,指令文件2加载出代码段S2和S3,其中,S2的物理起始地址为A000H,程序起始地址为1000H;S3的物理起始地址为C000H,程序起始地址为2000H;当待读取指令为S3中程序地址为2001H的指令时,如果从(C000H+2001H)=E001H指示的物理地址读取指令,会出现读取错误,此时,应采用本段上述方法,从(C000H-2000H+2001H)=C001H指示的物理地址读取指令。 
当然,对于每个代码段的程序起始地址都为0000H的情况,以及一个指令文件加载为一个代码段的情况,也可以在加载时记录各代码段的程序起始地址,只是此时所有代码段的程序起始地址都为0000H而已,在计算待读取指令的物理地址时,相应的减掉一个0000H。这使得本发明的指令执行方法可以兼容以上各种加载情况。 
下面举另一实施例对本发明进行详细描述。本实施例中,一个指令文件加载为一个代码段;采用程序计数器记录指令的程序地址,那么程序计数器就可以跟踪程序执行的进度,标识当前指令文件执行的具体位置。 
图3为本发明另一实施例中指令文件的执行方法。该方法包括以下步骤: 
步骤300:在指令文件设计时,将指令文件中各指令的读取地址表示程序地址。 
步骤301:系统启动时,虚拟机子系统将待加载指令文件分别加载为代码段。 
待加载指令文件又分为主文件和副文件。主文件为首先处理的指令文件,副文件为主文件需要调用的指令文件,副文件之间可以相互调用。主文件中记录的信息包括:指令和所需调用指令文件信息;副文件中同样记录有指令和所需调用指令文件信息。例如,当虚拟硬件系统实现公交卡功能时,实现公交卡功能的指令文件为主文件;实现公交卡功能中的用户加密、余额查询、充值等功能的指令文件为副文件。 
当虚拟硬件系统实现多应用功能时,例如在实现公交卡功能的同时,还可以实现校园卡功能,那么该虚拟硬件系统就包括多个主文件。在加载时,会有预先设置的信息指示哪个指令文件为当前主文件。当然,虚拟硬件系统还可以通过接收外部信息得知哪个指令文件为主文件。 
本步骤的加载过程具体包括: 
1)将文件子系统中的当前主文件加载为代码段,根据存储在主文件中的所需调用指令文件信息确定待处理副文件,如果没有副文件则加载过程结束;如果有副文件,则, 
2)依次将与主文件中所需调用指令文件信息对应的副文件分别加载为代码段; 
3)在该副文件加载过程中,还需遍历每个已加载的副文件,根据已加载副文件中的所需调用指令文件信息,依次将与已加载副文件中的所需调用指令文件信息对应的副文件加载为代码段,直到处理完所有所需指令文件。在实际中,还可以灵活的选择加载某个指令文件中的某个代码段。加载信息同样保存在调用指令文件信息中。 
步骤302:记录代码段的代码段标识和该代码段在指令文件中的物理起始地址。 
其中,对应关系可以采用如下表1示出的一种地址映射表的表结构存储映射关系。如表1所示,该地址映射表包括代码段标识和代码段物理起始地址。 
  代码段标识   代码段物理起始地址
  S1   0000H
  S2   1500H
  S3   2500H
                    表1 
当然,在存储空间允许的情况下,可以不记录代码段物理起始地址,而是记录各程序地址对应的物理地址。这样就不必通过计算得到待执行指令的物理地址,而是直接查找与待执行指令的程序地址对应的物理地址。 
步骤303:从代码段1中地址为0000H的指令开始执行指令。 
其中,代码段1为最先加载的代码段,通常为与主文件对应的、程序地址为0000H的指令所在代码段。本步骤具体包括: 
将程序计数器清零; 
将代码段1的代码段标识赋值给代码段跟踪变量。该代码段跟踪变量用于记录和维护当前执行指令所在代码段,代码段跟踪变量的值可以为代码段标识。当没有跨代码段指令调用时,代码段跟踪变量的值不变,当出现跨代码段的指令调用时,将代码段跟踪变量的值被切换为被调用指令所在代码段的标识。 
步骤304:从代码段跟踪变量获取当前代码段标识,从程序计数器读取当前程序地址;从步骤302记录的对应关系中,查找当前代码段的物理起始地址,将查找到的物理起始地址与当前程序地址相加,从相加结果指示的物理地址中获取指令并执行。 
步骤305:根据当前执行的指令,判断是否出现跨代码段指令调用,如果不是,则执行步骤306;如果是,判定跨代码段调用,则执行步骤307。 
本步骤中,判断是否出现跨代码段的指令调用方式为:在当前执行指令为调用特定地址时,判定跨代码段调用。例如,当虚拟硬件虚拟8051处理器时,设置FFFFH为特定地址,当指令指向FFFFH时,则执行步骤307。 
判断是否出现跨代码段的指令调用方式还可以为:在当前执行指令为预 先设置的调用函数时,判定跨代码段调用。该预先设计的调用函数可以采用系统保留指令函数。例如,在当前执行代码段1中的指令函数为A5(S2,2500)时,表示调用代码段2中程序地址为2500H的指令,此时判定跨代码段调用。指令函数A5中的参数含义及其对应操作可以预先定义。 
步骤306:获取下一条待执行指令的程序地址,刷新程序计数器,然后返回执行步骤304。 
本步骤中,根据当前执行的指令,采用下一条待执行指令的程序地址更新程序计数器的值: 
如果当前指令无跳转,则将程序计数器的当前值加一预设指令长度; 
如果当前指令有跳转,则将程序计数器的值更新为跳转到的程序地址。跳转包括直接跳转和相对跳转,直接跳转时,将程序计数器赋值为跳转目标地址(为程序地址),相对跳转时,将程序计数器的当前值加一跳转量。 
步骤307:记录当前指令所在代码段的代码段标识,以及该指令的程序地址,用于唯一定位当前执行指令的绝对位置。 
本步骤中,将代码段跟踪变量的值和程序计数器的当前值保存下来。考虑到可能经多次调用才能返回当前代码段,可以将代码段跟踪变量的值和程序计数器的当前值入栈,并在调用返回时出栈,以提供调用前的指令执行位置,使得调用返回时能够继续当前的指令。 
步骤308:根据当前执行指令,获取待调用指令所在代码段的段标识和待调用指令的程序地址,将待调用指令所在代码段的段标识赋值给代码段跟踪变量,将待调用指令的程序地址赋值给程序计数器;执行步骤309。 
以当前执行前述指令A5(S2,2500)为例,将2赋值给代码段跟踪变量,将2500赋值给程序计数器。 
步骤309:从代码段跟踪变量获取当前代码段的段标识,从程序计数器读取当前程序地址;从步骤302记录的对应关系中,查找当前代码段的物理起始地址,将查找到的物理起始地址与当前程序地址相加,从相加结果指示的物理地址中获取指令并执行。实际上,该步骤309与步骤304相同。 
待步骤309执行完成后,顺序执行被调用代码段中的指令,指令获取操作都是根据代码段的段标识和程序地址以及步骤302记录的对应关系实现的,具体与步骤309相同。当执行到调用返回的指令时,执行以下步骤310。 
步骤310:当调用返回时,根据步骤307记录的调用前代码段标识和程序地址,返回调用前的执行位置,继续执行后续指令,返回步骤304。 
本步骤中,调用返回时,将步骤307中入栈的数据出栈,得到调用前所执行指令的代码段标识和程序地址,将得到的代码段标识赋值给代码段跟踪变量,将程序地址赋值给程序计数器。将程序计数器的值加上预设的指令长度,作为当前待执行指令的程序地址,然后返回执行步骤304,从而实现在执行完被调用代码后的返回操作。 
至此,本流程结束。 
以上实施例中,在系统启动时,将所有待加载指令文件加载为代码段,并记录对应关系。在实际中,可以不在启动时对所有待加载指令文件进行加载,而是在虚拟硬件系统启动时,将指令文件的当前主文件加载为代码段,记录得到的代码段的标识及其物理起始地址之间的对应关系;指令文件执行过程中,当系统的当前执行指令为加载指令时,将加载指令指示的指令文件加载为代码段并记录得到的代码段的标识及其物理起始地址之间的对应关系。 
以上实施例给出了通过记录代码段的段标识和代码段起始物理地址的对应关系方式来查找待执行指令的物理地址。在实际中,还可以采用其它方式查找待执行指令的物理地址。其原则是,只要能够确定出待执行指令所在代码段或所在指令文件,然后根据所记录的代码段或指令文件物理地址就可以查找到待执行指令的物理地址。 
为了实现上述指令文件执行方法,本发明提供了一种虚拟硬件系统。图4示出了本发明实施例中虚拟硬件系统的结构示意图,如图4所示,本发明的虚拟硬件系统包括:文件子系统和虚拟机子系统。其中, 
文件子系统,用于保存指令文件;对于每个指令文件,指令的读取地址 表示为该指令在指令文件中的程序地址。 
虚拟机子系统,用于在同一进程中,加载文件子系统保存的多个指令文件,在执行指令时,确定待执行指令所在指令文件以及在指令文件中的程序地址,从所确定的指令文件中读取所述程序地址上的指令并执行。 
本发明还提供了一种虚拟机,即图4中的虚拟机子系统,该虚拟机子系统具体包括加载单元和执行单元。 
其中,加载单元,用于在同一进程中,加载多个指令文件。 
该加载单元具体包括加载模块和发送模块(加载模块和发送模块在图4中未示出),加载模块将文件子系统中的多个指令文件分别加载为代码段,在加载过程中得到代码段和该代码段物理起始地址之间的对应关系,该对应关系由发送模块发送到执行单元。该加载单元在启动时,对指令文件执行加载和发送操作;如果接收到指令处理模块的加载命令,对加载命令指示的指令文件执行所述加载和发送操作。 
虚拟机子系统中的执行单元,用于在执行指令时,确定待执行指令所在指令文件以及在指令文件中的程序地址,从所确定的指令文件中读取所述程序地址上的指令并执行。 
该执行单元具体包括映射关系存储模块和指令处理模块;其中, 
映射关系存储模块,用于存储接收自加载单元的对应关系,并提供给指令处理模块。该映射关系存储模块可以采用表格形式存储映射关系,将映射关系存储在表1示出的地址映射表中。 
指令处理模块,用于确定待执行指令所在代码段和待执行指令的程序地址,从映射关系存储模块保存的对应关系中查找所在代码段的物理起始地址,将查找到的物理起始地址与所述待执行指令的程序地址相加,从相加结果指示的物理地址上读取指令。 
进行跨代码段指令调用时,指令处理模块保存当前执行指令所在代码段的标识和程序地址,用以维护调用前的指令执行位置;然后执行被调用代码段中的被调用指令;调用返回时,返回调用前保存的代码段标识和程序地址 指示的物理地址,继续执行后续指令,从而实现调用返回。 
具体来说,指令处理模块包括处理子模块、段维护子模块和程序计数器。 
其中,处理子模块在系统启动且加载单元加载完毕后,开始从代码段1执行指令,此时,处理子模块将程序计数器清零,将段维护子模块记录的代码段标识设置为代码段1的代码段标识,例如S1或1,该代码段1为最先被加载的代码段。 
在执行指令时,处理子模块从段维护子模块获取当前代码段标识,从程序计数器获取当前程序地址,从映射关系存储模块的对应关系中获取当前代码段的物理起始地址,将获取的物理起始地址与所述当前程序地址相加,从相加结果指示的物理地址上读取待执行指令并执行。 
在当前指令执行完毕时,处理子模块将程序计数器的值更新为下一个待执行指令的程序地址。如果没有跨代码段的指令调用,则段维护子模块中的代码段标识不会改变。然后,重复根据当前代码段标识、程序计数器的值以及对应关系,计算下一个待执行指令的物理地址并读取执行的操作,如此循环。 
在出现跨代码段指令调用时,处理子模块将段维护子模块维护的当前代码段标识和程序计数器的当前值记录下来,作为调用前的位置信息。具体来说,处理子模块向段维护子模块发送调用通知,该调用通知携带待调用指令的所在代码段标识,以通知段维护子模块切换当前代码段标识的值;同时,处理子模块还通过将程序计数器的当前值在处理子模块中入栈的方式,以实现切换前程序地址的保存。 
保存完成后,处理子模块将待调用指令的程序地址赋值给程序计数器,然后执行根据段维护子模块中的当前代码段标识、程序计数器中的程序地址以及映射关系存储模块中的对应关系计算待调用指令的物理地址并获取执行的操作。 
在当前执行指令显示调用返回时,处理子模块向段维护子模块发送调用返回通知,以通知段维护子模块将当前代码段标识切换为调用前代码段标识;同时处理子模块还将调用前程序地址出栈并赋值给程序计数器,然后执 行根据段维护子模块中的当前代码段标识、程序地址以及映射关系计算待执行指令的物理地址并获取执行的操作。 
在实际中,处理子模块还在当前执行指令为加载指令时,向加载单元发送加载命令,该加载命令中包括待加载指令文件信息。 
以上就是处理子模块的功能。 
指令处理模块的段维护子模块,用于维护当前程序所处的代码段标识,并提供给处理子模块;在进行跨代码段指令调用时,维护调用关系,即在调用之前,记录调用前代码段的标识,在返回时,恢复调用前代码段标识。 
具体来说,段维护子模块提供代码段跟踪变量,用于记录当前代码段标识,该代码段跟踪变量的值即为提供给处理子模块的当前代码段信息。 
在系统启动时,段维护子模块将代码段跟踪变量设置为S1,并在处理子模块需要时,提供给处理子模块; 
在接收来自处理子模块的调用通知时,段维护子模块将当前代码段标识保存,将调用通知中的代码段标识确定为提供给处理子模块的当前代码段标识。实现时,可以采用入栈处理将当前代码段标识压入栈顶;然后段维护子模块将调用通知中的代码段标识赋值给代码段跟踪变量。 
在接收来自处理子模块的调用返回通知时,段维护子模块将调用前保存的代码段标识确定为提供给处理子模块的当前代码段标识。具体是通过出栈处理将栈顶标识弹出,赋值给代码段跟踪变量。 
为了适应各种加载情况,加载单元中的发送模块进一步将加载时获得的各代码段与该代码段程序起始地址之间的对应关系发送给执行单元。 
执行单元中的指令处理模块,进一步在计算待执行指令物理地址时,查找待执行指令所在代码段的程序起始地址,并将待执行指令所在代码段的物理起始地址减去该待执行指令所在代码段的程序起始地址,再与所述待执行指令的程序地址相加,得到待执行指令的物理地址。 
由以上所述可以看出,本发明所提供的虚拟硬件系统及其指令文件执行方法能够实现虚拟硬件系统中多个指令文件的加载和执行,而且不会出现重定位问题。 
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。 

Claims (9)

1.一种虚拟硬件系统中的指令执行方法,其特征在于,该方法包括:
在同一进程中,将多个指令文件分别加载为代码段,记录各代码段和代码段物理起始地址之间的对应关系;
在执行指令时,确定待执行指令所在代码段,从所述对应关系中查找所在代码段的物理起始地址;将所查找到的物理起始地址与所述待执行指令的程序地址相加,从相加结果指示的物理地址上读取指令,并执行;
在跨代码段指令调用时,记录当前执行指令的程序地址和所在代码段,将被调用指令的程序地址和被调用指令所在代码段确定为当前待执行指令的程序地址和所在代码段,从所述对应关系中查找当前待执行指令所在代码段的物理起始地址;将所查找到的物理起始地址与当前待执行指令的程序地址相加,从相加结果指示的物理地址上读取被调用指令,并执行;调用返回时,返回调用前记录的程序地址和代码段指示的物理地址,继续执行后续指令。
2.如权利要求1所述的方法,其特征在于,所述将多个指令文件分别加载为代码段包括:
a、将指令文件中的主文件加载为代码段;
b、根据主文件中所需调用指令文件信息,依次将与主文件中的所需调用指令文件信息对应的副文件分别加载为代码段;
c、遍历每个已加载的副文件,根据已加载副文件中的所需调用指令文件信息,依次将与已加载副文件中的所需调用指令文件信息对应的副文件加载为代码段。
3.如权利要求1所述的方法,其特征在于,所述将多个指令文件分别加载为代码段,记录各代码段和代码段物理起始地址之间的对应关系为:
在所述系统启动时,将指令文件中的主文件加载为代码段,记录得到的代码段及其物理起始地址之间的对应关系;
在系统的当前执行指令为加载指令时,将加载指令指示的指令文件加载为代码段,记录得到的代码段及其物理起始地址之间的对应关系。
4.如权利要求1至3任意一项所述的方法,其特征在于,所述加载为:将一个指令文件加载为一个代码段;或者,将一个指令文件加载为多个代码段。
5.如权利要求1所述的方法,其特征在于,所述记录当前执行指令的程序地址和所在代码段为:将当前执行指令所在代码段信息和当前执行指令的程序地址入栈;
所述返回调用前记录的程序地址和代码段指示的物理地址为:将调用前保存的当前执行指令的程序地址和代码段信息出栈。
6.如权利要求1所述的方法,其特征在于,所述对应关系进一步包括各代码段和代码段程序起始地址之间的对应关系;
所述从所述对应关系中查找所在代码段的物理起始地址的步骤进一步包括:查找所述所在代码段的程序起始地址;
所述将所查找到的物理起始地址与所述待执行指令的程序地址相加的步骤进一步包括:将所查找到的物理起始地址减去查找到的程序起始地址后,与所述待执行指令的程序地址相加。
7.如权利要求1所述的方法,其特征在于,所述跨代码段指令调用是根据当前执行指令的类型判断的;
在当前执行指令的类型为预先设置的调用函数时,判定为跨代码段指令调用;或者,在当前执行指令调用预先设置的特定地址时,判定为跨代码段指令调用。
8.一种虚拟机,其特征在于,该虚拟机包括加载单元和执行单元;
所述加载单元包括加载模块和发送模块;
所述加载模块,用于在同一进程中,将多个指令文件分别加载为代码段;
所述发送模块,用于将所述加载过程中得到的代码段标识和该代码段物理起始地址之间的对应关系发送给所述执行单元;
所述执行单元包括映射关系存储模块和指令处理模块;
所述映射关系存储模块,用于存储接收到的对应关系;
所述指令处理模块包括处理子模块、段维护子模块和程序计数器;
所述处理子模块,用于从段维护子模块获取当前代码段标识,从程序计数器获取程序地址,从映射关系存储模块的对应关系中查找与所获取的代码段标识对应的物理起始地址,将所述对应的物理起始地址与从程序计数器获取的程序地址相加,从相加结果指示的物理地址上读取待执行指令并执行;当前指令执行完毕时,将程序计数器的值更新为下一个待执行指令的程序地址;
所述段维护子模块,用于记录当前运行程序所在代码段标识;
所述程序计数器,用于记录当前运行程序的程序地址;
所述处理子模块进一步用于,在跨代码段指令调用时,向所述段维护子模块发送携带待调用指令所在代码段标识的调用通知,并保存当前程序计数器的值;在调用返回时,向所述段维护子模块发送调用返回通知,将调用前保存的程序计数器的值赋值给程序计数器;
所述段维护子模块,进一步用于在接收到所述调用通知时,将当前代码段标识保存,将调用通知中的代码段标识确定为提供给处理子模块的当前代码段标识;在接收到调用返回通知时,将调用前保存的代码段标识确定为提供给处理子模块的当前代码段标识。
9.一种虚拟硬件系统,其特征在于,该系统包括文件子系统和如权利要求8所述的虚拟机;
所述文件子系统,用于保存指令文件。
CN2008101009205A 2008-02-26 2008-02-26 虚拟硬件系统及其指令执行方法、以及虚拟机 Expired - Fee Related CN101236489B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2008101009205A CN101236489B (zh) 2008-02-26 2008-02-26 虚拟硬件系统及其指令执行方法、以及虚拟机

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2008101009205A CN101236489B (zh) 2008-02-26 2008-02-26 虚拟硬件系统及其指令执行方法、以及虚拟机

Publications (2)

Publication Number Publication Date
CN101236489A CN101236489A (zh) 2008-08-06
CN101236489B true CN101236489B (zh) 2011-04-20

Family

ID=39920137

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2008101009205A Expired - Fee Related CN101236489B (zh) 2008-02-26 2008-02-26 虚拟硬件系统及其指令执行方法、以及虚拟机

Country Status (1)

Country Link
CN (1) CN101236489B (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102591861A (zh) * 2011-01-05 2012-07-18 深圳市闪联信息技术有限公司 远程分布式文件映射、访问的方法及系统
CN102520910B (zh) * 2011-12-05 2015-10-21 晶门科技(深圳)有限公司 适应低延迟或高吞吐要求的协处理器指令执行方法及系统
CN103064718A (zh) * 2013-01-23 2013-04-24 北京伸得纬科技有限公司 一种虚拟机载入器
CN106484446A (zh) * 2015-08-28 2017-03-08 晨星半导体股份有限公司 应用程序的程序代码载入方法及应用其方法的电脑系统
CN111382429B (zh) * 2018-12-27 2022-12-27 华为技术有限公司 指令的执行方法、装置及存储介质
CN111773715A (zh) * 2020-08-03 2020-10-16 网易(杭州)网络有限公司 任务执行方法及装置、设备和介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6021469A (en) * 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
CN1382280A (zh) * 1999-02-05 2002-11-27 坦斯利卡公司 用于设计可配置的处理器的自动处理器产生系统及其方法
WO2006048378A1 (fr) * 2004-11-04 2006-05-11 Gemplus Procede de chargement d'un code logiciel en langage intermediaire oriente objet dans un appareil portatif
CN1987886A (zh) * 2006-12-22 2007-06-27 北京飞天诚信科技有限公司 一种在软件保护装置中实现软件保护的方法与装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6021469A (en) * 1996-01-24 2000-02-01 Sun Microsystems, Inc. Hardware virtual machine instruction processor
CN1382280A (zh) * 1999-02-05 2002-11-27 坦斯利卡公司 用于设计可配置的处理器的自动处理器产生系统及其方法
WO2006048378A1 (fr) * 2004-11-04 2006-05-11 Gemplus Procede de chargement d'un code logiciel en langage intermediaire oriente objet dans un appareil portatif
CN1987886A (zh) * 2006-12-22 2007-06-27 北京飞天诚信科技有限公司 一种在软件保护装置中实现软件保护的方法与装置

Also Published As

Publication number Publication date
CN101236489A (zh) 2008-08-06

Similar Documents

Publication Publication Date Title
CN101236489B (zh) 虚拟硬件系统及其指令执行方法、以及虚拟机
US9244883B2 (en) Reconfigurable processor and method of reconfiguring the same
CN102819497B (zh) 一种内存分配方法、装置及系统
CN101233489B (zh) 自适应进程分派的方法和系统
CN100432931C (zh) 嵌入式系统动态补丁长跳转的实现方法
CN102667714B (zh) 支持访问由操作系统环境外的资源提供的功能的方法和系统
CN101847096B (zh) 包含栈变量函数的优化方法
CN100349131C (zh) 一种应用程序故障的定位方法
CN104471557A (zh) 动态语言的优化执行
US7523446B2 (en) User-space return probes
US20070294683A1 (en) Methods of generating, linking and updating component-based software and information storage medium having such software recorded thereon
CN103365668A (zh) 一种动态链接库装载和链接的方法、装置
CN103838521A (zh) 一种数据处理方法及装置
CN103176914A (zh) 一种低缺失率、低缺失惩罚的缓存方法和装置
JP5030647B2 (ja) 複数処理ノードを含むコンピュータ・システムでプログラムをロードする方法、該プログラムを含むコンピュータ可読媒体、及び、並列コンピュータ・システム
US20110113409A1 (en) Symbol capabilities support within elf
CN103140834A (zh) 用于填充存储器区域的处理器支持
CN104063234A (zh) 一种兼容方法及装置
US20070226474A1 (en) Method and system for providing context switch using multiple register file
CN109739824A (zh) 日志获取方法及设备
US7934073B2 (en) Method for performing jump and translation state change at the same time
WO2002037272A2 (en) Improved frameworks for invoking methods in virtual machines
CN112035183A (zh) 微应用的接入方法及装置
CN102597957B (zh) 系统部署确定系统、系统部署确定方法及程序
CN113590149A (zh) 程序分段加载运行的方法及装置

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
ASS Succession or assignment of patent right

Owner name: BEIJING SHENSI SHUDUN SCIENCE + TECHNOLOGY CO., LT

Free format text: FORMER OWNER: BEIJING SENSELOCK SOFTWARE TECHNOLOGY CO., LTD.

Effective date: 20150115

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100086 HAIDIAN, BEIJING TO: 100872 HAIDIAN, BEIJING

TR01 Transfer of patent right

Effective date of registration: 20150115

Address after: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Patentee after: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

Address before: 100086 Beijing City, Haidian District Zhongguancun South Street No. 6 Zhucheng building block B room 1201

Patentee before: Beijing Senselock Software Technology Co.,Ltd.

C56 Change in the name or address of the patentee
CP03 Change of name, title or address

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Patentee after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Patentee before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110420

CF01 Termination of patent right due to non-payment of annual fee