进程间的通信 ---操作系统

进程间的通信

进程间的通信是指各个进程交换信息的过程。

 

同步

    在一文理解进程与线程中,我们谈到多个进程可以并发执行,每个进程都以各自独立运行,不可预知的速度向前推进,但是需要在某些点上协调相互合作进程间的工作。

 

生产者消费者问题(文字理论版,代码见另一篇文章)

    有一群生产者进程在生产产品,并将这些产品提供给消费者,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有n可缓冲区的缓冲池,生产者进程需要将所生产的产品放到一个缓冲区中,消费者进程可以从缓冲区取走产品消费。

 

 

 

 

生产者往缓冲区+1       消费者往缓冲区-1

 

 

如果没有同步,并发执行会出错,看下面例子

 

注:其中绿色为生产者,褐色为消费者。生产者,消费者中的register与count是相互独立的。

可以看到在此问题中,如果没有进行同步的

 

 

互斥

进程的互斥是指系统中多个进程因为竞争临界资源而互斥执行。

 

 

临界资源

有些资源一次只能供一个进程使用,称为临界资源。

临界区

临界区(CS)是进程中对临界资源实施操作的那段程序。

对互斥临界资源管理有4条原则。

    空闲让进:资源无占用,允许使用

    忙则等待:资源有占用,请求进程等待

    有限等待:保证有限等待时间能够使用资源

    让权等待:等待时,进程需要让出CPU

 

信号量机制

信号量机制是一种有效的进程同步与互斥工具,主要有整型信号量,记录型信号量和信号量集机制。

信号量的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。

信号量(信号量S)的值与相应的资源使用情况有关,当值大于零的时候,表示可用资源的数量,当值小于零时,表示等待时候该资源的进程个数。

PV操作

我看了网上许多PV操作的定义,有些小复杂,用大白话讲,PV操作就是通过跟释放操作,其中P是通过,V是释放。

 

P操作的定义;S=S-1,若S≥0,则执行P操作的进程继续执行,若S≤0则置该进程为阻塞状态(因为无可用资源),并将其插入阻塞队列。

V操作的定义:S=S+1,若S>0,则执行V操作的进程继续执行,若S≤0,则从阻塞状态中唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。

 

注:PV操作是属于低级通信方式,P操作,V操作是不可中断的程序段。使用PV操作存在以下问题:

  1. 编程难度大,通信对用户不透明,即要用户利用低级通信工具实现进程间的同步与互斥。PV操作不当容易引起死锁。

 

  1. 效率低,生产者每次只能向缓冲区放一个消息,消费者每次只能从缓冲区取一个消息。
posted @ 2019-07-23 20:33  歪鼻子  阅读(215)  评论(0)    收藏  举报