跳转至

第四章 进程

进程相关概念

进程同步与互斥

同步与互斥问题的产生

进程的三个特征:

  • 并发:进程执行间断进行;进程的相对执行速度不可测。(间断性)
  • 共享:进程与线程之间可能因为共享使用相同资源相互制约。(非封闭性)
  • 不确定性:进程执行结果与相对次序相关。(不可再现性)

进程的并发执行使得产生了多个进程对同一个共享资源访问,造成了资源的争夺。

  • 竞争:两个或多个进程对同一共享数据同时进行访问,而最后的结果是不可预测的,它取决于各个进程对共享数据访问的相对次序。这种情形叫做竞争。
  • 竞争条件:多个进程并发访问和操作同一数据且执行结果与访问的特定顺序有关。
  • 临界资源:我们将一次仅允许一个进程访问的资源称为临界资源
  • 临界区:每个进程中访问临界资源的那段代码称为临界区

进程互斥:由于各进程要求使用共享资源(变量、文件等),而这些资源需要排他性使用,各进程之间竞争使用这些资源。

临界区管理要求:

  1. 没有进程在临界区时,想进入临界区的进程可进入。
  2. 任何两个进程都不能同时进入临界区(Mutual Exclusion)。
  3. 当一个进程运行在它的临界区外面时,不能妨碍其他的进程进入临界区(Progress)。
  4. 任何一个进程进入临界区的要求应该在有限时间内得到满足(Bounded Waiting)。

机制设计原则:

  • 空闲让进
  • 忙则等待
  • 有限等待
  • 让权等待:当进程(长时间)不能进入自己的临界区时,应立即释放处理机,尽量避免忙等。

同步与互斥的区别及联系

  • 互斥:某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。互斥无法限制访问者对资源的访问顺序,即访问是无序访问
  • 同步:是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有对资源的写入的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。

基于忙等待的互斥方法

软件方法尝试1

......
while (ture == Q);
turn = P;
    临界区
turn = Q;
......
......
while (ture == P);
turn = Q;
    临界区
turn = P;
......

违反了Progress原则,处于临界区外的进程会阻止另一个进程进入临界区,要求两进程严格交替进入临界区。

软件方法尝试2

......
while (Occupied);
Occupied = true;
    临界区
Occupied = false;
......
......
while (Occupied);
Occupied = true;
    临界区
Occupied = false;
......

无法实现互斥,先检查有无标志后留标志,造成空挡

软件方法尝试3

......
pture = true;
while (qturn);
    临界区
pturn = false;
......
......
qture = true;
while (pturn);
    临界区
qturn = false;
......

可能都无法进入临界区,违反Progress原则