【临界资源与临界区】
虽然多个进程可以共享系统中的各种资源,但有许多进程一次只能被一个进程使用,这种一次仅允许一个进程使用的资源被称为临界资源,例如打印机、磁带机等
对临界资源的访问,应采取互斥的方式进行访问,在每个进程中访问临界资源的代码被称作临界区
显然,若能保证诸进程互斥地进入自己的临界区,便可实现进程对临界资源的互斥访问,为此,在每个进程进入临界区前,应先对欲访问的临界资源进行检查,看他是否正在被访问
由此,可以在临界区前增加一段用于检查的代码:如果某时刻临界资源正被访问,那么进程就可以访问该临界资源,并设置该临界资源正被访问的标志;如果某时刻临界资源正被访问,那么该进程就不能进入临界区
于是,可以将对临界资源的访问过程分为四个部分:
- 进入区:用于检查能否进入临界区
- 临界区:访问临界资源的代码
- 退出区:将正在访问临界区的标志清除
- 剩余区:进程中除进入区、临界区、退出区的其他部分
因此,一个访问临界资源的循环进程可以被描述为:
1 | while (true) { |
【进程间的制约关系】
多个程序在并发执行时,对于同处一个系统中的多个进程,由于他们共享系统中的资源,或为完成某一任务而相互合作,使得他们存在制约关系,制约关系分为以下两种
同步
同步,又称直接制约关系,其是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系
可以发现,进程间的直接制约关系就是源于它们间的相互合作
互斥
互斥,又称间接制约关系,当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一进程才允许去访问该临界资源
为禁止两个进程同时进入临界区,同步机制应遵循以下四条规则:
- 空闲让进:当无进程处于临界区时,表明临界资源处于空闲状态,此时允许请求进入临界区的进程进入
- 忙则等待:当有进程处于临界区时,表明临界资源处于忙碌状态,此时请求进入临界区的进程必须等待,以保证对临界资源的互斥访问
- 有限等待:对要求访问临界资源的进程,应保证在有限时间内能进入自己的临界区,以免陷入 死等
- 让权等待:进程无法进入自己的临界区时,应立刻师范处理机,以免陷入 忙等