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

文档序号:8339471阅读:来源:国知局
br>[0155]301、发送端建立与接收端的通信通道。
[0156]具体的,可以基于消息传输或者共享内存的方案等技术实现通信通道的建立。通信通道的建立过程中,同时为发送端分配消息通知区Mx,为接收端分配消息通知区My。其中,消息通知区可以是基于数组或者环形链表等方式来实现的。消息通知区中有多个槽位,每个槽位可以保存相应的内容。其中,发送端将接收端的消息通知区映射到自己的地址空间,接收端将发送端的消息通知区映射到自己的地址空间,实现发送端可以访问接收端的消息通知区,接收端可以访问发送端的消息通知区。
[0157]302、发送端从内存空间中获取一个页面大小的空间作为第一共享页表。
[0158]303、发送端将第一共享页表映射入接收端的页目录中。
[0159]具体的,发送端预先在内存空间中申请一个页面大小的空间作为第一共享页表,并将第一共享页表映射到接收端的页目录中,用于零拷贝过程中存储消息的物理地址。或者,可选的,接收端预先在内存空间中申请一个页面大小的空间作为第一共享页表,并将该第一共享页表映射到接收端的页目录中。
[0160]其中,本实施例中步骤301和步骤302?303之间在执行上没有先后顺序之分,也就是说在实际的运行中,步骤301可以是和步骤302?303同时进行的,即发送端建立与接收端的通信通道的过程中,从内存空间中获取一个页面大小的空间作为第一共享页表。并将该第一共享页表映射入接收端的页目录中。
[0161]304、发送端通过系统调用进入内核空间,并将通信通道的通道号和第一参数写入内核空间。
[0162]其中,第一参数包括:消息的虚拟地址和消息的长度。
[0163]其中,步骤301?304可以是发送端的内核实现的。
[0164]305,发送端根据消息的虚拟地址和消息的长度,获得消息的物理地址。
[0165]具体的,该步骤可以是发送端的内核实现的,若发送端可以为进程Px,则进程Px的内核根据消息的虚拟地址找到进程Px中的对应页表,然后在该页表中获得包含消息的物理页面的地址列表,获得消息的物理地址。其中,消息物理页面地址列表的长度可以为K。
[0166]306、发送端根据通信通道的通道号,获得接收端。
[0167]307、发送端根据接收端对应的进程与进程控制块之间的关系映射表,获得接收端对应的进程控制块。
[0168]其中,接收端对应的进程与进程控制块之间的关系映射表是预先存储在内核空间中的。
[0169]步骤306和步骤307可以是发送端的内核实现的。
[0170]其中,进程控制块中包含页目录地址。
[0171]308、发送端根据进程控制块中的接收端的页目录地址,获得接收端的第一共享页表。
[0172]其中,第一共享页表为新增的页目录项对应的用于进行物理地址列表映射的页表,发送端的第一共享页表和接收端的第一共享页表在内核空间中共用同一物理内存页面或者不同物理内存页面。
[0173]具体的,该步骤可以是发送端的内核实现的。发送端内核通过在接收端的进程控制块中查找到接收端的页目录地址,在页目录的页表中根据页表项中的标识信息,选取页目录下具有连续空闲页表项的页表作为第一共享页表。
[0174]309、发送端检查接收端的第一共享页表的页表项,获得能容纳消息的连续空闲页表项。
[0175]310、发送端将获得的消息所在内存页面的物理地址映射到第一共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[0176]步骤309和步骤310可以是发送端的内核实现的。
[0177]311、发送端将消息的新虚拟地址和第一参数存入接收端的消息通知区中,以便于接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息。
[0178]其中,消息通知区是通信通道建立过程中分配的。
[0179]该步骤具体可以是发送端的内核实现的。
[0180]具体的,接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息的一种可能的实现方式为:接收端在接收端的消息通知区中,获取消息的新虚拟地址和消息的长度,根据信息的新虚拟地址在对应的内存的中读取具有相应长度的消息。接收端可以不需要进出内核空间,只要发送端将消息的虚拟地址记录在接收端的消息通知区中,接收端直接访问自己的消息通知区即可获得消息的地址,从而在对应的内存中读取消息,避免了时间开销、减少了对高速缓存的扰动。进而,接收端的工作效率得到有效的提高。
[0181]具体的,对本实施例中与上述实施例中相同步骤的解释可以参照上述实施例中的解释,此处不再赘述。
[0182]本发明的实施例提供的进程间通信的方法,通过发送端将消息的物理地址映射到获得的接收端的共享页表的连续空闲页表项页中,得到该消息的新虚拟地址,并将新虚拟地址存入接收端的消息通知区中,实现了在零拷贝方案中接收端不用进出内核空间便可对消息进行读取,避免了接收端进出内核空间的时间开销,同时减少了对接收端高速缓存的扰动。
[0183]本发明的实施例提供一种进程间通信的方法,该方法应用于多内核系统的内核间零拷贝方案中,参照图4所示,发送端和接收端可以是同一系统中的不同的进程,该方法包括以下步骤:
[0184]401、发送端建立与接收端的通信通道。
[0185]402、发送端从内存空间中获取一个页面大小的空间作为第二共享页表。
[0186]403、发送端将第二共享页表映射入发送端和接收端的页目录中。
[0187]具体的,发送端预先在内存空间中申请一个页面大小的空间作为第二共享页表,并将第二共享页表映射到发送端的页目录中,同时发送端通知接收端将该第二共享页表映射入接收端的页目录中,用于零拷贝过程中存储消息的物理地址。
[0188]第二共享页表为用于进行物理地址列表映射的页表,发送端的第二共享页表和接收端的第二共享页表在内核空间中共用同一物理内存页面。发送端可以对接收端的第二共享页表进行操作,接收端可以对发送端的第二共享页表进行操作。其中,发送端的第二共享页表所在的页目录项的位置与接收端的第二共享页表所在的页目录项的位置相同。
[0189]其中,本实施例中步骤401和步骤402?403之间在执行上没有先后顺序之分,也就是说在实际的运行中,步骤401可以是和步骤402?403同时进行的,即发送端建立与接收端的通信通道的过程中,从内存空间中获取一个页面大小的空间作为第二共享页表。并将该第二共享页表映射入发送端和接收端的页目录中。
[0190]404、发送端通过系统调用进入内核空间,并将通信通道的通道号和第一参数写入内核空间。
[0191]其中,第一参数包括:消息的虚拟地址和消息的长度。
[0192]405、发送端根据消息的虚拟地址和消息的长度,获得消息所在内存页面的物理地址。
[0193]具体的,该步骤可以是发送端的内核实现的,若发送端可以为进程Px,则进程Px的内核根据消息的虚拟地址找到进程Px中的对应页表,然后在该页表中获得包含消息的物理页面的地址列表,获得消息的物理地址。其中,消息物理页面地址列表的长度可以为K。
[0194]406、发送端根据通信通道的通道号,获得接收端的第二共享页表。
[0195]其中,第二共享页表为新增的页目录项对应的用于进行物理地址映射的页表。
[0196]具体的,发送端为进程Px,接收端为进程Py,发送端根据通信通道的通道号,获得接收端的第二共享页表可以为:进程Px根据通信通道的通道号,在进程Px的页目录中找到与进程Py相关联的第二共享页表。由于第二共享页表是通信通道建立过程中建立的发送端和接收端均可以互相操作的共享页表,因此,进程Px可以直接在进程Py的第二共享页表中进行将消息的物理地址映射到该第二共享页表的连续空闲的页表项中的操作。
[0197]407、发送端检查接收端的第二共享页表的页表项,获得能容纳消息的连续空闲页表项。
[0198]408、发送端将获得的消息所在内存页面的物理地址映射到第二共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[0199]409、发送端将消息的新虚拟地址和第一参数存入接收端的消息通知区中,以便于接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息。
[0200]其中,消息通知区是通信通道建立过程中分配的。
[0201]具体的,步骤405?409可以是发送端的内核实现的。
[0202]具体的,接收端读取消息通知区获得消息的新虚拟地址和第一参数,并根据新虚拟地址读取具有相应长度的消息的一种可能的实现方式为:接收端在接收端的消息通知区中,获取消息的新虚拟地址和消息的长度,根据信息的新虚拟地址在对应的内存的中读取具有相应长度的消息。
[0203]对本实施例中与上述实施例中相同步骤的解释可以参照上述实施例中的解释,此处不再赘述。
[0204]本发明的实施例提供的进程间通信的方法,通过发送端将消息的物理地址映射到获得的接收端的共享页表的连续空闲页表项页中,得到该消息的新虚拟地址,并将新虚拟地址存入接收端的消息通知区中,实现了在零拷贝方案中接收端不用进出内核空间便可对消息进行读取,避免了接收端进出内核空间的时间开销,同时减少了对接收端高速缓存的扰动。
[0205]本发明的实施例提供一种进程间通信的方法,该方法应用于基于Capability模型的单内核或者多内核系统的内核内零拷贝方案中,第一共享页表是页目录中原来的页目录项对应的页表,参照图5所示,发送端和接收端可以是同一系统中的不同的进程,该方法包括以下步骤:
[0206]501、发送端建立与接收端的通信通道。
[0207]具体的,可以基于消息传输或者共享内存的方案等技术实现通信通道的建立。通信通道的建立过程中,同时为发送端分配消息通知区Mx,为接收端分配消息通知区My。其中,消息通知区可以是基于数组或者环形链表等方式来实现的。消息通知区中有多个槽位,每个槽位可以保存相应的内容。其中,发送端将接收端的消息通知区映射到自己的地址空间,接收端将发送端的消息通知区映射到自己的地址空间,实现发送端可以访问接收端的消息通知区,接收端可以访问发送端的消息通知区。
[0208]502、发送端获取存储消息的内存对应的能力引用(Capability Reference,简称capref)和能力引用capref偏移。
[0209]发送端可以在用户空间的内部数据结构中查询存储消息的内存对应的能力引用和能力弓I用偏移。
[0210]503、发送端通过系统调用进入内核空间,并将通信通道的通道号和第一参数写入内核空间。
[0211]其中第一参数包括:能力引用、能力引用偏移、消息页内偏移和消息的长度。
[0212]504、发送端根据通信通道的通道号,获得接收端。
[0213]505、发送端根据接收端对应的进程与进程控制块之间的关系映射表,获得接收端对应的进程控制块。
[0214]其中,接收端对应的进程与进程控制块之间的关系映射表是预先存储在内核空间中的。
[0215]可选的,发送端将能力引用capref对应的能力Capability存入接收端的能力空间(Capability Space,简称CSpace)中,以便于接收端需要转发消息至不同于发送端的另一进程时,可以读取消息的物理内存区域,进行消息的转发。
[0216]其中,能力弓丨用对应的能力中包含了消息的物理内存区域。
[0217]506、发送端根据进程控制块中的接收端的页目录地址,获得接收端的第一共享页表。
[0218]其中,第一共享页表为用于进行物理地址列表映射的页表,发送端的第一共享页表和接收端的第一共享页表在内核空间中共用同一物理内存页面或者不同物理内存页面。
[0219]507、发送端检查接收端的第一共享页表的页表项,获得能容纳消息的连续空闲页表项。
[0220]508、发送端将获得的消息所在内存页面的物理地址映射到第一共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1