进程间的通信 ---操作系统
进程间的通信
进程间的通信是指各个进程交换信息的过程。
同步
在一文理解进程与线程中,我们谈到多个进程可以并发执行,每个进程都以各自独立运行,不可预知的速度向前推进,但是需要在某些点上协调相互合作进程间的工作。
生产者消费者问题(文字理论版,代码见另一篇文章)
有一群生产者进程在生产产品,并将这些产品提供给消费者,生产者进程和消费者进程可以并发执行,在两者之间设置了一个具有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操作存在以下问题:
- 编程难度大,通信对用户不透明,即要用户利用低级通信工具实现进程间的同步与互斥。PV操作不当容易引起死锁。
- 效率低,生产者每次只能向缓冲区放一个消息,消费者每次只能从缓冲区取一个消息。