CN109240800B - 一种基于Hypervisor多***共享内存的管理方法 - Google Patents

一种基于Hypervisor多***共享内存的管理方法 Download PDF

Info

Publication number
CN109240800B
CN109240800B CN201811058843.1A CN201811058843A CN109240800B CN 109240800 B CN109240800 B CN 109240800B CN 201811058843 A CN201811058843 A CN 201811058843A CN 109240800 B CN109240800 B CN 109240800B
Authority
CN
China
Prior art keywords
data
shared memory
client
queue
management list
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
Application number
CN201811058843.1A
Other languages
English (en)
Other versions
CN109240800A (zh
Inventor
程德心
韦荣伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Kotei Informatics Co Ltd
Original Assignee
Wuhan Kotei Informatics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Kotei Informatics Co Ltd filed Critical Wuhan Kotei Informatics Co Ltd
Priority to CN201811058843.1A priority Critical patent/CN109240800B/zh
Publication of CN109240800A publication Critical patent/CN109240800A/zh
Application granted granted Critical
Publication of CN109240800B publication Critical patent/CN109240800B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory 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多***共享内存的管理方法。
背景技术
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之间相互通信的进程通过一些简单的自定义协议(添加包头,指定读写通道等)的方式进行通信,每一次发送和接收都需要封包、拆包和校验,这会使得共享内存的通信效率低,通信方式单一,很难支持一个guest OS与多个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是否为数据接收client,若是,则根据所述队列指针读取数据;
发送数据时,检测共享内存中control page的status字段的高16位,数据发送client判断数据接收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将待发送数据写入所述空闲的共享内存块中,同时更新队列指针,包括:
对于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是否为数据接收client,若是,则根据所述队列指针读取数据;
发送数据时,检测共享内存中control page的status字段的高16位,数据发送client判断数据接收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将待发送数据写入所述空闲的共享内存块中,同时更新队列指针,包括:
对于shmem_arr字段而言,其成员通过顺序表和链表的特性实现环形队列,用q_tab字段的queue_begin成员标记队头,当作环形内存的方式使用;
将待发送数据拷贝到共享内存中;
判断数据是否发送完成,若未完成则将数据加入队尾,并且用q_tab字段的queue_tail成员标记。
CN201811058843.1A 2018-09-11 2018-09-11 一种基于Hypervisor多***共享内存的管理方法 Active CN109240800B (zh)

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 CN109240800A (zh) 2019-01-18
CN109240800B true 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)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
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 北京智芯微电子科技有限公司 核间通信***、方法、装置、设备、芯片及可读存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101667144A (zh) * 2009-09-29 2010-03-10 北京航空航天大学 一种基于共享内存的虚拟机通信方法
CN104915151A (zh) * 2015-06-02 2015-09-16 杭州电子科技大学 多虚拟机***中一种主动共享的内存超量分配方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8635612B2 (en) * 2005-04-29 2014-01-21 Microsoft Corporation Systems and methods for hypervisor discovery and utilization
US8065687B2 (en) * 2007-01-05 2011-11-22 Moka5, Inc. Bypass virtualization
CN101819564B (zh) * 2009-02-26 2013-04-17 国际商业机器公司 协助在虚拟机之间进行通信的方法和装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101667144A (zh) * 2009-09-29 2010-03-10 北京航空航天大学 一种基于共享内存的虚拟机通信方法
CN104915151A (zh) * 2015-06-02 2015-09-16 杭州电子科技大学 多虚拟机***中一种主动共享的内存超量分配方法

Also Published As

Publication number Publication date
CN109240800A (zh) 2019-01-18

Similar Documents

Publication Publication Date Title
CN109240800B (zh) 一种基于Hypervisor多***共享内存的管理方法
US20200278880A1 (en) Method, apparatus, and system for accessing storage device
KR101857511B1 (ko) 가상 머신 마이그레이션을 판정하는 방법 및 장치
CN109981493B (zh) 一种用于配置虚拟机网络的方法和装置
EP3432549A1 (en) Method and apparatus for processing user requests
US20050102671A1 (en) Efficient virtual machine communication via virtual machine queues
US11188347B2 (en) Virtual function driver loading method and server using global and local identifiers corresponding to locations of the virtual functions
US11036535B2 (en) Data storage method and apparatus
US20180293108A1 (en) Data Processing Method and Apparatus, and System
EP3451592B1 (en) Packet transmission between vxlan domains
US20190199794A1 (en) Efficient replication of changes to a byte-addressable persistent memory over a network
CN104731635A (zh) 一种虚拟机访问控制方法,及虚拟机访问控制***
CN114201268B (zh) 一种数据处理方法、装置、设备及可读存储介质
US10338822B2 (en) Systems and methods for non-uniform memory access aligned I/O for virtual machines
US20190114076A1 (en) Method and Apparatus for Storing Data in Distributed Block Storage System, and Computer Readable Storage Medium
AU2015402888A1 (en) Computer device and method for reading/writing data by computer device
US20110246600A1 (en) Memory sharing apparatus
CN113794764A (zh) 服务器集群的请求处理方法、介质和电子设备
CN106598696B (zh) 一种虚拟机之间数据交互的方法及装置
US8041902B2 (en) Direct memory move of multiple buffers between logical partitions
CN105765542A (zh) 访问文件的方法、分布式存储***和存储节点
CN111865794B (zh) 一种逻辑端口的关联方法、***、设备及数据传输***
CN111669358B (zh) 一种批量处理vrouter网络隔离空间的方法和装置
CN107168646B (zh) 一种分布式数据存储控制方法及服务器
CN115210694A (zh) 数据传输方法及装置

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