整体框架

1、什么是进程通信?
顾名思义,进程通信就是指进程之间的信息交换。
进程是分配系统资源的单位(包括内存地址空间),
- 因此 各进程 \color{red}各进程 各进程拥有的 内存地址空间相互独立 \color{red}内存地址空间相互独立 内存地址空间相互独立。

为了保证安全, 一个进程不能直接访问另一个进程的地址空间 \color{red}一个进程不能直接访问另一个进程的地址空间 一个进程不能直接访问另一个进程的地址空间
但是进程之间的信息交换又是必须实现的。
为了保证进程间的安全通信,操作系统提供了一些方法。

2、共享存储

两个进程对共享空间的访问必须是互斥的(互斥访问通过操作系统提供的工具实现)。
操作系统只负责提供共享空间和同步互斥工具(如 P、V 操作)

基于数据结构 \color{red}基于数据结构 基于数据结构的共享:
-  比如共享空间里只能放一个长度为 10 的数组。 
-  这种共享方式速度慢、限制多, 
-  是一种 低级通信 \color{red}低级通信 低级通信方式 
基于存储区 \color{red}基于存储区 基于存储区的共享:
-  在内存中画出一块共享存储区,数据的形式、存放位置都由进程控制,而不是操作系统。 
-  相比之下,这种共享方式速度更快, 
-  是一种 高级通信 \color{red}高级通信 高级通信方式。 
3、管道通信
“管道” 是指用于连接读写进程的一个共享文件,
- 又名 pipe文件。
- 其实就是在内存中开辟一个大小固定的缓冲区

管道只能采用 半双工通信 \color{red}半双工通信 半双工通信,某一时间段内只能实现单向的传输。
- 如果要实现双向同时通信,则需要设置两个管道。

首先进程 1 1 1 会往管道中写数据, 当管道中的数据写满了之后进程 2 2 2 才可以开始往外读数据
只有这个数据全部被读出后,进程 1 1 1 才可以继续往里面写数据
数据以字符流的形式写入管道,当管道写满时,写进程的  write() 系统调用将被阻塞,等待读进程将数据取走。
当读进程将数据全部取走后**,管道变空**,此时读进程的 read() 系统调用将被阻塞。
如果 没写满 , 就不允许读 \color{red}没写满,就不允许读 没写满,就不允许读。
如果 没读空 , 就不允许写 \color{red}没读空,就不允许写 没读空,就不允许写。
数据一旦被读出,就从管道中被抛弃,
-  这就意味着 读进程最多只能有一个 \color{red}读进程最多只能有一个 读进程最多只能有一个, 否则可能会有读错数据的情况。 
4、消息传递
进程间的数据交换以
    
     
      
       
        
         格式化的消息
        
       
      
      
       \color{red}格式化的消息
      
     
    格式化的消息(Message)为单位。
进程通过操作系统提供的 “发送消息/接收消息” 两个 原语 \color{red}原语 原语进行数据交换。
例如:TCP 报文段的首部就是消息头,数据载荷就是消息体


4.1、直接通信方式
消息直接挂到接收进程的消息缓存队列上

4.2、间接通信方式
消息要先发送到中间实体(信箱)中,因此也称 “信箱通信方式” 。
- Eg:计网中的电子邮件系统

5、整体框架



















