1.概述
1.1 临界资源
1.1.1 概述
一次仅允许一个进程使用的资源称为临界资源。
许多物理设备属于临界资源,许多变量、数据等也可以被多个进程共享使用,因此也属于临界资源。
1.1.2 临界资源的访问过程
进入区
。在进入区需要检查是否能够进入临界区(Critical Section),若能,则设置正在访问临界区的标志,以阻止其他进程同时进入该临界区。临界区/临界段
。进程中访问临界资源的那段代码。退出区
。清除正在访问临界区的标志。剩余区
。代码中的其余部分。
do{
entry section; // 进入区
critical section; // 临界区
exit section; // 退出区
remainer section; // 剩余区
}while(true)
临界资源与共享资源的区别在于,临界资源在一个时间段内只允许一个进程访问,而共享资源则可以允许多个(并发使用)。
临界资源有:公用队列、打印机、共享变量、共享缓冲区…
非临界资源有:非共享数据、私用数据、磁盘存储介质、可重入的程序代码…
银行家算法是死锁避免的算法,不能用来解决临界区问题。
1.2 同步/直接制约关系
1.2.1 概述
是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
要对并发进程进行同步的原因是:并发进程是异步的。
1.3 互斥\间接制约关系
1.3.1 概述
当一个进程进入临界区使用临界资源时,另一个进程必须等待其占用完并退出临界区后,才被允许进入临界区使用临界资源。
1.3.2 临界区的同步准则
空闲让进
。临界区空闲时,可允许一个请求进入临界区使用临界资源。忙则等待
。当已经有一个进程处在临界区时,其他试图进入临界区的进程必须等待。有限等待
。对于请求进入临界区的进程,应保证能在有限时间内进入临界区。让权等待
。当进程不能进入临界区时,应立即释放处理机,避免进程处于忙等待状态。(非必需实现,如Peterson算法)
2.实现临界区互斥的基本方法
2.1 软件实现方法
在进入区中设置并检查一些标志来表明是否有进程在临界区中,若已有进程在临界区中,则进入区通过循环检查进行等待。进程离开临界区后则在退出区修改标志。
2.1.1 单标志法
2.1.1.1 概述
该算法只设置一个公用整型变量turn,用于指示被允许进入临界区的进程编号,即若 turn = 0
,则P0进程允许进入。该算法可确保每次只允许一个进程进入临界区。