进程互斥
1.什么是进程互斥:
各进程之间竞争使用这些资源--这一关系称为进程互斥。
2.什么是临界资源:
系统中某些资源一次只允许一个进程使用
3.什么是临界区
给个进程中对某个临界资源实施操作的程序片段
临界区的使用原则
没有进程在临界区时,想进入临界区的进程可进入
不允许两个进程同时处于其临界区中
临界区外运行的进程不得阻塞其他进程进入临界区
不得使进程无限期等待进入临界区
进程同步:
指系统中多个进程汇总发生的事件存在某种时序关系,需要相互合作,共同完成一项任务。如如果进程A产生数据,而进程B打印数据,则B在打印之前必须等A产生数据。
1.信号量机制
什么是信号量?
信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号的下一个进程。信号量的值与相应资源的使用情况相关。
当它的值大于0时,表示当前可用资源的数量
当它的值小于0时,其绝对值表示等待使用该资源的进程个数。
注意,信号量的值仅能由PV操作来改变。
2.PV操作
image.png
一般来说,信号量S>=0时,S表示可用资源的数量。执行一次P操作意味着请求分配一个单位资源,因此S的值减1;当S<0时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能运行下去。而执行一个V操作意味着释放一个单位资源,因此S的值加1;若S<0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运行下去。
PV操作过程
分析并发进程的关键活动,划定临界区
设置信号量mutex,初值为1
在临界区前实施P(mutex)
在临界区之后实施V(mutex)
image.png
三个同步问题
生产者---消费者
image.png
说明:这里empty变量表示缓冲区还有多少个位置是空的,full表示缓冲区中被占用的个数。
作者---读者
问题:
多个进程共享一个数据区,这些进程分为两组:
读者进程:只读数据区中的数据
写者进程:只往数据区写数据
要求满足的条件:
允许多个读者同时执行读操作
不允许多个写者同时操作
不允许读者、写者同时操作
image.png
这里我们对读者计数。这虽然解决了多个读者同时读的问题,但是引出了另一个问题,就是rc变成了一个共享资源,所以我们还需要对rc进行保护,于是针对rc增加了P、V操作。
哲学家进餐