挑战408——操作系统(12)——进程通信,管程介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/redRnt/article/details/83410803

PS:这部分内容考的比较少,了解实例就好

进程间的通信,要解决的问题是进程之间信息的交流问题。根据交流信息量的大小,我们将通信分为低级通信高级通信两种。
低级通信中,进程中只能传递状态跟整数值,比如我们刚刚提到的PV操作。
高级通信中,进程能传递任意数量的数据,传递的信息大。
下面主要谈一些高级通信机制。

进程通信的类型

高级进程之间的通信机制主要分为三种: 共享存储器系统,消息传递系统,管道通信

  1. 共享存储系统
    在共享存储器中,相互通信的进程共享着某些数据或者存储区域。进程之间通过共享的存储区域进行通信。
  2. 消息传递系统
    在该系统中,进程间的数据交换以消息为单位,用户通过消息系统提供的一组消息通信原理,实现信息的传递。分为直接通信和间接通信。
  3. 管道通信(比较重要
    所谓管道,是指用于连接一个读进程,一个写进程,以实现进程之间通信的一种共享文件。又称为pipe文件。(所以,管道可以看做是一个共享文件)。向管道提供输入的进程称为写进程,向管道提供输出的是读进程。由于发送进程和接受进程都是通过管道来实现的,所以又称为管道通信。
    为了协调双方的通信,必须提供依以下的机制:互斥,同步,确认对方是否存在
    这里注意一个事,管道的大小是有限的,且固定,所以当某一进程运行较快时,可能出现管道空或者满的情况,这个时候快的一方必须阻塞等待,直到被唤醒。管道的通信方式是半双工通信。即某一时刻,数据只能单向传输,不过访问的话是可以双向访问的。管道内,是允许一边读入一边写出的,因为只要里面有数据,就可以读出,只要里面有空位,就可以写入。读出后的数据被释放掉,无法恢复。(有点像生产者消费者模型对吧)

管程

管程的定义是指一个共享资源的数据结构以及一组能为并发进程在其上执行的,针对该资源的一组操作。这组操作能同步进程和修改管程中的数据。
它的提出是为了更好的解决同步和互斥的问题。
其基本思想就是,把信号量及其操作原语封装在一个对象内部,管程就可以用函数库的形式实现。那么一个管程就是一个基本程序单位,可以单独编译,说明它是由编程语言支持的。

管程的组成
  1. 局部于管程的共享结构数据说明
  2. 对该数据结构进行操作的一组过程
  3. 对共享数据设置初始值

(这就是面向对象的思想)

特征
  • 管程中的共享变量只能被管程的过程访问,任何外部过程不能访问。
  • 一个进程通过调用管程的一个过程进入管程
  • 任何时刻,只能有一个进程进入管程执行(即互斥)
  • 为了实现并发,管程中必须包含同步信息。

猜你喜欢

转载自blog.csdn.net/redRnt/article/details/83410803
今日推荐