CN105573852B - 一种虚拟地址隔离环境下超高速数据对象通信的方法 - Google Patents
一种虚拟地址隔离环境下超高速数据对象通信的方法 Download PDFInfo
- Publication number
- CN105573852B CN105573852B CN201610077775.8A CN201610077775A CN105573852B CN 105573852 B CN105573852 B CN 105573852B CN 201610077775 A CN201610077775 A CN 201610077775A CN 105573852 B CN105573852 B CN 105573852B
- Authority
- CN
- China
- Prior art keywords
- domain
- data object
- region
- data
- virtual address
- 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
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/45579—I/O management, e.g. providing access to device drivers or storage
-
- 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/45587—Isolation or security of virtual machine instances
Abstract
本发明公开了一种虚拟地址隔离环境下超高速数据对象通信的方法。包括:步骤1,初始化系统中需要超高速通信的域,所述需要超高速通信的域为虚拟地址隔离的两个域domain0和domain1,其中,域domain0为数据对象发送方,域domain1为数据对象接收方;步骤2,域domain0向域domain1发送长度为S字节的数据对象,域domain1接收数据对象,完成通信过程。该方法首先通过在两个隔离域之间建立动态或静态的内存共享区域,用于数据对象的管理,然后在此区域内由两个隔离域并发协同操作数据对象的创建、传送与消亡的整个生命周期,进而达到超高速通信。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种虚拟地址隔离环境下超高速数据对象通信的方法。
背景技术
虚拟内存是当代计算机体系结构的基本概念,在多任务的环境中,虚拟地址隔离是系统中独立运行对象之间进行资源分配、调度和保护的基本手段。典型的,在当代流行的操作系统中,所有进程之间,流行虚拟化技术(如Xen、KVM)的多虚拟机之间都通过页表的方式进行了虚拟地址隔离。在被虚拟地址隔离的不同对象之间(称之为隔离域),由于不能直接访问彼此的寻址空间,它们之间的数据通信方式在不同的系统中都有经典的方法提供。例如,传统的操作系统为进程间通信(IPC)提供了管道(pipe)、信号量(semophore)、共享内存(shared memory)等基础手段;当代的虚拟化环境Xen为虚拟机之间提供了事件通道(event channel)、基于授权表(grant table)的内存共享等基础手段。
然而,在传统系统中的隔离域之间的通信方法都很基础,如管道(pipe)、信号量(semophore)、事件通道(event channel)之类的通信方式效率不能用于超高速数据对象通信;共享内存机制虽然能实时地让一个域的写入数据对另一个域可见,但是其共享的粒度在于整个页面,并不参与页面中数据对象的整个生命周期的操作,如果将整个页面作为数据对象,其创建与撤销共享的操作有很大的系统开销。因此,缺乏一种通用而有效的方法解决如何在两个隔离域之间超高速地发送数据对象的难题。
发明内容
发明目的:本发明所要解决的技术问题是如何让两个虚拟地址空间隔离的域进行超高速的数据对象通信,在传统的共享内存机制之上构建一种更高效,更通用的通信机制。
为了解决上述技术问题,本发明公开了一种在虚拟地址隔离环境下,在被隔离的两个域之间进行超高速数据对象通信的方法,包括两个阶段:系统初始化阶段和隔离域通信阶段。
假设系统中存在需要超高速通信的两个虚拟地址隔离的域domain0和domain1(它们可以是同一个操作系统中的两个进程,或者是虚拟化环境下的两个虚拟机),每个域中按照功能至少可划分成两层,分别是用户层和数据通信层。用户层是数据的生产者和消费者,通信层负责将一个域中用户层生产的数据传输到另一个域中的用户层以供之消费。
本发明包含以下步骤:
步骤1,初始化计算机操作系统中需要超高速通信的域,所述需要超高速通信的域为虚拟地址隔离的域domain0和域domain1两个域,其中,域domain0为数据对象发送方,域domain1为数据对象接收方;
步骤2,域domain0向域domain1发送长度为S字节(假设域domain0和域domain1之间能共享的内存大小最大为L字节,S的范围在0~L之间)的数据对象,域domain1接收数据对象,完成通信过程。
其中,步骤1中所述虚拟地址隔离的两个域domain0和domain1是同一个计算机操作系统中的两个进程,或者是虚拟化环境下的两个虚拟机。
步骤1包括如下步骤:
步骤1-1,在域domain0中划分一个连续的虚拟地址区域area0,在域domain1中划分出一个与area0相同大小的连续的虚拟地址区域area1,虚拟地址区域area0和虚拟地址区域area1用于内存共享即作为共享内存区域,采用静态共享映射方式,即计算机操作系统初始化时全部映射;或者采用动态共享映射方式,即计算机操作系统运行过程中按需映射;
步骤1-2,在虚拟地址区域area0和虚拟地址区域area1中对称地分别选取一段区域meta_region0和meta_region1作为协同数据结构区域,用于域domain0和域domain1并发协同地进行数据对象管理,使域domain0和域domain1被对齐共享映射在同一个或者两个以上物理页面上,并在物理页面内对齐;
步骤1-3,将虚拟地址区域area0和虚拟地址区域area1的剩余区域按照步骤1-2中方式进行对齐共享映射,并按照页面大小划分成n个页面,依次命名为page0~pagen,作为空闲数据页面,n为自然数,并将对页面的索引记录入区域meta_region0的页面查找数据结构中;根据具体实施场景的不同,该数据结构类型可以为:查找树、链表、位图或者哈希表等。
步骤1-4,根据具体实施场景的不同,确定需要传输的数据对象大小集合,该集合中包含m个元素,将这些元素按字节数值从小到大依次命名为size0~sizem,m为自然数,初始化区域meta_region0中对不同大小数据对象的查找数据结构objs0~objsm,用以存放空闲数据对象的索引。查找结构可以包含步骤1-3中的部分页面按照数据对象大小所拆分成的数据对象的索引;也可以先将查找结构置空,说明当前尚未分配空闲数据对象。
步骤1-5,初始化区域meta_region0中生产者消费者通信模型的数据结构prod_cons,用于在域domain0和域domain1之间发送数据对象的索引,根据具体实施场景的不同,该数据结构可以实现为:链表(linked list)、数组(array)或者环(ring buffer)。
步骤1-1中,域domain0和域domain1协同管理共享内存区域area0和area1内数据对象的创建、传送与删除的处理过程。
步骤2中,所述长度为S字节的数据对象在数值size0~sizem的范围中。
步骤2中,域domain0向域domain1发送长度为S字节的数据对象包括如下步骤:
步骤2-1-1,域domain0查找区域meta_region0中对应长度为S的数据对象的数据结构objsk是否有空闲数据对象,如果已有空闲数据对象,则从数据结构objsk当中取出该数据对象,并返回该空闲数据对象的索引值index,跳转至步骤2-1-2;如果没有空闲数据对象,在区域meta_region0中查找是否有空闲页面,如果有空闲页面,将该空闲页面拆分成个长度为S的数据对象,其中PAGE_SIZE为以字节计算的页面大小,将所有数据对象的索引值插入到区域meta_region0中,继续查找区域meta_region0中对应长度为S的数据对象的数据结构objsk是否有空闲数据对象;如果没有空闲页面,则返回空值NULL,表示当前没有更多数据对象可获取,进入等待空闲数据对象状态;等待方式可以是忙等,休眠在某个等待队列。
步骤2-1-2,域domain0将所获得的空闲数据对象的索引值index转换成虚拟地址空间内可直接寻址的指针,并作为需要发送数据对象的缓冲区,填入用户层需要发送的数据对象;
步骤2-1-3,域domain0将索引值index插入到区域meta_region0的生产者消费者通信模型的数据结构中,按照实施场景的不同,domain0可选信号量或者事件通道等机制,并通知接收方域domain1数据对象已经发送,如果域domain1当前正处于轮询状态(polling),则不发送通知;
步骤2-1-4,如果没有更多数据对象发送,域domain0等待用户发送更多数据对象;如果有更多数据对象要发送,则跳转至步骤2-1-1。
步骤2中,域domain1接收数据对象包括如下步骤:
步骤2-2-1,在域domain0发送的数据对象到达域domain1之前,域domain1的初始状态是等待状态,等待的方式为等待域domain0信号量或者事件通道消息的休眠状态,或者为轮询状态;
步骤2-2-2:在域domain1处于休眠状态时,当域domain0发送第一个数据对象时,域domain1即被信号量或者事件通道机制唤醒,并查询区域meta_region1中的生产者消费者通信模型的数据结构prod_cons;在域domain1处于轮询状态时,域domain1不断查询区域meta_region1中的生产者消费者通信模型的数据结构prod_cons直到出现有发送的数据对象的索引为止;
步骤2-2-3,域domain1从数据结构prod_cons中取出数据对象的索引值index,并更新数据结构prod_cons;
步骤2-2-4,域domain1将数据对象的索引值index按照其虚拟地址区域area1的边界转换成域domain1中虚拟地址空间内可寻址的指针,并向上递交给用户层使用;
步骤2-2-5,域domain1截获用户层在使用完数据对象后释放数据对象的操作,将数据对象从指针转换成索引值index,重新插入到区域meta_region1中的对象查找数据结构objsk中,完成整个数据对象的生命周期。
有益效果:本发明提供在虚拟地址隔离环境下,比共享内存更细粒度的超高速数据对象通信方式。由于虚拟地址隔离环境普遍存在于操作系统多进程之间,虚拟化技术(Xen、KVM等)的多虚拟机之间,本发明方法能极大加速这些隔离域之间的I/O(包括网络、文件系统、块设备等)通信。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
图1是本发明数据对象通信的示意图。
具体实施方式
下面结合附图对本发明作具体说明。应该指出,所描述的实施例仅是为了说明的目的,而不是对本发明范围的限制。
本发明公开了一种在虚拟地址隔离环境下,在被隔离的两个域之间进行超高速数据对象通信的方法。该方法首先通过在两个隔离域之间建立动态或静态的内存共享区域,用于数据对象的管理,然后在此区域内由两个隔离域并发协同操作数据对象的创建、传送与消亡的整个生命周期,进而达到超高速通信。
本发明包含以下步骤:
步骤1,初始化计算机操作系统中需要超高速通信的域,所述需要超高速通信的域为虚拟地址隔离的域domain0和域domain1两个域,其中,域domain0为数据对象发送方,域domain1为数据对象接收方,如图1所示;
步骤2,域domain0向域domain1发送长度为S字节(假设域domain0和域domain1之间能共享的内存大小最大为L字节,S的范围在0~L之间)的数据对象,域domain1接收数据对象,完成通信过程。
其中,步骤1中所述虚拟地址隔离的两个域domain0和domain1是同一个计算机操作系统中的两个进程,或者是虚拟化环境下的两个虚拟机。
步骤1包括如下步骤:
步骤1-1,在域domain0中划分一个连续的虚拟地址区域area0,在域domain1中划分出一个与area0相同大小的连续的虚拟地址区域area1,虚拟地址区域area0和虚拟地址区域area1用于内存共享即作为共享内存区域,采用静态共享映射方式,即计算机操作系统初始化时全部映射;或者采用动态共享映射方式,即计算机操作系统运行过程中按需映射;
步骤1-2,在虚拟地址区域area0和虚拟地址区域area1中对称地分别选取一段区域meta_region0和meta_region1作为协同数据结构区域,用于域domain0和域domain1并发协同地进行数据对象管理,使域domain0和域domain1被对齐共享映射在同一个或者两个以上物理页面上,并在物理页面内对齐;
步骤1-3,将虚拟地址区域area0和虚拟地址区域area1的剩余区域按照步骤1-2中方式进行对齐共享映射,并按照页面大小划分成n个页面,依次命名为page0~pagen,作为空闲数据页面,n为自然数,并将对页面的索引记录入区域meta_region0的页面查找数据结构中;根据具体实施场景的不同,该数据结构类型可以为:查找树、链表、位图或者哈希表等。
步骤1-4,根据具体实施场景的不同,确定需要传输的数据对象大小集合,该集合中包含m个元素,将这些元素按字节数值从小到大依次命名为size0~sizem,m为自然数,初始化区域meta_region0中对不同大小数据对象的查找数据结构objs0~objsm,用以存放空闲数据对象的索引。查找结构可以包含步骤1-3中的部分页面按照数据对象大小所拆分成的数据对象的索引;也可以先将查找结构置空,说明当前尚未分配空闲数据对象。
步骤1-5,初始化区域meta_region0中生产者消费者通信模型(生产者消费者问题模型是一个典型的并发问题模型,是一个已有的技术,但是并不属于本发明的创新点,本领域技术人员公知在此处如何使用生产者消费者通信模型,参见Tanenbaum,Andrew S.,andHerbert Bos.Modern operating systems.Prentice Hall Press,2014.APA,《Modernoperating systems》作者Tanenbaum)的数据结构prod_cons,用于在域domain0和域domain1之间发送数据对象的索引,根据具体实施场景的不同,该数据结构可以实现为:链表(linked list)、数组(array)或者环(ring buffer)。
步骤1-1中,域domain0和域domain1协同管理共享内存区域area0和area1内数据对象的创建、传送与删除的处理过程。
步骤2中,所述长度为S字节的数据对象在数值size0~sizem的范围中。
步骤2中,域domain0向域domain1发送长度为S字节的数据对象包括如下步骤:
步骤2-1-1,域domain0查找区域meta_region0中对应长度为S的数据对象的数据结构objsk是否有空闲数据对象,如果已有空闲数据对象,则从数据结构objsk当中取出该数据对象,并返回该空闲数据对象的索引值index,跳转至步骤2-1-2;如果没有空闲数据对象,在区域meta_region0中查找是否有空闲页面,如果有空闲页面,将该空闲页面拆分成个长度为S的数据对象,其中PAGE_SIZE为以字节计算的页面大小,将所有数据对象的索引值插入到区域meta_region0中,继续查找区域meta_region0中对应长度为S的数据对象的数据结构objsk是否有空闲数据对象;如果没有空闲页面,则返回空值NULL,表示当前没有更多数据对象可获取,进入等待空闲数据对象状态;等待方式可以是忙等,休眠在某个等待队列。
步骤2-1-2,域domain0将所获得的空闲数据对象的索引值index转换成虚拟地址空间内可直接寻址的指针,并作为需要发送数据对象的缓冲区,填入用户层需要发送的数据对象;
步骤2-1-3,域domain0将索引值index插入到区域meta_region0的生产者消费者通信模型的数据结构中,按照实施场景的不同,domain0可选信号量或者事件通道等机制,并通知接收方域domain1数据对象已经发送,如果域domain1当前正处于轮询状态(polling),则不发送通知;
步骤2-1-4,如果没有更多数据对象发送,域domain0等待用户发送更多数据对象;如果有更多数据对象要发送,则跳转至步骤2-1-1。
步骤2中,域domain1接收数据对象包括如下步骤:
步骤2-2-1,在域domain0发送的数据对象到达域domain1之前,域domain1的初始状态是等待状态,等待的方式为等待域domain0信号量或者事件通道消息的休眠状态,或者为轮询状态;
步骤2-2-2:在域domain1处于休眠状态时,当域domain0发送第一个数据对象时,域domain1即被信号量或者事件通道机制唤醒,并查询区域meta_region1中的生产者消费者通信模型的数据结构prod_cons;在域domain1处于轮询状态时,域domain1不断查询区域meta_region1中的生产者消费者通信模型的数据结构prod_cons直到出现有发送的数据对象的索引为止;
步骤2-2-3,域domain1从数据结构prod_cons中取出数据对象的索引值index,并更新数据结构prod_cons;
步骤2-2-4,域domain1将数据对象的索引值index按照其虚拟地址区域area1的边界转换成域domain1中虚拟地址空间内可寻址的指针,并向上递交给用户层使用;
步骤2-2-5,域domain1截获用户层在使用完数据对象后释放数据对象的操作,将数据对象从指针转换成索引值index,重新插入到区域meta_region1中的对象查找数据结构objsk中,完成整个数据对象的生命周期。
实施例1
本实施案例公开了一种在虚拟地址隔离环境下,在被隔离的两个域之间进行超高速数据对象通信的方法在虚拟机文件系统中的应用。实施场景如下所述:
在虚拟化环境中,虚拟机文件系统(Virtual Machine File System)用以在虚拟机内外进行共享的文件交互,典型的例子如Vmware的VMFS,KVM虚拟机的9p文件系统。此类的文件系统使用某个虚拟化技术中支持虚拟机之间的通信的机制来完成文件数据的传输,由于虚拟机之间的通信有高昂的性能开销,因此速度成为瓶颈。
假设虚拟机内外通信的主机一方为host有一个文件系统客户端(fs client),虚拟机内部为guest,有一个文件系统服务器(fs server),host通过客户端请求guest的服务器端,达到host能访问guest内部文件的效果。类似的,guest也可以通过类似的机制访问host的文件。
在此场景下,本实施例的方法具体实施步骤为:
系统初始化阶段为host到guest方向和guest到host方向分别用下步骤创建两个用于单向通信的共享内存区域,以从host到guest为例:
步骤1,为host和guest各自划分两个等大小的连续的虚拟地址区域area0和area1用以内存共享,在系统初始化时全部映射,保证area0和area1中的所有虚拟地址对称映射在相同的物理内存上。
步骤2,对称地选取area0和area1中的两段小区域作为协同数据结构区域meta_region0和meta_region1用以在host和guest之间并发协同地进行数据对象管理。
步骤3,将区域的剩余部分按照步骤2中方式进行对齐共享映射,按照页面大小划分成page0~pagen,作为空闲数据页面,并将对页面的索引记录入meta_region0的页面哈希表中。
步骤4,确定可能的对象大小,根据文件系统来说,对象常见的有针对文件inode的操作命令,数据块的传送等,因此大小可以在64~512字节范围内,按照2的指数划分,分别为64、128、256、512字节四种大小的对象。初始化meta_region0中对不同大小对象的基于链表的查找结构objs1~objs4,将查找结构置空,说明当前尚未分配空闲对象。
步骤5,初始化meta_region0中生产者消费者通信模型的环(ring buffer)数据结构prod_cons,用以在domain0和domain1之间发送对象索引。
通信阶段的步骤host和guest两个方向上类似,以host向guest发送数据(或者命令)为例。
对于发送方host的步骤,
步骤1,假设host的文件系统客户端(fs client)某时刻欲发送一个大小为S字节的(S在size0~sizem的范围中)的命令对象给guest的文件系统服务器端(fs server)。首先,host查找meta_region0中对应S大小对象的数据结构假设为objsk,如果已有空闲对象,则从objsk当中取出该对象,并返回该空闲对象的索引值index,跳转至步骤3。
步骤2,如果对象查找数据结构中不存在空闲对象,则继续在meta_region0中查找空闲页面,如果有空闲页面,则将该空闲页面拆分成PAGE_SIZE/S(其中PAGE_SIZE为以字节计算的页面大小)个大小为S的对象,并将所有对象的索引值插入到meta_region0中,跳转至步骤1;如果meta_region0中查找不到空闲页面,则返回NULL,表示当前没有更多对象可获取,进入等待空闲对象状态。等待方式可以是忙等,休眠在某个等待队列。
步骤3,host将所获得的空闲对象的索引index,转换成虚拟地址空间内可直接寻址的指针,填入要发送的请求的数据。
步骤4,host将索引值index插入到meta_region0中生产者消费者通信模型的环(ring buffer)结构中,通过虚拟化的事件通道等机制,通知接收方guest文件操作的命令到来。
步骤5,如果没有更多命令发送,host等待用户发出更多的文件操作请求。如果有更多命令要发送,则跳转至步骤1。
对于接受方guest的步骤:
步骤1:在接受到文件操作命令之前,guest中的文件服务器处于侦听请求状态,因此guest的初始状态是等待文件操作命令的休眠状态。
步骤2:在休眠状态下,当host发送第一个文件操作命令的时候,guest即被事件通道机制唤醒,接着guest查询meta_region1中的生产者消费者通信模型的数据结构prod_cons。
步骤3:guest从prod_cons中取出对象索引index,并更新prod_cons数据结构,说明index已经从prod_cons中取出。
步骤4:guest将数据对象索引index按照其虚拟地址区域area1的边界转换成其地址空间内可寻址的指针,并向上递交给文件系统服务器,文件系统服务器根据指针所指向的地址读取文件操作指令,并处理,处理完成之后释放该指针。
步骤5:guest截获文件server在使用完数据对象后释放对象的操作,将对象从指针转换成index,重新插入到meta_region1中的对象查找数据结构objsk中,完成整个文件操作命令对象的生命周期。
类似的以上步骤,guest方面文件系统服务器在处理完文件操作请求以后,可以将返回的数据以同样的步骤发送至host端,完成这个文件操作的全过程。
本发明提供了一种虚拟地址隔离环境下超高速数据对象通信的方法,具体实现该技术方案的方法和途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。本实施例中未明确的各组成部分均可用现有技术加以实现。
Claims (1)
1.一种虚拟地址隔离环境下超高速数据对象通信的方法,其特征在于,包括如下步骤:
步骤1,初始化计算机操作系统中需要超高速通信的域,所述需要超高速通信的域为虚拟地址隔离的域domain0和域domain1两个域,其中,域domain0为数据对象发送方,域domain1为数据对象接收方;
步骤2,域domain0向域domain1发送长度为S字节的数据对象,域domain1接收数据对象,完成通信过程;
步骤1中所述虚拟地址隔离的两个域domain0和domain1是同一个计算机操作系统中的两个进程,或者是虚拟化环境下的两个虚拟机;
步骤1包括如下步骤:
步骤1-1,在域domain0中划分一个连续的虚拟地址区域area0,在域domain1中划分出一个与area0相同大小的连续的虚拟地址区域area1,虚拟地址区域area0和虚拟地址区域area1用于内存共享即作为共享内存区域;采用静态共享映射方式,即计算机操作系统初始化时全部映射;或者采用动态共享映射方式,即计算机操作系统运行过程中按需映射;
步骤1-2,在虚拟地址区域area0和虚拟地址区域area1中对称地分别选取一段区域meta_region0和meta_region1作为协同数据结构区域,用于域domain0和域domain1并发协同地进行数据对象管理,使域domain0和域domain1被对齐共享映射在同一个或者两个以上物理页面上,并在物理页面内对齐;
步骤1-3,将虚拟地址区域area0和虚拟地址区域area1的剩余区域进行对齐共享映射,并按照页面大小划分成n个页面,依次命名为page0~pagen,作为空闲数据页面,n为自然数,并将对页面的索引记录入区域meta_region0的页面查找数据结构中;
步骤1-4,确定需要传输的数据对象大小集合,该集合中包含m个元素,将这些元素按字节数值从小到大依次命名为size0~sizem,m为自然数,初始化区域meta_region0中对不同大小数据对象的查找数据结构objs0~objsm用以存放空闲数据对象的索引;
步骤1-5,初始化区域meta_region0中生产者消费者通信模型的数据结构prod_cons,用于在域domain0和域domain1之间发送数据对象的索引;
步骤1-1中,域domain0和域domain1协同管理共享内存区域area0和area1内数据对象的创建、传送与删除的处理过程;
步骤2中,所述长度为S字节的数据对象在数值size0~sizem的范围中;
步骤2中,域domain0向域domain1发送长度为S字节的数据对象包括如下步骤:
步骤2-1-1,域domain0查找区域meta_region0中对应长度为S的数据对象的数据结构objsk是否有空闲数据对象,如果已有空闲数据对象,则从数据结构objsk当中取出该数据对象,并返回该空闲数据对象的索引值index,跳转至步骤2-1-2;如果没有空闲数据对象,在区域meta_region0中查找是否有空闲页面,如果有空闲页面,将该空闲页面拆分成个长度为S的数据对象,其中PAGE_SIZE为以字节计算的页面大小,将所有数据对象的索引值插入到区域meta_region0中,继续查找区域meta_region0中对应长度为S的数据对象的数据结构objsk是否有空闲数据对象;如果没有空闲页面,则返回空值NULL,表示当前没有更多数据对象可获取,进入等待空闲数据对象状态;
步骤2-1-2,域domain0将所获得的空闲数据对象的索引值index转换成虚拟地址空间内可直接寻址的指针,并作为需要发送数据对象的缓冲区,填入用户层需要发送的数据对象;
步骤2-1-3,域domain0将索引值index插入到区域meta_region0的生产者消费者通信模型的数据结构中,并通知接收方域domain1数据对象已经发送,如果域domain1当前正处于轮询状态,则不发送通知;
步骤2-1-4,如果没有更多数据对象发送,域domain0等待用户发送更多数据对象;如果有更多数据对象要发送,则跳转至步骤2-1-1;
步骤2中,域domain1接收数据对象包括如下步骤:
步骤2-2-1,在域domain0发送的数据对象到达域domain1之前,域domain1的初始状态是等待状态,等待的方式为等待域domain0信号量或者事件通道消息的休眠状态,或者为轮询状态;
步骤2-2-2:在域domain1处于休眠状态时,当域domain0发送第一个数据对象时,域domain1即被信号量或者事件通道机制唤醒,并查询区域meta_region1中的生产者消费者通信模型的数据结构prod_cons;在域domain1处于轮询状态时,域domain1不断查询区域meta_region1中的生产者消费者通信模型的数据结构prod_cons直到出现有发送的数据对象的索引为止;
步骤2-2-3,域domain1从数据结构prod_cons中取出数据对象的索引值index,并更新数据结构prod_cons;
步骤2-2-4,域domain1将数据对象的索引值index按照其虚拟地址区域area1的边界转换成域domain1中虚拟地址空间内可寻址的指针,并向上递交给用户层使用;
步骤2-2-5,域domain1截获用户层在使用完数据对象后释放数据对象的操作,将数据对象从指针转换成索引值index,重新插入到区域meta_region1中的对象查找数据结构objsk中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610077775.8A CN105573852B (zh) | 2016-02-03 | 2016-02-03 | 一种虚拟地址隔离环境下超高速数据对象通信的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610077775.8A CN105573852B (zh) | 2016-02-03 | 2016-02-03 | 一种虚拟地址隔离环境下超高速数据对象通信的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105573852A CN105573852A (zh) | 2016-05-11 |
CN105573852B true CN105573852B (zh) | 2018-11-30 |
Family
ID=55884021
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610077775.8A Active CN105573852B (zh) | 2016-02-03 | 2016-02-03 | 一种虚拟地址隔离环境下超高速数据对象通信的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105573852B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108446150B (zh) * | 2018-03-23 | 2021-11-26 | 武汉斗鱼网络科技有限公司 | 对象的重复使用方法、装置及终端设备 |
US20210096861A1 (en) * | 2019-10-01 | 2021-04-01 | Higon Austin R&D Center | System and method to prefetch pointer based structures |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102625934A (zh) * | 2008-11-13 | 2012-08-01 | 英特尔公司 | 共享虚拟存储器 |
CN102938035A (zh) * | 2012-11-08 | 2013-02-20 | 西安交通大学 | 一种在虚拟机内部的驱动隔离系统与方法 |
CN103346981A (zh) * | 2013-06-28 | 2013-10-09 | 华为技术有限公司 | 虚拟交换方法、相关装置和计算机系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9311011B2 (en) * | 2013-08-07 | 2016-04-12 | Qualcomm Incorporated | Dynamic address negotiation for shared memory regions in heterogenous multiprocessor systems |
-
2016
- 2016-02-03 CN CN201610077775.8A patent/CN105573852B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102625934A (zh) * | 2008-11-13 | 2012-08-01 | 英特尔公司 | 共享虚拟存储器 |
CN102938035A (zh) * | 2012-11-08 | 2013-02-20 | 西安交通大学 | 一种在虚拟机内部的驱动隔离系统与方法 |
CN103346981A (zh) * | 2013-06-28 | 2013-10-09 | 华为技术有限公司 | 虚拟交换方法、相关装置和计算机系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105573852A (zh) | 2016-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11500689B2 (en) | Communication method and apparatus | |
US9053068B2 (en) | RDMA-based state transfer in virtual machine live migration | |
CN107851060B (zh) | 卸载数据分析应用中的概率计算 | |
CN102882810B (zh) | 一种报文快速转发方法及装置 | |
CN101150488B (zh) | 一种零拷贝网络报文接收方法 | |
US8381230B2 (en) | Message passing with queues and channels | |
CN104598303B (zh) | 基于kvm的虚拟机间在线迁移方法与装置 | |
CN111431757B (zh) | 虚拟网络的流量采集方法及装置 | |
CN105677597A (zh) | 数据写入方法及装置 | |
AU2020213829B2 (en) | Handling an input/output store instruction | |
CN111182008B (zh) | 在用户空间中建立套接字连接 | |
CN107491340B (zh) | 跨物理机的巨型虚拟机实现方法 | |
US11863469B2 (en) | Utilizing coherently attached interfaces in a network stack framework | |
CN104394096A (zh) | 一种基于多核处理器的报文处理方法及多核处理器 | |
Frey et al. | A spinning join that does not get dizzy | |
CN109324908A (zh) | Netlink资源的容器隔离方法及装置 | |
WO2020156797A1 (en) | Handling an input/output store instruction | |
KR102326280B1 (ko) | 데이터 처리 방법, 장치, 기기 및 매체 | |
CN105573852B (zh) | 一种虚拟地址隔离环境下超高速数据对象通信的方法 | |
CN102541616A (zh) | 一种嵌入式操作系统虚拟机及其实现方法 | |
CN102291298B (zh) | 一种高效的面向长消息的计算机网络通信方法 | |
CN102571580A (zh) | 数据接收方法和计算机 | |
CN111176855B (zh) | 在用户空间中建立线程之间的队列 | |
US20110246582A1 (en) | Message Passing with Queues and Channels | |
CN104102550A (zh) | 一种多主机进程间通信的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |