CN109240800A - 一种基于Hypervisor多系统共享内存的管理方法 - Google Patents
一种基于Hypervisor多系统共享内存的管理方法 Download PDFInfo
- Publication number
- CN109240800A CN109240800A CN201811058843.1A CN201811058843A CN109240800A CN 109240800 A CN109240800 A CN 109240800A CN 201811058843 A CN201811058843 A CN 201811058843A CN 109240800 A CN109240800 A CN 109240800A
- Authority
- CN
- China
- Prior art keywords
- data
- client
- shared drive
- queue
- field
- 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
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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- 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/45583—Memory management, e.g. access or allocation
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于Hypervisor多系统共享内存的管理方法,将Hypervisor上的guest OS与guest OS之间、guest OS与host OS之间的共享内存区域进行统一管理,每个操作系统均能实时的查询当前共享内存区域的使用/通信状态,支持一个guest OS与多个guest OS的共享内存通信,也支持一个guest OS对另一个guest OS的多个进程的共享内存通信,并且对于用户而言,等价于系统内多进程的通信,简单易用。
Description
技术领域
本发明涉及计算机通信技术领域,具体涉及一种基于Hypervisor多系统共享内存的管理方法。
背景技术
Hypervisor是一种运行在物理服务器和操作系统之间的中间层软件,它可以允许多个操作系统和应用共享一套基础物理硬件,又称为虚拟机监视器(virtual machinemonitor)。Hypervisor是所有虚拟化技术的核心,非中断的支持多工作负载迁移是hypervisor的基本功能。当硬件/操作系统上运行Hypervisor时,Hypervisor允许创建多个虚拟机,并且会给每一台虚拟机分配适量的内存、cpu、网络和磁盘资源,还会加载所有虚拟机的客户操作系统(guest OS),并使得这些客户操作系统(guest OS)运行。那么承载Hypervisor运行的操作系统被称为host OS,运行在Hypervisor提供的虚拟机上的操作系统被称为guest OS。
目前基于共享内存通信的管理方式均是在同一个操作系统中多进程之间使用共享内存通信的管理方法,这种管理方法的功能只限于在同一个操作系统内部的多进程间的通信,无法满足于运行在Hypervisor上的多个客户机操作系统(guest OS)之间跨操作系统的共享内存通信的管理需求。目前在Hypervisor上,处理多个guest OS之间的共享内存通信的常用做法是为两个guest OS之间相互通信的进程通过一些简单的自定义协议(添加包头,指定读写通道等)的方式进行通信,每一次发送和接收都需要封包、拆包和校验,这会使得共享内存的通信效率低,通信方式单一,很难支持一个guestOS与多个guest OS之间的通信,也很难支持一个guest OS中的一个进程与另一个guest OS中的多个进程间的通信。
发明内容
本发明针对现有技术中存在的技术问题,提供一种基于Hypervisor多系统共享内存的管理方法,将Hypervisor上的guest OS与guest OS之间、guest OS与host OS之间的共享内存区域进行统一管理,每个操作系统均能实时的查询当前共享内存区域的使用/通信状态,支持一个guest OS与多个guest OS的共享内存通信,也支持一个guest OS对另一个guest OS的多个进程的共享内存通信,并且对于用户而言,等价于系统内多进程的通信,简单易用。
本发明解决上述技术问题的技术方案如下:
一种基于Hypervisor多系统共享内存的管理方法,包括:
由创建共享内存的guestOS在共享内存首页创建多个管理列表并为每个client分配不同大小的共享内存空间;所述多个管理列表分别对应不同的client;每个client对其对应的共享内存空间具有可读写权限,其他client仅具有只读权限;
所述管理列表中包括源索引和目标索引、该管理列表对应的共享内存长度、队列指针;
接收数据时,所有guestOS进行中断操作,所有client检测共享内存control page的status字段的低16位,获取数据发送client的索引;
根据所述索引查询其对应的管理列表,判断本client是否为数据接收client,若是,则根据所述队列指针读取数据;
发送数据时,检测共享内存中control page的status字段的高16位,数据发送client判断数据接收client是否在线,并检测共享内存中是否存在空闲的共享内存块;
数据发送client修改其对应的管理列表,并将待发送数据写入所述空闲的共享内存块中。
进一步,所述管理列表,包括:
port字段,用于标记源和目标索引,用于client判断自己是否为数据接收client;
index字段,用于记录本client索引;
shmemdata字段,用于记录本client管理的共享内存的首地址;
size字段,用于记录本client共享内存的长度,以字节为单位;
wr_len字段,用于记录本client每次操作共享内存的长度;
w_bit字段,用于作为shmem_arr数组的可用位表;
q_tab字段,包括queue_begin成员和queue_tail成员,分别用于标记队列头与队列尾;
shmem_arr数组,其每一个元素均包括next成员和data成员,next成员用于构建队列指针,data成员用于指向一块共享内存。
进一步,所述的根据所述索引查询其对应的管理列表,判断本client是否为数据接收client,若是,则根据所述队列指针读取数据,包括:
根据所述数据发送client的索引查询该索引对应的管理列表,判断管理列表中port字段的目标索引与本client的索引是否一致;
若一致,则说明本client为数据接收client,则根据所述数据发送client的管理列表中q_tab字段和shmem_arr数组记录的数据,从共享内存中读取数据,并将队头数据出队。
进一步,所述的根据所述索引查询其对应的管理列表,判断本client是否为数据接收client,若是,则根据所述队列指针读取数据,还包括:
判断q_tab字段的queue_begin成员的值是否为NULL,若为NULL,则说明数据读取完毕,否则根据所述数据发送client的管理列表中q_tab字段和shmem_arr数组记录的数据,从共享内存中读取数据,并将队头数据出队。
进一步,所述的数据发送client修改其对应的管理列表,并将待发送数据写入所述空闲的共享内存块中,包括:
数据发送client修改其对应的管理列表,对于shmem_arr字段而言,其成员通过顺序表和链表的特性实现环形队列,用q_tab字段的queue_begin成员标记队头,当作环形内存的方式使用;
将待发送数据拷贝到共享内存中;
判断数据是否发送完成,若未完成则将数据加入队尾,并且用q_tab字段的queue_tail成员标记。
本发明的有益效果是:本发明通过在共享内存首页创建管理列表,每个client可以分配不同大小的共享内存空间,每个client单独管理,操作简单,管理效率高;通过队列的方式发送和接收数据,并且没有封包与拆包的过程,保证数据的完整性;每个client独占一块共享内存,具有可读写属性,其他client具有只读属性,并通过源和目标索引的方式标记,可实现多个client之间的通信并且保证数据的安全。
附图说明
图1为本发明实施例提供的管理列表结构示意图;
图2为本发明实施例提供的方法流程图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
本发明将Hypervisor上的guest OS与guest OS之间、guest OS与host OS之间的共享内存区域进行统一管理,每个操作系统均能实时的查询当前共享内存区域的使用/通信状态,每一个操作系统均用定制长度不一的共享内存块进行通信,通过源和目标索引的方式标志当前共享内存区域作为某两个操作系统之间的通信,数据的发送和接收无需封包和拆包,通信效率高;本发明支持一个guest OS与多个guest OS的共享内存通信,也支持一个guest OS对另一个guest OS的多个进程的共享内存通信。并且对于用户而言,等价于系统内多进程的通信,简单易用。
本发明解决Hypervisor上跨系统之间共享内存通信时,高效稳定的管理方法问题。
由创建共享内存的guestOS在共享内存首页创建多个管理列表并为每个client分配不同大小的共享内存空间;所述多个管理列表分别对应不同的client;每个client对其对应的共享内存空间具有可读写权限,其他client仅具有只读权限;
具体的,在Hypervidor的共享内存中的factory page中shmem字段获取共享内存起始地址,将第一页(4KB)共享内存分配作为管理列表区域,标记为shmem_m。
然后,建立16个管理列表(目前支持16个client),每个client有独立的列表管理区;
管理列表的数据结构如图1所示,其中,port字段标记源和目标索引,作为接收client判断目标是否为自己,index字段记录本client索引;shmemdata字段记录本client管理的共享内存的首地址;size字段记录本client共享内存的长度,以字节为单位;wr_len字段记录本client每次操作共享内存的长度(例如为1024Byte);w_bit字段作为shmem_arr数组的可用位表(例如0位置位表示shmem_arr[0]可用);q_tab字段记录队列头与队列尾;shmem_arr字段的每一个元素的next成员构建队列指针,data成员指向一块共享内存。
本发明通过在共享内存首页创建管理列表,每个client可以分配不同大小的共享内存空间,每个client单独管理,操作简单,管理效率高;通过队列的方式发送和接收数据,并且没有封包与拆包的过程,保证数据的完整性;每个client独占一块共享内存,具有可读写属性,其他client具有只读属性,并通过源和目标索引的方式标记,可实现多个client之间的通信并且保证数据的安全。
如图2所示,本发明方法包括以下步骤:
1.通过在共享内存的factory page中的shmem字段获取共享内存起始地址,将第一个页(4KB)作为管理列表页,将其称为shmem_m字段,在其中建立16个管理列表,对应于每一个client。管理列表只建立一次,由创建共享内存的guest OS创建,其他OS附加并管理。一个client可对应于OS中的一个进程。
2.每一个管理列表用其对应的client初始化。每一个client的索引对应于control page的索引号顺序,列表的查找主要依赖于索引号index。
3.共享内存的访问规则是:每一个client会独占一块共享内存,对其有可读写权限,其他client对其只有可读属性。
4.发送数据:
(1)检测control page的status字段的高16位,判断目标client是否在线。
(2)检测本client中是否还有数据,有可能数据是上一次通信,还没被接收完毕的,需要等待接收完毕。
(3)检测是否有空闲的共享内存块可用访问。
(4)对于shmem_arr字段而言,其成员通过顺序表和链表的特性实现环形队列,用q_tab字段的queue_begin成员标记队头,当作环形内存的方式使用。当有数据发送时,将数据加入队尾即可,并且用q_tab字段的queue_tail成员标记。
(5)将数据拷贝到共享内存中。
(6)判断数据是否发送完成,如果未完成,则循环第(3)步直到结束。
5.接收数据:
(1)guest OS收到中断后,进程检测control page的status字段的低16位,判断是哪一个client给自己发送数据,获取发送数据的client的索引index。
(2)通过索引获取此client的管理列表。
(3)判断管理列表的port字段的target_client_idx成员,与本client的索引index是否相等,如果相等,则判断此client是给本client发送数据的。
(4)从队头先将数据读取,然后将队头出队。
(5)判断q_tab字段的queue_begin成员是否为NULL,如果为NULL,则说明已经读取完数据,如果不为空,则继续循环第(3)步读取数据,直到读完所有数据(q_tab字段的queue_begin成员为空)。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种基于Hypervisor多系统共享内存的管理方法,其特征在于,包括以下步骤:
由创建共享内存的guestOS在共享内存首页创建多个管理列表并为每个client分配不同大小的共享内存空间;所述多个管理列表分别对应不同的client;所述管理列表中包括源索引和目标索引、该管理列表对应的共享内存长度、队列指针;
接收数据时,所有guestOS进行中断操作,所有client检测共享内存control page的status字段的低16位,获取数据发送client的索引;
根据所述索引查询其对应的管理列表,判断本client是否为数据接收client,若是,则根据所述队列指针读取数据;
发送数据时,检测共享内存中control page的status字段的高16位,数据发送client判断数据接收client是否在线,并检测共享内存中是否存在空闲的共享内存块;
数据发送client修改其对应的管理列表,并将待发送数据写入所述空闲的共享内存块中。
2.根据权利要求1所述一种基于Hypervisor多系统共享内存的管理方法,其特征在于,所述管理列表,包括:
port字段,用于标记源和目标索引,用于client判断自己是否为数据接收client;
index字段,用于记录本client索引;
shmemdata字段,用于记录本client管理的共享内存的首地址;
size字段,用于记录本client共享内存的长度,以字节为单位;
wr_len字段,用于记录本client每次操作共享内存的长度;
w_bit字段,用于作为shmem_arr数组的可用位表;
q_tab字段,包括queue_begin成员和queue_tail成员,分别用于标记队列头与队列尾;
shmem_arr数组,其每一个元素均包括next成员和data成员,next成员用于构建队列指针,data成员用于指向一块共享内存。
3.根据权利要求2所述一种基于Hypervisor多系统共享内存的管理方法,其特征在于,所述的根据所述索引查询其对应的管理列表,判断本client是否为数据接收client,若是,则根据所述队列指针读取数据,包括:
根据所述数据发送client的索引查询该索引对应的管理列表,判断管理列表中port字段的目标索引与本client的索引是否一致;
若一致,则说明本client为数据接收client,则根据所述数据发送client的管理列表中q_tab字段和shmem_arr数组记录的数据,从共享内存中读取数据,并将队头数据出队。
4.根据权利要求3所述一种基于Hypervisor多系统共享内存的管理方法,其特征在于,所述的根据所述索引查询其对应的管理列表,判断本client是否为数据接收client,若是,则根据所述队列指针读取数据,还包括:
判断q_tab字段的queue_begin成员的值是否为NULL,若为NULL,则说明数据读取完毕,否则根据所述数据发送client的管理列表中q_tab字段和shmem_arr数组记录的数据,从共享内存中读取数据,并将队头数据出队。
5.根据权利要求2所述一种基于Hypervisor多系统共享内存的管理方法,其特征在于,所述的数据发送client修改其对应的管理列表,并将待发送数据写入所述空闲的共享内存块中,包括:
数据发送client修改其对应的管理列表,对于shmem_arr字段而言,其成员通过顺序表和链表的特性实现环形队列,用q_tab字段的queue_begin成员标记队头,当作环形内存的方式使用;
将待发送数据拷贝到共享内存中;
判断数据是否发送完成,若未完成则将数据加入队尾,并且用q_tab字段的queue_tail成员标记。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811058843.1A CN109240800B (zh) | 2018-09-11 | 2018-09-11 | 一种基于Hypervisor多系统共享内存的管理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811058843.1A CN109240800B (zh) | 2018-09-11 | 2018-09-11 | 一种基于Hypervisor多系统共享内存的管理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109240800A true CN109240800A (zh) | 2019-01-18 |
CN109240800B CN109240800B (zh) | 2021-07-23 |
Family
ID=65067480
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811058843.1A Active CN109240800B (zh) | 2018-09-11 | 2018-09-11 | 一种基于Hypervisor多系统共享内存的管理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109240800B (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111209571A (zh) * | 2020-01-07 | 2020-05-29 | 天津飞腾信息技术有限公司 | 基于arm处理器的安全世界与非安全世界的通信方法 |
CN113010407A (zh) * | 2019-12-20 | 2021-06-22 | 上海汽车集团股份有限公司 | 一种系统信息获取方法、装置及系统 |
CN116107762A (zh) * | 2023-04-11 | 2023-05-12 | 远江盛邦(北京)网络安全科技股份有限公司 | 内存分配方法、装置、电子设备和存储介质 |
CN116841952A (zh) * | 2023-09-01 | 2023-10-03 | 北京智芯微电子科技有限公司 | 核间通信系统、方法、装置、设备、芯片及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060248528A1 (en) * | 2005-04-29 | 2006-11-02 | Microsoft Corporation | Systems and methods for hypervisor discovery and utilization |
US20080168479A1 (en) * | 2007-01-05 | 2008-07-10 | Thomas Joseph Purtell | Bypass Virtualization |
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
US20100217916A1 (en) * | 2009-02-26 | 2010-08-26 | International Business Machines Corporation | Method and apparatus for facilitating communication between virtual machines |
CN104915151A (zh) * | 2015-06-02 | 2015-09-16 | 杭州电子科技大学 | 多虚拟机系统中一种主动共享的内存超量分配方法 |
-
2018
- 2018-09-11 CN CN201811058843.1A patent/CN109240800B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060248528A1 (en) * | 2005-04-29 | 2006-11-02 | Microsoft Corporation | Systems and methods for hypervisor discovery and utilization |
US20080168479A1 (en) * | 2007-01-05 | 2008-07-10 | Thomas Joseph Purtell | Bypass Virtualization |
US20100217916A1 (en) * | 2009-02-26 | 2010-08-26 | International Business Machines Corporation | Method and apparatus for facilitating communication between virtual machines |
CN101667144A (zh) * | 2009-09-29 | 2010-03-10 | 北京航空航天大学 | 一种基于共享内存的虚拟机通信方法 |
CN104915151A (zh) * | 2015-06-02 | 2015-09-16 | 杭州电子科技大学 | 多虚拟机系统中一种主动共享的内存超量分配方法 |
Non-Patent Citations (2)
Title |
---|
毛亚强: "基于Xen虚拟化技术的混合监控度量框架研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
池志雄: "多内核操作系统资源管理设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113010407A (zh) * | 2019-12-20 | 2021-06-22 | 上海汽车集团股份有限公司 | 一种系统信息获取方法、装置及系统 |
CN111209571A (zh) * | 2020-01-07 | 2020-05-29 | 天津飞腾信息技术有限公司 | 基于arm处理器的安全世界与非安全世界的通信方法 |
CN116107762A (zh) * | 2023-04-11 | 2023-05-12 | 远江盛邦(北京)网络安全科技股份有限公司 | 内存分配方法、装置、电子设备和存储介质 |
CN116841952A (zh) * | 2023-09-01 | 2023-10-03 | 北京智芯微电子科技有限公司 | 核间通信系统、方法、装置、设备、芯片及可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109240800B (zh) | 2021-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11934341B2 (en) | Virtual RDMA switching for containerized | |
CN109240800A (zh) | 一种基于Hypervisor多系统共享内存的管理方法 | |
US10402341B2 (en) | Kernel-assisted inter-process data transfer | |
US10644935B2 (en) | Method for configuring fibre channel storage area network, and apparatus | |
WO2017066944A1 (zh) | 一种存储设备访问方法、装置和系统 | |
US20080189432A1 (en) | Method and system for vm migration in an infiniband network | |
US20080117909A1 (en) | Switch scaling for virtualized network interface controllers | |
US8244924B2 (en) | Discovery and configuration of device configurations | |
US9559898B2 (en) | Automatically configuring data center networks with neighbor discovery protocol support | |
CN102316043B (zh) | 端口虚拟化方法、交换机及通信系统 | |
US20190319846A1 (en) | Automatically updating zone information in a storage area network | |
US7809875B2 (en) | Method and system for secure communication between processor partitions | |
CN103621026A (zh) | 虚拟机的数据交换方法、装置和系统 | |
JP2008294717A (ja) | 仮想ネットワーク構成方法及びネットワークシステム | |
CN107094119B (zh) | 一种基于云计算和sdn网络的负载均衡控制方法及系统 | |
GB2519314A (en) | Managing virtual network ports | |
WO2017032112A1 (zh) | 一种与无中央处理器单板通讯的方法及通讯设备 | |
CN104731635A (zh) | 一种虚拟机访问控制方法,及虚拟机访问控制系统 | |
CN111078353A (zh) | 存储设备的操作方法及物理服务器 | |
US20190026154A1 (en) | Flexible automated provisioning of single-root input/output virtualization (sr-iov) devices | |
US9542200B2 (en) | Dynamic port naming in a chassis | |
US9344376B2 (en) | Quality of service in multi-tenant network | |
US11513987B2 (en) | Remote direct memory access based networking gateway | |
CN108351802B (zh) | 计算机数据处理系统和用于虚拟机通信的基于通信流量的优化的方法 | |
US11221865B2 (en) | Batch management of operations over virtualized entities |
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 |