一种进程间通信的方法和装置的制造方法_4

文档序号:8339471阅读:来源:国知局
0221]具体的,连续空闲页表项的长度由消息页内偏移和消息长度共同来决定。
[0222]509、发送端将消息的新虚拟地址和第一参数存入接收端的消息通知区中,以便于接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息。
[0223]其中,消息通知区是通信通道建立过程中分配的。
[0224]具体的,步骤504?509可以是发送端的内核实现的。
[0225]具体的,接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息的一种可能的实现方式为:接收端在接收端的消息通知区中,获取消息的新虚拟地址、接收端的能力引用、接收端的能力引用偏移、消息页内偏移和消息长度,并根据消息的新虚拟地址、消息长度、接收端的能力引用、接收端的能力引用偏移在内部数据结构中保存页面虚拟地址与接收端的能力引用之间的对应关系和页面虚拟地址与接收端的能力引用偏移之间的对应关系,用以维护数据结构的完整性。同时,根据消息的新虚拟地址在对应的内存的中读取具有相应长度的消息。其中,页面虚拟地址是根据消息新虚拟地址获得的。
[0226]本实施例中发送端不需要通过消息的虚拟地址和消息的长度来获取消息的物理地址,而是通过读取capref对应的capability来获取消息的物理地址,更提高了工作效率。
[0227]对本实施例中与上述实施例中相同步骤的解释可以参照上述实施例中的解释,此处不再赘述。
[0228]本发明的实施例提供的进程间通信的方法,通过发送端将消息的物理地址映射到获得的接收端的共享页表的连续空闲页表项页中,得到该消息的新虚拟地址,并将新虚拟地址存入接收端的消息通知区中,实现了在零拷贝方案中接收端不用进出内核空间便可对消息进行读取,避免了接收端进出内核空间的时间开销,同时减少了对接收端高速缓存的扰动。
[0229]本发明的实施例提供一种进程间通信的方法,该方法应用于基于Capability模型的单内核或者多内核系统的内核内零拷贝方案中,第一共享页表是新增的页目录项对应的页表,参照图6所示,发送端和接收端可以是同一系统中的不同的进程,该方法包括以下步骤:
[0230]601、发送端建立与接收端的通信通道。
[0231]具体的,可以基于消息传输或者共享内存的方案等技术实现通信通道的建立。通信通道的建立过程中,同时为发送端分配消息通知区Mx,为接收端分配消息通知区My。其中,消息通知区可以是基于数组或者环形链表等方式来实现的。消息通知区中有多个槽位,每个槽位可以保存相应的内容。其中,发送端将接收端的消息通知区映射到自己的地址空间,接收端将发送端的消息通知区映射到自己的地址空间,实现发送端可以访问接收端的消息通知区,接收端可以访问发送端的消息通知区。
[0232]602、发送端从内存空间中获取一个页面大小的空间作为第一共享页表。
[0233]603、发送端将第一共享页表映射入接收端的页目录中。
[0234]其中,本实施例中步骤601和步骤602?603之间在执行上没有先后顺序之分,也就是说在实际的运行中,步骤601可以是和步骤602?603同时进行的,即发送端建立与接收端的通信通道的过程中,从内存空间中获取一个页面大小的空间作为第一共享页表。并将该第一共享页表映射入接收端的页目录中。
[0235]604、发送端获取存储消息的内存对应的能力引用(Capability Reference,简称capref)和能力引用capref偏移。
[0236]605、发送端通过系统调用进入内核空间,并将通信通道的通道号和第一参数写入内核空间。
[0237]其中第一参数包括:能力引用、能力引用偏移、消息页内偏移和消息的长度。
[0238]606、发送端根据通信通道的通道号,获得接收端。
[0239]607、发送端根据接收端对应的进程与进程控制块之间的关系映射表,获得接收端对应的进程控制块。
[0240]其中,接收端对应的进程与进程控制块之间的关系映射表是预先存储在内核空间中的。
[0241]可选的,发送端将能力引用capref对应的能力Capability存入接收端的能力空间(Capability Space,简称CSpace)中,以便于接收端需要转发消息至不同于发送端的另一进程时,可以读取消息的物理内存区域,进行消息的转发。
[0242]其中,能力弓丨用对应的能力中包含了消息的物理内存区域。
[0243]608、发送端根据进程控制块中的接收端的页目录地址,获得接收端的第一共享页表。
[0244]其中,第一共享页表为新增的页目录项对应的用于进行物理地址列表映射的页表,发送端的第一共享页表和接收端的第一共享页表在内核空间中共用同一物理内存页面或者不同物理内存页面。
[0245]609、发送端检查接收端的第一共享页表的页表项,获得能容纳消息的连续空闲页表项。
[0246]其中,该连续空闲页表项的长度与消息的长度相同。
[0247]610、发送端将获得的消息所在内存页面的物理地址映射到第一共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[0248]具体的,连续空闲页表项的长度由消息页内偏移和消息长度共同来决定。
[0249]611、发送端将消息的新虚拟地址和第一参数存入接收端的消息通知区中,以便于接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息。
[0250]其中,消息通知区是通信通道建立过程中分配的。
[0251]具体的,步骤606?611可以是发送端的内核实现的。
[0252]具体的,接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息的一种可能的实现方式为:接收端在接收端的消息通知区中,获取消息的新虚拟地址、接收端的能力引用、接收端的能力引用偏移、消息页内偏移和消息长度,并根据消息的新虚拟地址、消息长度、接收端的能力引用、接收端的能力引用偏移在内部数据结构中保存页面虚拟地址与接收端的能力引用之间的对应关系和页面虚拟地址与接收端的能力引用偏移之间的对应关系,用以维护数据结构的完整性。同时,根据消息的新虚拟地址在对应的内存的中读取具有相应长度的消息。其中,页面虚拟地址是根据消息新虚拟地址获得的。
[0253]本实施例中发送端不需要通过消息的虚拟地址和消息的长度来获取消息的物理地址,而是通过读取capref对应的capability来获取消息的物理地址,更提高了工作效率。
[0254]对本实施例中与上述实施例中相同步骤的解释可以参照上述实施例中的解释,此处不再赘述。
[0255]本发明的实施例提供的进程间通信的方法,通过发送端将消息的物理地址映射到获得的接收端的共享页表的连续空闲页表项页中,得到该消息的新虚拟地址,并将新虚拟地址存入接收端的消息通知区中,实现了在零拷贝方案中接收端不用进出内核空间便可对消息进行读取,避免了接收端进出内核空间的时间开销,同时减少了对接收端高速缓存的扰动。
[0256]基于上述实施例,本发明还可以基于下面的方法来实现接收端读取发送端发送的消息,该方法应用于基于Capability模型的多内核系统的核间零拷贝方案中,该方法具体可以为:a、进程Px与Py建立通道。b、进程Px从内存中申请一个页面大小的空间,进程Px的内核将该页面映射到进程Px的页目录中,作为进程Px的第二共享页表,同时,进程Py的内核将该页面映射到进程Py的页目录中,作为进程Py的第二共享页表;c、进程Px在用户空间的内部数据结构中查询存储消息的内存对应的能力引用和能力引用偏移;d、进程Px通过系统调用,进入内核空间并将通信通道的通道号和第一参数写入内核空间。其中第一参数包括:能力引用、能力引用偏移、消息页内偏移和消息的长度。e、进程Px的内核根据通道号,在进程Px页目录中找到与进程Py相关联的第二共享页表。f、进程Px的内核通过检查第二共享页表中的页表项,获得长度为k的连续空闲页表项,连续空闲页表项的长度k可以根据消息页内偏移和消息长度确定。g、进程Px的内核根据能力引用在进程Px的能力空间中查找对应的能力,该能力包含了消息所在内存区域的物理地址信息。进程Px的内核将消息内存的物理页面地址列表映射到该第二共享页表的连续空闲的页表项中。h、进程Px的内核通过进程Px与进程Py建立的通道,将映射获得的新的消息虚拟地址、消息长度、capref偏移,以及能力引用capref对应的capability发送给进程Py所在的内核,进程Py所在内核将该Capability放入进程Py的CSpace中,并将消息的新虚拟地址、消息长度、指向进程Py的capref和capref偏移写入进程Py的消息通知区My中的空闲槽位。1、进程Py从消息通知区My获得消息的新虚拟地址、消息长度、capref和capref偏移。并根据消息虚拟地址、消息长度、capref以及capref偏移,在内部数据结构中保存页面虚拟地址与capref或capref偏移的对应关系,用于维护内部数据结构的完整性;同时,从内存中读取对应长度的消息。
[0257]本发明的实施例提供一种进程间通信的装置7,该装置7用于实现图1?图6中的任一对应的方法实施例所提供的进程间通信的方法,参照图7所示,该装置7包括:创建单元71、处理单元72、获取单元73和存储单元74,其中:
[0258]创建单元71,用于建立与接收端通信的通信通道。
[0259]具体的,可以基于消息传输或者共享内存的方案等技术实现通信通道的建立。通信通道的建立过程中,同时为发送端分配消息通知区Mx,为接收端分配消息通知区My。其中,消息通知区可以是基于数组或者环形链表等方式来实现的。消息通知区中有多个槽位,每个槽位可以保存相应的内容。其中,发送端将接收端的消息通知区映射到自己的地址空间,接收端将发送端的消息通知区映射到自己的地址空间,实现发送端可以访问接收端的消息通知区,接收端可以访问发送端的消息通知区。
[0260]处理单元72,用于通过系统调用进入内核空间,并将通信通道的通道号和第一参数写入内核空间。
[0261]获取单元73,用于根据处理单元72得到通信通道的通道号,获得接收端的共享页表。
[0262]其中,共享页表为页目录对应的页表中用于映射消息所在内存页面的物理地址的页表。
[0263]处理单元72,还用于将获取的消息所在内存页面的物理地址映射到获取单元73获得到接收端的共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[0264]存储单元74,用于将处理单元72得到的消息的新虚拟地址和第一参数存入接收端的消息通知区中,以便于接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息。
[0265]其中,消息通知区是通信通道建立过程中分配的。
[0266]本发明的实施例提供的进程间通信的装置,通过发送端将消息的物理地址映射到获得的接收端的共享页表的连续空闲页表项页中,得到该消息的新虚拟地址,并将新虚拟地址存入接收端的消息通知区中,实现了在零拷贝方案中接收端不用进出内核空间便可对消息进行读取,避免了接收端进出内核空间的时开销,同时减少了对接收端高速缓存的扰动。
[0267]进一步,第一参数包括:发送端的能力引用、发送端的能力引用偏移、消息页内偏移和消息的长度,
[0268]获取单元73,还用于获取存储消息的内存对应的能力引用和能力引用偏移。
[0269]可选的,存储单元74,还用于将能力引用capref对应的能力Capability存入接收端的能力空间CSpace中,以便于接收端需要转发消息至不同于发送端的另一进程时,可以读取消息的物理内存区域,进行消息的转发。
[0270]其中,能力引用对应的能力中包含了消息的物理内存区域。
[0271]具体的,参照图8所示,获取单元73包括:第一获取模块731、第二获取模块732,其中:
[0272]第一获取模块731,用于根据通信通道的通道号,获取接收端对应的进程控制块。
[0273]第二获取模块732,用于根据第一获取模块731获得的进程控制块中的
当前第4页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1