操作系统 -- 进程间通信机制
基本概念与分类
之前的内容中我们分析了进程的相关概念,接下来我们考虑一下进程之间的交互,也就是本文中主要谈到的进程间通信(IPC – Interprocess Communication)。
进程间的通信可以分为两种模型,分别为:
- 共享内存(Shared Memory)
- 消息传递(Message Passing)
以下可以用一幅图将上述两者的异同进行直观地展现:
我们可以看到,左边的是消息传递的基本模型,进程A如果想要与进程B建立通信,那么首先将相关的信息传给内核,然后内核将其转发给进程B; 而通过共享内存的方式进行的进程间通信,则是开辟一段新的贡献资源段,然后两个进程之间进行数据信息等的交互,该过程不受CPU的控制。
实践中遇到的基本问题
上述讲解的进程通信的两种方式,主要是宏观上的内容。那么其微观上可能存在怎样的问题呢?
譬如通信传输的数据的格式如何定义,通信是否采取广播机制等等。该部分内容与计算机网络通信有很多类似的地方,之后进行分析。
下面着重分析几个典型的通信分类方式。
直接通信与间接通信
直接通信,顾名思义,就是两个进程之间的通信不需要任何媒介,在两个进程之间建立一条通路,或者采用匿名的方式。相对而言较为简单,但是当进程较多时,进程间通信的管理较为复杂。
另外的一种通信方式是间接通信,间接通信此时需要一个媒介。而这个媒介我们在计算机系统中称之为mailboxes。每个mailbox的信息输入与输出,我们称之为port(端口)。
某一进程通过mailbox发送信息,对应同端口的进程才能接受到此信息。
同步通信与异步通信
同步通信包含两个方面的内容,一方面是指消息发出的同步性,也就是说当某个进程无论采取直接还是间接的方式发出消息时,都会进入挂起状态,等待消息被接收;另外一方面消息的接收方一直处于等待接收有效消息的状态,而不会进行其他处理。
异步通信同样包含类似于上述两个维度的内容。一方面是指消息发出的异步性,也就是通信发起进程发出消息之后,不进入挂起状态,继续执行后面的操作;而对消息接受进程而言,并不用等待接收到有效的消息。
总结
进程间通信(IPC) 是操作系统中极为重要的概念,其两种模型都有着广泛的应用。关于其应用的实例可以看到在各大操作系统中普遍存在;另外关于其实现的具体细节,将在之后的试验中进行具体分析。