CN113296890A - 一种基于系统调用代理的安卓虚拟化方法及系统 - Google Patents
一种基于系统调用代理的安卓虚拟化方法及系统 Download PDFInfo
- Publication number
- CN113296890A CN113296890A CN202110557154.0A CN202110557154A CN113296890A CN 113296890 A CN113296890 A CN 113296890A CN 202110557154 A CN202110557154 A CN 202110557154A CN 113296890 A CN113296890 A CN 113296890A
- Authority
- CN
- China
- Prior art keywords
- resource
- system call
- android
- module
- remote
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 92
- 238000005516 engineering process Methods 0.000 claims abstract description 9
- 230000008569 process Effects 0.000 claims description 66
- 238000004891 communication Methods 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 6
- 238000013507 mapping Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 claims description 2
- 230000001133 acceleration Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012549 training Methods 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
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/4555—Para-virtualisation, i.e. guest operating system has to be modified
-
- 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/45558—Hypervisor-specific management and integration aspects
-
- 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/02—Network architectures or network communication protocols for network security for separating internal from external traffic, e.g. firewalls
- H04L63/0281—Proxies
-
- 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/45558—Hypervisor-specific management and integration aspects
- G06F2009/45595—Network integration; Enabling network access in virtual machine instances
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开一种基于系统调用代理的安卓虚拟化方法及系统,以支持安卓系统在运行时动态绑定硬件设备。所述方法包括一种远程系统调用协议以及资源动态绑定方法:通过系统调用代理技术实现的远程系统调用协议,将安卓硬件抽象层发出的本地系统调用翻译为远程节点上的系统调用;根据资源类型动态地绑定安卓虚拟机与远程主机上的硬件资源,并根据该绑定关系转发远程系统调用消息,安卓系统运行时只需重启相应系统服务即可重置资源绑定关系。该方法的特点在于:虚拟机无需预先指定硬件设备模型,即可在运行时动态绑定并使用位于不同节点上的硬件设备,将安卓虚拟机与硬件解耦,满足了虚拟化安卓系统中各类移动应用的需求,提高了资源的利用率。
Description
技术领域
本发明涉及一种基于系统调用代理的安卓虚拟化方法及系统,属于计算资源利用技术领域。
背景技术
在移动互联网时代,随着移动应用与移动操作系统的不断迭代,对硬件配置的要求越来越高,迫使人们不断对自己的移动设备进行更新换代,产生了大量分散闲置的计算机资源。安卓系统作为市场占有率最高的移动操作系统,通过系统虚拟化技术,在集中的服务器上运行安卓虚拟机,用户通过远程桌面等协议访问移动应用,可将分散闲置的计算机资源集中管理,提高资源的利用率。
大多数安卓移动应用的功能需要组合多类硬件设备(如摄像机、加速度传感器、触控屏等等)才能完成,安卓虚拟机需要能同时访问到这些硬件设备,以支持上层应用的功能。然而,由于单机硬件接口数量、传感器物理感知范围等限制,这些硬件设备大多分布在边缘的用户侧节点上,这就要求安卓虚拟机能访问到分布在不同节点上的硬件设备,并跟随移动应用的运行过程,动态地绑定不同的硬件设备。
诸如QEMU等传统虚拟化平台,存在着以下两点不足。首先,这些虚拟化平台上运行的虚拟机只能访问到宿主机上的硬件设备,调用远程硬件设备需要借助于专用的远程访问协议,然而大多数硬件设备驱动并不支持这类远程访问协议。其次,在虚拟机启动前,虚拟化平台需要事先配置虚拟机的硬件设备模型,无法满足其中移动应用灵活的资源使用需求。
发明内容
发明目的:针对传统系统虚拟化技术的不足,本发明公开了一种基于系统调用代理的安卓虚拟化方法及系统设计,以支持安卓系统在运行时动态地绑定远程的硬件设备。本发明通过远程系统调用协议将安卓硬件抽象层的系统调用代理到远程的设备驱动之上,使得安卓虚拟机可以访问到不同节点上的硬件设备,并将虚拟机硬件设备模型定义与硬件资源使用解耦,以实现运行时的资源动态绑定。
技术方案:一种基于系统调用代理的安卓虚拟化方法,以支持安卓系统在运行时动态地绑定硬件资源,包括基于系统调用代理的远程系统调用协议和安卓硬件资源动态绑定;
所述基于系统调用代理的远程系统调用协议通过系统调用代理技术,将安卓硬件抽象层发出的本地系统调用,转换为对远程硬件设备的系统调用;
所述安卓硬件资源动态绑定,根据系统调用所处的硬件抽象层模块类型,决定安卓虚拟机与远程硬件设备虚拟机间的绑定关系,生成消息路由表,以此转发远程系统调用消息,在安卓系统运行时只需重启硬件抽象层模块所处的系统服务即可重置资源绑定关系。
所述安卓硬件抽象层通过硬件抽象层模块向下屏蔽不同硬件厂商设备的设计与使用差异,向上提供相对统一的硬件资源访问接口,如摄像机、加速度传感器等常见的硬件设备都有对应的硬件抽象层模块实现。
所述的系统调用代理技术拦截安卓硬件抽象层中的本地系统调用,转换为对远程节点设备驱动的系统调用,通过运行在安卓系统侧的编码过程与运行在设备驱动侧的解码过程合作实现远程系统调用协议。
所述远程系统调用编解码过程,取决于系统调用参数及返回值的数据类型,包括基本数据类型、指针类型、文件描述符、函数错误码四种数据类型。
所述基本数据类型包括int、size_t等数据类型,编码过程往消息体中直接写入值即可。
所述指针类型是一个指向用户态内存的地址,根据内核的数据拷贝方向,分为内核只读、内核只写、内核读写三类:
对于内核只读类型指针,编码过程将其所指的内存数据写入到消息体中,在系统调用前,解码过程根据数据长度分配内存并写入对应的数据内容,系统调用结束后,解码过程负责回收内存对象;
对于内核只写类型指针,编码过程将其所指内存数据大小写入到消息体中,在系统调用前,解码过程根据数据长度分配内存,在系统调用后,解码过程将数据内容写入到返回消息中,编码过程将返回消息中的数据内容写入到该指针对应的内存地址中;
对于内核读写类型指针,则综合以上两种编解码过程即可。
所述文件描述符被内核用来索引各进程对内核资源的使用情况,不同进程中是独立的,解码过程需要维护一个本地和远程文件描述符的映射关系,将远程的文件描述符映射到本地打开的文件描述符之上。
所述错误码是指当系统调用出错时,内核会将错误原因写入到用户态一个名为errno的全局变量之中,解码过程读取系统调用的返回值,若为负数则代表系统调用失败,读取errno并写入到消息体中,否则将返回值写入到消息体中,若编码过程发现消息体中的errno不为空,则设置对应的全局变量以便于硬件抽象层模块的后续错误处理。
所述远程系统调用消息格式包含资源类型、资源使用编号、资源编号、系统调用号、返回值、错误码、系统调用参数列表七个部分。
所述安卓硬件资源动态绑定方法分为资源注册、资源绑定、资源使用三个过程,通过资源使用情况表来描述安卓虚拟机与硬件资源的绑定关系,通过消息路由表描述如何转发远程系统调用消息;
所述资源使用情况表包含资源类型、设备虚拟机编号、节点编号、节点地址、是否被占用等属性,被所有的节点所共享。
所述消息路由表包含资源类型、安卓虚拟机编号、远程节点地址、远程设备虚拟机编号等属性,各个运行安卓虚拟机的计算节点单独维护。
所述资源注册过程是指资源节点根据它所连接的硬件资源配置,启动包含相应设备驱动的轻量化设备虚拟机,并将这些资源信息添加到资源使用情况表之中。
所述轻量化设备虚拟机系统中只包含必要的设备驱动与远程系统调用协议的实现,通过PCI直通的方式直接访问节点上的硬件设备。
所述资源绑定过程是指安卓硬件抽象层模块初始化时,在资源使用情况表中检索类型匹配的空闲资源并绑定,在计算节点的消息路由表中添加路由条目。
所述资源使用过程中,安卓虚拟机发出的远程系统调用消息,根据所处计算节点上的消息路由表决定发送到哪个远程节点的设备虚拟机之中。
基于系统调用代理的安卓虚拟化系统,系统中节点分为两类:运行安卓虚拟机的计算节点;连接着众多硬件设备,运行设备虚拟机的资源节点。
系统主要包含系统调用编码、系统调用解码、资源适配器、资源服务器四个基本模块。系统调用编码模块运行在安卓虚拟机中,系统调用解码模块运行在设备虚拟机之中。资源适配器模块与资源服务器模块分别负责管理所处宿主机上的系统调用编码模块与系统调用解码模块,系统调用编解码模块之间的通信通过资源适配器模块与资源服务器模块进行转发。系统调用编码模块根据远程系统调用协议,将系统调用的参数编码成可在网络中传输的消息,运行在远程节点上的系统调用解码模块将消息翻译为对本地内核驱动的系统调用,系统调用结束后,解码模块根据系统调用的语义,将相应的结果编码为消息返回给对应的编码模块。
计算节点与资源节点间的拓扑结构,通过计算节点上的资源适配器模块与资源节点上的资源服务器模块来管理,模块间通过共享一份资源使用情况表来实现资源的动态绑定。资源节点上的硬件设备一般不会有频繁的变化,资源服务器模块初始化时,读取该节点的可共享硬件资源配置,启动包含相应设备驱动的轻量化设备虚拟机,并将这些资源添加到资源使用情况表中。资源适配器模块在绑定硬件资源时,根据系统调用编码模块所处的硬件抽象层类型,在资源使用情况表中检索空闲资源,绑定成功后标记资源被占用。
在计算节点上,安卓系统运行在QEMU托管的虚拟机中,在启动前无需事先指定硬件资源对应的设备模型。安卓系统启动时,随之启动SensorService、BatteryService、CameraService等系统级别的服务,这些服务所对应的硬件抽象层模块也会随之初始化,其中的系统调用编码模块也会随之注册到宿主机的资源适配器上。当这些包含硬件抽象层模块的系统服务重启时,其中的系统调用编码模块会重新初始化,对应的远程资源绑定关系也随之被重置。
在资源节点上,驱动程序被打包进轻量化操作系统运行在QEMU托管的虚拟机之中,驱动程序通过PCI直通的形式直接访问宿主机上的硬件设备。资源服务器接收资源适配器发送的远程系统调用消息,根据资源类型与编号将消息转发给同一节点上虚拟机中的系统调用解码模块,解码模块将消息翻译为对本地驱动程序的系统调用。
客户机系统中的系统调用编解码模块,与宿主机系统中的资源适配器与资源服务器模块之间,通过virtio-vsock协议进行通信。该协议基于Linux标准的socket接口设计,与串行端口通信协议相比,允许同时处理多个客户端的连接,具有配置简单、传输开销低、通信速度快等特点。
本发明与现有技术相比,其优点在于:
1)安卓虚拟机与硬件设备解耦。拓展了传统虚拟化技术的硬件设备模型,在不修改安卓上层应用以及底层设备驱动的前提下,使得安卓虚拟机可以访问远程的硬件设备。
2)硬件资源按需灵活使用。可在安卓系统运行时动态地使用各类硬件资源,满足了各类安卓移动应用的需求,提高了资源的利用率。
附图说明
图1为本发明方法流程图;
图2为本发明设计的安卓虚拟化系统的架构图;
图3为本发明中远程系统调用协议的工作流程图。
具体实施方式
下面结合具体实施例,进一步阐明本发明,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围,在阅读了本发明之后,本领域技术人员对本发明的各种等价形式的修改均落于本申请所附权利要求所限定的范围。
如图1所示,基于系统调用代理的安卓虚拟化方法,包含以下内容:
1)一种基于系统调用代理的远程系统调用协议及其实现方法:
11)系统调用代理技术拦截安卓硬件抽象层对本地设备驱动的系统调用(如open、read、ioctl、mmap等),通过远程系统调用协议,将其转换为对远程设备驱动的系统调用;
12)远程系统调用协议通过运行在安卓系统侧的编码过程与运行在设备驱动侧的解码过程合作完成,编解码过程取决于系统调用参数及返回值的数据类型,包括基本数据类型、指针类型、文件描述符、函数错误码四种数据类型;
13)对于基本数据类型,编码过程往消息体中直接写入值即可;
14)对于指针类型,根据内核的数据拷贝方向,分为内核只读、内核只写、内核读写三种情况:对于内核只读类型指针,编码过程将其所指的内存数据写入到消息体中,在系统调用前,解码过程根据数据长度分配内存并写入对应的数据内容,系统调用结束后,解码过程负责回收内存对象;对于内核只写类型指针,编码过程将其所指内存数据大小写入到消息体中,在系统调用前,解码过程根据数据长度分配内存,在系统调用后,解码过程将数据内容写入到返回消息中,编码过程将返回消息中的数据内容写入到该指针对应的内存地址中;对于内核读写类型指针,则综合以上内核只读、内核只写两种类型指针的编解码过程即可;
15)对于文件描述符,编码过程只需将其作为整型值直接写入消息体即可,解码过程需要维护一个本地和远程文件描述符的映射关系,将远程的文件描述符映射到本地打开的文件描述符之上;
16)对于错误码,解码过程读取系统调用的返回值,若为负数则代表系统调用失败,读取errno并写入到消息体中,否则将返回值写入到消息体中,若编码过程发现消息体中的errno不为空,则设置对应的全局变量;
17)对于硬件设备产生事件需要主动通知上层操作系统的情况,安卓系统一般通过ioctl系统调用采用阻塞轮训的模式来获取硬件事件,因此客户端的硬件抽象层模块通过长轮训(服务端挂起请求直到有事件产生或者超时,客户端收到应答后立即发起下一次请求)的方式向服务端发起请求并等待,即可及时获取到硬件设备产生的事件通知。
2)一种安卓硬件资源动态绑定方法,包括资源注册、资源绑定、资源使用三个过程:
21)资源注册是指资源节点根据它所连接的硬件资源配置,启动包含相应设备驱动的轻量化设备虚拟机,并将资源类型、所处虚拟机编号、节点编号、节点地址等资源基本信息添加到资源使用情况表中;
22)安卓硬件抽象层模块初始化时,在资源使用情况表中检索类型匹配的空闲资源并绑定,在计算节点的消息路由表中添加路由条目;
23)安卓虚拟机发出的远程系统调用消息,根据所处计算节点上的消息路由表决定发送到哪个远程节点的设备虚拟机之中。
图2描述了安卓虚拟化系统的整体架构。系统中节点分为两类:运行安卓虚拟机的计算节点;连接着众多硬件设备,运行设备虚拟机的资源节点。
系统主要包含系统调用编码、系统调用解码、资源适配器、资源服务器四个基本模块。系统调用编码模块运行在安卓虚拟机中,系统调用解码模块运行在设备虚拟机之中。资源适配器与资源服务器模块分别负责管理所处宿主机上的系统调用编码与解码模块,编解码模块之间的通信通过适配器与服务器进行转发。系统调用编码模块根据远程系统调用协议,将系统调用的参数编码成可在网络中传输的消息,运行在远程节点上的系统调用解码模块将消息翻译为对本地内核驱动的系统调用,系统调用结束后,解码模块根据系统调用的语义,将相应的结果编码为消息返回给对应的编码模块。
计算节点与资源节点间的拓扑结构,通过计算节点上的资源适配器模块与资源节点上的资源服务器模块来管理,模块间通过共享一份资源使用情况表来实现资源的动态绑定。资源节点上的硬件设备一般不会有频繁的变化,资源服务器模块初始化时,读取该节点的可共享硬件资源配置,启动包含相应设备驱动的轻量化设备虚拟机,并将这些资源添加到资源使用情况表中。资源适配器模块在绑定硬件资源时,根据系统调用编码模块所处的硬件抽象层类型,在资源使用情况表中检索空闲资源,绑定成功后标记资源被占用。
在计算节点上,安卓系统运行在QEMU托管的虚拟机中,在启动前无需事先指定硬件资源对应的设备模型。安卓系统启动时,随之启动SensorService、BatteryService、CameraService等系统级别的服务,这些服务所对应的硬件抽象层模块也会随之初始化,其中的系统调用编码模块也会随之注册到宿主机的资源适配器上。当这些包含硬件抽象层模块的系统服务重启时,其中的系统调用编码模块会重新初始化,对应的远程资源绑定关系也随之被重置。
在资源节点上,驱动程序被打包进轻量化操作系统运行在QEMU托管的虚拟机之中,驱动程序通过PCI直通的形式直接访问宿主机上的硬件设备。节点上的资源服务器接收计算节点发来的远程系统调用消息,解码并调用对应的驱动程序。
客户机系统中的系统调用编解码模块,与宿主机系统中的资源适配器与资源服务器模块之间,通过virtio-vsock协议进行通信。该协议基于Linux标准的socket接口设计,与串行端口通信协议相比,允许同时处理多个客户端的连接,具有配置简单、传输开销低、通信速度快等特点。
图3描述了远程系统调用协议的编解码流程,以read这种常见的系统调用为例,解释了编码模块如何将系统调用的参数写入到消息中,解码模块如何将远程系统调用翻译为本地系统调用,并将调用结果返回给编码模块。
系统调用的参数及返回值按照编解码方式的不同可分为基本数据类型、指针类型、文件描述符、错误码四类:
(1)基本数据类型,如read系统调用中的参数count,类型为size_t,这类变量往往通过值传递的方式,在系统调用过程中内核直接读取寄存器中的值,指令编码模块只需将这类变量直接写入到消息中即可。
(2)指针类型,如read系统调用中的参数buf,为void类型的指针,这类指针指向用户态的内存地址,在系统调用过程中由内核来实现用户态与内核态的数据拷贝(内核中通过copy_from_user与copy_to_user来完成),指针指向数据的大小由该系统调用的其他基本变量参数所指定。根据内核的数据拷贝方向,有内核只读、内核只写、内核读写三种远程系统调用消息编解码方式:
内核只读,对应于内核在系统调用开始时将数据从用户态拷贝到内核态的情况。在系统调用前,编码模块将其所指向的内存数据内容写入到消息体中,解码模块根据数据长度分配临时内存空间并写入对应的数据内容,系统调用结束后,解码模块回收临时内存对象;
内核只写,对应于内核在系统调用结束时将数据从内核态拷贝到用户态的情况。在系统调用前,编码模块将内存数据长度写入到消息中,解码模块根据数据长度分配临时用户态内存空间,在系统调用结束后,解码模块将临时内存空间中的数据写入到消息中,编码模块从消息中读取数据,并写入到指针所指向的内存地址中;
内核读写。上述两种编解码模式并不互斥,也可同时存在,只需综合这两种编解码过程即可。
(3)文件描述符,如open系统调用中的返回值、read系统调用中的参数fd,类型是整型值,内核通过它来索引各进程对内核资源的使用情况,也就是说对于不同进程或不同操作系统的内核来说,这个值是独立的。因此,系统调用解码模块对于每一个远程的硬件抽象层模块实例,需要分别维护一个本地和远程文件描述符间的映射关系,以翻译远程系统调用消息中的文件描述符。
(4)错误码,当系统调用出错时,通常用负数作为返回值来标记错误,并将错误码放入一个名为errno的用户态全局变量中,反之,返回值大于零表示系统调用成功。因此当系统调用解码模块发现系统调用出错时,读取errno变量并写入消息中,系统调用编码模块设置相应的全局变量;
值得一提的是,Linux中系统调用对于用户态来说是原子的,因此系统调用是线程安全的。为了保证远程系统调用的线程安全性,当硬件抽象层模块调用系统调用编码函数时,应当立即阻塞进程以避免线程切换,当系统调用编码模块返回调用结果时,恢复进程执行。
表1描述了远程系统调用协议下的消息格式。消息中包括资源类型、资源使用编号、资源编号、系统调用号、返回值、错误码、系统调用参数列表七个部分:
资源类型 | 资源使用编号 | 资源编号 | 系统调用号 | 返回值 | 错误码 | 系统调用参数列表 |
1字节 | 12字节 | 8字节 | 4字节 | 4字节 | 4字节 | 可变长度 |
资源类型为1个字节,每一种硬件抽象层模块均有各自的资源类型编号;
资源使用编号为12个字节,由计算节点编号加虚拟机编号加系统调用编码模块PID构成;
资源编号为8个字节,资源适配器通过资源类型和资源使用情况绑定空闲的资源服务器并设置资源编号,资源编号由资源节点编号加虚拟机编号组成;
系统调用号为4个字节,含义与Linux内核一致;
返回值与错误码均为4个字节;
系统调用参数列表为可变长数组,其中每一项包括参数类型、数据长度、数据内容三个部分:参数类型有基本数据类型、文件描述符、可读指针、可写指针、读写指针五类,长度为1个字节;数据内容部分是可变长度的,通过4个字节的数据长度字段确定。
虽然本发明已以较佳实施例公开如上,但它们并不是用来限定本发明,任何熟习此技艺者,在不脱离本发明之精神和范围内,自当可作各种变化或润饰,但同样在本发明的保护范围之内。
Claims (10)
1.一种基于系统调用代理的安卓虚拟化方法,其特征在于,以支持安卓系统在运行时动态地绑定硬件资源,包括基于系统调用代理的远程系统调用协议和安卓硬件资源动态绑定;
所述基于系统调用代理的远程系统调用协议通过系统调用代理技术,将安卓硬件抽象层发出的本地系统调用,转换为对远程硬件设备的系统调用;
所述安卓硬件资源动态绑定,根据系统调用所处的硬件抽象层模块类型,决定安卓虚拟机与远程硬件设备虚拟机间的绑定关系,生成消息路由表,以此转发远程系统调用消息,在安卓系统运行时只需重启硬件抽象层模块所处的系统服务即可重置资源绑定关系。
2.根据权利要求1所述的基于系统调用代理的安卓虚拟化方法,其特征在于,所述的系统调用代理技术拦截安卓硬件抽象层中的本地系统调用,转换为对远程节点设备驱动的系统调用,通过运行在安卓系统侧的编码过程与运行在设备驱动侧的解码过程合作实现远程系统调用协议。
3.根据权利要求2所述的基于系统调用代理的安卓虚拟化方法,其特征在于,所述远程系统调用编解码过程,取决于系统调用参数及返回值的数据类型,包括基本数据类型、指针类型、文件描述符、函数错误码四种数据类型;
所述基本数据类型的编码过程往消息体中直接写入值即可;
所述指针类型是一个指向用户态内存的地址,根据内核的数据拷贝方向,分为内核只读、内核只写、内核读写三类:
对于内核只读类型指针,编码过程将其所指的内存数据写入到消息体中,在系统调用前,解码过程根据数据长度分配内存并写入对应的数据内容,系统调用结束后,解码过程负责回收内存对象;
对于内核只写类型指针,编码过程将其所指内存数据大小写入到消息体中,在系统调用前,解码过程根据数据长度分配内存,在系统调用后,解码过程将数据内容写入到返回消息中,编码过程将返回消息中的数据内容写入到该指针对应的内存地址中;
对于内核读写类型指针,则综合内核只读类型指针和内核只写类型指针两种编解码过程即可;
所述文件描述符被内核用来索引各进程对内核资源的使用情况,不同进程中是独立的,解码过程需要维护一个本地和远程文件描述符的映射关系,将远程的文件描述符映射到本地打开的文件描述符之上;
所述错误码是指当系统调用出错时,内核会将错误原因写入到用户态一个名为errno的全局变量之中,解码过程读取系统调用的返回值,若为负数则代表系统调用失败,读取errno并写入到消息体中,否则将返回值写入到消息体中,若编码过程发现消息体中的errno不为空,则设置对应的全局变量以便于硬件抽象层模块的后续错误处理。
4.根据权利要求1所述的基于系统调用代理的安卓虚拟化方法,其特征在于,所述远程系统调用消息的格式包含资源类型、资源使用编号、资源编号、系统调用号、返回值、错误码、系统调用参数列表七个部分。
5.根据权利要求1所述的基于系统调用代理的安卓虚拟化方法,其特征在于,所述安卓硬件资源动态绑定方法分为资源注册、资源绑定、资源使用三个过程,通过资源使用情况表来描述安卓虚拟机与硬件资源的绑定关系,通过消息路由表描述如何转发远程系统调用消息;
所述资源使用情况表包含资源类型、设备虚拟机编号、节点编号、节点地址、是否被占用等属性,被所有的节点所共享;
所述消息路由表包含资源类型、安卓虚拟机编号、远程节点地址、远程设备虚拟机编号等属性,各个运行安卓虚拟机的计算节点单独维护。
6.根据权利要求5所述的基于系统调用代理的安卓虚拟化方法,其特征在于,所述资源注册过程是指资源节点根据它所连接的硬件资源配置,启动包含相应设备驱动的轻量化设备虚拟机,并将这些资源信息添加到资源使用情况表之中;
所述轻量化设备虚拟机系统中只包含必要的设备驱动与远程系统调用协议的实现,通过PCI直通的方式直接访问节点上的硬件设备;
所述资源绑定过程是指安卓硬件抽象层模块初始化时,在资源使用情况表中检索类型匹配的空闲资源并绑定,在计算节点的消息路由表中添加路由条目;
所述资源使用过程中,安卓虚拟机发出的远程系统调用消息,根据所处计算节点上的消息路由表决定发送到哪个远程节点的设备虚拟机之中。
7.一种基于系统调用代理的安卓虚拟化系统,其特征在于,系安卓虚拟化统中节点分为两类:运行安卓虚拟机的计算节点;连接着众多硬件设备,运行设备虚拟机的资源节点;包含系统调用编码、系统调用解码、资源适配器、资源服务器四个模块;所述系统调用编码模块运行在安卓虚拟机中,系统调用解码模块运行在设备虚拟机之中;所述资源适配器模块与资源服务器模块分别负责管理所处宿主机上的系统调用编码模块与系统调用解码模块,系统调用编解码模块之间的通信通过资源适配器模块与资源服务器模块进行转发;系统调用编码模块根据远程系统调用协议,将系统调用的参数编码成可在网络中传输的消息,运行在远程节点上的系统调用解码模块将消息翻译为对本地内核驱动的系统调用,系统调用结束后,解码模块根据系统调用的语义,将相应的结果编码为消息返回给对应的编码模块。
8.根据权利要求7所述的基于系统调用代理的安卓虚拟化系统,其特征在于,计算节点上的资源适配器模块与资源节点上的资源服务器模块间通过共享一份资源使用情况表来实现资源的动态绑定;资源服务器模块初始化时,读取该节点的可共享硬件资源配置,启动包含相应设备驱动的轻量化设备虚拟机,并将这些资源添加到资源使用情况表中;
资源适配器模块在绑定硬件资源时,根据系统调用编码模块所处的硬件抽象层类型,在资源使用情况表中检索空闲资源,绑定成功后标记资源被占用。
9.根据权利要求7所述的基于系统调用代理的安卓虚拟化系统,其特征在于,在计算节点上,安卓系统运行在QEMU托管的虚拟机中,在启动前无需事先指定硬件资源对应的设备模型;安卓系统启动时,随之启动SensorService、BatteryService、CameraService系统级别的服务,这些服务所对应的硬件抽象层模块也会随之初始化,其中的系统调用编码模块也会随之注册到宿主机的资源适配器上;当包含硬件抽象层模块的系统服务重启时,其中的系统调用编码模块会重新初始化,对应的远程资源绑定关系也随之被重置;
在资源节点上,驱动程序被打包进轻量化操作系统运行在QEMU托管的虚拟机之中,驱动程序通过PCI直通的形式直接访问宿主机上的硬件设备;节点上的资源服务器接收计算节点发来的远程系统调用消息,系统调用解码模块解码并调用对应的驱动程序。
10.根据权利要求7所述的基于系统调用代理的安卓虚拟化系统,其特征在于,客户机系统中的系统调用编解码模块,与宿主机系统中的资源适配器与资源服务器模块之间,通过virtio-vsock协议进行通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110557154.0A CN113296890B (zh) | 2021-05-21 | 2021-05-21 | 一种基于系统调用代理的安卓虚拟化方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110557154.0A CN113296890B (zh) | 2021-05-21 | 2021-05-21 | 一种基于系统调用代理的安卓虚拟化方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113296890A true CN113296890A (zh) | 2021-08-24 |
CN113296890B CN113296890B (zh) | 2023-09-26 |
Family
ID=77323596
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110557154.0A Active CN113296890B (zh) | 2021-05-21 | 2021-05-21 | 一种基于系统调用代理的安卓虚拟化方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113296890B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886019A (zh) * | 2021-10-20 | 2022-01-04 | 北京字节跳动网络技术有限公司 | 虚拟机创建方法、装置、系统、介质和设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103353839A (zh) * | 2013-06-07 | 2013-10-16 | 杭州竞天数码科技有限公司 | 一种基于Android系统的通用串行设备通信模块 |
CN105808320A (zh) * | 2016-03-11 | 2016-07-27 | 四川安嵌科技有限公司 | 基于Linux容器的设备虚拟化系统及方法 |
CN111026449A (zh) * | 2019-12-10 | 2020-04-17 | 深圳市智多互动科技有限公司 | 一种在安卓系统上运行虚拟安卓系统的方法 |
WO2020165447A1 (en) * | 2019-02-15 | 2020-08-20 | Promon As | Securing virtual-machine software applications |
US20200394456A1 (en) * | 2019-06-14 | 2020-12-17 | North Inc. | Systems and methods for detecting environmental occlusion in a wearable computing device display |
-
2021
- 2021-05-21 CN CN202110557154.0A patent/CN113296890B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103353839A (zh) * | 2013-06-07 | 2013-10-16 | 杭州竞天数码科技有限公司 | 一种基于Android系统的通用串行设备通信模块 |
CN105808320A (zh) * | 2016-03-11 | 2016-07-27 | 四川安嵌科技有限公司 | 基于Linux容器的设备虚拟化系统及方法 |
WO2020165447A1 (en) * | 2019-02-15 | 2020-08-20 | Promon As | Securing virtual-machine software applications |
US20200394456A1 (en) * | 2019-06-14 | 2020-12-17 | North Inc. | Systems and methods for detecting environmental occlusion in a wearable computing device display |
CN111026449A (zh) * | 2019-12-10 | 2020-04-17 | 深圳市智多互动科技有限公司 | 一种在安卓系统上运行虚拟安卓系统的方法 |
Non-Patent Citations (2)
Title |
---|
BO AN等: "Towards a Model-Defined Cloud-of-Clouds", 《 2015 IEEE CONFERENCE ON COLLABORATION AND INTERNET COMPUTING (CIC)》 * |
苏奎: "面向桌面云服务的虚拟化关键技术研究", 《中国知网博士电子期刊》, no. 12 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113886019A (zh) * | 2021-10-20 | 2022-01-04 | 北京字节跳动网络技术有限公司 | 虚拟机创建方法、装置、系统、介质和设备 |
CN113886019B (zh) * | 2021-10-20 | 2024-04-30 | 北京字节跳动网络技术有限公司 | 虚拟机创建方法、装置、系统、介质和设备 |
Also Published As
Publication number | Publication date |
---|---|
CN113296890B (zh) | 2023-09-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7233984B2 (en) | Light weight file I/O over system area networks | |
US11093284B2 (en) | Data processing system | |
US8521912B2 (en) | Method and system for direct device access | |
US10862982B2 (en) | Cloud-scale heterogeneous datacenter management infrastructure | |
US8810591B2 (en) | Virtualization of graphics resources and thread blocking | |
US5557798A (en) | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes | |
EP0412232B1 (en) | Apparatus and method for providing high performance communication between software processes | |
US5257369A (en) | Apparatus and method for providing decoupling of data exchange details for providing high performance communication between software processes | |
US6163812A (en) | Adaptive fast path architecture for commercial operating systems and information server applications | |
US20130067193A1 (en) | Network interface controller with flexible memory handling | |
US9274972B2 (en) | Handling cross-platform system call with a shared page cache in a hybrid computing system | |
US8706942B2 (en) | Direct memory access (DMA) address translation between peer-to-peer input/output (I/O) devices | |
CN102103526A (zh) | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 | |
US7558724B2 (en) | Operation region describing a virtual device | |
US7640549B2 (en) | System and method for efficiently exchanging data among processes | |
JPH10301873A (ja) | 通信システムで比較的大きなデータ・オブジェクトの伝送を制御するシステムと方法 | |
US9069592B2 (en) | Generic transport layer mechanism for firmware communication | |
CN111431757A (zh) | 虚拟网络的流量采集方法及装置 | |
WO2022001808A1 (zh) | 一种系统以及中断处理方法 | |
CN113296890B (zh) | 一种基于系统调用代理的安卓虚拟化方法及系统 | |
CN116954830B (zh) | jailhouse下使虚拟机实现msi/x中断的方法 | |
JPH10307732A (ja) | メッセージ伝送方法 | |
US6782464B2 (en) | Mapping a logical address to a plurality on non-logical addresses | |
Wilkinson et al. | Evaluation of a distributed single address space operating system | |
Tanenbaum et al. | The Amoeba Microkennel |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
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 |