操作系统进程同步与互斥核心知识点复习
一、信号量的取值含义与范围
信号量(Semaphore)是解决进程同步与互斥问题的核心工具,其取值不仅表示资源数量,也隐含了等待进程的信息。
-
互斥信号量(Mutex):
- 初值通常为 1,表示临界区只允许一个进程进入。
- 若信号量值为 0,表示资源已被占用,无进程等待。
- 若信号量值为 负数,其绝对值表示等待该资源的进程数量。
-
同步信号量(用于进程协作):
- 初值由具体场景决定,常见为 0 或 正整数N(如缓冲区空槽数量)。
- 例如,在生产者-消费者问题中,
empty
表示空缓冲区数量,full
表示满缓冲区数量。
✅ 关键理解:信号量的值 = 可用资源数(若≥0) 或 -等待进程数(若<0)。
二、进程的三种关系:互斥、同步、无关系
关系类型 | 特点 | 例子 |
---|---|---|
互斥 | 竞争独占式资源,不同进程不能同时访问临界资源 | 多个进程写同一个文件 |
同步 | 为完成共同任务,进程间存在执行顺序的约束 | 生产者-消费者、司机与售票员 |
既同步又互斥 | 典型如缓冲区操作:互斥(保证读写不冲突) + 同步(缓冲区满/空时等待) | 生产者-消费者模型 |
无制约 | 进程间不共享资源,也无执行顺序要求 | 不同用户编译各自程序 |
✅ 关键理解:互斥是“争抢”,同步是“协作”,很多实际问题同时包含两者。
三、可重入代码与临界资源
-
可重入代码(Reentrant Code):
- 是指可以被多个进程/线程同时执行而不会出错的代码。
- 特点:不修改全局数据、只使用局部变量、或只读共享数据。
- 必须使用可重入代码的场景:多个进程共享的程序段(如共享库)。
-
临界资源(Critical Resource):
- 一次仅允许一个进程使用的资源,如:共享队列、共享变量、打印机等。
- 注意:可重入代码不是临界资源,因为它是只读的,可被同时执行。
✅ 关键理解:共享程序段必须可重入;共享数据结构必须互斥访问。
四、P、V 操作的原语性与作用
-
P、V 操作是低级进程通信原语:
- 由操作系统内核提供,执行时不可中断(原子性)。
- 不是普通的系统调用,也不是机器指令或作业控制命令。
-
P 操作(Wait):
- 信号量减 1。
- 若结果 < 0,则当前进程阻塞,进入等待队列。
-
V 操作(Signal):
- 信号量加 1。
- 若结果 ≤ 0,表示有进程在等待,则唤醒等待队列中的一个进程,使其进入就绪队列。
✅ 关键理解:P 可能引起自身阻塞;V 可能唤醒另一个进程。
五、进程在临界区内被中断的行为
- 进程在临界区内持有锁(如信号量),即使因 I/O 等中断而让出 CPU:
- 锁仍然被该进程持有。
- 其他进程不能进入同一个临界区,但可以执行非临界区代码或其他不相关临界区。
- 中断返回后,该进程继续执行临界区代码,完成后释放锁。
✅ 关键理解:进入临界区后,锁不会因中断而自动释放。
六、复习要点小结
薄弱点 | 核心结论 |
---|---|
信号量取值 | 负值表示等待进程数 |
同步 vs 互斥 | 互斥:争用资源;同步:协调顺序 |
可重入代码 | 共享程序段必须可重入 |
P/V 操作 | P 可能阻塞自己,V 可能唤醒别人 |
临界区中断 | 锁不释放,其他进程无法进入同一临界区 |