CN113821309A - 一种微内核虚拟机间的通信方法、装置、设备及存储介质 - Google Patents
一种微内核虚拟机间的通信方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN113821309A CN113821309A CN202111351125.5A CN202111351125A CN113821309A CN 113821309 A CN113821309 A CN 113821309A CN 202111351125 A CN202111351125 A CN 202111351125A CN 113821309 A CN113821309 A CN 113821309A
- Authority
- CN
- China
- Prior art keywords
- communication
- virtual machine
- address
- shared memory
- bus
- 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
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/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/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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明提供了一种微内核虚拟机间的通信方法、装置、设备与存储介质,该通信方法包括:在共享内存中创建一条或多条共享内存的总线,并配置共享内存中的总线通信管理区;各虚拟机根据各自的套接字绑定到相应的共享内存的总线;发送虚拟机利用所述总线通信管理区,确定当前通信消息在共享内存中的第一地址,并把所述通信消息写入到所述第一地址;接收虚拟机利用所述总线通信管理区,确定所述第一地址,并从所述第一地址中读取所述通信消息。本发明的所提供的方法、装置、设备与存储介质实现发送虚拟机和接收虚拟机基于该地址直接交换通信消息和/或通信数据而从而实现高速通信。
Description
技术领域
本发明涉及操作系统领域,尤其涉及一种微内核虚拟机间的通信方法、装置、设备及存储介质。
背景技术
微内核操作系统架构包括多个应用虚拟机和服务虚拟机。应用虚拟机向用户提供隔离的独立的应用运行环境。由于在同一平台的应用虚拟机数量的增多,导致虚拟机之间产生高速通信的需求。微内核操作系统通常会提供多种进程间通信(Inter-ProcessCommunication,IPC)机制,IPC机制实现基础源于内核空间属于虚拟机共享的地址空间,同时用户空间相互独立且互不访问。因此微内核操作系统提供IPC 机制用于解决虚拟机间数据共享问题,传统操作系统一般采用的是图1示出的用户空间->内核空间->用户空间两次拷贝数据来实现 IPC 机制。
但将传统的 IPC 机制运用在频繁调用的微内核中,必然导致微内核系统整体性能的下降,原因在于传输的数据需要两次拷贝并且导致两次用户空间与内核空间切换,增加了后备缓冲器(translation lookaside buffer,TLB)和高速缓存 (Cache)的填充切换次数,使得TLB命中率下降,最终造成系统性能的损失。
在大量数据传输的情况下微内核 IPC的性能受到比较大的影响。对于微内核架构操作系统来讲,系统服务的调用都涉及大量的虚拟机间通讯操作,因此虚拟机间通讯的性能直接影响到系统整体的性能。一般微内核操作系统针对大数据量通信采用共享内存IPC,共享内存是针对其他通信机制运行效率较低而设计。基于微内核提供的内存映射机制将同一个物理内存区域映射到不同的虚拟地址空间,对该段内存区域的操作都是在同一个物理内存区域,实现内存共享,以达到通信目的。在大量的数据传输需求上,可以实现零拷贝,从而达到高效的IPC通讯。共享内存机制只为虚拟机提供了用于实现通信的共享存储区和对共享存储区进行操作的手段,然而并未提供对该区进行互斥访问及虚拟机间同步的措施,导致用户使用难度增大,且不便于用户使用。
发明内容
有鉴于此,本发明实施例提供了一种微内核虚拟机间的通信方法、装置、设备及存储介质,在微内核的共享内存中创建若干条总线,并把各虚拟机各自的套接字绑定到相应的总线上,在微内核IPC基础提出了基于套接字的共享内存的进程间通信方法(SharedMemory Inter-Process Communication,SMIPC),通过接收虚拟机的套接字的总线、节点和端口确定基于套接字的SMIPC的共享内存的地址,发送虚拟机和接收虚拟机基于该地址直接交换通信消息,避免了从用户态与微内核之间二次数据复制,从而实现微内核虚拟机间的高速通信。
第一方面,本发明实施例提供了一种微内核虚拟机间的通信方法,包括:在共享内存中创建一条或多条共享内存的总线,并配置共享内存中的总线通信管理区;各虚拟机根据各自的套接字绑定到相应的共享内存的总线;发送虚拟机利用所述总线通信管理区,确定当前通信消息在共享内存中的第一地址,并把所述通信消息写入到所述第一地址;接收虚拟机利用所述总线通信管理区,确定所述第一地址,并从所述第一地址中读取所述通信消息。
由上,通过在微内核的共享内存中创建若干条总线,并把各虚拟机各自的套接字绑定到相应的总线上,通过接收虚拟机的套接字的总线、节点和端口确定基于套接字的SMIPC的共享内存的地址,发送虚拟机和接收虚拟机基于该地址直接交换通信消息,避免了从用户态与微内核之间二次数据复制,从而实现微内核虚拟机间的高速通信。
在第一方面的一种可能的实施方式中,虚拟机的所述套接字的标识包括虚拟机绑定的所述总线的标识、虚拟机的节点标识、套接字绑定的端口标识,其中,进行通信的两个虚拟机的套接字绑定在同一条所述总线上。
由上,把传统基于IP地址和端口的套接字重新定义为基于总线、节点、端口的套接字,实现各虚拟机的套接字资源的区分,并用于虚拟机接收的通信消息在基于套接字的SMIPC的共享内存中的寻址。
在第一方面的一种可能的实施方式中,所述总线通信管理区包括总线信息区、节点信息区和端口信息区;所述总线信息区包括各所述总线的节点组的节点信息在所述节点信息区中的第一偏移地址,所述节点组为对应的所述总线绑定的所有虚拟机;所述节点信息区包括各虚拟机的节点消息池在共享内存的通信消息池中的第二偏移地址,所述通信消息池包括各所述节点消息池,所述节点消息池用于存放各虚拟机接收的通信消息;所述节点信息区还包括各虚拟机的端口信息在所述端口信息区中的第三偏移地址,所述端口信息包括各端口的当前通信消息的消息序号。
由上,通过在总线信息区、节点信息区和端口信息区分别存储各虚拟机的总线、节点和窗口的相关地址,以实现对各虚拟机接收的通信消息在基于套接字的SMIPC的共享内存中的寻址。
在第一方面的一种可能的实施方式中,所述确定当前通信消息在共享内存中的第一地址,包括:根据所述总线信息区,确定接收虚拟机绑定的所述总线的所述第一偏移地址;根据该所述第一偏移地址,确定接收虚拟机的所述第二偏移地址和所述第三偏移地址;根据该所述第三偏移地址获得接收虚拟机的当前的所述消息序号;根据该所述第二偏移地址和所述消息序号确定所述第一地址。
由上,通过在总线信息区、节点信息区和端口信息区分别依次确定各虚拟机的节点信息、窗口信息和消息序号的相关地址,以实现对各虚拟机接收的通信消息在基于套接字的SMIPC的共享内存中的寻址。
在第一方面的一种可能的实施方式中,所述通信消息的类型包括信令类型和数据类型,其中,所述信令类型的通信消息的内容包括信令,所述数据类型的通信消息的内容包括通信数据在所述通信消息池中的数据偏移地址,所述通信数据与所述通信消息对应;当发送虚拟机在发送所述数据消息时还发送通信数据时,所述通信方法还包括:发送虚拟机把所述通信数据写入到所述共享内存的第二地址,所述第二地址基于所述数据偏移地址确定;接收虚拟机从所述第二地址中读取所述通信数据。
由上,根据通信消息的内容实现在基于套接字的SMIPC的共享内存中对数据类型的通信消息的通信数据的寻址。
在第一方面的一种可能的实施方式中,所述通信方法还包括:接收虚拟机接收完所有所述通信数据时,基于发送虚拟机的所述套接字标识发送数据接收完成的第一通信消息给发送虚拟机;发送虚拟机收到所述第一通信消息时,释放所述通信数据所占用的所述共享内存。
由上,在接收虚拟机接收完通信数据时,发送虚拟机及时释放其占用共享内存,以节约共享内存的资源。
在第一方面的一种可能的实施方式中,所述通信方法还包括:发送虚拟机把所述通信消息存入所述第一地址时通过服务中断通过接收虚拟机。
由上,通过服务中断使接收虚拟机及时获知有待接收的通信消息。
第二方面,本发明实施例提供了一种微内核虚拟机间的通信装置,包括配置模块、发送模块和接收模块;所述配置模块用于在共享内存中创建一条或多条共享内存的总线,并配置共享内存中的总线通信管理区;所述配置模块还用于各虚拟机根据各自的套接字绑定到相应的共享内存的总线;所述发送模块用于由发送虚拟机利用所述总线通信管理区,确定当前通信消息在共享内存中的第一地址,并把所述通信消息写入到所述第一地址;所述接收模块用于由接收虚拟机利用所述总线通信管理区,确定所述第一地址,并从所述第一地址中读取所述通信消息。
由上,通过在微内核的共享内存中创建若干条总线,并把各虚拟机各自的套接字绑定到相应的总线上,通过接收虚拟机的套接字的总线、节点和端口确定基于套接字的共享内存的地址,发送虚拟机和接收虚拟机基于该地址直接交换通信消息,避免了从用户态与微内核之间二次数据复制,从而实现微内核虚拟机间的高速通信。
在第二方面的一种可能的实施方式中,虚拟机的所述套接字的标识包括虚拟机绑定的所述总线的标识、虚拟机的节点标识、套接字绑定的端口标识,其中,进行通信的两个虚拟机的套接字绑定在同一条所述总线上。
由上,把传统基于IP地址和端口的套接字重新定义为基于总线、节点、端口的套接字,实现各虚拟机的套接字资源的区分,并用于虚拟机接收的通信消息在基于套接字的SMIPC的共享内存中的寻址。
在第二方面的一种可能的实施方式中,所述总线通信管理区包括总线信息区、节点信息区和端口信息区;所述总线信息区包括各所述总线的节点组的节点信息在所述节点信息区中的第一偏移地址,所述节点组为对应的所述总线绑定的所有虚拟机;所述节点信息区包括各虚拟机的节点消息池在共享内存的通信消息池中的第二偏移地址,所述通信消息池包括各所述节点消息池,所述节点消息池用于存放各虚拟机接收的通信消息;所述节点信息区还包括各虚拟机的端口信息在所述端口信息区中的第三偏移地址,所述端口信息包括各端口的当前通信消息的消息序号。
由上,通过在总线信息区、节点信息区和端口信息区分别存储各虚拟机的总线、节点和窗口的相关地址,以实现对各虚拟机接收的通信消息在基于套接字的SMIPC的共享内存中的寻址。
在第二方面的一种可能的实施方式中,所述通信装置还包括地址确定模块,用于确定当前通信消息在共享内存中的第一地址,具体包括:根据所述总线信息区,确定接收虚拟机绑定的所述总线的所述第一偏移地址;根据该所述第一偏移地址,确定接收虚拟机的所述第二偏移地址和所述第三偏移地址;根据该所述第三偏移地址获得接收虚拟机的当前的所述消息序号;根据该所述第二偏移地址和所述消息序号确定所述第一地址。
由上,通过在总线信息区、节点信息区和端口信息区分别依次确定各虚拟机的节点信息、窗口信息和消息序号的相关地址,以实现对各虚拟机接收的通信消息在基于套接字的SMIPC的共享内存中的寻址。
在第二方面的一种可能的实施方式中,所述通信消息的类型包括信令类型和数据类型,其中,所述信令类型的通信消息的内容包括信令,所述数据类型的通信消息的内容包括通信数据在所述通信消息池中的数据偏移地址,所述通信数据与所述通信消息对应;所述发送模块还用于当发送虚拟机在发送所述数据消息时发送通信数据时,具体包括:发送虚拟机把所述通信数据写入到所述共享内存的第二地址,所述第二地址基于所述数据偏移地址确定;接收虚拟机从所述第二地址中读取所述通信数据。
由上,根据通信消息的内容实现在基于套接字的SMIPC的共享内存中对数据类型的通信消息的通信数据的寻址。
在第二方面的一种可能的实施方式中,所述发送模块还用于接收虚拟机接收完所有所述通信数据时,基于发送虚拟机的所述套接字标识发送数据接收完成的第一通信消息给发送虚拟机;所述通信装置还包括释放模块,用于发送虚拟机收到所述第一通信消息时,释放所述通信数据所占用的所述共享内存。
由上,在接收虚拟机接收完通信数据时,发送虚拟机及时释放其占用共享内存,以节约共享内存的资源。
在第一方面的一种可能的实施方式中,所述发送模块还用于发送虚拟机把所述通信消息存入所述第一地址时通过服务中断通过接收虚拟机。
由上,通过服务中断使接收虚拟机及时获知有待接收的通信消息。
第三方面,本发明实施例提供了一种计算设备,包括,
总线;
通信接口,其与所述总线连接;
至少一个处理器,其与所述总线连接;以及
至少一个存储器,其与所述总线连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行本发明第一方面任一所述实施方式。
第六方面,本发明实施例提供了一种计算机可读存储介质,其上存储有程序指令,所述程序指令当被计算机执行时使得所述计算机执行申请第一方面任一所述实施方式。
附图说明
图1为微内核操作系统的IPC机制的结构示意图;
图2A为本发明各实施例中不同虚拟机间的通信架构示意图;
图2B为本发明各实施例的共享内存的结构示意图;
图2C为本发明确定共享内存地址的方法实施例的流程示意图;
图3为本发明的一种微内核虚拟机间的通信方法实施例一的流程示意图;
图4A为本发明的一种微内核虚拟机间的通信方法实施例二的流程示意图;
图4B 为本发明的一种微内核虚拟机间的通信方法实施例二的初始化配置方法的流程示意图;
图5为本发明的一种微内核虚拟机间的通信装置实施例一的结构示意图;
图6为本发明得的一种微内核虚拟机间的通信装置实施例二的结构示意图;
图7为本发明各实施例的一种计算设备的结构示意图。
具体实施方式
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。
在以下的描述中,所涉及的术语“第一\第二\第三等”或模块A、模块B、模块C等,仅用于区别类似的对象,或用于区别不同的实施例,不代表针对对象的特定排序,可以理解地,在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本发明实施例能够以除了在这里图示或描述的以外的顺序实施。
在以下的描述中,所涉及的表示步骤的标号,如S110、S120……等,并不表示一定会按此步骤执行,在允许的情况下可以互换前后步骤的顺序,或同时执行。
除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本发明实施例的目的,不是旨在限制本发明。
对本发明具体实施方式进行进一步详细说明之前,对本发明实施例中涉及的名词和术语,以及其在本发明中相应的用途\作用\功能等进行说明。本发明各实施例涉及的名词和术语适用于如下的解释。
1、IPC为进程间通信(Inter-Process Communication,IPC),操作系统提供了各种进程间通信的方法,包括管道、消息队列、信号量、共享内存、套接字。前4种主要用于同一个主机的各种进程间的通信,套接字用于不同主机的进程之间的通信。
2、套接字为对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口。传统的套接字一般基于IP地址+端口号进行寻址。
3、共享内存为多个进程可以访问同一块内存空间,往往与其它通信机制,如信号量结合使用,来达到进程间的同步及互斥。不同的进程能把共享内存映射到自己的地址空间里,所有进程都能访问共享内存中的地址。如果一个进程向这段共享内存写了数据,所做的改动会即时被有访问同一段共享内存的其他进程看到。
本发明各实施例提供了一种微内核虚拟机间的通信方法、装置、设备及存储介质,在微内核的共享内存中创建若干条总线,并把各虚拟机各自的套接字绑定到相应的总线上,在微内核IPC基础提出了基于套接字的SMIPC,通过接收虚拟机的套接字的总线、节点和端口而确定通信消息在基于套接字的SMIPC的共享内存的地址,发送虚拟机和接收虚拟机基于该地址进行通信,避免了从用户态与微内核之间二次数据复制,从而实现微内核虚拟机间的高速通信。
下面基于图2A至图7介绍本发明的各实施例。
首先基于图2A介绍本发明各实施例的通信架构。
图2A示出了本发明各实施例中微内核上不同虚拟机间的通信架构,图中Node表示虚拟机的节点,为用户态的虚拟机,示例地,Node0至Node3表示4个节点,实际应用场景可以是大于或等于2的任意个节点。图中APP表示应用程序,APP后面的编号为应用程序的编号,应用程序与套接字绑定的端口有关。Node0至Node3中的SMIPC分别表示各节点的SMIPC进程,SMIPC Bus0为从微内核共享内存中创建的Node0至Node3所绑定的总线。
其中,不同虚拟机之间基于套接字调用SMIPC进行通信,通信消息通过微内核中基于套接字的SMIPC的共享内存进行交换,从而实现高速通信。
下面基于图2B介绍本发明各实施例的基于套接字的SMIPC的共享内存的结构。为了便于描述,基于套接字的SMIPC的共享内存在下面叙述中简称为共享内存。
本实施例在共享内存中创建若干条总线,并把各虚拟机各自的套接字绑定到相应的总线上,进行通信的两个虚拟机的套接字绑定在同一条总线上。
图2B表示了共享内存的结构,该共享内存包括总线通信管理区和通信消息池,其中,总线通信管理区包括头信息区、总线信息区、节点信息区、端口信息区,用于确定两个虚拟机进行基于套接字的SMIPC通信时占用共享内存地址,通信消息池包括各虚拟机的节点消息池,每个虚拟机的节点消息池用于存在该虚拟机节点接收的通信消息。通信消息池还包括各节点数据池,当通信消息的类型为数据消息时,在各节点数据池中保存接收的通信数据。
共享内存位于微内核的物理内存中,每个虚拟机分别配置自身的逻辑的共享内存,都映射为微内核的共享内存,这样各虚拟机对逻辑的共享内存进行读写时,其本质上都直接对微内核的共享内存进行读写。总线信息区、节点信息区、端口信息区和通信消息池又组成共享内存消息池,这样共享内存又可以分为头信息区和共享内存消息池。头消息区由第一个起来的虚拟机配置,其他共享机共享仅读取头信息区,其他各虚拟机配置自身的逻辑的共享内存池。
头信息至少包括共享内存的系统状态、总线信息区的起始地址在共享内存消息池中的第零地址偏移。
总线信息区包括各总线的信息,每个总线的信息包括该总线标识、该总线最大节点数目、该总线的节点组在节点信息区中的第一偏移地址,一总线的节点组为该总线绑定的所有虚拟机。
节点信息区包括各虚拟机的节点信息,每个虚拟机的节点信息包括该虚拟机的节点标识、该虚拟机的节点消息池在通信消息池中的第二偏移地址、该虚拟机的端口信息在端口信息区的第三偏移地址、该虚拟机的节点数据池在通信消息池中的第四地址偏移。在一些实施例中,每个虚拟机的节点信息还包括该虚拟机的节点状态、服务中断号、最大端口数。
端口信息区包括各虚拟机的端口信息,每个虚拟机的每个端口信息包括端口状态,端口状态包括该端口的端口签名、消息序号和端口首包索引。其中,端口签名与套接字连接一一对应,每个套接字的连接包括发送虚拟机的套接字和接收虚拟机的套接字,用于验证发送虚拟机与接收虚拟机之间的通信连接;端口的消息序号表示该端口接收到的通信消息的序号;端口消息索引为端口对应的套接字连接第一个数据包的在节点消息池的索引。
下面结合图2C介绍确定接收虚拟机的通信消息在共享内存中第一地址的方法
【确定共享内存地址的方法实施例】
确定共享内存地址的方法实施例在图2A各节点的SMIPC中运行。
确定共享内存地址的方法实施例利用共享内存的结构,基于接收虚拟机套接字的总线标识、节点标识和端口标识确定接收虚拟机当前的通信消息在共享内存的第一地址,基于该地址实现接收虚拟机与发送虚拟机之间高速通信。
设接收虚拟机为节点B,端口为C,绑定在总线A上,接收虚拟机的套接字标识为(总线A、节点B、端口C),下面以确定节点B接收的通信消息为例,描述确定共享内存地址的方法实施例,该方法实施例在发送虚拟机和接收虚拟机中都运行,图2C示出了该方法实施例的流程,其包括步骤S210至S260。
在步骤S210中,从共享内存的头消息区获取总线信息区在共享内存消息池的第零偏移地址。
在步骤S220中,基于第零偏移地址和总线A的标识,从总线信息区获得总线A的节点组在节点信息区的第一偏移地址。
在步骤S230中,基于第一偏移地址和节点B标识获取节点B的第二偏移地址、第三偏移地址和第四偏移地址。
其中,第二偏移地址为节点B的节点消息池在通信消息池中的地址偏移量,第三偏移地址为节点B的端口信息在端口信息区的地址偏移量、第四偏移地址为节点B的节点数据池在通信消息池中的地址偏移量。
在步骤S240中,基于第三偏移地址和端口C标识获取节点B的端口C的通信消息的消息序号。
其中,基于第三偏移地址和端口C标识从端口信息区获得确定节点B的端口C 的端口状态,端口状态包括通信消息的消息序号和端口首包索引。
在步骤S250中,基于通信消息的消息序号和第二偏移地址获得通信消息的第一地址。
其中,基于第三偏移地址确定节点B的节点消息池的位置,每个通信消息的长度是提前设定的已知固定值,基于通信消息的消息序号确定通信消息在节点B的节点消息池中的位置,确定通信消息在通信消息池中地址偏移量。通信消息池在共享内存中基地址是确定的,再进一步就确定通信消息中共享内存中的第一地址。
在步骤S260中,当通信消息为数据消息时,基于通信消息和接第四偏移地址获得通信数据的第二地址。
其中,当通信消息为数据消息时,通信消息包括对应的通信数据在节点数据池中相对于端口状态中端口首包索引的地址索引。基于该地址索引和端口首包索引确定通信数据在节点数据池中地址偏移量,基于该偏移量和第四偏移地址获得通信数据的在通信消息池中地址偏移量。因为通信消息池在共享内存中基地址是确定的,再进一步就确定通信数据中共享内存中的第二地址。
综上,基于接收虚拟机的总线标识、节点标识、端口标识确定接收的通信消息在共享内存中第一地址及通信数据在共享内存中第二地址,基于该第一地址和第二地址实现接收虚拟机与发送虚拟机之间高速通信。
下面结合图3至图4B介绍本发明的微内核虚拟机间的通信方法实施例一和通信方法实施例二。
【一种微内核虚拟机间的通信方法实施例一】
一种微内核虚拟机间的通信方法实施例一在图2A各节点的SMIPC中运行。
该方法实施例一根据接收虚拟机的套接字的总线、节点和端口而确定通信消息在共享内存的地址,发送虚拟机和接收虚拟机基于该地址进行通信,避免了从用户态与微内核之间二次数据复制,从而实现微内核虚拟机间的高速通信。同时在通信过程中基于信号量与原子操作实现各虚拟机对共享内存操作的互斥和隔离。
图3示出了本发明的一种微内核虚拟机间的通信方法实施例一的流程,其包括步骤S310至S370。
在步骤S310中,发送虚拟机获取接收虚拟机的总线标识、节点标识和端口标识。
其中,在本实施例中,接收虚拟机与发送虚拟机间建立套接字连接,接收虚拟机的节点标识和端口标识基于接收虚拟机的套接字标识获取。
在步骤S320中,基于接收虚拟机的总线标识、节点标识和端口标识以及待发送的通信消息在发送队列中位置,确定待发送的通信消息在共享内存中的第一地址和/或待发送的通信数据在共享内存中的第二地址。
其中,待发送的通信消息在接收虚拟机的端口信息区的端口状态中消息序号根据待发送的通信消息在发送队列中位置而确定,具体确定的方法可以参考套接字通信原理,这里不再详述。
其中,按照确定共享内存地址的方法实施例的方法,基于接收虚拟机的总线标识、节点标识和端口标识确定接收虚拟机的端口状态的地址,并在其中写入确定的待发送的通信消息的消息序号。还按照确定共享内存地址的方法实施例的方法,基于接收虚拟机的总线标识、节点标识和待发送的通信消息的消息序号确定待发送的通信消息在共享内存中的第一地址。
其中,通信消息包括信令类型和数据类型,信令类型用于建立、维持和结束的套接字连接,数据类型用于通信交换的数据。当通信消息为数据类型时,按照确定共享内存地址的方法实施例的方法确定待发送通信数据在共享内存中的第二地址。当待发送通信数据为第一个通信数据时,申请以第二地址为起点的共享内存存储通信数据。
在步骤S330中,利用信号量和原子操作,发送虚拟机把待发送的通信消息存入在共享内存中的第一地址,和/或把待发送的通信数据存入在共享内存中的第二地址。
其中,发送虚拟机在向第一地址存入通信消息之前获取发送信号量,当完成向第一地址存入通信消息之后释放发送信号量,从而在同一个虚拟机实现向共享内存存入数据之间实现隔离和互斥。当通信消息为数据类型时,当完成向第二地址存入通信数据之后才释放发送信号量。
其中,发送虚拟机利用原子操作把通信消息存入共享内存的第一地址,当通信消息为数据类型时,还利用原子操作把通信数据存入共享内存的第二地址,以实现不同虚拟机向共享内存存入数据时实现隔离和互斥。
在步骤S340中,发送虚拟机通知接收虚拟机有通信消息待接收,以使接收虚拟机从共享内存的第一地址接收通信消息。
其中,发送虚拟机通过服务中断通知接收虚拟机有所述通信消息待接收,从而使接收虚拟机快速响应。
在步骤S350中,接收虚拟机获取接收虚拟机发送的有通信消息待接收的通知。
其中,接收虚拟机响应服务中断快速获知有通信消息待接收。
在步骤S360中,接收虚拟机根据其套接字的总线标识、节点标识、端口标识确定待接收的通信消息在共享内存中的第一地址。
其中,接收虚拟机根据其套接字的总线标识、节点标识和端口标识利用确定共享内存地址的方法实施例所述的方法,确定存储待接收的通信消息的第一地址,从而与发送虚拟机实现对第一地址的同步。
在步骤S370中,利用信号量和原子操作,接收虚拟机从共享内存的第一地址获得待接收的通信消息,和/或从共享内存的第二地址获得待接收的通信数据。
其中,当通信消息为数据类型时利用确定共享内存地址的方法实施例所述的方法,确定共存内存中存储通信数据的第二地址,以用来从该第二地址读取待接收的通信数据。
其中,通信消息中还包括发送虚拟机的套接字标识,接收虚拟机从通信消息中确定发送虚拟机的套接字标识,从而向发送虚拟机发送通信消息。
其中,接收虚拟机在从第一地址读取通信消息之前获取接收信号量,当完成从第一地址读取通信消息之后释放接收信号量,从而在同一个节点实现从共享内存读取数据之间实现隔离和互斥。当通信消息为数据类型时,接收虚拟机完成从第二地址读取通信数据之后才释放接收信号量。
其中,发送虚拟机利用原子操作从共享内存的第一地址中读取通信消息,从共享内存的第一地址中读取通信消息,从共享内存的第二地址中读取对应的通信数据,以实现不同节点从共享内存中读取数据时实现隔离和互斥。
综上,一种微内核虚拟机间的通信方法实施例一在微内核IPC基础提出了基于套接字的共享内存的SMIPC,通过套接字的总线标识、节点标识、端口标识确定接收虚拟机的待接收的通信消息在共享内存的第一地址,发送虚拟机和接收虚拟机基于该地址直接交换通信消息,从而实现高速通信,同时基于信号量与原子操作实现对共享内存操作的互斥和隔离。
【一种微内核虚拟机间的通信方法实施例二】
一种微内核虚拟机间的通信方法实施例二在图2A各节点的SMIPC中运行。
方法实施例二在方法实施例一的基础上,增加对共享内存的初始化配置实现各虚拟机对统一初始化共享内存而操作,还增加套接字连接的建立、释放和状态维护流程,各虚拟机基于统一的套接字连接,实现状态同步。
方法实施例二把虚拟机分为客户端虚拟机和服务端虚拟机,以二者之间通信方式进行描述。
图4A示出了本发明的一种微内核虚拟机间的通信方法实施例二的流程,其包括步骤S410至S480。
在步骤S410中,各虚拟机对共享内存、虚拟机节点进行初始化配置。
其中,各虚拟机对共享内存的初始化配置包括:总线通信管理区的头信息区、总线信息区、节点信息区、窗口信息区的配置,通信消息池的节点消息池和节点数据池的配置。
其中,虚拟机节点的初始化配置包括:各虚拟机的套接字资源分别与总线、节点和端口绑定,虚拟机的服务中断和信号量的创建,套接字的任务创建。
其中,共享内存初始化配置完成后,客户端虚拟机和服务端虚拟机对共享内存实现统一的寻址;虚拟机的套接字初始化完成后,各虚拟机进入套接字监听状态,基于统一的套接字连接进行连接。
需要强调本步骤各虚拟机都进行自身逻辑的共享内存进行配置戳实话配置,本质上是对微内核中物理的共享内存进行配置。
其中,本步骤的详细描述请参考一种微内核虚拟机间的通信方法实施例二的初始化配置方法。
在步骤S420中,客户端虚拟机向服务端虚拟机发送套接字的连接请求。
其中,发送完连接请求后,客户端虚拟机的套接字进入监听状态。
其中,连接请求为信令消息类型的通信消息,客户端虚拟机利用方法实施例一的步骤S310至S340所述的方法发送连接请求,本方法实施例二中后续发送信令消息类型的通信消息时,采用同样的方法,不再详述。
在步骤S430中,服务端虚拟机基于接收的连接请求向客户端虚拟机发送套接字的连接确认。
其中,服务端虚拟机利用方法实施例一的步骤S350和S370所述的方法,接收包含连接请求的通信消息,本方法实施例二中后续接收信令消息类型的通信消息时,采用同样的方法,不再详述。
其中,服务端虚拟机从连接请求的通信消息的内容中获取套接字连接,用于将来套接字连接的签名验证,当该套接字连接包括本虚拟机的套接字标识时,则确认该连接请求为其接收待接收的连接请求。同时从该套接字连接获取对方的套接字标识,以用于向客户端虚拟机发送套接字的连接确认的通信消息。
其中,服务端虚拟机发送连接确认后进入套接字服务端状态。
在步骤S440中,客户端虚拟机接收连接确认后向服务端虚拟机发送通信数据。
其中,客户端虚拟机接收连接确认后结束监听转态进入套接字客户端状态,利用方法实施例一的步骤S310至S330所述的方法,向客户端虚拟机发送数据消息类型的通信消息和对应的通信数据。
其中,客户端虚拟机从收到的连接确认的通信消息中获取套接字连接,通过套接字连接的签名验证后,确定该连接确认的通信消息为本节点待接收的连接确认的通信消息。
在步骤S450中,服务端虚拟机接收通信数据。
其中,服务端虚拟机利用方法实施例一的步骤S340和S350所述的方法,接收数据消息类型的通信消息,并基于该通信消息接收对应的通信数据。
其中,服务端虚拟机接收通信数据时通过套接字连接的签名验证后,确认该通信数据为本节点待接收的数据。
在步骤S460中,当服务端虚拟机接收所有通信数据后向客户端虚拟机发送接收完成的信令,并释放套接字连接。
其中,当服务端虚拟机待接收的通信数据为多条时,并基于端口状态中的消息序号判断通信数据是否已经接收完成。
其中,服务端虚拟机释放套接字连接后进入监听状态。
在步骤S470中,客户端虚拟机释放发送通信数据所占用共享内存,并释放套接字连接。
其中,客户端虚拟机接收服务端虚拟机发送的接收完成的信令时,释放套接字连接后进入监听状态。
其中,客户端虚拟机申请用于通信数据的共享内存,客户端虚拟机释放这些共享内存,提高共享内存的利用率。
在步骤S480中,初始化完成后各虚拟机维护套接字状态。
其中,本步骤在步骤S410之后就开始运行,与步骤S420至步骤S470并列运行。
其中,所维护的套接字状态包括:系统状态、节点状态、端口状态和连接状态。
其中,系统状态包括共享内存状态,表示头消息的初始化是否由主节点已经完成。系统状态保存在共享内存头信息中,供其他节点查查。
其中,节点状态表示节点的心跳计数状态,用于判断节点是否正常工作。各节点状态保存在节点信息区中的各节点信息中,用于其他节点查看节点状态。
其中,端口状态包括端口签名、消息序号和端口首包索引,端口状态发送虚拟机基于套接字连接的方法更新,并保存在微内核的共享内存中接收虚拟机的端口信息区。端口签名用于验证套接字连接。
其中,连接状态包括连接协议、节点标识、端口标识和端口签名,连接协议在本实施例中为套接字,各虚拟机的连接状态的节点标识、端口标识和端口签名添加到本节点发送的通信消息中,便于对方获取本虚拟机的套接字标识,以及进行套接字验证。
图4B示出了本发明的一种微内核虚拟机间的通信方法实施例二的初始化配置方法的流程,其包括:
在步骤S4110中,各虚拟机创建或打开共享内存,设置共享内存的本节点逻辑地址。
其中,主虚拟机调用微内核的创建共享内存接口创建共享内存,确定共享内存的基地址和共享内存大小;其他节点调用微内核的创建共享内存接口打开主节点创建的共享内存,主虚拟机为各虚拟机中第一个完成启动的虚拟机。
其中,各虚拟机设置的共享内存的本节点逻辑地址与共享内存的物理地址对应。
在步骤S4120中,各虚拟机获得并解析通过IDE设置的共享内存的配置数据。
其中,配置数据至少包括各总线标识、各总线激活状态、各总线节点数、端口数量、消息包大小、消息缓冲数量,用于对总线信息区、节点信息区和端口信息区进行初始化,
其中,通过配置数据可以确定总线信息区的大小及其基地址,节点信息区的大小及其基地址、端口信息区的大小及其基地址。
在步骤S4130中,主虚拟机设置共享内存的头信息。
其中,头信息包括版本号、最大总线数量、心跳检查周期、总线信息区的第零偏移地址。心跳检测周期用于检查各节点的状态。
其中,本步骤由主虚拟机操作,主虚拟机操作完成后设置系统状态为已经初始化,其它虚拟机进入本步骤后则等待系统状态变为已经初始化状态。
在步骤S4140中,各虚拟机完成共享内存池初始化。
其中,共享内存池初始化包括设置共享内存分配与释放的微内核接口,以对共享内存池进行管理。各虚拟机设置共享内存分配与释放的微内核接口。
在步骤S4150中,各虚拟机顺序完成各自的逻辑的总线、套接字、节点、端口的初始化。
其中,总线初始化包括:创建各总线名,定义总线最大节点数,设置各个总线的节点组在节点信息区的第一偏移地址。
其中,一个虚拟机的节点初始化包括:把该虚拟机绑定相应的总线上,分配该虚拟机的端口信息区的第三地址偏移量、节点消息池的第二地址偏移量、节点数据池的第四地址偏移量,配置节点的最大端口数,最大通信消息数。
其中,一个虚拟机的端口初始化设置该虚拟机各端口状态的初始状态,示例地,初始端口消息序号为0。
其中,一个虚拟机的套接字初始化包括:分配该虚拟机的套接字资源,套接字与总线、虚拟机节点和窗口绑定,构造各套接字的接收队列和发送队列。套接字资源包括接收虚拟机套接字和发送虚拟机套接字。
需要强调的是,通过本步骤的初始化,总线信息区、节点信息区、端口信息区的内容和在共享内存的地址偏移量都是确定的,结合动态的第一、第二、第三和第四偏移地址,以实现通信消息和通信数据在共享内存中额寻址。
在步骤S4160中,各虚拟机创建信号量。
其中,所创建的信号量包括发送信号量、接收信号量。发送信号量用于虚拟机内内向共享内存写数据的互斥,发送信号量用于虚拟机内从共享内存读数据的互斥
在步骤S4170中,各虚拟机设置发送通信消息通知的服务中断号和接收通信消息的服务中断处理程序。
其中,发送虚拟机的发送通信消息通知的服务中断号与接收虚拟机的相应的中断处理程序的中断号对应。
在步骤S4180中,各虚拟机创建套接字接收任务。
其中,各节点创建后接收任务后,等待接收信号量。
综上,一种微内核虚拟机间的通信方法实施例二在方法实施例一的基础上,增加对共享内存的初始化,实现各虚拟机对统一的共享内存而操作,还增加套接字连接的建立、释放和状态维护流程,各虚拟机对统一的套接字状态连接,实现状态同步,从而实现在共享内存中确定的通信消息的第一地址同步。
下面基于图5至图6介绍本发明的各装置实施例。
【一种微内核虚拟机间的通信装置实施例一】
图5示出了本发明的一种微内核虚拟机间的通信装置实施例一的结构,其包括:地址确定模块510、发送模块520和接收模块530。
地址确定模块510用于由各虚拟机利用确定共享内存地址的方法实施例所述的方法,确定共享内存中存储通信消息的第一地址,当通信消息为数据类型时还确定对应的通信数据的第二地址。
发送模块520用于由各虚拟机利用一种微内核虚拟机间的通信方法实施例一的步骤S310至S340所述的方法发送通信消息,当通信消息为数据类型时还发送对应的通信数据。在发送过程中,调用了地址确定模块510确定共享内存中存储通信消息的第一地址和/或通信数据的第二地址。
接收模块530用于由各虚拟机利用一种微内核虚拟机间的通信方法实施例一的步骤S350至S370所述的方法接收通信消息,当通信消息为数据类型时还接收对应的通信数据。在接收过程中,调用了地址确定模块510确定共享内存中存储通信信息的第一地址和/或通信数据的第二地址。
【一种微内核虚拟机间的通信装置实施例二】
图6示出了本发明的一种微内核虚拟机间的通信装置实施例二的结构,其包括配置模块610、连接请求模块620、连接确认模块630、数据发送模块640、数据接收模块650、连接释放第一模块660、连接释放第二模块670、状态维护模块680。
配置模块610由虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S410,具体包括一种微内核虚拟机间的通信方法实施例二的初始化配置方法中各个步骤,用于实现对共享内存、虚拟机节点进行初始化配置。
连接请求模块620由作为客户端的虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S420,向服务端虚拟机发送套接字的连接请求。在发送过程中调用了一种微内核虚拟机间的通信装置实施例一的发送模块520,在本装置实施例中各虚拟机在发送任何信令均调用该发送模块520,后续不再详述。
连接确认模块630由作为服务端的虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S430,接收客户端虚拟机的发送的套接字的连接请求,并向客户端虚拟机发送套接字的连接请求确认。在接收套接字的连接请求的过程中调用了一种微内核虚拟机间的通信装置实施例一的接收模块530,在本装置实施例中各虚拟机在接收任何信令均调用该接收模块530,后续不再详述。
数据发送模块640由作为客户端的虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S440,向服务端虚拟机发送的通信数据。在发送过程中调用了一种微内核虚拟机间的通信装置实施例一的发送模块520。
数据接收模块650由作为服务端的虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S450,接收客户端虚拟机发送的通信数据。在接收过程中调用了一种微内核虚拟机间的通信装置实施例一的接收模块530
连接释放第一模块660由作为服务端的虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S460,向客户端虚拟机发送数据接收完成的信令,并释放套接字连接。
连接释放第二模块670由作为客户端的虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S440,接收服务端虚拟机的数据接收完成的信令,并释放套接字连接和所占用发送通信数据的共享内存。
状态维护模块680由各虚拟机执行一种微内核虚拟机间的通信方法实施例二的步骤S480,维护套接字的系统状态、节点状态、端口状态和连接状态。
【计算设备】
本发明还提供的一种计算设备,下面图7详细介绍。
该计算设备700包括,处理器710、存储器720、通信接口730、总线740。
应理解,该图所示的计算设备700中的通信接口730可以用于与其他设备之间进行通信。
其中,该处理器710可以与存储器720连接。该存储器720可以用于存储该程序代码和数据。因此,该存储器720可以是处理器710内部的存储单元,也可以是与处理器710独立的外部存储单元,还可以是包括处理器710内部的存储单元和与处理器710独立的外部存储单元的部件。
可选的,计算设备700还可以包括总线740。其中,存储器720、通信接口730可以通过总线740与处理器710连接。总线740可以是外设部件互连标准(Peripheral ComponentInterconnect,PCI)总线或扩展工业标准结构(EFStended Industry StandardArchitecture,EISA)总线等。所述总线740可以分为地址总线、数据总线、控制总线等。为便于表示,该图中仅用一条线表示,但并不表示仅有一根总线或一种类型的总线。
应理解,在本发明实施例中,该处理器710可以采用中央处理单元(centralprocessing unit,CPU)。该处理器还可以是其它通用处理器、数字信号处理器(digitalsignal processor,DSP)、专用集成电路(application specific integrated circuit,ASIC)、现成可编程门阵列(field programmable gate Array,FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。或者该处理器710采用一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
该存储器720可以包括只读存储器和随机存取存储器,并向处理器710提供指令和数据。处理器710的一部分还可以包括非易失性随机存取存储器。例如,处理器710还可以存储设备类型的信息。
在计算设备700运行时,所述处理器710执行所述存储器720中的计算机执行指令执行各方法实施例的操作步骤。
应理解,根据本发明实施例的计算设备700可以对应于执行根据本发明各实施例的方法中的相应主体,并且计算设备700中的各个模块的上述和其它操作和/或功能分别为了实现本实施例各方法的相应流程,为了简洁,在此不再赘述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括,U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
【计算介质】
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行各方法实施例的操作步骤。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括,具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括、但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,均属于本发明保护范畴。
Claims (10)
1.一种微内核虚拟机间的通信方法,其特征在于,包括:
在共享内存中创建一条或多条共享内存的总线,并配置共享内存中的总线通信管理区;
各虚拟机根据各自的套接字绑定到相应的共享内存的总线;
发送虚拟机利用所述总线通信管理区,确定当前通信消息在共享内存中的第一地址,并把所述通信消息写入到所述第一地址;
接收虚拟机利用所述总线通信管理区,确定所述第一地址,并从所述第一地址中读取所述通信消息。
2.根据权利要求1所述通信方法,其特征在于,
虚拟机的所述套接字的标识包括该虚拟机绑定的所述总线的标识、该虚拟机的节点标识和该套接字绑定的端口标识,其中,进行通信的两个虚拟机的套接字绑定在同一条所述总线上。
3.根据权利要求2所述通信方法,其特征在于,
所述总线通信管理区包括总线信息区、节点信息区和端口信息区;
所述总线信息区包括各所述总线的节点组的节点信息在所述节点信息区中的第一偏移地址,所述节点组为对应的所述总线绑定的所有虚拟机;
所述节点信息区包括各虚拟机的节点消息池在共享内存的通信消息池中的第二偏移地址,所述通信消息池包括各所述节点消息池,所述节点消息池用于存放各虚拟机接收的通信消息;
所述节点信息区还包括各虚拟机的端口信息在所述端口信息区中的第三偏移地址,所述端口信息包括各端口的当前通信消息的消息序号。
4.根据权利要求3所述通信方法,其特征在于,所述确定当前通信消息在共享内存中的第一地址,包括:
根据所述总线信息区,确定接收虚拟机绑定的所述总线的所述第一偏移地址;
根据该所述第一偏移地址,确定接收虚拟机的所述第二偏移地址和所述第三偏移地址;
根据该所述第三偏移地址获得接收虚拟机的当前的所述消息序号;
根据该所述第二偏移地址和所述消息序号确定所述第一地址。
5.根据权利要求3所述通信方法,其特征在于,
所述通信消息的类型包括信令类型和数据类型,其中,所述信令类型的通信消息的内容包括信令,所述数据类型的通信消息的内容包括通信数据在所述通信消息池中的数据偏移地址,所述通信数据与所述通信消息对应;
当发送虚拟机在发送所述数据消息时还发送通信数据时,所述通信方法还包括:
发送虚拟机把所述通信数据写入到所述共享内存的第二地址,所述第二地址基于所述数据偏移地址确定;
接收虚拟机从所述第二地址中读取所述通信数据。
6.根据权利要求5所述通信方法,其特征在于,还包括:
接收虚拟机接收完所有所述通信数据时,基于发送虚拟机的所述套接字标识发送数据接收完成的第一通信消息给发送虚拟机;
发送虚拟机收到所述第一通信消息时,释放所述通信数据所占用的所述共享内存。
7.根据权利要求1至6任一所述通信方法,其特征在于,还包括:
发送虚拟机把所述通信消息存入所述第一地址时通过服务中断通过接收虚拟机。
8.一种微内核虚拟机间的通信装置,其特征在于,包括配置模块、发送模块和接收模块;
所述配置模块用于在共享内存中创建一条或多条共享内存的总线,并配置共享内存中的总线通信管理区;
所述配置模块还用于各虚拟机根据各自的套接字绑定到相应的共享内存的总线;
所述发送模块用于由发送虚拟机利用所述总线通信管理区,确定当前通信消息在共享内存中的第一地址,并把所述通信消息写入到所述第一地址;
所述接收模块用于由接收虚拟机利用所述总线通信管理区,确定所述第一地址,并从所述第一地址中读取所述通信消息。
9.一种计算设备,其特征在于,包括:
总线;
通信接口,其与所述总线连接;
至少一个处理器,其与所述总线连接;以及
至少一个存储器,其与所述总线连接并存储有程序指令,所述程序指令当被所述至少一个处理器执行时使得所述至少一个处理器执行权利要求1至7任一所述方法。
10.一种计算机可读存储介质,其上存储有程序指令,其特征在于,所述程序指令当被计算机执行时使得所述计算机执行权利要求1至7任一所述方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111351125.5A CN113821309B (zh) | 2021-11-16 | 2021-11-16 | 一种微内核虚拟机间的通信方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111351125.5A CN113821309B (zh) | 2021-11-16 | 2021-11-16 | 一种微内核虚拟机间的通信方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113821309A true CN113821309A (zh) | 2021-12-21 |
CN113821309B CN113821309B (zh) | 2022-03-22 |
Family
ID=78919560
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111351125.5A Active CN113821309B (zh) | 2021-11-16 | 2021-11-16 | 一种微内核虚拟机间的通信方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113821309B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327944A (zh) * | 2021-12-24 | 2022-04-12 | 科东(广州)软件科技有限公司 | 一种多系统共享内存的方法、装置、设备及存储介质 |
CN115297144A (zh) * | 2022-07-29 | 2022-11-04 | 中汽创智科技有限公司 | 节点数据交互方法和装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20070061019A (ko) * | 2006-04-11 | 2007-06-13 | 엠텍비젼 주식회사 | 코드 데이터 에러 정정 방법 및 장치 |
US20090083756A1 (en) * | 2007-09-20 | 2009-03-26 | Electronics And Telecommunications Research Institute | Apparatus and method for communication interface between application programs on virtual machines using shared memory |
CN101819564A (zh) * | 2009-02-26 | 2010-09-01 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN102541618A (zh) * | 2010-12-29 | 2012-07-04 | 中国移动通信集团公司 | 一种通用图形处理器虚拟化的实现方法、系统及装置 |
CN102693162A (zh) * | 2011-12-29 | 2012-09-26 | 中国科学技术大学苏州研究院 | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 |
CN103559075A (zh) * | 2013-10-30 | 2014-02-05 | 华为技术有限公司 | 一种数据传输方法、装置和系统及内存装置 |
CN113590254A (zh) * | 2020-04-30 | 2021-11-02 | 深信服科技股份有限公司 | 一种虚拟机通信的方法、装置、系统和介质 |
-
2021
- 2021-11-16 CN CN202111351125.5A patent/CN113821309B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20070061019A (ko) * | 2006-04-11 | 2007-06-13 | 엠텍비젼 주식회사 | 코드 데이터 에러 정정 방법 및 장치 |
US20090083756A1 (en) * | 2007-09-20 | 2009-03-26 | Electronics And Telecommunications Research Institute | Apparatus and method for communication interface between application programs on virtual machines using shared memory |
CN101819564A (zh) * | 2009-02-26 | 2010-09-01 | 国际商业机器公司 | 协助在虚拟机之间进行通信的方法和装置 |
CN102541618A (zh) * | 2010-12-29 | 2012-07-04 | 中国移动通信集团公司 | 一种通用图形处理器虚拟化的实现方法、系统及装置 |
CN102693162A (zh) * | 2011-12-29 | 2012-09-26 | 中国科学技术大学苏州研究院 | 基于共享内存和核间中断的多核平台上多个虚拟机之间进程通信方法 |
CN103559075A (zh) * | 2013-10-30 | 2014-02-05 | 华为技术有限公司 | 一种数据传输方法、装置和系统及内存装置 |
CN113590254A (zh) * | 2020-04-30 | 2021-11-02 | 深信服科技股份有限公司 | 一种虚拟机通信的方法、装置、系统和介质 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114327944A (zh) * | 2021-12-24 | 2022-04-12 | 科东(广州)软件科技有限公司 | 一种多系统共享内存的方法、装置、设备及存储介质 |
CN114327944B (zh) * | 2021-12-24 | 2022-11-11 | 科东(广州)软件科技有限公司 | 一种多系统共享内存的方法、装置、设备及存储介质 |
CN115297144A (zh) * | 2022-07-29 | 2022-11-04 | 中汽创智科技有限公司 | 节点数据交互方法和装置 |
CN115297144B (zh) * | 2022-07-29 | 2024-03-08 | 中汽创智科技有限公司 | 节点数据交互方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113821309B (zh) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110647480B (zh) | 数据处理方法、远程直接访存网卡和设备 | |
WO2018035856A1 (zh) | 实现硬件加速处理的方法、设备和系统 | |
CN110888827B (zh) | 数据传输方法、装置、设备及存储介质 | |
TWI239187B (en) | System and method for managing and validating remote keys which correspond to outstanding data transactions | |
CN107995129B (zh) | 一种nfv报文转发方法和装置 | |
WO2019161557A1 (zh) | 一种通信的方法及装置 | |
CN113821309B (zh) | 一种微内核虚拟机间的通信方法、装置、设备及存储介质 | |
US11960430B2 (en) | Remote mapping method, apparatus and device for computing resources, and storage medium | |
WO2017049945A1 (zh) | 加速器虚拟化的方法、装置及集中资源管理器 | |
US10795840B2 (en) | Persistent kernel for graphics processing unit direct memory access network packet processing | |
US10067900B2 (en) | Virtualized I/O device sharing within a distributed processing node system | |
JP2000020490A (ja) | 遠隔手続き呼出し機構またはオブジェクトリクエストブローカ機構を有する計算機、データ転送方法、および転送方法記憶媒体 | |
CN112667420B (zh) | 实现异构系统内部通信的方法、装置、设备及存储介质 | |
WO2021042819A1 (zh) | 报文转发的方法、计算机设备和中间设备 | |
US11829309B2 (en) | Data forwarding chip and server | |
US10817448B1 (en) | Reducing read transactions to peripheral devices | |
JP2010165022A (ja) | プロセッサ間通信装置、プロセッサ間通信方法、プログラムおよび記録媒体 | |
US9069592B2 (en) | Generic transport layer mechanism for firmware communication | |
US20140068165A1 (en) | Splitting a real-time thread between the user and kernel space | |
JP6498844B2 (ja) | コンピュータデバイス及びコンピュータデバイスによりデータを読み取る/書き込むための方法 | |
US20230168953A1 (en) | Inter-process communication method and apparatus | |
WO2018076882A1 (zh) | 存储设备的操作方法及物理服务器 | |
CN115269213A (zh) | 数据接收方法、数据发送方法、装置、电子设备及介质 | |
CN115080479B (zh) | 传输方法、服务器、设备、裸金属实例及基板管理控制器 | |
US11467998B1 (en) | Low-latency packet processing for network device |
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 |