操作系统
2024-46
计算机系统中的进程之间往往需要相互协作以完成一个任务。在某网络系统中,缓冲区B用于存放一个数据分组,对B的操作有C1、C2和C3。C1将一个数据分组写入B中,C2从B中读出一个数据分组,C3对B中的数据分组进行修改。要求B为空时才能执行C1,B非空时才能执行C2和C3。
请回答下列问题。
(1)假设进程 P1 和 P2 均需要执行 C1,实现 C1 的代码是否为临界区?为什么?(2分)
(2)假设 B 初始为空,进程 P1 执行 C1 一次,进程 P2 执行 C2 一次。请定义尽可能少的信号量,并用 wait()、signal() 操作描述进程 P1 和 P2 之间的同步或互斥关系,说明所用信号量的作用及其初值。(3分)
(3)假设 B 初始不为空,进程 P1 和 P2 各执行 C3 一次。请定义尽可能少的信号量,并用 wait()、signal() 操作描述进程 P1 和 P2 之间的同步或互斥关系,说明所用信号量的作用及其初值。(3分)
答案
(1)C1的代码是临界区,因为C1执行写操作时需要缓冲区B为空,该操作涉及对共享资源B的独占访问,必须互斥执行。
(2)使用同步信号量 S=0 表示 B 中是否已有 P1 写入的数据:
P1: P2:
C1; wait(S);
signal(S); C2;(3)使用互斥信号量 mutex=1 保护对 B 的修改:
P1: P2:
wait(mutex); wait(mutex);
C3; C3;
signal(mutex); signal(mutex);