现在有:进程1的数据存在(存储空间A)
进程2的数据存在(存储空间B)
为了保证进程间的安全性,使用进程1只能访问A,进程2只能访问B
那么进程1,2想要通信如何实现呢?
一,共享存储:
1,什么是共享存储?
操作系统提供了一个共享空间可以被进程1,2互斥的访问
2,分类
1)基于数据结构的共享:比如共享空间只能存放一个长度为10的数组。这种共享方式速度慢,限制多,是一种低级的通信方式
2)基于存储区的共享:在内存中画出一块共享存储区,数据的形式,存放的位置都由进程控制,而不是操作系统。相比之下它的速度更快,是一种高级通信方式
二,消息传递:
1,什么是消息传递?
进程中的数据交换以“格式化消息“为单位,进程通过操作系统提供的”发送消息、接收消息“两个源语进行数据交换
2,格式化消息的结构:
1)消息头:包括发送进程的ID,接收进程的ID,消息类型,消息长度等格式化信息
2)消息体:记录被发送的信息
3,分类:
1)直接通信方式:比如进程1,给进程2发信息,就把信息挂到进程2的信息缓存队列上
2)间接通信方式:进程1把消息放到一个中间实体上,等待需要它的进程2取走
三,管道通信:
1,什么是管道:
是指用于连接读写进程的一个共享文件,是在内存中开辟了一个固定大小的缓冲区
2,特点:
1)管道只能采用半双工通信,在一段时间只能单向传输,如果要实现双向传输,就需要设置两个管道
2)各个进程需要互斥的访问管道
3)数据以字符流的形式写入管道,当管道写满时,写进程将被堵塞,等待数据被取走。当数据全部被取出后,管道变空,此时写进程的系统调用将被堵塞。
4)如果没写满,就不允许读,没有读空,就不允许写
5)速度一旦读出,就从管道中被抛弃,这就意味着读进程只能有一个,否则可能会发生读错数据的情况