在操作系统中引入进程后,一方面系统中多道程序可以并发进行,有效的改善了资源利用率,提高了系统的吞吐量。但另一方面,系统变得更加复杂了,如果不能通过有效措施对多个进程进行有效管理,那么必然会因为这些进程对资源的无序争夺造成混乱,导致每次处理结果存在不确定性。为此,操作系统引入了进程同步机制,对多个程序在执行次序进行协调,使并发进程之间能够按照一定的规则共享系统资源,相互合作,从而使程序的执行具有可再现性。
两种形式的制约关系:
(1)互斥:间接相互制约关系
并发进程之间因相互争夺独占性资源而产生的竞争制约关系。
(2)同步:直接相互制约关系
并发进程之间为共同任务基于某个条件来协同执行先后关系而产生的协作制约关系。
临界资源:一次只能被一个进程使用的资源称为临界资源。
在计算机系统中,许多硬件资源如打印机,磁带机,共享变量等,都属于临界资源
例:生产者和消费者问题
现有生产者Producer和消费者Consumer两个进程,这两个进程通过一个缓冲区进行生产和消费的协作过程。生产者将得到的数据放入缓冲区中,而消费者则从缓冲区当中取得数据进行消费。
缓冲区buffer为一个有界数组,buffer中的数据用count表示。
如果按照上述顺序执行,正确的count值应当为5,但现在为4。
这表明程序的执行已失去了再现性。
诸进程间应采取互斥方式,实现对这种临界资源的共享。
临界区(criticalsection)
由前所述可知,不论是硬件临界资源还是软件临界资源,多个进程必须互斥地对它进行访问。人们把在每个进程中访问临界资源的那段代码称为临界区。
F临界区管理的三个要求:
- 一次最多允许一个进程停留在相关的临界区内
- 一个进程不能无限止地停留在临界区
- 一个进程不能无限止地等待进入在临界区