一种进程通信方法、 装置及操作系统 【技术领域】
本发明属于计算机软件领域, 尤其涉及一种进程通信的方法、 装置及操作系统。背景技术 在协调复杂系统中的多个进程中, 进程通信起着至关重要的作用。 在进程通信中, 可以采用以下手段 : 管道 (Pipe)、 信号 (Signal)、 跟踪 (Trace)、 命名管道 (named pipe)、 报 文 (Message)、 共享内存、 信号量 (Semaphore)、 插口 (Socket)。 通过所述的通信手段, Linux 各个进程间能够互相协调, 保持系统稳定与性能。然而, Linux 系统的设计当中能够获取完 整进程的相关信息, 却不能通过获取进程间通信信息来完善进程通信。
发明内容
本发明实施例的目的在于提供一种进程通信的方法, 旨在解决不能通过获取进程 间通信信息来完善进程通信的问题。
本发明实施例是这样实现的, 一种进程通信的方法, 其特征在于, 所述方法包括以 下步骤 :
根据各种进程间通信方式统计进程间通信信息 ;
提供系统接口, 获取所述进程间通信信息 ;
将所述获取的进程间通信信息作为进程策略依据进行通信。
本发明实施例的另一目的在于提供一种进程通信的装置, 所述装置包括 :
通信信息存储模块, 用于存储根据各种进程间通信方式统计进程间通信信息 ;
通信信息获取模块, 用于提供系统接口, 获取所述进程间通信信息 ;
进程通信模块, 用于将所述获取的进程间通信信息作为进程策略依据进行通信。
本发明实施例的另一目的在于提供一种操作系统, 所述操作系统包括所述进程通 信的装置。
在本发明实施例中, 统计较为完善的进程间通信信息, 能够为进程提供相应的策 略依据, 避免在有多余选择的前提下, 过多进程依赖某一进程从而造成系统不稳定等性能 低下的状况。同时提供安全性设置选项, 避免系统的安全性漏洞。 附图说明
图 1 是本发明实施例提供的进程通信的方法的流程图 ; 图 2 是本发明实施例提供的进程间通信信息数据结构示意图 ; 图 3 是本发明实施例提供的进程间通信信息的权限设置示意图 ; 图 4 是本发明实施例提供的进程通信的装置示意图。具体实施方式
为了使本发明的目的、 技术方案及优点更加清楚明白, 以下结合附图及实施例, 对本发明进行进一步详细说明。 应当理解, 此处所描述的具体实施例仅仅用以解释本发明, 并 不用于限定本发明。
本发明实施例通过在系统进程维护表中设置系统进程间通信信息的数据结构, 统 计和获取较为完善的进程间通信信息, 为进程提供相应的策略依据。同时提供安全性设置 选项, 避免系统安全性漏洞。
本发明提供了一种进程通信的方法和装置 :
所述方法包括 :
根据各种进程间通信方式统计进程间通信信息 ;
提供系统接口, 获取所述进程间通信信息 ;
将所述获取的进程间通信信息作为进程策略依据进行通信。
所述装置包括 :
通信信息存储模块, 用于存储根据各种进程间通信方式统计进程间通信信息 ;
通信信息获取模块, 用于提供系统接口, 获取所述进程间通信信息 ;
进程通信模块, 用于将所述获取的进程间通信信息作为进程策略依据进行通信。
为了说明本发明所述的技术方案, 下面通过具体实施例来进行说明。 实施例一 :
图 1 示出了本发明实施例提供的进程通信的方法的流程图。
在步骤 S101 中, 根据各种进程间通信方式统计进程间通信信息。
在 本 发 明 实 施 例 中, 所述各种进程间通信方式包括 : 管 道 (Pipe)、 命名管道 (named pipe)、 报文 (Message)、 信号 (Signal)、 共享内存、 信号量 (Semaphore) 和套接口 (Socket)。所述统计进程间通信信息, 即为设计进程间通信信息的数据结构进行统计。
如图 2 所示, 下面将详细说明各个通信方式的进程间通信信息数据结构。
1、 管道。管道机制是由系统调用 pipe() 实现的。在 fork() 配合下, 在父子进程 或两个子进程之间建立起进程间的通信管道。 下面举例说明在进程间通信信息数据结构中 增加管道的相关结构, 如下所示 :
typedef struct{
int perm ; /* 进程对文件权限, 0 表示只读, 1 表示只写, 2 表示读写 */
int pid ; /* 管道另一端的进程 id*/
int fid ; /* 管道对应的文件 id*/
}pipeInfo ;
由上可知, 管道的相关结构用在结构体 pipeInfo 表示。
2、 命名管道。命名管道能在任意进程间建立通信的机制。下面举例说明在进程间 通信信息数据结构中增加命名管道的相关结构的方法, 如下所示 :
typedef struct{
int perm ; /* 进程对文件权限, 0 表示只读, 1 表示只写, 2 表示读写 */
int pid ; /* 命名管道另一端的进程 id*/
int fid ; /* 命名管道对应的文件 id*/
char*name ; /* 命名管道对应的文件名 */
}namedPipeInfo ;
由上可知, 命名管道的相关结构用结构体 namedPipeInfo 表示。
3、 信号。信号是软件层次上的一种中断机制模拟, 是进程间通信机制中唯一的异 步通信机制。下面举例说明在进程间通信信息数据结构中增加当前处理的中断信号的方 法, 如下所示 :
int signal ; /* 值与中断向量表定义一致, -1 表示无信号 */ ;
由上可知, 中断信号用一个整型数据 signal 表示。
4、 报文。 报文避免了信号所承载的信息量小和命名管道开销和无格式字节流等缺 点。其它进程可以通过键值取得对进程已建立的报文队列的访问途径。下面举例说明在进 程间通信信息数据结构中, 添加报文队列信息的方法, 如下所示 :
typedef struct{
key_t key ; /* 报文队列的键值 */
int len ; /* 报文队列的长度 */
}messageQueueInfo ;
由上可知, 报文队列信息用结构体 messageQueueInfo 表示。
5、 共享内存。共享内存是两个或多个进程可以访问的同一块内存区域, 是一种低 级的接近物理层的通信机制。 下面举例说明在进程间通信信息数据结构中添加当前的共享 内存的方法, 如下所示 :
typedef struct{
key_t key ; /* 共享内存的键值 */
size_t size ; /* 共享内存的大小 */
}shmInfo ;
由上可知, 共享内存用结构体 shmInfo 表示。
6、 信号量。 信号量是进程间通信的一种同步手段, 通常用来协调对资源的访问。 下 面举例说明在进程间通信信息数据结构中, 添加信号量标识的方法, 如下所示 :
bool in Semap ; /* 当前进程是否在信号量区域 */ ;
由上可知, 信号量用一个布尔型的变量 inSemap 表示。
7、 套接口。套接口既适用于同一台计算机上的进程通信, 也适用于网络环境下的 进程通信。 下面举例说明在进程间通信信息数据结构中, 添加当前连接的套接口的方法, 如 下所示 :
struct sockaddr_in inet ;
由上可知, 套接口用结构体 sockaddr_in inet 表示。
最后, 需要将上述进程间通信信息合并, 如图 2 所示, 其实现方法如下 :
typedef struct{
pipeInfo*pipe ;
namedPipeInfo*namedPipe ;
int signal ;
messageQueueInfo*messageQueue ;
shmInfo*shm ;
bool inSemap ;struct sockaddr_in inet ;
}procComInfo ;
由 上 可 知, 将 所 有 通 信 方 式 的 进 程 间 通 信 信 息 都 合 并 在 了 一 个 结 构 体, 即 procComInfo 中。
在步骤 S102 中, 提供系统接口, 获取所述进程间通信信息。
在本发明实施例中, 进程间通信信息的获取是由外部进程调用, 通过以下 API 实 现的 :
int getProcCom(pid_t id, procComInfo*proc) ;
其中, 传入参数 pid_t id 为目标进程的 id, procComInfo*proc 为进程间通信信息 智者, 返回结果为所获取的信息类型。
在步骤 S103 中, 将所述获取的进程间通信信息作为进程策略依据进行通信。
在本发明实施例中, 进程在通信时, 可将所获得的进程间通信信息作为依据进行 通信。例如 : 进程 A 需要和进程 B 进行通信, 由所获取的进程间通信信息可知, 此时的共享 内存太小, 因此, 进程 A 和进程 B 就不会选择共享内存通信, 而选择其他的通信方式。这样, 进程在通信时参考所获得的进程间通信信息, 可选择更好的进程通信方式, 得出最佳的进 程通信方式, 提高系统效率。 而具体进程是如何进行通信的属于现有技术, 在此就不详细描 述了。
实施例二 : 本发明第二实施例进一步提供了设置进程间通信信息的权限的方法。如图 3 所示: 在本发明实施例中, 进程间通信信息的权限设置是由主进程所设置的, 用来确定 哪些信息能对外可见, 哪些信息不能对外可见。提供以下接口实现 :
void setProcCom(unsigned perm) ;
其中, perm 的取值及其意义如下 :
0x00 所有信息均不可见 ;
0x01 管道信息可见 ;
0x02 命名管道信息可见 ;
0x04 报文信息可见 ;
0x08 信号信息可见 ;
0x10 共享内存信息可见 ;
0x20 信号量信息可见 ;
0x40 套接口信息可见 ;
0xff 或 0x7f 所有信息可见。
在本发明实施例中, 可以采用或的方式实现选择性的信息可见, 如 0x01|0x02 表 示管道和命名管道信息可见。
在本发明实施例中, 进程间通信信息权限的设置, 避免了进程间通信信息过于暴 露, 提高了系统的安全性。
实施例三 :
图 4 为本发明实施例提供的进程通信装置的结构示意, 为了便于说明, 仅示出了
与本发明实施例相关的部份。该装置可以是内置于操作系统中的软件单元、 硬件单元或者 软硬件相结合的单元, 或者作为独立的挂件集成到操作系统或操作系统的应用系统中。其 中:
通信信息存储模块 1, 用于存储根据各种进程间通信方式统计进程间通信信息。
在本发明实施例中, Linux 进程通信的方式包括 : 管道 (Pipe)、 命名管道 (named pipe)、 报文 (Message)、 信号 (Signal)、 共享内存、 信号量 (Semaphore) 和套接口 (Socket)。 所述进程间通信信息, 即为用户定义的进程间通信信息的数据结构。通信信息存储模块就 是用于存储根据上述各种进程间通信方式统计的进程间通信信息。
通信信息获取模块 2, 获取进程间通信信息。
在本发明实施例中, 通信信息获取模块通过外部进程调用, 获取进程间通信信息。
进程通信模块 3, 用于将所获取的进程间通信信息作为进程策略依据, 进行通信。
在本发明实施例中, 进程通信模块将所获得的进程间通信信息作为依据进行通 信, 得出最佳的进程通信方式。
权限设置模块 4, 用于设置进程间通信信息的权限。由主进程进行设置, 用来确定 哪些信息能对外可见, 哪些信息不能对外可见。 在本发明实施例中, 统计较为完善的进程间通信信息, 能够为进程提供相应的策 略依据, 避免在有多余选择的前提下, 过多进程依赖某一进程从而造成系统不稳定等性能 低下的状况。同时提供安全性设置选项, 避免系统的安全性漏洞。
以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明, 凡在本发明的精 神和原则之内所作的任何修改、 等同替换和改进等, 均应包含在本发明的保护范围之内。