操作系统:进程同步和进程互斥

372 阅读2分钟

先验知识:进程具有异步性的特征。异步性指的是各并发执行的进程以各自独立的、不可预知的速度向前推进。

为什么需要进程同步?

例如在进程的管道通信中,读进程和写进程并发地运行,并发会这两个操作的异步性,也就是这两个操作执行先后顺序是不确定的。但是实际应用中,应当是先读后写,所以解决方法就是“进程同步”。

同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。 进程间的直接制约关系就是源于它们之间的相互合作。

为什么需要进程互斥?

进程的“并发”需要“共享”的支持。各个并发执行的进程不可避免的需要共享一些系统资源。

我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备都属于临界资源,如打印机等。此外,还有许多变量、数据等都可以被若干进程共享,也属于临界资源。 对临界资源的访问,必须互斥地进行,在每个进程中,访问临界资源的那段代码称为临界区。为了保证临界资源的正确使用,可以把临界资源的访问过程分成四个部分:

  • 进入区。为了进入临界区使用临界资源,在进入区要检查可否进入临界区,如果可以进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。
  • 临界区。进程中访问临界资源的那段代码,又称临界段。 
  • 退出区。将正在访问临界区的标志清除。 
  • 剩余区。代码中的其余部分。

伪代码如下:

do {
    entry section; //进入区 上锁
    critical section; //临界区
    exit section; //推出区 解锁
    remainder section; //剩余区 做其他处理
} while (true)

为禁止两个进程同时进入临界区,同步机制应遵循以下准则:  

  • 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区。 
  • 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待。 
  • 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区。(保证不饥饿)。 
  • 让权等待。当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。

总结