进程通信就是指进程之间的信息交换。
各进程拥有的内存地址空间相互独立。
如图所示,进程1并不能直接访问进程2的地址空间。
为了保证系统的安全,**一个进程是不允许直接访问另一个进程的地址空间的。**如果可以随意访问的话,那进程1就可以随意的修改进程2的数据了,会对系统安全造成影响。
两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现—同步互斥工具)
eg:只有进程1把这个共享空间释放之后,进程2才可以对共享空间进行读操作。
在内存当中开辟了一个大小固定的缓冲区(cache?)
管道采用半双工通信,(数据可以往两个方向传输,但是在同一个时间段内,只能实现单向的传输)
要实现全双工,就得采用两个管道来进行通信。
过程:进程1往管道当中写数据,在数据写满了之后,进程2才开始读数据。同样的,只有当数据全部被读出后,进程1才会又开始写数据。
没写满不允许读;没读完不允许写。
读进程最多有一个。
分为两种,一种是直接通信方式;一种是间接通信方式。
顾名思义,就是把消息直接挂到接收进程的消息缓冲队列上。每个进程都会有一个消息缓冲队列,若另外一个进程想发送消息给当前这个进程的话,首先创建好消息体,然后当前进程会发送原语发送给目标进程,原语就会被挂到消息缓冲队列的队尾,然后接收进程的那个进程会接收消息,从消息缓冲队列把一个个消息给取走。这就是直接通信方式。
有中间商赚差价了。例如计网当中的电子邮件通信方式。
因为消息头里有对应的ID,所以并不担心取消息会取错。