一种虚拟地址隔离环境下超高速数据对象通信的方法【
技术领域:
】[0001]本发明涉及计算机
技术领域:
,具体涉及一种虚拟地址隔离环境下超高速数据对象通信的方法。【
背景技术:
】[0002]虚拟内存是当代计算机体系结构的基本概念,在多任务的环境中,虚拟地址隔离是系统中独立运行对象之间进行资源分配、调度和保护的基本手段。典型的,在当代流行的操作系统中,所有进程之间,流行虚拟化技术(如Xen、KVM)的多虚拟机之间都通过页表的方式进行了虚拟地址隔离。在被虚拟地址隔离的不同对象之间(称之为隔离域),由于不能直接访问彼此的寻址空间,它们之间的数据通信方式在不同的系统中都有经典的方法提供。例如,传统的操作系统为进程间通信(IPC)提供了管道(pipe)、信号量(semophore)、共享内存(sharedmemory)等基础手段;当代的虚拟化环境Xen为虚拟机之间提供了事件通道(eventchannel)、基于授权表(granttable)的内存共享等基础手段。[0003]然而,在传统系统中的隔离域之间的通信方法都很基础,如管道(pipe)、信号量(semophore)、事件通道(eventchanne1)之类的通信方式效率不能用于超高速数据对象通信;共享内存机制虽然能实时地让一个域的写入数据对另一个域可见,但是其共享的粒度在于整个页面,并不参与页面中数据对象的整个生命周期的操作,如果将整个页面作为数据对象,其创建与撤销共享的操作有很大的系统开销。因此,缺乏一种通用而有效的方法解决如何在两个隔离域之间超高速地发送数据对象的难题。【
发明内容】[0004]发明目的:本发明所要解决的技术问题是如何让两个虚拟地址空间隔离的域进行超高速的数据对象通信,在传统的共享内存机制之上构建一种更高效,更通用的通信机制。[0005]为了解决上述技术问题,本发明公开了一种在虚拟地址隔离环境下,在被隔离的两个域之间进行超高速数据对象通信的方法,包括两个阶段:系统初始化阶段和隔离域通信阶段。[0000]假设系统中存在需要超高速通信的两个虚拟地址隔离的域domaino和domaim(它们可以是同一个操作系统中的两个进程,或者是虚拟化环境下的两个虚拟机),每个域中按照功能至少可划分成两层,分别是用户层和数据通信层。用户层是数据的生产者和消费者,通信层负责将一个域中用户层生产的数据传输到另一个域中的用户层以供之消费。[0007]本发明包含以下步骤:[0008]步骤1,初始化计算机操作系统中需要超高速通信的域,所述需要超高速通信的域为虚拟地址隔离的域domain。和域domaini两个域,其中,域domain。为数据对象发送方,域domaim为数据对象接收方;[0009]步骤2,域domain。向域domaim发送长度为S字节(假设域domainO和域domainl之间能共享的内存大小最大为L字节,S的范围在0~L之间)的数据对象,域domaim接收数据对象,完成通信过程。[00?0]其中,步骤1中所述虚拟地址隔离的两个域domaino和domaini是同一个计算机操作系统中的两个进程,或者是虚拟化环境下的两个虚拟机。[0011]步骤1包括如下步骤:[0012]步骤1-1,在域domaino中划分一个连续的虚拟地址区域areao,在域domaim中划分出一个与areao相同大小的连续的虚拟地址区域areai,虚拟地址区域areao和虚拟地址区域area:用于内存共享即作为共享内存区域,采用静态共享映射方式,即计算机操作系统初始化时全部映射;或者采用动态共享映射方式,即计算机操作系统运行过程中按需映射;[0013]步骤1-2,在虚拟地址区域areao和虚拟地址区域areai中对称地分别选取一段区域meta_region〇和meta_regiom作为协同数据结构区域,用于域domain。和域domaim并发协同地进行数据对象管理,使域domaino和域domaini被对齐共享映射在同一个或者两个以上物理页面上,并在物理页面内对齐;[0014]步骤1-3,将虚拟地址区域areao和虚拟地址区域areai的剩余区域按照步骤1-2中方式进行对齐共享映射,并按照页面大小划分成η个页面,依次命名为pageo~pagen,作为空闲数据页面,η为自然数,并将对页面的索引记录入区域meta_regi〇nQ的页面查找数据结构中;根据具体实施场景的不同,该数据结构类型可以为:查找树、链表、位图或者哈希表等。[0015]步骤1-4,根据具体实施场景的不同,确定需要传输的数据对象大小集合,该集合中包含m个元素,将这些元素按字节数值从小到大依次命名为sizeo~siZem,m为自然数,初始化区域meta_region〇中对不同大小数据对象的查找数据结构objso~objsm,用以存放空闲数据对象的索引。查找结构可以包含步骤1-3中的部分页面按照数据对象大小所拆分成的数据对象的索引;也可以先将查找结构置空,说明当前尚未分配空闲数据对象。[0016]步骤1-5,初始化区域meta_region〇中生产者消费者通信模型的数据结构prod_cons,用于在域domaino和域domaini之间发送数据对象的索引,根据具体实施场景的不同,该数据结构可以实现为:链表(linkedlist)、数组(array)或者环(ringbuffer)。[0017]步骤1-1中,域domaino和域domaim协同管理共享内存区域areao和areai内数据对象的创建、传送与删除的处理过程。[0018]步骤2中,所述长度为S字节的数据对象在数值sizeo~sizem的范围中。[0019]步骤2中,域domaino向域domaini发送长度为S字节的数据对象包括如下步骤:[0020]步骤2-1-1,域domaino查找区域meta_region〇中对应长度为S的数据对象的数据结构〇bjsk是否有空闲数据对象,如果已有空闲数据对象,则从数据结构objsk当中取出该数据对象,并返回该空闲数据对象的索引值index,跳转至步骤2-1-2;如果没有空闲数据对象,在区域metajegiono中查找是否有空闲页面,如果有空闲页面,将该空闲页面拆分成个长度为S的数据对象,其中PAGE_SIZE为以字节计算的页面大小,将所有数据对象的索引值插入到区域meta_region〇中,继续查找区域meta_region〇中对应长度为S的数据对象的数据结构〇bjsk是否有空闲数据对象;如果没有空闲页面,则返回空值NULL,表示当前没有更多数据对象可获取,进入等待空闲数据对象状态;等待方式可以是忙等,休眠在某个等待队列。[0021]步骤2-1-2,域domaino将所获得的空闲数据对象的索引值index转换成虚拟地址空间内可直接寻址的指针,并作为需要发送数据对象的缓冲区,填入用户层需要发送的数据对象;[0022]步骤2-1-3,域domain。将索引值index插入到区域meta_region〇的生产者消费者通信模型的数据结构中,按照实施场景的不同,domaino可选信号量或者事件通道等机制,并通知接收方域domaim数据对象已经发送,如果域domaim当前正处于轮询状态(polling),则不发送通知;[0023]步骤2-1-4,如果没有更多数据对象发送,域domaino等待用户发送更多数据对象;如果有更多数据对象要发送,则跳转至步骤2-1-1。[0024]步骤2中,域domaim接收数据对象包括如下步骤:<当前第1页1 2 3 4