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

文档序号:8339471阅读:213来源:国知局
一种进程间通信的方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其涉及一种进程间通信的方法和装置。
【背景技术】
[0002]进程是计算机正在运行的程序实例,不同进程间由于相互协作而存在相应的通信需求。在操作系统研究中,进程间通信(Interprocess Communicat1n,简称IPC)是一个重要的研究课题,提高IPC的效率对整个操作系统的性能尤为重要。常用的IPC方法有消息传输、共享内存、零拷贝等。传统操作系统被划分为宏内核和微内核,近年,半导体制造工艺飞速发展,单处理器芯片的主频已逐渐逼近极限,单靠提升处理器芯片的主频已经无法使处理器的运算速度继续沿着摩尔定律不断提升。因此人们将多个处理器核集成在一个芯片上形成片上多处理器(Chip Mult1-Processor,简称CMP)系统。目前片上多处理器系统已成为当前微处理器发展的主流。CMP又可以分为多核(MuIt1-Core)和众核(Many-Core),通常把8个Core以下的CMP称为多核,8个Core以上的CMP称为众核。随着众核的出现,同时出现了 Barrelfish等新型操作系统。Barrelfish操作系统是一个微内核(micro kernel)操作系统,同时也是多内核(mult1-kernel)操作系统,主要面向多核(Mult1-core)、众核(Many-core)平台。
[0003]现有技术中的基于Barre I f i sh操作系统的内核内和内核间零拷贝方案,为了将消息内存映射进自己的地址空间,接收端需要进出内核空间,这样会造成相应的时间开销;同时,接收端进出内核空间会造成接收端高速缓存的扰动。第二代微内核系统的L4系统中的内核内零拷贝方案,由于采用同步IPC,使得编程不够灵活;同时,接收端仍然需要进出内核空间,并且只适用于单内核系统。

【发明内容】

[0004]本发明的实施例提供一种进程间通信的方法和装置,实现了在零拷贝方案中接收端不用进出内核空间便可对消息进行读取,避免了接收端进出内核空间的时间开销,同时减少了对接收端高速缓存的扰动。
[0005]为达到上述目的,本发明的实施例采用如下技术方案:
[0006]第一方面,提供一种进程间通信的方法,包括:
[0007]发送端建立与接收端的通信通道;
[0008]通过系统调用进入内核空间,并将所述通信通道的通道号和第一参数写入所述内核空间;
[0009]根据所述通信通道的通道号,获得所述接收端的共享页表;
[0010]其中,所述共享页表为所述页目录对应的页表中用于映射所述消息所在内存页面的物理地址的页表;
[0011]将获取的所述消息所在内存页面的物理地址映射到所述接收端的共享页表的连续空闲页表项中,得到消息的新虚拟地址;
[0012]将所述消息的新虚拟地址和所述第一参数存入所述接收端的消息通知区中,以便于所述接收端读取所述消息通知区获得所述消息的新虚拟地址和所述第一参数,并根据所述新虚拟地址读取具有相应长度的所述消息;
[0013]其中,所述消息通知区是所述通信通道建立过程中分配的。
[0014]在第一种可能的实现方式中,结合第一方面,所述第一参数包括:所述能力引用、能力引用偏移、所述消息页内偏移和所述消息的长度,所述通过系统调用进入内核空间,并将所述通信通道的通道号和第一参数写入所述内核空间之前,还包括:
[0015]获取存储所述消息的内存对应的能力引用和能力引用偏移。
[0016]在第二种可能的实现方式中,结合第一方面,所述根据所述通信通道的通道号,获得所述接收端的共享页表,包括:
[0017]根据所述通信通道的通道号,获取所述接收端对应的进程控制块;
[0018]根据所述进程控制块中的所述接收端的页目录地址,获得所述接收端的第一共享页表。
[0019]在第三种可能的实现方式中,结合第二种可能的实现方式,所述根据所述通信通道的通道号,获取接收端对应的进程控制块,包括:
[0020]根据所述通信通道的通道号,获得接收端;
[0021]根据所述接收端对应的进程与进程控制块之间的关系映射表,获得所述接收端对应的进程控制块;
[0022]其中,所述接收端对应的进程与进程控制块之间的关系映射表是预先存储在内核空间中的。
[0023]在第四种可能的实现方式中,结合第一方面或第一种可能的实现方式,所述将获取的所述消息所在内存页面的物理地址映射到所述接收端的共享页表的连续空闲页表项中,得到消息的新虚拟地址,包括:
[0024]检查所述接收端的共享页表的页表项,获得能容纳所述消息的连续空闲页表项;
[0025]将获得的所述消息所在内存页面的物理地址映射到所述共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[0026]在第五种可能的实现方式中,结合第一方面,
[0027]所述第一参数包括:所述消息的虚拟地址和所述消息的长度,所述消息所在内存页面的物理地址是根据所述消息的虚拟地址和所述消息的长度获得的。
[0028]在第六种可能的实现方式中,结合第一方面或第四种可能的实现方式,
[0029]所述共享页表为第一共享页表;
[0030]其中,所述第一共享页表为用于进行物理地址列表映射的页表,所述发送端的第一共享页表和所述接收端的第一共享页表在所述内核空间中共用同一物理内存页面或者不同物理内存页面。
[0031]在第七种可能的实现方式中,结合第一方面或第四种可能的实现方式,
[0032]所述共享页表为第二共享页表;
[0033]其中,所述第二共享页表为用于进行物理地址列表映射的页表,所述发送端的第二共享页表和所述接收端的第二共享页表在所述内核空间中共用同一物理内存页面。
[0034]在第八种可能的实现方式中,结合第一方面或第一种可能的实现方式,所述方法还包括:
[0035]从内存空间中获取一个页面大小的空间作为共享页表;
[0036]将所述共享页表映射入所述发送端和所述接收端的的页目录中,或,将所述共享页表映射入所述接收端的的页目录中。
[0037]第二方面,提供一种进程间通信的装置,包括:
[0038]创建单元,用于建立与接收端通信的通信通道;
[0039]处理单元,用于通过系统调用进入内核空间,并将所述通信通道的通道号和第一参数写入所述内核空间;
[0040]获取单元,用于根据所述通信通道的通道号,获得所述接收端的共享页表;
[0041]其中,所述共享页表为所述页目录对应的页表中用于映射所述消息所在内存页面的物理地址的页表;
[0042]所述处理单元,还用于将获取的所述消息所在内存页面的物理地址映射到所述接收端的共享页表的连续空闲页表项中,得到消息的新虚拟地址;
[0043]存储单元,用于将所述消息的新虚拟地址和所述第一参数存入所述接收端的消息通知区中,以便于所述接收端读取所述消息通知区获得所述消息的新虚拟地址和所述第一参数,并根据所述新虚拟地址读取具有相应长度的所述消息;
[0044]其中,所述消息通知区是所述通信通道建立过程中分配的。
[0045]在第一种可能的实现方式中,结合第二方面,所述第一参数包括:能力引用、能力引用偏移、所述消息页内偏移和所述消息的长度,
[0046]所述获取单元,还用于获取存储所述消息的内存对应的能力引用和能力引用偏移。
[0047]在第二种可能的实现方式中,结合第二方面,所述获取单元包括:
[0048]第一获取模块,用于根据所述通信通道的通道号,获取所述接收端对应的进程控制块;
[0049]第二获取模块,用于根据所述进程控制块中的所述接收端的页目录地址,获得所述接收端的第一共享页表。
[0050]在第三种可能的实现方式中,结合第一种可能的实现方式,所述第一获取模块具体用于:
[0051]根据所述通信通道的通道号,获得接收端;
[0052]根据所述接收端对应的进程与进程控制块之间的关系映射表,获得所述接收端对应的进程控制块;
[0053]其中,所述接收端对应的进程与进程控制块之间的关系映射表是预先存储在内核空间中的。
[0054]在第四种可能的实现方式中,结合第二方面或第一种可能的实现方式,所述处理单元包括:
[0055]检测模块,用于检查所述接收端的共享页表的页表项,获得能容纳所述消息的连续空闲页表项;
[0056]第三获取模块,用于将获得的所述消息所在内存页面的物理地址映射到所述共享页表的连续空闲页表项中,得到消息的新虚拟地址。
[0057]在第五种可能的实现方式中,结合第二方面,
[0058]所述第一参数包括:所述消息的虚拟地址和所述消息的长度,所述消息所在内存页面的物理地址是根据所述消息的虚拟地址和所述消息的长度获得的。
[0059]在第六种可能的实现方式中,结合第二方面或第四种可能的实现方式,
[0060]所述共享页表为第一共享页表;
[0061]其中,所述第一共享页表为用于进行物理地址列表映射的页表,所述发送端的第一共享页表和所述接收端的第一共享页表在所述内核空间中共用同一物理内存页面或者不同物理内存页面。
[0062]在第七种可能的实现方式中,结合第二方面或第四种可能的实现方式,
[0063]所述共享页表为第二共享页表;
[0064]其中,所述第二共享页表为用于进行物理地址列表映射的页表,所述发送端的第二共享页表和所述接收端的第二共享页表在所述内核空间中共用同一物理内存页面。
[0065]在第八种可能的实现方式中,结合第二方面或第一种可能的实现方式,
[0066]所述获取单元,还用于从内存中获取一个页面大小的空间作为共享页表;
[0067]所述处理单元,还用于将所述共享页表映射入所述发送端和所述接收端的页目录中,或,将所述共享页表映射入所述接收端的的页目录中。
[0068]第三方面,提供一种进程间通信的装置,包括:至少一个处理器、存储器、通信接口和总线,所述至少一个处理器、存储器和通信接口通过总线连接并完成相互间的通信,所述存储器用于存储程序代码,其中:
[0069]所述处理器,用于调用存储器中的程序代码,用以执行以下操作:
[0070]发送端建立与接收端的通信通道;
[0071]通过系统调用进入内核空间,并将所述通信通道的通道号和第一参数写入所述内核空间;
[0072]根据所述通信通道的通道号,获得所述接收端的共享页表;
[0073]其中,所述共享页表为所述页目录对应的页表中用于映射所述消息所在内存页面的物理地址的页表;
[0074]将获取的所述消息所在内存页面的物理地址映射到所述接收端的共享页表的连续空闲页表项中,得到消息的新虚拟地址;
[0075]将所述消息的新虚拟地址和所述第一参数存入所述接收端的消息通知区中,以便于所述接收端读取所述消息通知区获得所述消息的新虚拟地址和所述第一参数,并根据所述新虚拟地址读取具有相应长度的所述消息;
[0076]其中,所述消息通知区是所述通信通道建立过程中分配的。
[0077]在第一种可能的实现方式中,结合第三方面,所述第一参数包括:所述能力引用、能力引用偏移、所述消息页内偏移和所述消息的长度,所述处理器还用于执行以下操作:
[0078]获取存储所述消息的内存对应的能力引用和能力引用偏移。
[0079]在第二种可能的实现方式中,结合第三方面,所述处理器具体用于执行以下步骤:
[0080]根据所述通信通道的通道号,获取所述接收端对应的进程控制块;
[0081]根据所述进程控制块中的所述接收端的页目录地址,获得所述接收端的第一共享页表。
[0082]在第三种可能的实现方式中,结合第二种可能的实现方式,所述处理器具体用于执行以下步骤:
[0083]根据所述通信通道的通道号,获得接收端;
[0084]根据所述接收端对应的进程与进程控制块之间的关
当前第1页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1