1. 2010年408真题第27题解析:Peterson算法与同步互斥机制
这道来自2010年计算机考研408统考的操作系统真题,考察了进程同步互斥中的经典Peterson算法。作为操作系统课程的核心考点,同步互斥问题在历年408考试中出现的频率高达73%(根据近15年真题统计)。我们先看题目描述:
两个进程P0和P1共享以下变量:
c复制boolean flag[2]; // 初始值均为false int turn; // 初始值任意进程Pi(i=0或1)的代码结构如下:
c复制while (true) { flag[i] = true; turn = j; // j为另一个进程的编号 while (flag[j] && turn == j); // 临界区 flag[i] = false; // 剩余区 }问该算法满足哪些同步互斥的基本准则?
1.1 同步互斥的基本概念
在操作系统中,当多个进程需要访问共享资源(如打印机、共享内存等)时,会出现临界资源问题。这类资源的特点是:
- 一次仅允许一个进程使用
- 使用过程不能被中断
- 使用结束后才能被其他进程访问
为了保证对临界资源的正确访问,需要满足四个基本准则:
- 空闲让进:当没有进程处于临界区时,应允许一个请求进入临界区的进程立即进入
- 忙则等待:当已有进程在临界区时,其他试图进入的进程必须等待
- 有限等待:对请求访问的进程,应保证在有限时间内能进入临界区(避免饥饿)
- 让权等待:当进程不能进入临界区时,应立即释放处理器(避免忙等待)
1.2 Peterson算法的工作原理
Peterson算法是经典的进程同步软件解决方案,其核心思想是通过两个共享变量实现互斥:
c复制bool flag[2] = {false, false}; // 表示进程是否想进入临界区
int turn; // 表示当前轮到哪个进程
算法执行流程分为三个关键步骤:
- 表达意愿:`flag[
