进程通信
进程通信是什么?
顾名思义,进程通信就是指进程之间的信息交换
进程是分配系统资源的单位(包括内存地址空间)
因此各进程
拥有的内存地址空间相互独立
但是进程之间的信息交换又是必须实现的,为了保证进程间的安全通信,系统提供了一些方法:共享存储、消息传递、管道通信
共享存储
共享存储就是两个进程之间通过共享空间来共享数据
两个进程对共享空间的访问必须是互斥的
(互斥访问通过操作系统提供的工具实现)
操作系统只负责提供共享空间和同步互斥工具(如p、v操作)
共享存储:基于数据结构的共享
和基于存储区的共享
基于数据结构的共享:
比如共享空间里只能放一个长度为10的数组,这种共享方式速度慢,限制多,是一种低级通信
方式
基于存储区的共享:
在内存中画出一块共享存储区,数据的形式,存放位置都由进程控制,而不是操作系统。相比之下,这种共享方式速度更快,是一种高级通信
方式
管道通信
“管道”是指用于连接读写进程的一个共享文件,又叫pipe文件,其实就是在内存中开辟一个大小固定的缓冲区。
1、管道只能采用半双工通信
某一时间内只能实现单向的传输。r如果要实现双向同时通信
,则需要设置两个管道
。
2、各进程要互斥
的访问管道。
3、数据是以字符流的形式写入管道,当管道写满
时,写进程的wirte()系统调用将阻塞,等待读进程将数据取走,管道变空
,此时读进程read()系统调用将阻塞。
4、如果没写满就不允许读
,如果没读完就不允许写
5、数据一旦被读出就从管道中被抛弃,这就意味着读进程最多只能有一个
,否则可能会出现读错数据的情况
消息传递
进程之间的数据交换以格式化信息
为单位。进程通过操作系统提供的发送消息/接收消息
两个原语
进行数据交换、
消息传递分为直接消息传递
和间接消息传递
间接消息传递:消息先被传送到中间实体(信箱)中,因此也被称为“信箱通信方式”
总结一下: