顾名思义,就是指进程之间的信息交换。
进程是分配系统资源的单位,因此各进程之间拥有的内存地址空间相对独立。为了保证安全,一个进程是不能直接访问另一个进程的地址空间的。为了实现进程之间的安全通信,操作系统提供了一些方法。

1. 共享存储
2. 管道通信
3. 消息传递

共享空间

进程间的通信方式 - 图1
两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)

  • 基于数据结构的共享:比如共享空间只能放一个长度为10的数组,这种共享的方式,速度慢,限制多。
  • 基于存储区的共享:从内存中划出一块共享存储区,数据的形式。存放位置都由进程控制,而不是操作系统,相比之下这种共享方式速度更快。

管道通信

“管道”是指连接读写进程的一个共享文件,就是在内存中开辟一个大小固定的缓冲区。
进程间的通信方式 - 图2

  • 管道只能采用半双工通信,某一段时间内只能实现单向的传输,如果要实现全双工通信,则需要设置两个管道。
  • 各进程要互斥的访问管道。
  • 数据以字节流的形式写入管道,当管道写满后,写进程的write()系统调用将被堵塞,等待读进程将数据取走。当读进程将数据全部取走后,此时进程的read()系统调用将被堵塞。
  • 如果没写满就不允许读,如果没读空就不允许写。
  • 数据一旦被读出,就从管道中被抛弃,意味着读进程最多只有一个。否则可能会有读错数据的情况。

进程通信

进程间的通信方式 - 图3
消息头包括:发送进程ID,接受进程ID,消息类型,消息长度等格式化信息(计算机网络中发送的报文其实就是一种格式化信息)

  • 直接通信方式:
    • 消息直接挂在消息缓冲队列上
  • 间接通信方式:
    • 消息要先发送道中间实体(信箱)中,因此也被称为“信箱通信方式”Eg:计网中的电子邮件系统。