计算机操作系统-第十三天

2023-12-13 08:12:41

目录

前言

进程通信(IPC)

进程通信的方法

共享存储

消息传递

直接通信方式

间接通信方式(信箱通信方式)

管道通信

本节思维导图


前言

进程通信(IPC)

概念:进程间通信(Inter-Process Communication,IPC)是指两个进程之间产生数据交互

进程间通信需要依赖于操作系统内核的支持,为什么?

?1、进程是分配资源的单位(包括内存地址空间),因此各进程拥有的内存地址空间相互独立

2、出于安全性考虑,一个进程不能直接访问另一个进程的地址空间

(你只能登你的QQ但是不能登我的QQ)?

进程通信的方法

共享存储

概念:某个进程申请共享存储区,在该区中写入数据,其它进程就可以从中读取存放的数据

注意事项:

1、为避免出错,各个进程对共享空间的访问应该是互斥的,即一个进程在访问共享存储区时其它的进程不能访问

2、共享存储还可以细分为基于数据结构的共享基于存储区的共享

  • 基于数据结构的共享:共享内存空间放什么数据、怎么放都是操作系统规定好的,比如共享空间里只能放一个长度为10的数组,这种共享方式速度慢,限制多,是一种低级通信方式
  • 基于存储区共享:操作系统在内存中划出一片共享内存区,在这里放什么数据,怎么放都是由通信进程控制,拥有高度自治权,这种共享方式速度很快,是一种高级通信方式

消息传递

概念:进程间的数据交换以格式化的信息为单位,进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换,格式化的消息消息头消息尾组成(消息头中包含发送进程ID【谁发】、接受进程ID【谁收】、消息长度等格式化信息,消息尾中包含要传递的具体数据)?

直接通信方式

概念:消息发送进程要指明接受进程的ID

间接通信方式(信箱通信方式)

概念:通过“信箱”间接地通信

特点: 操作系统允许多个进程往同一个信箱send消息,也可以多个进程从一个信箱中receive消息

管道通信

概念:“管道”是一个特殊的共享文件(pipe文件)本质就是在内存中开辟一个大小固定的内存缓冲区

特点:

1、管道中数据的流动是单向的,且先进先出(FIFO,相当于一个队列,只能先读取队头元素,这也是它区别于共享存储的原因,在实际情况下管道其实是一个循环队列,即如果读数据速度小于写数据速度,当后面的空间被填满时,由于前面的数据已经被读取了,所以再写入数据时可以在前面的空出来的地方写数据,需要注意的是此时仍然遵循先进先出的性质,循环队列的队头是在不断变化的)

<夹带私货时间😋>设计循环队列:http://t.csdnimg.cn/9weVt

2、管道只能采用半双工通信(单向传递),某一段时间内只能实现单向的传输,如果要实现全双工通信,则需要设置两个管道

3、各进程要互斥的访问管道(由操作系统实现)

4、管道中的数据可以边读边写:

  • 只要管道未空,读进程就可以从管道读取数据
  • 只要管道未满,写进程就可以往管道写数据

5、 管道中的数据一旦被读出,就彻底消失,因此多个进程读同一个管道时,可能会错乱,对此通常有两种解决方案:

  1. 规定一个管道允许多个写进程,一个读进程(2014年408真题高教社官方答案)
  2. 规定一个管道可以有多个写进程,多个读进程,但系统会让各个读进程轮流从管道中读取数据(Linux操作系统的方案)
  3. 在实际应用过程中第二种方案更适用

本节思维导图

~over~

文章来源:https://blog.csdn.net/m0_73975164/article/details/134959414
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。