操作系统之进程管理:进程通信
进程通信
进程通信是指进程之间的信息交换。PV操作是低级通信方式,高级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三类。
共享存储 |
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行读/写操作实现进程之间的信息交换。
在对共享空间进行读/写操作时,需要使用同步互斥工具(如P操作、V操作),对共享空间的读/写进行控制。
共享存储分为两种:
- 低级方式的共享是基于数据结构的共享。(如数组)
- 高级方式的共享是基于存储区的共享。
操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。
两个用户进程共享空间,必须通过特殊的系统调用实现,而进程内的线程是自然共享进程空间的。
消息传递 |
在消息传递系统中,进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的发送消息/接收消息“两个原语进行数据交换。
-
直接通信方式。
消息直接挂到接收进程的消息缓冲队列上。
-
间接通信方式。
消息要先发送到中间实体(信箱)中,因此也称”信箱通信方式“。该通信方式广泛应用于计算机网络中,相应的通信系统称为电子邮件系统
管道通信 |
管道通信是消息传递的一种特殊方式。
"管道"是指用于连接一个读进程和一个写进程以实现它们之间的通信方式的一个共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的缓冲区。
管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双相同时通信,则需要设置两个管道。
各进程要互斥地访问管道。
数据以字符流的形式写入管道,当管道写满时,写进程的write()系统调用将被阻塞,等待读进程将数据取走。当读进程将数据全部取走后,管道变空,此时读进程的read()系统调用将被阻塞。
如果没写满,就不允许读。如果没读空,就不允许写。
数据一旦被读出,就从管道中被抛弃,这就意味着读进程最多只能有一个,否则可能会有读错数据的情况。
意味着读进程最多只能有一个,否则可能会有读错数据的情况。