【进程间通信】概述

来源:互联网 发布:看车软件 编辑:程序博客网 时间:2024/05/29 05:55

对于多用户,多进程的OS来说,进程间通信(IPC)是一项非常重要,甚至必不可少的基本手段和设施;


早期的Unix提供以下手段:

(1)管道(Pipe);父进程与子进程之间,或者两个兄弟进程之间,可以通过系统调用建立起一个单向的通信管道;但是,这种管道只能由父进程来建立,所以对于子进程说来说是静态的;管道两端的进程各自都将该管道视作一个文件;一个进程往管道中的写内容由另一个进程从管道中取,遵循FIFO原则;每一个管道都是单向的,需要双向通信时就要建立起两个管道;

(2)信号(Signal);signal并不是专门为进程间通信设置的,它也可以用于内核与进程之间的通信(不过内核只能向进程发送信号,而不能接收信号);一般来说,signal是对中断这种概念在软件层次上的模拟;信号的发送源相当于中断源,而接收者则相当于处理器,所以必须是一个进程;

(3)跟踪(Trace);一个进程可以通过系统调用ptrace读写其子进程地址空间的内容,从而达到跟踪子进程执行的目的;

(4)上述的三种进程间通信,只针对父进程与子进程,或者说是两个兄弟进程;信号的使用,虽然并未限制在父子进程,但是发送信号是需要对方的pid,一般只有父子进程才知道对方的pid;于是增设了命名管道,它以FIFO文件形式出现在文件系统中,所以任何进程都可通过文件名打开该管道,然后进行读写;


在System V,为了更好的支持商业应用的事务处理,又增设了三种进程间通信手段;

(1)Message队列,一个进程可以通过系统调用设立一个报文队列,然后进程都可以通过系统调用向这个队列发送消息或从队列接收消息;

(2)共享内存,一个进程可以通过系统调用设立一片共享内存区,然后其他进程就可以通过系统调用将该存储区映射到其用户地址空间;

(3)信号量,内核中已有信号量机制,此处的信号量则通广到了用户空间;


BSD Unix也做了重要扩充

(1)Socket,它成了最一般,最普遍使用的进程间通信手段和机制;

0 0
原创粉丝点击