CN108170503B - 一种跨***运行安卓应用的方法、终端及存储介质 - Google Patents
一种跨***运行安卓应用的方法、终端及存储介质 Download PDFInfo
- Publication number
- CN108170503B CN108170503B CN201810069208.7A CN201810069208A CN108170503B CN 108170503 B CN108170503 B CN 108170503B CN 201810069208 A CN201810069208 A CN 201810069208A CN 108170503 B CN108170503 B CN 108170503B
- Authority
- CN
- China
- Prior art keywords
- android
- engine
- kernel
- calling
- window
- 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.)
- Active
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/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例公开了一种跨***运行安卓应用的方法、终端及存储介质,该方法包括:接收启动跨***运行安卓应用的引擎的指令,根据指令在视窗***中执行引擎的启动操作;在引擎启动后的进程中,将安卓***包括的安卓***指令转换为等效的视窗***指令;通过执行等效的视窗***指令的方式运行安卓***;解析待执行的安卓应用,得到安卓应用的可执行文件包括的指令;通过执行所解析到的指令的方式运行安卓应用;当解析到发起***调用请求的指令时,执行针对引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;其中,调用操作用于完成安卓应用通过***调用请求所请求实现的功能。
Description
技术领域
本发明涉及电数字数据处理技术,尤其涉及一种跨***运行安卓应用的方法、终端及存储介质。
背景技术
安卓(Android)***由于其开源性发展迅速,各大手机厂商纷纷投入生产、设计并开发自己的安卓***,目前安卓***已经超越iOS***成为全球最有影响力的***。随着人们每天用手机消遣娱乐的时间越来越多,由于不同手机本身的局限性,以及不同手机的性能、电池、散热等方面的影响,使用手机进行应用时,往往不能达到最佳的应用性能和效果。因此,把安卓***移植到具有更高硬件配置的设备如个人电脑(PC,Personal Computer)的视窗(Windows)***中运行,利用高配置的个人电脑来运行安卓游戏等安卓应用的需求应运而生。
相关技术通常采用各种虚拟化技术在视窗***中虚拟安卓***,从而实现在虚拟的安卓***中运行安卓应用的目的,但是利用虚拟化技术跨***运行安卓应用时,在兼容性和执行效率上都与在安卓***中直接运行安卓应用存在明显的差距,同时也导致挤占了设备的大量硬件资源(例如CPU和内存)。
发明内容
为解决上述技术问题,本发明实施例期望提供一种跨***运行安卓应用的方法、终端及存储介质,能够以良好的兼容性和效率跨***运行安卓应用。
本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种跨***运行安卓应用的方法,包括:
接收启动跨***运行安卓应用的引擎的指令,根据所述指令在视窗***中执行所述引擎的启动操作;
在所述引擎启动后的进程中,将所述安卓***包括的安卓***指令转换为等效的视窗***指令;
通过执行所述等效的视窗***指令的方式运行所述安卓***;
解析待执行的安卓应用,得到所述安卓应用的可执行文件包括的指令;
通过执行所解析到的指令的方式运行所述安卓应用;
当解析到发起***调用请求的指令时,执行针对所述引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;
其中,所述调用操作用于完成所述安卓应用通过所述***调用请求所请求实现的功能。
本发明实施例提供了一种终端,设置有引擎,所述引擎包括:
进程单元,用于接收启动跨***运行安卓应用的引擎的指令,根据所述指令在视窗***中执行所述引擎的启动操作;
视窗/安卓单元,用于在所述引擎的进程中,将所述安卓***包括的安卓***指令转换为等效的视窗***指令;通过执行所述等效的视窗***指令的方式运行所述安卓***;解析待执行的安卓应用,得到所述安卓应用的可执行文件包括的指令;通过执行所解析到的指令的方式运行所述安卓应用;
安卓核心功能单元,用于当所述视窗/安卓单元解析到发起***调用请求的指令时,执行针对所述引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;其中,所述调用操作用于完成所述安卓应用通过所述***调用请求所请求实现的功能。
本发明实施例提供了一种计算机可读存储介质,存储有可执行指令,用于引起一个或多个处理器执行所述的跨***运行安卓应用的方法。
本发明实施例具有以下有益效果:
在引擎中执行安卓***指令到视窗***指令的转换,并通过执行转换得到的视窗***指令的方式运行安卓***,从视窗***的指令执行的层面实现安卓***和安卓应用,这种底层的实现方式相较于相关技术在视窗***中虚拟安卓***效率更高,还降低了硬件资源的要求;
在引擎中利用自实现的***调用和安卓***内核来完成安卓应用的***调用请求,由于不需要依赖于第三方库,相较于相关技术提供的虚拟化方案,克服了对第三方库的依赖,因而能够在各种版本的视窗***中运行安卓应用,具有良好的兼容性。
附图说明
图1为本发明实施例提供的示例性的***调用的示例图;
图2-A为本发明实施例提供的具有视窗***的终端的内部结构示意图;
图2-B为本发明实施例提供的具有视窗***的终端的内部结构示意图;
图2-C为本发明实施例提供的具有视窗***的终端的内部结构示意图;
图3为本发明实施例提供的引擎的模块结构示意图;
图4为本发明实施例提供的跨***运行安卓应用的方法的流程图;
图5为本发明实施例提供的***调用的示例图;
图6为本发明实施例提供的安卓***启动的示例图;
图7为本发明实施例提供的引擎的结构图;
图8为本发明实施例提供的用户态和内核态的特权权限级别分布图;
图9为本发明实施例提供的***调用的示例图;
图10为本发明实施例提供的服务器与终端进行信息交互的硬件实体***架构图;
图11为本发明实施例提供的终端的显示界面示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,根据本发明的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述具体的实施例的目的,不是旨在限制本发明。
对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。
1)跨***,本文中指安卓***的原生应用(下文中简称为安卓应用)在区别于安卓(Android)***的视窗***运行,其中,安卓***内核基于Linux内核实现,视窗***使用微软视窗新技术(Windows NT,Microsoft Windows New Technology)内核,例如:Windows7、Windows8和Windows10等各种发行版本,提供32位平坦寻址,使用32位指令集,具有高安全性和对精简指令集(RISC,Reduced Instruction Set Computer)机器的可移植性。
2)用户态,当安卓应用的进程在执行安卓***自身的代码时,称进程处于用户运行态(简称为用户态),进程此时处于最低特权级别(例如在安卓***中为ring3);运行于用户态的进程可以执行的操作和访问的资源都会受到限制,一般地,进程默认运行于用户态,进程在通常情况下不允许访问内核数据,也无法使用Linux内核功能,只能在用户空间操作用户数据,调用用户空间函数,当一些操作需要使用安卓***的安卓***内核功能,例如内存管理、驱动程序、驱动程序和输入/输出(I/O)管理等时,进程会从用户态切换到内核态并陷入内核代码去执行,这个切换过程称为进程陷入(Trap)内核态。
3)内核态,当安卓应用的进程通过发起***调用请求而陷入内核代码中执行时,称进程处于内核运行态(简称为内核态),进程此时处于最高特权级别(例如在安卓***中为ring0),当进程处于内核态时,由Linux内核为进程在执行***调用函数,内核态的进程可以执行任何操作并且在资源的使用上没有限制。
4)***调用请求,安卓应用中用于调用***调用接口的指令,也称为***调用指令,例如图1中用户态的进程执行了调用***调用接口abc()的指令,安卓应用的进程在陷入内核态之前,会通过向寄存器存储***调用函数的参数(包括***调用号)的方式,向内核态以声明需要调用的***调用函数,例如图1中用户态的进程执行了调用***调用接口abc()的指令之前,会将eax寄存器的值置为需要调用的***调用函数对应的***调用号。
5)***调用接口(System Call Interface),安卓***内核中开放给安卓应用发起***调用请求的统一入口,通过向寄存器存入***调用函数的参数(例如***调用号),并定义返回值在寄存器的存储位置,通过特定软件中断指令使用户态的进程陷入内核态,跳转到Linux内核的***调用处理程序的入口执行,在***调用处理程序结束后将进程返回用户态。仍以图1为例,***调用接口abc()使用int 0x80中断指令而使进程陷入内核态,跳转到***调用处理程序的入口(记为system_call)执行,在***调用处理程序结束后返回。
6)***调用(System Call)函数,简称为***调用,是进程进入内核的接口层,***调用是由内核函数(实现安卓***内核功能的一系列函数,诸如进程调度、内存管理、文件***、渲染和网络的函数实现)实现,实现***调用的内核函数被称为***调用服务例程,因此***调用也可以称为***调用服务例程的封装例程。
7)***调用处理程序,也称为***调用例程,是int 0x80中断指令对应的中断处理程序,当进程通过***调用接口发出int 0x80中断指令时,***调用处理程序进行现场保护,例如将寄存器的内容存入内核堆栈,通过寄存器传入内核态的参数,以及根据***调用表(System Call Table)存储的***调用号(System Call Number)与***调用函数的指针的对应关系,跳转到相应的***调用函数执行,并将参数传递给***调用服务例程,在***调用服务例程结束后,利用内核堆栈的内容恢复现场,将从***调用服务例程获得的调用结果(例如,调动成功或者出错条件)存入寄存器,然后通过执行sysret/iret指令由中断返回***调用接口,从而将进程从内核态切换回用户态。
8)Windows***中的安卓***(AOW,Android on Windows)引擎,包括一套在引擎中自实现的Linux内核,以及安卓***与Windows***之间的实时指令转换功能,用于支持在在Windows***中运行安卓应用。
9)应用程序接口(API,Application Program Interface),即预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
下面说明实现本发明实施例的跨***运行安卓应用的方法的引擎的示例性应用,结合引擎在视窗***中的设置进行示例说明。
如图2-A所示,图2-A为本发明实施例提供的运行视窗***的终端的内部结构示意图,在终端2中,包括:应用层20、操作***层21和硬件层22。操作***层21运行视窗***。应用层20包括视窗***的原生应用即视窗***应用201,通过在视窗***中设置的引擎还可以运行安卓***应用200。硬件层22包括处理器220和存储器221。
下面结合图2-B和图2-C对在视窗***中设置引擎进行示例性说明。
在本发明一些实施例中,如图2-B所示,本发明实施例提供的实现跨***运行安卓应用的方法的引擎1可以实施为终端2的应用层20的应用,例如用户在终端2的操作***21中安装引擎1的软件包的方式,使终端2运行实现引擎1的应用程序,在应用程序的进程中实现安卓***的内核功能。
在本发明一些实施例中,如图2-C所示,引擎1可以实施为在操作***层21的内核驱动程序,通过在操作***层21安装实现引擎1的内核驱动程序,在内核驱动程序的进程中实现安卓***的内核功能。
在本发明的一些实施例中,终端2可以包括:处理器220和存储器221。存储器221,用于存储可执行指令;处理器220,用于执行所述存储器存储的可执行指令时,实现本发明实施例提供的跨***运行安卓应用的方法。
实现本发明实施例的终端为运行有视窗***并根据上述任一方式设置有引擎的电子设备,例如台式机电脑和平板电脑等,本发明实施例不作限制。
这里,处理器220可以为中央处理器(CPU,Central Processing Unit)、微处理器(MPU,Microprocessor Unit)、数字信号处理器(DSP,Digital Signal Processing)或现场可编程门阵列(FPGA,Field Programmable Gate Array)等。
需要说明的是,实际应用时,终端2中的各个组件通过通信总线耦合在一起。可理解,通信总线用于实现这些组件之间的连接通信。通信总线除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,将各种总线都标为通信总线。
可以理解,存储器221可以是高速RAM存储器,也可以是非不稳定的存储器(Non-Volatile Memory),例如至少一个磁盘存储器。存储器221还可以是至少一个远离处理器220的存储***。
本发明实施例提供的跨***运行安卓应用的方法由处理器220执行可执行指令实现。处理器220可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,应用于跨***运行安卓应用的方法中的不同操作可以通过软件形式的指令完成。上述的处理器220可以是通用处理器、DSP或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。处理器220可以实现跨***运行安卓应用的方法、步骤及逻辑框图。通用处理器可以是微处理器或者任何常规的处理器等。
在本发明的一些实施例中,引擎1实现的跨***运行安卓应用的方法是通过软件形式的指令完成。
作为示例,实现引擎1的可执行指令可以存储在存储介质中,存储介质位于存储器221,处理器220读取存储器221中的信息,结合其硬件完成本发明实施例提供的跨***运行安卓应用的方法,如图3所示,引擎1包括进程单元10、视窗/安卓单元11和安卓核心功能单元12。其中,进程单元10中包括:窗体进程单元100和常驻进程单元101。
进程单元10,用于接收启动跨***运行安卓应用的引擎的指令,根据所述指令在视窗***中执行所述引擎的启动操作;
视窗/安卓单元11,用于在所述引擎的进程中,将所述安卓***包括的安卓***指令转换为等效的视窗***指令;通过执行所述等效的视窗***指令的方式运行所述安卓***;解析待执行的安卓应用,得到所述安卓应用的可执行文件包括的指令;通过执行所解析到的指令的方式运行所述安卓应用;
安卓核心功能单元12,用于当所述视窗/安卓单元解析到发起***调用请求的指令时,执行针对所述引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;其中,所述调用操作用于完成所述安卓应用通过所述***调用请求所请求实现的功能。
在一些实施例中,所述进程单元10包括:窗体进程单元100,用于执行在所述视窗***中对应所述引擎的窗体进程的操作,所述窗体进程用于在所述视窗***的窗体中显示所述安卓***的运行界面、以及所述安卓应用的运行界面;执行在所述窗体进程中启动所述引擎的常驻进程的操作。
在一些实施例中,所述进程单元10包括:常驻进程单元101,用于通过执行所述等效的视窗***指令的方式执行以下操作:在所述引擎的常驻进程中,加载所述引擎的安卓***初始化进程到内存;以及在所述安卓***初始化进程中,运行所述安卓***的启动进程和***服务。
在一些实施例中,所述视窗/安卓单元11,具体用于根据所述安卓***包括的指令,查询所述安卓***的指令集与所述视窗***的指令集之间的转换库;通过查询得到所述视窗***的指令集中等效的指令。
在一些实施例中,所述视窗/安卓单元11,还用于通过执行所述安卓应用的可执行文件包括的指令的方式执行以下操作:在所述安卓应用的用户态的进程中,通过安卓***内核的***调用接口,向所述引擎中实现的安卓***内核发起所述***调用请求,以及,将***调用号存储在寄存器中,所述***调用号对应所述***调用请求向所述安卓***内核所请求调用的***调用函数。
在一些实施例中,所述视窗/安卓单元11,具体用于在所述引擎中实现的安卓***内核中,将所述安卓应用的进程从用户态切换到内核态,从寄存器中读取***调用号,并根据所述***调用号调用所述安卓***内核中对应的***调用函数;在所述***调用函数的执行过程中,调用所述***调用函数对应的安卓***内核功能,并将***调用结果存储到寄存器;将所述安卓应用的进程从内核态切换到用户态。
在一些实施例中,所述视窗/安卓单元11,还用于当所述***调用请求所请求实现的功能完成时,将所述安卓应用的进程从内核态返回用户态时,在所述安卓应用的用户态的进程中,从寄存器读取***调用结果。
在一些实施例中,所述进程单元10,具体用于在所述视窗***中启动实现所述引擎的运行于用户态的进程,或者,在所述视窗***中启动实现所述引擎的运行于内核态的内核驱动程序。
在一些实施例中,所述进程单元10包括:窗体进程单元100,用于在所述引擎的窗体进程中显示的所述安卓应用的界面,接收对应所述安卓应用的操作;
所述视窗/安卓单元11,还用于当响应所述操作需要使用安卓***内核功能时,通过所述引擎中实现的安卓***内核的***调用接口,发起与所述安卓***内核功能对应的所述***调用请求。
在一些实施例中,所述进程单元10包括:窗体进程单元100,用于所述***调用结果表示***调用请求成功时,在所述窗体进程中显示所述***调用请求的响应界面。
至此,已经说明了本发明实施例提供的引擎的各种示例性实施。
在本发明一些实施例中,提供基于虚拟化技术的Android模拟器运行安卓应用的方案,Android模拟器分为两种基本类型:Bluestacks和Virtualbox。Bluestacks是最早在PC上实现流畅运行安卓***的方案。Bluestacks的原理是开发了一套虚拟机机制,由于是独立开发的虚拟机,所以对PC硬件本身没有要求,在硬件兼容性方面有一定优势。Virtualbox是Oracle公司开发,开源的虚拟机方案,通过在Windows内核底层直接***驱动模块,创建一个完整虚拟的电脑环境运行安卓***,由虚拟化技术构造出安卓***需要的运行***,用户可在虚拟机中运行对应的Android游戏。
然而,Bluestacks需要模拟的Android接口数量巨大,很难面面俱到,而且虚拟机的运行过程本身需要耗费PC端的大量硬盘空间和内存,PC端大量的***资源被占用,将导致降低PC端各进程运行的响应速度。而Virtualbox通过CPU VT硬件加速,性能和兼容性都会更好,但是必须安装该虚拟机的全套内核级的驱动程序,在应用程序的运行过程中调用各内核驱动的过程极为复杂,且耗费***资源,对电脑配置要求较高,而且需要PC有一定的配置条件,适用性受到限制;可见,利用Android模拟器运行安卓应用的方案,存在兼容性和效率的问题。
针对上述问题,继续结合图1至图3,对实现本发明实施例的跨***运行安卓应用的方法的示例性实施进行说明。本发明实施例提供了一种跨***运行安卓应用的方法,如图4所示,涉及步骤S101至步骤S107,下面将对各个步骤进行说明。
步骤S101、接收启动跨***运行安卓应用的引擎的指令,根据指令在视窗***中执行引擎的启动操作。
本发明实施例提供的在视窗***中启动的跨***运行安卓***的引擎简称为AOW引擎,在对启动AOW引擎进行说明之前,首先说明实现本发明实施例的AOW引擎。
在基于Windows NT内核的各种版本的Windows***中运行安卓***以及安卓应用,即跨***运行安卓应用,其中,视窗***作为安卓***的宿主***,作为示例,运行Windows***的电子设备可以是台式电脑、笔记本电脑或者平板电脑等各种终端设备,本发明实施例不作限制。
在本发明一些实施例中,安卓***中的操作将涉及到Linux内核的相关操作,如Linux内核的数据结构,信号管理机制等,在AOW引擎中进行了深度定制,在AOW引擎中利用Windows底层API和Windows NT内核实现Linux内核,包括Linux内核的***调用(函数)和内核功能模块(例如,在Windows***用户层或内核层实现),如:进程调度、内存管理、文件***等,从而支持在Windows***中运行安卓***,进而可以在安卓***中运行安卓应用。
举例来说,实现本发明实施例的AOW引擎是一套组件,使得安卓***环境中的可执行格式(ELF,Executable and Linking Format)的二进制文件(下文中简称为二进制文件),从而使安卓***以及安卓应用的二进制文件能够运行于Windows***中。
下面对Windows***特权权限进行说明,以Windows***的硬件平台为Intel的386CPU为例,存在4个特权权限:从ring0到ring3;其中,ring0的特权权限级别最高,任意代码可以在用户态运行,ring3特权权限级别最低,只能执行有限代码;在Windows***中,内核态的特权权限级别为ring0,用户态的特权权限级别为ring3,Windows***的核心代码运行在内核态以避免受到恶意的攻击;而运行在用户态的应用程序的特权权限因受到限制可以保证***安全,如果应用程序进行一些诸如直接访问物理内存的动作,那么就需要切换到内核态去执行Windows***的核心代码来完成所需的功能,这样可以保证***安全。
举例来说,Windows***中的应用程序处于用户态时,应用程序需要切换为内核态以调用Windows***的子***中的API,这些子***除了Win32,还有POSIX、OS/2等,这里,为兼容16位应用程序或其他***应用程序,需要通过调用Win32子***来实现。Win32子***将API函数转化为底层API,***版本的变化只是底层API的改变,并没有修改Win32,即没有改变Win32API函数的名称和参数,这样实现了对应用程序的兼容,在底层API中的函数调用被转化为***服务函数调用并进入内核态,并进一步向下传递实现相应功能。
在本发明一些实施例中,Windows***的Windows NT内核明确地分离了用户态和内核态,所有的应用程序再也不可能无意之中改写***进程使用的数据和进程空间的内容,从而避免***出现人为的非法操作,令Windows***更安全,稳定。
根据上述说明Windows***中的用户态和内核态,AOW引擎在Windows***中可以实现为用户态,以保证Windows***的安全性;当然AOW引擎在Windows***中也可以实现为内核态,下面就内核态AOW引擎(在硬件层实现引擎的情况)和用户态AOW引擎(在应用层实现引擎的过程)两种版本进行说明。
作为示例,AOW引擎在Windows***的用户态实现(即用户态版本),用户态版本的AOW引擎实现为Windows***应用程序,利用Windows底层的API的编程,实现Linux内核的***调用(函数)和Linux内核功能(是内核函数的封装),从而实现Linux的***环境。
作为示例,AOW引擎在Windows***的内核态实现(即内核态版本),内核态版本的AOW引擎实现为Windows***中内核驱动程序,把Linux内核的***调用(函数)和Linux内核的功能在Windows NT内核的驱动层实现。
根据上述示例,本发明实施例提供的AOW引擎相当于在安卓***的二进制文件和Windows NT内核之间的一层介质,通过AOW引擎加载安卓***环境中可执行文件,并运行其中的针对Linux内核的***调用,并利用在AOW引擎中实现Linux内核完成***调用请求。
在本发明一些实施例中,由于Windows NT内核允许运行子***环境,所以可以利用Windows NT内核提供的API的编程功能,根据实际需求在AOW引擎中开发、扩展Windows***中用于运行安卓应用的子***,这样,AOW引擎就可以在Windows***中跨***运行安卓***以及安卓应用。
至此,已经说明了实现本发明实施例的AOW引擎,继续说明AOW引擎在Windows***中的启动过程。
在本发明一些实施例中,在引擎所在的终端开机时,引擎会接收启动跨***运行安卓应用的引擎的指令;根据上述指令就可以在视窗***中执行引擎的启动操作,实现引擎的启动。
在本发明一些实施例中,根据上述指令在视窗***中执行引擎的启动操作时,执行在Windows***中启动对应AOW引擎的窗体进程的操作,使得窗体进程先启动,其中,窗体进程用于在视窗***的窗体中显示安卓***的运行界面、以及安卓应用的运行界面,然后执行在窗体进程中启动Windows***中对应AOW引擎的常驻进程的操作。针对用户态版本的AOW引擎,AOW引擎的窗体进程启动后,执行在视窗***中启动实现引擎的运行于用户态的进程的操作,即在窗体进程中启动Windows***中对应AOW引擎的Native进程,即引擎的Native进程。针对内核态版本的AOW引擎,AOW引擎的窗体进程启动后,执行在视窗***中启动实现引擎的运行于内核态的内核驱动程序的驱动进程的操作,从而启动AOW引擎。
作为示例,假设AOW引擎的窗体进程为aow_gui进程,当AOW引擎启动时,AOW引擎的aow_gui进程首先启动,aow_gui进程是一个Win32的与用户交互的窗体程序,aow_gui进程启动后,针对用户态版本的AOW引擎,会开启Windows***中对应AOW引擎的Native进程,在Native进程会启动AOW引擎的核心功能。针对内核态版本的AOW引擎,在视窗***中启动实现引擎的运行于内核态的内核驱动程序,以启动AOW引擎的核心功能,也就是说,内核态实现的AOW引擎就是写在驱动程序中的内核功能代码实现的。
在本发明一些实施例中,AOW引擎实现的Linux内核的核心功能可以包括:进程调度、内存管理、文件***、网络和渲染。
在本发明一些实施例中,利用Windows NT内核的进程调度机制和进程间通信的方式来实现Linux内核的进程管理方案,在AOW引擎用到了管道机制、信号机制、共享内存机制和Socket机制。
在本发明一些实施例中,可以将基于Linux文件***的安卓相关数据的数据结构转换为基于Windows***的相关数据的数据结构,以实现数据在安卓***及Windows***之间的正常便捷通信,在Windows***中建立并处理安卓***的相应信号、并在Windows***中管理安卓***的内存分配等。下面针对内存管理、文件***、网络和渲染再进行详细的说明。
内存管理:安卓***和Windows***的内存管理方式是不同的,AOW引擎基于Windows NT内核API中的虚拟内存管理机制(VirtualAlloc、CreateFileMapping等)实现了一套兼容Linux中mmap2、brk等***调用的内存管理机制。
文件***:AOW引擎提供了ext4文件***支持,包含了安卓***的根目录和应用程序文件(/data,/system,/etc等),利用Windows NT内核的原生进程文件读写机制(NtCreateFile、NtReadFile、NtWriteFile等)实现了一套兼容ext4文件***的机制。
网络:AOW引擎会从Windows***查询网络接口列表和DNS服务器,并将这些信息传递Linux内核的核心功能模块,之后会在本地缓存有关各种网络接口的所有信息。AOW引擎将通过调用已注册的回调处理程序来通知服务对被监视网络信息的任何更改。当有信息更改时,回调处理程序会将信息通知给Linux内核的核心功能模块。在AOW引擎实现的Linux内核里对网络请求进行封装处理,然后通过进程间通信方式-管道技术把封装的包传输到aow_gui进程解包,转换成Windows***中可识别的形式。
渲染:openGL是免费的2D/3D图形API软件库,是一套绘图函数的标准,在安卓上应用的是一个分支子集openGLES,是openGL针对嵌入式设备而设计的。AOW引擎中安卓***调用底层自实现的openGLES接口,把函数名、参数封装成数据流,然后通过管道传给aow_gui进程,由aow_gui进程解包出函数名、参数等转换成Windows***可以识别的openGL或directx接口函数。
步骤S102、在引擎启动后的进程中,将安卓***包括的安卓***指令转换为等效的视窗***指令。
步骤S103、通过执行等效的视窗***指令的方式运行安卓***。
步骤S104、解析待执行的安卓应用,得到安卓应用的可执行文件包括的指令。
步骤S105、通过执行所解析到的指令的方式运行安卓应用。
步骤S106、当解析到发起***调用请求的指令时,执行针对引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;其中,调用操作用于完成安卓应用通过***调用请求所请求实现的功能。
在本发明一些实施例中,在引擎启动后的进程中,将安卓***包括的安卓***指令转换为等效的视窗***指令,这样,通过执行等效的视窗***指令的方式运行安卓***,从而在安卓***中实现对安卓应用的运行和应用。
在本发明一些实施例中,对于转换Android***指令为Windows***指令而言,通过如下方式实现:根据安卓***包括的指令,查询安卓***的指令集与视窗***的指令集之间的转换库;通过查询得到视窗***的指令集中等效的指令。即在AOW引擎的常驻进程中,根据Android***的指令集与Windows***的指令集之间的转换库,查询出与Android***包括的指令、以及Android应用包括的指令对应的Windows***的指令集中等效的指令。
举例来说,Windows***的平台为x86平台,使用x86架构的CPU,而Android***的平台为高级精简指令集机器(ARM,Advanced RISC Machine)平台,Android***以及Android应用的二进制文件中包括一系列ARM指令,这些ARM指令是根据ARM平台而编译的,而在Windows***中只能运行针对x86平台而编译的指令即x86指令,ARM指令无法在基于x86平台的Windows***中执行,通过ARM-x86库将ARM指令转换为等效的x86指令,通过在Windows***中执行转换后得到的x86指令,Android***和Android应用得以在Windows***中运行。
在本发明一些实施例中,对于通过执行Windows***指令运行Android***而言,可以通过如下方式实现:在引擎的常驻进程中,加载引擎的安卓***初始化进程到内存;在安卓***初始化进程中,运行安卓***的启动进程和***服务。即在AOW引擎对应的常驻进程中,加载AOW引擎的Android***初始化进程到内存,在Android***初始化进程中运行Android***的启动进程和***服务,从而实现Android***的启动。
作为示例,安卓***的初始化进程为init进程,在安卓***中,Linux内核启动的第一个用户态进程是init进程,其中,init进程为***服务和其他启动进程的父进程。
作为示例,AOW引擎的Windows***驱动文件(.sys)加载到内存后,AOW引擎得以启动,AOW引擎的常驻进程会进行上述指令转换的操作,从而对安卓***的init进程的二进制文件进行解析,将安卓***包括的ARM指令转换为X86指令并加载进内存执行,init进程顺利执行后,开启安卓***后续的启动进程和***服务,从而完成安卓***的启动。
在本发明一些实施例中,AOW引擎的核心功能模块启动后,会把安卓根目录下的init文件加载进内存并执行,由init进程启动后续的启动进程和***服务,从而启动安卓***;举例来说,启动AOW引擎的核心功能(即实现的Linux内核)后,在AOW引擎的常驻进程中,将Linux/安卓的init进程加载进内存,init进程执行后会按照安卓***的启动流程完成初始化,包括开启ZyGote、system server等进程和***服务,由ZyGote进程启动安卓Runtime即Dalvik虚拟机,从而完成安卓***的启动。
其中,init进程是Linux内核启动的第一个用户态的进程,init进程会解析Linux的脚本文件init.rc,根据这个文件的内容init进程会装载安卓的文件***,创建***目录,初始化属性***,启动安卓***的重要的守护进程等,下面对Zygote进程和SystemServer进程进行介绍。
Zygote进程:当init进程初始化结束的时候,会启动Zygote进程,Zygote进程fork出应用进程,它是所有进程的父进程,Zygote进程初始化的时候会创建Dalivik虚拟机,预装载***的资源文件和java类,所有从Zygote进程fork出的用户进程将继承和共享这些资源,不用浪费时间重新加载,创建Dalivik虚拟机完成之后,Zygote进程也将变为守护进程,负责响应启动安卓应用的启动请求。
SystemServer进程:SystemServer进程是Zygote进程fork出的第一个进程,也是整个安卓***的核心进程,在SystemServer主要运行的是Binder服务,它首要启动本地服务SensorService,接着启动ActivityManagerService,Windows ManagerService,PackgeManagerService等在内的所有java服务。
作为示例,如图6所示,AOW引擎启动时,启动的第一个进程是aow_gui进程,该进程是一个Win32的进程,Win32的进程是与用户交互的窗体程序,aow_gui进程会开启在Windows***中对应的引擎常驻进程,常驻进程会在Windows驱动内核(NT Kernel)中启动AOW引擎用以实现Linux内核的核心功能:在常驻进程中将用于实现Linux内核/安卓***实例(Instance)的init进程加载进内存,init进程执行后会按照安卓的启动流程,开启ZyGote、system server等进程和***服务,由ZyGote进程启动安卓Runtime即Dalvik虚拟机,从而把安卓***启动起来。其中,Windows***中还需要通过NT PROSS先把自己的驱动加载好才可以实现上述安卓***的启动。需要指出,Windows***在启动安卓***的同时,也可以根据需要会启动Windows***自身的***进程,例如NT PROCESS,实现Windows***的启动。
在本发明一些实施例中,安卓***启动后,在AOW引擎的文件***进程(记为aow_fs)把安卓***根目录的所有子目录和文件转换成Linux文件***;举例来说,安卓***启动后,会不断读写生成的安卓***中可以识别的Linux文件***,Linux文件***是安卓***中数据的集合,Linux文件***不仅包含着文件中的数据而且还有文件***的结构,所有安卓***的用户和应用程序的文件、目录、软连接及文件保护信息等;Linux文件***存储在安卓***的根目录(记为rootfs)中,即启动安卓***后生成的Linux文件***保存在安卓***的根目录中。
在本发明一些实施例中,AOW引擎在启动了安卓***之后,AOW引擎可以运行安卓***中的安卓应用了,通过解析待执行的安卓应用,得到安卓应用的可执行文件包括的指令,最后通过执行所解析到的指令的方式运行安卓应用;当解析到发起***调用请求的指令时,执行针对引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;其中,调用操作用于完成安卓应用通过***调用请求所请求实现的功能。
在本发明一些实施例中,通过执行安卓应用的可执行文件包括的指令的方式,执行以下操作:在安卓应用的用户态的进程中,通过安卓***内核的***调用接口,向引擎中实现的安卓***内核发起***调用请求,以及,将***调用号存储在寄存器中,***调用号对应***调用请求向安卓***内核所请求调用的***调用函数。
安卓***中运行的安卓应用的运行过程中需要使用Linux内核功能时,会发起相应功能的***调用请求,AOW引擎会接到安卓应用的***调用请求,由于本发明实施例中采用的用户态版本和内核态版本实现了安卓***的***调用和安卓***的内核功能,AOW引擎响应于安卓***中安卓应用运行时发起的***调用请求,利用AOW引擎中实现的***调用函数,以及实现的安卓***内核功能完成***调用请求,从而得到***调用结果,并向安卓应用返回该***调用结果。
作为示例,AOW引擎利用Windows API编程实现(在用户态实现的应用程序,或者内核态层实现的内核驱动程序)了Linux***调用(函数)和实现Linux内核。通过安卓应用在发起Linux***调用请求时陷入实现的Linux内核,通过调用***调用函数的方式(***调用函数需要结合Linux内核函数完成***调用)执行Linux内核的功能,比如:进程调度、内存管理、文件***、网络和渲染等。此外,x86平台与ARM平台的指令集的差异性,要想在Windows***运行安卓***,需要进行ARM平台到x86平台的指令转换。
作为示例,先说明AOW引擎的结构,如图7所示的AOW引擎的结构:AOW引擎涉及在用户态运行的部分以及在内核态运行的部分。其中:
用户态:包括aow_gui进程,它是Win32的窗体程序;常驻进程,负责启动AOW引擎的核心功能;Linux/安卓(instance)主要是通Windows API编程的方式实现Linux内核的***调用,从而可以执行Linux二进制文件。
内核态:用户态的进程通过***调用之后,通过Windows的DeviceIoControlAPI发送控制代码到Windows驱动程序实现Linux内核,在实现的Linux内核层完成***调用,实现Linux内核的功能。
其中,如图8所示,当安卓应用的进程在执行自己的代码时,称进程处于用户运行态(简称为用户态),进程此时处于最低特权级别(例如在安卓***中为ring3);运行于用户态的进程可以执行的操作和访问的资源都会受到限制,一般地,进程默认运行于用户态,进程在通常情况下不允许访问内核数据,也无法使用Linux内核的功能,只能在用户空间操作用户数据,调用用户空间函数,当一些操作需要使用安卓***的安卓***内核功能,例如内存管理、驱动程序、驱动程序和输入/输出(I/O)管理等时,进程会从用户态切换到内核态,这个切换过程称为进程陷入(Trap)内核态。当安卓应用的进程通过发起***调用请求而陷入内核代码中执行时,称进程处于内核运行态(简称为内核态),进程此时处于最高特权级别(例如在安卓***中为ring0),当进程处于内核态时,由安卓***内核为进程在执行***调用函数,内核态的进程可以执行任何操作并且在资源的使用上没有限制。
基于图7所示的AOW引擎的结构,在安卓应用的用户态的进程中发起***调用可以采用这样的方式:通过安卓***内核的***调用接口向AOW引擎实现的Linux内核发起***调用请求,并将***调用号存储在寄存器中,***调用号对应***调用请求所请求向安卓***内核调用的***调用函数。
本发明实施例提供的AOW引擎中实现了Linux内核的诸多***调用,在AOW引擎中把特定的中断号与AOW引擎中自实现(实现)的***调用处理程序相关联,安卓应用在用户态可以特定中断号陷入Linux内核,并通过向寄存器传入的***调用号,在***调用处理程序调用对应的***调用函数来完成***调用。
作为示例,***调用请求是指安卓应用中用于调用***调用接口的指令,也称为***调用指令,例如图1中用户态的进程执行了调用***调用接口abc()的指令,安卓应用的进程在陷入内核态之前,会通过向寄存器存储***调用函数的参数(包括***调用号)的方式,向内核态以声明需要调用的***调用函数,例如图1中用户态的进程执行了调用***调用接口abc()的指令之前,会将eax寄存器的值置为需要调用的***调用函数对应的***调用号。然后***调用接口abc()使用int 0x80中断指令而使进程陷入内核态,跳转到***调用处理程序的入口(记为system_call)执行调用***调用函数对应的安卓***内核功能,得到***调用结果,并向寄存器存储***调用结果,最后在***调用处理程序结束后从内核态返回用户态。即调用引擎中实现的***调用函数,以及实现的安卓***内核功能的过程为:在AOW引擎实现安卓***的内核(***调用处理程序)中,将安卓应用的进程从用户态切换到内核态,从寄存器中读取***调用号,并根据***调用号调用安卓***内核中对应的***调用函数;在***调用函数的执行过程中,调用***调用函数对应的安卓***内核功能,得到***调用结果,并将***调用结果存储到寄存器中;最后,将安卓应用的进程从内核态切换到用户态。这样,当***调用请求所请求实现的功能完成时,在引擎中实现的安卓***内核(***调用处理程序)中,将安卓应用的进程从内核态返回用户态;在安卓应用的用户态的进程中,从寄存器读取***调用结果。即AOW引擎可以响应于在安卓***的***调用处理程序中将安卓应用的进程从内核态返回用户态;在安卓应用的用户态的进程中,读取寄存器中的***调用结果。
继续对AOW引擎完成***调用的过程进行说明,AOW引擎实现了***调用处理程序,也称为***调用例程,是int 0x80中断指令对应的中断处理程序,当进程通过***调用接口发出int 0x80中断指令时,***调用处理程序进行现场保护,例如将寄存器的内容存入内核堆栈,根据进程通过寄存器传入内核态的参数,以及***调用表(System CallTable)存储的***调用号(System Call Number)与***调用函数的指针的对应关系,跳转到相应的***调用函数执行,并将参数传递给***调用服务例程,在***调用服务例程结束后,利用内核堆栈的内容恢复现场,将从***调用服务例程获得的调用结果(例如,调动成功或者出错条件)并存入寄存器,然后通过执行sysret/iret指令由中断返回***调用接口,从而将进程从内核态切换回用户态。
在安卓***中,进程通过***调用的方式陷入Linux内核,具体的实现形式是通过软中断模拟INT 80h中断来完成,AOW引擎利用Windows API实现Linux内核的***调用,从而可以执行Linux ELF二进制文件,进入Linux内核前进程会把相应的参数(即***调用函数的相关参数,包括***调用号)也(通过存储寄存器的方式)传入到Linux内核,根据参数,选择特定的Linux内核功能实现,也就是调用相应的***调用函数实现,其中***调用函数依赖于所对应的服务例程(也就是Linux内核的功能)实现;这实现的过程也就是对***调用函数进行调用的相关指令,转换为对Windows NT内核的API进行调用的相关指令的过程。
如图5所示,在安卓***中,当安卓应用的进程执行***调用时,会执行调用***调用库中定义的某个调用函数的***调用请求,该***调用函数通常会被展开成_syscallIN()的形式,用于***调用的格式转换和参数的传递,N为***调用的参数的个数;进程执行到安卓应用的***调用请求时,实际上是执行了由宏定义syscallN展开的函数,通过INT 0x80h来陷入Linux内核,同时其参数也将通过寄存器传往Linux内核。AOW引擎利用Windows API实现Linux内核的***调用,从而可以执行Linux ELF二进制文件,当执行相应的***调用时,进程会把相应的参数也传入到Linux内核,根据不同的参数,选择特定的Linux内核的功能实现。AOW引擎实现了Linux内核的诸多***调用,把中断号与自实现的***调用相关联,通过传入的调用号不同,调用不同的处理函数,本发明实施例中的内核功能可以为进程调度、内存管理和文件***等功能的实现等,本发明实施例不作限制。
在本发明一些实施例中,AOW引擎通过Windows NT内核API编程功能,实现Linux内核来执行Linux ELF二进制文件。AOW引擎负责处理与Windows NT内核协调兼容的Linux内核的***调用请求,它不包含Linux的内核代码,而是一套与Linux兼容的内核。在AOW引擎上,当***调用由安卓应用的二进制文件发出时,AOW引擎会通过Windows NT内核API编程功能,实现Linux内核来执行Linux内核的***调用。
作为示例,如图9所示,以getdents为例,当发生***调用请求时,通过INT 80h中断陷入内核态,Windows NT内核检测到***调用请求来自于AOW的进程(例如Linux的用户态操作程序Is),会把该***调用请求发送给AOW引擎中用户态版本Native进程或内核态版本的驱动程序,Native进程或驱动进程(常驻进程)通过寄存器中的参数决定去调用哪个***调用(函数),在调动这个***调用函数的过程中进行指令的实时转换,将对***调用函数的调用,转换为对Windows NT内核的API调用的指令的转换,完成***调用,返回WindowsNT内核,更新寄存器中的参数(例如将***调用结果存储在寄存器中),并调sysret/iretq指令返回到用户态。在Windows NT内核检测到***调用请求来自于Windows进程(Windows用户态操作程序,例如dir)时,直接去Windows NT内核的驱动程序中实现Windows***调用即可。
基于图9,当需要查找安卓***的安卓文件***中目录下的文件时,安卓***可以通过Is命令实现文件管理功能(例如查找文件功能),而Windows***可以通过dir命令实现文件管理功能。举例来说,在Windows***中,需要查找安卓***中的特定文件时,通过执行Is命令,在安卓文件***中实现若干个***调用来实现文件查找的过程。
在本发明一些实施例中,本发明实施例中的指令转换指的是ARM-x86指令转换。ARM-x86指令转换体现在AOW引擎的整个运行过程中,AOW引擎的目的是要在Windows***运行安卓***,安卓***的应用程序(apk、dex、odex)是被Dalvik(AOW引擎用的安卓4.4.2)解析,而Dalvik专门对于ARM平台做了优化和兼容,最终为了实现在Windows***运行安卓应用程序,需要使用ARM-x86库做指令转换,把ARM指令翻译为x86指令。AOW引擎在Windows的常驻进程中,负责把安卓的init进程加载并执行,从而将整个安卓***启动;在启动后的Linux内核的***调用实现、以及将实现出的Linux内核的核心功能模块转换为Windows NT等效的核心功能模块;上述的过程都是需要ARM实时的进行指令转换为x86指令的操作。
在本发明一些实施例中,***调用的类型会有很多种,对应很多种不同的功能实现,而针对不同的进程,会采用不同的调度策略。
这里,Windows***调用指令指的是安卓***调用指令转换后的Windows***调用指令,Windows NT内核需要判断将Windows***调用指令调用的Linux内核的进程类型,再决定采取什么策略执行***调用。在本发明一些实施例中,转换后的Windows***调用指令对应的进程类型可以包括普通进程和实时进程。那么,当Windows***调用指令的进程类型为普通进程时,采用分时调度策略执行***调用,实现与***调用对应的安卓***功能;而当Windows***调用指令的进程类型为实时进程时,采用实时调度策略执行***调用。
详细的,为了协调多个进程的“同时”运行,给进程定义优先级。如果有多个进程同时处于可执行状态,那么先执行优先级高的进程。在本发明一些实施例中,针对于普通进程,使用SCHED_NORMAL(分时调度策略)调度策略执行***调用,针对实时进程选SCHED_FIFO或SCHED_RR调度策略(实时调度策略)执行***调用。实时进程的优先级都高于普通进程,在调度策略中,实时进程只会被高级的实时进程抢占,同级的实时进程直接是按照FIFO或者RR规则调度的。对于普通进程,SCHED_NORMAL调度策略提高交互式应用的优先级,使得进程能更快地被调度。
需要说明的是,如果一个进程有实时需求(即是一个实时进程),则只要是可执行状态的,以驱动的方式实现的AOW引擎就一直执行该实时进程,以尽可能地满足实时进程对CPU的需要,直到完成所需要做的事情,然后睡眠或退出(变为非可执行状态)。而如果有多个实时进程都处于可执行状态,则AOW引擎会先满足优先级最高的实时进程对CPU的需要,直到优先级最高的实时进程变为非可执行状态。
可以理解的是,只要高优先级的实时进程一直处于可执行状态,低优先级的实时进程就一直不能得到CPU;只要一直有实时进程处于可执行状态,普通进程就一直不能得到CPU。
如果多个相同优先级的实时进程都处于可执行状态,这时就有两种调度策略可供选择:
1、SCHED_FIFO:先进先出。直到先被执行的进程变为非可执行状态,后来的进程才被调度执行。在这种策略下,先来的进程可以执行sched_yield***调用,自愿放弃CPU,以让权给后来的进程;
2、SCHED_RR:轮转调度。AOW为实时进程分配时间片,在时间片用完时,让下一个进程使用CPU。
需要说明的是,这两种调度策略仅仅针对于相同优先级的多个实时进程同时处于可执行状态的情况。在安卓***中,用户态的应用程序可以通过sched_setscheduler***调用来设置进程的调度策略以及相关调度参数;sched_setparam***调用则只用于设置调度参数。这两个***调用要求进程具有设置进程优先级的能力(CAP_SYS_NICE,一般来说需要root权限)。通过将进程的策略设为SCHED_FIFO或SCHED_RR,使得进程变为实时进程,而进程的优先级则是通过以上两个***调用在设置调度参数时指定的。
实时进程调度是让处于可执行状态的最高优先级的实时进程尽可能地占有CPU,因为它有实时需求;而普通进程则被认为是没有实时需求的进程,于是调度程序力图让各个处于可执行状态的普通进程通过CFS调度器实现和平共处地分享CPU(例如,SCHED_NORMAL),从而让用户觉得这些进程是同时运行的。
可以理解的是,本发明实施例从软件的角度,对Windows***、Linux内核和安卓***深入研究,打造出Windows和安卓之间的一层介质,使得LinuxELF二进制文件可以运行在Windows***上,AOW引擎通过Windows NT内核实现出Linux内核来执行Linux ELF二进制文件,即AOW引擎利用Windows NT内核提供的API以及编程功能,实现一套Linux内核(即内核功能,是内核函数的封装)和Linux的***调用(函数)。当***调用请求是由Linux ELF二进制文件发出时,AOW引擎会实时地将Linux内核的***调用(函数)转换为实现等效的WindowNT的函数的调用,对于Windows NT内核中没有与***调用函数等效的函数API的情况,则采用编程的方式预先实现Windows NT内核中等效的API,从而完成把安卓底层的***调用翻译(转换)成Windows API的工作。本方案没有用到虚拟化(机)技术,所以会非常的节省资源且流畅地运行安卓应用,包括游戏和软件。
本发明实施例中,不仅要考虑做成实现引擎后带给用户的更愉悦的游戏体验,更要综合考虑Windows***、安卓***和Linux内核的不同,尤其在开发中Linux内核的进程调度、内存管理、文件***、网络和渲染等***架构模块以及***调用与Windows***的差异性。本发明实施例中的实现引擎,在给用户增加新的功能体验的同时,不降低高品质的游戏畅玩效果。
作为示例,在PC Windows实现安卓***,使得用户可以在PC电脑上畅玩安卓游戏,利用电脑的硬件配置运行***,同时配合键盘和鼠标的操作,大大的提高了游戏体验,同时不会影响到游戏本身,如画质输出、流畅度等等。
可以理解的是,在引擎中执行安卓***指令到视窗***指令的转换,并通过执行转换得到的视窗***指令的方式运行安卓***,从视窗***的指令执行的层面实现安卓***,这种底层的实现方式相较于相关技术在视窗***中虚拟安卓***效率更高,还降低了硬件资源的要求;在引擎中利用自实现的***调用和安卓***内核来完成安卓应用的***调用请求,由于不需要依赖于第三方库,相较于相关技术提供的虚拟化方案,克服了对第三方库的依赖,因而能够在各种版本的视窗***中运行安卓应用,具有良好的兼容性。
基于上述实现的基础,本发明实施例提供的跨***运行安卓应用的方法还可以包括:步骤S107-步骤S108,以及步骤S109。如下:
步骤S107、在引擎的窗体进程中显示的安卓应用的界面,接收对应安卓应用的界面的操作。
步骤S108、当响应操作需要使用安卓***内核功能时,通过引擎中实现的安卓***内核的***调用接口,发起与安卓***内核功能对应的***调用请求。
AOW引擎在安卓***启动后,就可以在AOW引擎的窗体进程中显示安卓应用的界面,当用户想要在安卓***中实现安卓应用的功能时,会通过窗体进程中显示的安卓应用的界面,接收对应安卓应用的界面的操作。于是,引擎响应于完成操作执行的指令,当响应操作需要使用安卓***内核功能时,通过引擎中实现的安卓***内核的***调用接口,开始发起与安卓***内核功能对应的***调用请求,这样该AOW引擎响应于该***调用请求,利用在引擎中实现的***调用函数,以及实现的安卓***内核功能完成***调用请求,得到***调用结果,最后向安卓应用返回***调用结果,完成一次安卓***的***调用。
需要指出,一个安卓应用的功能的实现,可能需要多个***调用和安卓内核功能一起配合实现,每次***调用的流程是一致的,因此根据本发明实施例提供了详细的一次***调用的实现流程,可以轻易实施一系列的***调用。
步骤S109、当***调用结果表示***调用请求成功时,在窗体进程中显示***调用请求的响应界面。
AOW引擎向安卓应用返回***调用结果,当***调用结果表示***调用请求成功时,表征通过该***调用配合实现的安卓应用的功能是可以成功实现的,于是,该AOW引擎可以在窗体进程中显示***调用请求的响应界面。
基于上述实施例的实现,在本发明一些实施例中,当使用本发明实施例提供的安装有AOW引擎的终端时,在终端启动或开机时,接收启动跨***运行安卓应用的引擎的指令,根据指令在视窗***中执行引擎的启动操作;在AOW引擎启动后的进程中,转换安卓***指令为等效的视窗***指令,并通过执行视窗***指令的方式运行安卓***。在启动了安卓***后,在窗体进程中显示的安卓应用界面上对安卓应用进行使用,接收操作,即在安卓应用界面中接收操作,响应于完成操作执行的指令需要使用安卓***内核功能,通过安卓***内核的***调用接口,发起与安卓***内核功能对应的***调用请求,当解析到发起***调用请求的指令时,执行针对引擎中实现的***调用函数、以及实现的安卓***内核功能的调用操作;其中,调用操作用于完成安卓应用通过***调用请求所请求实现的功能,得到***调用结果;向安卓应用返回***调用结果,当***调用结果表示在***调用请求成功时,在窗体进程中显示***调用请求的响应界面,该响应界面为指令触发的功能对应的当前应用界面。
作为示例,假设安卓应用为网络游戏,当使用本发明实施例提供的安装有AOW引擎的终端时,在终端启动或开机时,接收启动跨***运行安卓应用的引擎的指令,根据指令在视窗***中启动跨***运行安卓***的引擎和安卓***(引擎)。在启动了终端中的安卓***后,在窗体进程中显示的网络游戏界面上的游戏登录界面,用户在游戏登录界面输入用户名和密码,点击确定登录按键生成登录指令,依据该登录指令对安卓***发起登录***调用等一系列请求,其中,登录***调用需要通过安卓的内核功能网络与游戏服务器进行信息交互实现,因此,转换安卓***调用为视窗***的调用,实现通过视窗***的网络功能(即网络通信),配合登录指令需要的其他***调用,从而完成通过与服务器的信息交互实现的登录过程。
那么,上述示例性的举例的实现可以基于图10的硬件实体***架构实现,在本发明一些实施例中,引擎可以安装在具有视窗***的设备或终端中,这样的设备或终端中可以安装有安卓应用,那么,本发明实施例中安卓应用的一些功能实现还可以与服务器进行信息交互来完成。
图10为本发明实施例中一种服务器与终端的信息交互的硬件实体***架构图,可以基于如图10所示的具有Windows***的终端2(例如电脑)与服务器3的架构,实现本发明实施例提供的跨***运行安卓应用的方法。
其中,服务器3为应用服务器,该服务器3与终端2通过网络4实现应用功能,网络3中包括路由器,网关等等网络实物,图中并未体现。终端的类型,可以包括具有视窗***的手机、平板电脑或PDA、台式机、PC机、智能TV等类型,即在本发明一些实施例中的终端可以为具有Windows***可安装安卓应用的终端设备,本发明实施例不作限制。
其中,终端中可以安装有各种用户所需的安卓应用,比如具备娱乐功能的应用(如视频应用,音频播放应用,游戏应用和阅读软件),又如具备服务功能的应用(如地图导航应用、团购应用和拍摄应用等),本发明实施例不作限制。
作为示例,如图11所示,在Windows***的运行界面1中,启动AOW引擎后,在AOW引擎对应的窗体进程中显示安卓***的运行界面2(也可以为安卓应用的运行界面),当想要在安卓***的运行界面2中实现文件管理功能时,可以通过操作该安卓***的运行界面2上的文件管理图标实现,结合图9,就是通过执行Is命令,去AOW引擎中的Linux内核中实现文件管理的功能的***调用,并将***调用结果返回给用户态,即在安卓***的运行界面2的区域显示文件目录3(例如,图片、音频、视频、文档、压缩包和应用等等),以便用户在文件目录3中选择查找所需的文件。
可以理解的是,在引擎中执行安卓***指令到视窗***指令的转换,并通过执行转换得到的视窗***指令的方式运行安卓***,从视窗***的指令执行的层面实现安卓***,这种底层的实现方式相较于相关技术在视窗***中虚拟安卓***效率更高,还降低了硬件资源的要求;在引擎中利用自实现的***调用和安卓***内核来完成安卓应用的***调用请求,由于不需要依赖于第三方库,相较于相关技术提供的虚拟化方案,克服了对第三方库的依赖,因而能够在各种版本的视窗***中运行安卓应用,具有良好的兼容性。
本发明实施例提供了一种计算机可读存储介质,存储有可执行指令,用于引起一个或多个处理器执行前述实施例中的跨***运行安卓应用的方法。
其中,计算机可读存储介质位于存储器中,存储器可以是磁性随机存取存储器(ferromagnetic random access memory,FRAM)、只读存储器(Read Only Memory,ROM)、可编程只读存储器(Programmable Read-Only Memory,PROM)、可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、电可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPROM)、快闪存储器(FlashMemory)、磁表面存储器、光盘、或只读光盘(Compact Disc Read-Only Memory,CD-ROM)等存储器。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (15)
1.一种跨***运行安卓应用的方法,其特征在于,包括:
接收启动跨***运行安卓应用的引擎的指令,根据所述指令在视窗***中执行所述引擎的启动操作;在所述引擎启动后的进程中,将所述安卓***包括的安卓***指令转换为等效的视窗***指令;
通过执行所述等效的视窗***指令的方式运行所述安卓***;解析待执行的安卓应用,得到所述安卓应用的可执行文件包括的指令;
通过执行所解析到的指令的方式运行所述安卓应用;
当通过所述视窗***内核,检测到所述安卓应用发起***调用请求时,接收所述视窗***的内核发送的所述***调用请求;
根据所述***调用请求调用的进程类型所确定的调度策略,执行针对所述引擎中实现的***调用函数;
在调用所述***调用函数的过程中,将所述***调用函数的指令实时转换为对所述视窗***内核的编程接口的调用的指令,通过调用所述视窗***内核的编程接口实现安卓***内核功能的调用操作,完成所述安卓应用通过所述***调用请求所请求实现的功能;所述安卓***内核功能是利用所述视窗***的编程接口实现的。
2.根据权利要求1所述的方法,其特征在于,所述在视窗***中执行所述引擎的启动操作,包括:
执行在所述视窗***中启动对应所述引擎的窗体进程的操作,其中,所述窗体进程用于在所述视窗***的窗体中显示所述安卓***的运行界面、以及所述安卓应用的运行界面;
执行在所述窗体进程中启动所述引擎的常驻进程的操作。
3.根据权利要求1所述的方法,其特征在于,所述通过执行所述等效的视窗***指令的方式运行所述安卓***,包括:
通过执行所述等效的视窗***指令的方式执行以下操作:
在所述引擎的常驻进程中,加载所述引擎的安卓***初始化进程到内存;
在所述安卓***初始化进程中,运行所述安卓***的启动进程和***服务。
4.根据权利要求1所述的方法,其特征在于,所述将所述安卓***包括的安卓***指令转换为等效的视窗***指令,包括:
根据所述安卓***包括的指令,查询所述安卓***的指令集与所述视窗***的指令集之间的转换库;
通过查询得到所述视窗***的指令集中等效的指令。
5.根据权利要求1至4任一项所述的方法,其特征在于,所述方法还包括:
通过执行所述安卓应用的可执行文件包括的指令的方式,执行以下操作:
在所述安卓应用的用户态的进程中,通过安卓***内核的***调用接口,向所述引擎中实现的安卓***内核发起所述***调用请求,以及,
将***调用号存储在寄存器中,所述***调用号对应所述***调用请求向所述安卓***内核所请求调用的***调用函数。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述引擎中实现的安卓***内核中,将所述安卓应用的进程从用户态切换到内核态,从寄存器中读取***调用号,并根据所述***调用号调用所述安卓***内核中对应的***调用函数;
在所述***调用函数的执行过程中,调用所述***调用函数对应的安卓***内核功能,并将***调用结果存储到寄存器;
将所述安卓应用的进程从内核态切换到用户态。
7.根据权利要求1至4、或6任一项所述的方法,其特征在于,所述方法还包括:
当所述***调用请求所请求实现的功能完成时,在所述引擎中实现的安卓***内核中,将所述安卓应用的进程从内核态返回用户态;
在所述安卓应用的用户态的进程中,从寄存器读取***调用结果。
8.根据权利要求1至4、或6任一项所述的方法,其特征在于,所述在视窗***中执行所述引擎的启动操作,包括:
在所述视窗***中启动实现所述引擎的运行于用户态的进程,或者,
在所述视窗***中启动实现所述引擎的运行于内核态的内核驱动程序。
9.根据权利要求2所述的方法,其特征在于,所述方法还包括:
在所述引擎的窗体进程中显示的所述安卓应用的界面,接收对应所述安卓应用的操作;
当响应所述操作需要使用安卓***内核功能时,通过所述引擎中实现的安卓***内核的***调用接口,发起与所述安卓***内核功能对应的所述***调用请求。
10.根据权利要求2所述的方法,其特征在于,所述方法还包括:
当所述***调用结果表示***调用请求成功时,在所述窗体进程中显示所述***调用请求的响应界面。
11.一种终端,其特征在于,设置有引擎,所述引擎包括:
进程单元,用于接收启动跨***运行安卓应用的引擎的指令,根据所述指令在视窗***中执行所述引擎的启动操作;视窗/安卓单元,用于在所述引擎的进程中,将所述安卓***包括的安卓***指令转换为等效的视窗***指令;通过执行所述等效的视窗***指令的方式运行所述安卓***;解析待执行的安卓应用,得到所述安卓应用的可执行文件包括的指令;通过执行所解析到的指令的方式运行所述安卓应用;
安卓核心功能单元,用于当通过所述视窗***内核,检测到所述安卓应用发起***调用请求时,接收所述视窗***的内核发送的所述***调用请求;根据所述***调用请求调用的进程类型所确定的调度策略,执行针对所述引擎中实现的***调用函数;在调用所述***调用函数的过程中,将所述***调用函数的指令实时转换为对所述视窗***内核的编程接口的调用的指令,通过调用所述视窗***内核的编程接口实现安卓***内核功能的调用操作,完成所述安卓应用通过所述***调用请求所请求实现的功能;所述安卓***内核功能是利用所述视窗***的编程接口实现的。
12.根据权利要求11所述的终端,其特征在于,
所述进程单元包括:窗体进程单元,用于执行在所述视窗***中对应所述引擎的窗体进程的操作,所述窗体进程用于在所述视窗***的窗体中显示所述安卓***的运行界面、以及所述安卓应用的运行界面;执行在所述窗体进程中启动所述引擎的常驻进程的操作;及在所述引擎的窗体进程中显示的所述安卓应用的界面,接收对应所述安卓应用的操作;以及所述***调用结果表示***调用请求成功时,在所述窗体进程中显示所述***调用请求的响应界面。
13.根据权利要求11所述的终端,其特征在于,
所述进程单元包括:常驻进程单元,用于通过执行所述等效的视窗***指令的方式执行以下操作:在所述引擎的常驻进程中,加载所述引擎的安卓***初始化进程到内存;以及在所述安卓***初始化进程中,运行所述安卓***的启动进程和***服务。
14.根据权利要求11至13任一项所述的终端,其特征在于,
所述视窗/安卓单元,用于根据所述安卓***包括的指令,查询所述安卓***的指令集与所述视窗***的指令集之间的转换库;通过查询得到所述视窗***的指令集中等效的指令;及通过执行所述安卓应用的可执行文件包括的指令的方式执行以下操作:在所述安卓应用的用户态的进程中,通过安卓***内核的***调用接口,向所述引擎中实现的安卓***内核发起所述***调用请求,以及,将***调用号存储在寄存器中,所述***调用号对应所述***调用请求向所述安卓***内核所请求调用的***调用函数;及在所述引擎中实现的安卓***内核中,将所述安卓应用的进程从用户态切换到内核态,从寄存器中读取***调用号,并根据所述***调用号调用所述安卓***内核中对应的***调用函数;在所述***调用函数的执行过程中,调用所述***调用函数对应的安卓***内核功能,并将***调用结果存储到寄存器;将所述安卓应用的进程从内核态切换到用户态;及当所述***调用请求所请求实现的功能完成时,将所述安卓应用的进程从内核态返回用户态时,在所述安卓应用的用户态的进程中,从寄存器读取***调用结果;以及当响应所述操作需要使用安卓***内核功能时,通过所述引擎中实现的安卓***内核的***调用接口,发起与所述安卓***内核功能对应的所述***调用请求;
所述进程单元,具体用于在所述视窗***中启动实现所述引擎的运行于用户态的进程,或者,在所述视窗***中启动实现所述引擎的运行于内核态的内核驱动程序。
15.一种计算机可读存储介质,其特征在于,存储有可执行指令,用于引起一个或多个处理器执行权利要求1至10任一项所述的跨***运行安卓应用的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810069208.7A CN108170503B (zh) | 2018-01-24 | 2018-01-24 | 一种跨***运行安卓应用的方法、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810069208.7A CN108170503B (zh) | 2018-01-24 | 2018-01-24 | 一种跨***运行安卓应用的方法、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108170503A CN108170503A (zh) | 2018-06-15 |
CN108170503B true CN108170503B (zh) | 2022-04-12 |
Family
ID=62515350
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810069208.7A Active CN108170503B (zh) | 2018-01-24 | 2018-01-24 | 一种跨***运行安卓应用的方法、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108170503B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109213535A (zh) * | 2018-07-31 | 2019-01-15 | 深圳点猫科技有限公司 | 一种基于教育操作***的程序快速启动的方法及电子设备 |
CN109445666A (zh) * | 2018-10-09 | 2019-03-08 | 上海二三四五网络科技有限公司 | 一种在个人计算机上实现安卓模拟器的控制方法及控制装置 |
EP3794477B1 (en) * | 2019-01-04 | 2023-05-10 | Baidu.com Times Technology (Beijing) Co., Ltd. | Method and system for validating kernel objects to be executed by a data processing accelerator of a host system |
CN110046479B (zh) * | 2019-03-21 | 2023-02-28 | 腾讯科技(深圳)有限公司 | 一种基于安卓操作***的链接库文件反调试方法及装置 |
CN110109718B (zh) * | 2019-03-26 | 2023-06-02 | 创新先进技术有限公司 | 一种应用程序接口调用方法及装置 |
CN110688198B (zh) * | 2019-09-24 | 2021-03-02 | 网易(杭州)网络有限公司 | ***调用方法、装置和电子设备 |
CN110825489A (zh) * | 2019-10-21 | 2020-02-21 | 网易(杭州)网络有限公司 | 安卓模拟器的应用方法、装置和终端设备 |
CN110908933A (zh) * | 2019-10-23 | 2020-03-24 | 深圳智链物联科技有限公司 | 一种兼容Windows设备的方法、***及相关设备 |
CN111179369B (zh) * | 2019-12-27 | 2023-07-25 | 珠海全志科技股份有限公司 | 一种基于安卓***的gpu渲染方法及装置 |
CN113110893B (zh) * | 2020-01-13 | 2024-04-26 | 奇安信科技集团股份有限公司 | 进程重定向方法及装置 |
CN111737025B (zh) * | 2020-05-25 | 2024-04-09 | 中车株洲电力机车研究所有限公司 | 用于实现VxWorks操作***环境下实时进程间数据调用的方法及*** |
CN111966491B (zh) * | 2020-08-04 | 2023-07-21 | Oppo广东移动通信有限公司 | 统计占用内存的方法及终端设备 |
CN112084490A (zh) * | 2020-09-09 | 2020-12-15 | 南京烽火星空通信发展有限公司 | 一种基于Linux内核调用实现软件源代码的保护方法及*** |
CN112099923B (zh) * | 2020-11-17 | 2021-02-05 | 江苏北弓智能科技有限公司 | 一种运行于Linux操作***上的Android虚拟化*** |
CN114095781A (zh) * | 2021-11-02 | 2022-02-25 | 北京鲸鲮信息***技术有限公司 | 多媒体数据处理方法、装置、电子设备及存储介质 |
CN114020414B (zh) * | 2021-11-09 | 2024-03-19 | 成都阿加犀智能科技有限公司 | Android***与底层Linux共生方法、装置、电子设备及存储介质 |
CN114035863A (zh) * | 2021-11-11 | 2022-02-11 | 北京鲸鲮信息***技术有限公司 | 在Linux***中操作安卓应用的方法、装置和设备 |
CN113934464A (zh) * | 2021-12-14 | 2022-01-14 | 北京鲸鲮信息***技术有限公司 | Linux***中启动安卓应用的方法、装置和电子设备 |
CN114489850B (zh) * | 2022-01-20 | 2023-08-22 | 中广核工程有限公司 | 一种设计软件的调用方法、装置、计算机设备及存储介质 |
CN115309554A (zh) * | 2022-06-29 | 2022-11-08 | 统信软件技术有限公司 | 基于兼容层运行的应用的排错方法、排错***及计算设备 |
CN115827120B (zh) * | 2023-01-10 | 2023-05-23 | 苏州浪潮智能科技有限公司 | 用户态网络栈调用、用户态接口设置方法和装置 |
CN115827112B (zh) * | 2023-02-21 | 2023-05-05 | 麒麟软件有限公司 | 一种在Web操作***上运行安卓应用程序的***及方法 |
CN117234655B (zh) * | 2023-11-13 | 2024-01-26 | 成都阿加犀智能科技有限公司 | 基于安卓***运行Linux桌面程序的方法、装置、设备及介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102123196A (zh) * | 2010-12-29 | 2011-07-13 | 浙大网新科技股份有限公司 | 在Android手机上实现WinCE/Android混合API的方法 |
CN103327117A (zh) * | 2013-07-05 | 2013-09-25 | 百度在线网络技术(北京)有限公司 | 应用程序的跨***运行方法和装置 |
CN103488466A (zh) * | 2012-06-11 | 2014-01-01 | 联想(北京)有限公司 | 用于执行应用程序的方法和装置 |
WO2016176059A1 (en) * | 2015-04-28 | 2016-11-03 | Microsoft Technology Licensing, Llc | Mapping between local and remote for seamless build and design time experience |
CN106293880A (zh) * | 2016-08-10 | 2017-01-04 | 北京奇虎科技有限公司 | 在Windows***上运行Android应用程序的方法及装置 |
CN106445630A (zh) * | 2016-08-10 | 2017-02-22 | 北京奇虎科技有限公司 | Android模拟器及实现Android模拟器的方法 |
CN106951294A (zh) * | 2017-03-28 | 2017-07-14 | 北京奇虎科技有限公司 | 一种用于为跨***应用提供服务的方法及设备 |
CN106970828A (zh) * | 2017-03-28 | 2017-07-21 | 北京奇虎科技有限公司 | 一种用于对指令进行自适应的方法及设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9165332B2 (en) * | 2012-01-27 | 2015-10-20 | Microsoft Technology Licensing, Llc | Application licensing using multiple forms of licensing |
-
2018
- 2018-01-24 CN CN201810069208.7A patent/CN108170503B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102123196A (zh) * | 2010-12-29 | 2011-07-13 | 浙大网新科技股份有限公司 | 在Android手机上实现WinCE/Android混合API的方法 |
CN103488466A (zh) * | 2012-06-11 | 2014-01-01 | 联想(北京)有限公司 | 用于执行应用程序的方法和装置 |
CN103327117A (zh) * | 2013-07-05 | 2013-09-25 | 百度在线网络技术(北京)有限公司 | 应用程序的跨***运行方法和装置 |
WO2016176059A1 (en) * | 2015-04-28 | 2016-11-03 | Microsoft Technology Licensing, Llc | Mapping between local and remote for seamless build and design time experience |
CN106293880A (zh) * | 2016-08-10 | 2017-01-04 | 北京奇虎科技有限公司 | 在Windows***上运行Android应用程序的方法及装置 |
CN106445630A (zh) * | 2016-08-10 | 2017-02-22 | 北京奇虎科技有限公司 | Android模拟器及实现Android模拟器的方法 |
CN106951294A (zh) * | 2017-03-28 | 2017-07-14 | 北京奇虎科技有限公司 | 一种用于为跨***应用提供服务的方法及设备 |
CN106970828A (zh) * | 2017-03-28 | 2017-07-21 | 北京奇虎科技有限公司 | 一种用于对指令进行自适应的方法及设备 |
Non-Patent Citations (1)
Title |
---|
windows10相关资料(四);逝去的湮火;《https://mp.weixin.qq.com/s/0RnIXT3KBVfP4QXzdFpaBg》;20150809;第2-5页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108170503A (zh) | 2018-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108170503B (zh) | 一种跨***运行安卓应用的方法、终端及存储介质 | |
Chen et al. | Enabling FPGAs in the cloud | |
US8321656B2 (en) | Timer use in extensible firmware interface compliant systems | |
US9081601B2 (en) | Virtual mobile infrastructure and its base platform | |
US8074231B2 (en) | Configuration of isolated extensions and device drivers | |
US9146760B2 (en) | Fast booting a computing device to a specialized experience | |
US20050216920A1 (en) | Use of a virtual machine to emulate a hardware device | |
JP5345652B2 (ja) | 部分仮想化マシンに基づく統一格納装置 | |
JP5496683B2 (ja) | カスタマイズ方法及びコンピュータシステム | |
WO2020151306A1 (zh) | 一种容器自适应伸缩方法、服务器及存储介质 | |
EP2843552B1 (en) | Method and system for executing callback functions delivered via a communication between a user-space application and the operating system kernel | |
US20060020940A1 (en) | Soft-partitioning systems and methods | |
US11860796B2 (en) | Execution space agnostic device drivers | |
US20190227995A1 (en) | Layer-Based File Access Method and Apparatus of Virtualization Instance | |
JP2008524686A (ja) | コンピュータ装置においてアプリケーションを保守する方法 | |
US20110219373A1 (en) | Virtual machine management apparatus and virtualization method for virtualization-supporting terminal platform | |
CN113778612A (zh) | 基于微内核机制的嵌入式虚拟化***实现方法 | |
US8200938B2 (en) | Computer system and method providing a memory buffer for use with native and platform-independent software code | |
CN112130960A (zh) | 一种轻量化移动边缘计算节点及构建方法 | |
US6961848B2 (en) | System and method for supporting legacy operating system booting in a legacy-free system | |
US7552434B2 (en) | Method of performing kernel task upon initial execution of process at user level | |
US20170329622A1 (en) | Shared virtual data structure of nested hypervisors | |
CN112256421A (zh) | 通信处理方法、装置、存储介质及电子设备 | |
Ming | Analysis and a case study of transparent computing implementation with UEFI | |
CN114911538B (zh) | 一种运行***的启动方法及计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |