一般“僧号量”机制 If si>=tI and s2>=t2 andand Sn>stn then For i:=l to n d 将所有等待Si资源的进程移到就绪队列。 将执行进程插入第i(Siti)个等待队列。 设置该进程的程序计数器到Swai操作的开始 3.3经典进程同步问题 个信号量,可每次 申请d个资源 同步的概念 Swait(S,1,1):记录型信号量(S1) 算进程和打印进程使用同一缓冲区Buf 或互斥信号量(S=1) 0):当S>=1,允许多个进 ocal PBuf 程进入某临界区;当S=0后,阻止任 的同步 At ComputerfChuf: Br While (Buf : NULL) 何进程进入临界区 Print(PBuft 异步环境 生产者消费者问题 进程都能以各自独立的,不可预知的 问题描述 速度向前推进 作系统|进程的 通过由n个环形缓冲区构成的 进程同步 缓冲池,把生产者P1,P2,… 相互合作的进程之间需要交换一定的 PM和一群消贵者Cl,C2, 信息,当某进程未获得其合作进程发来的 CK联系起来 信息之前,该进程等待,宜到该信息到来 算法描述 时才被唤继续执行,从而保证诸进程的 协调运行7 操 作 系 统 | 进 程 的 同 步 与 通 信 37 CUIT 徐虹 ¾一般“信号量”机制 Swait(S1,t1,d1;…;Sn,tn,dn) If S1>=t1 and S2>=t2 and … and Sn>=tn then For i:=1 to n do Si := Si – di; Endfor Else 将执行进程插入第i(Si<ti)个等待队列。 设置该进程的程序计数器到Swait操作的开始。 Endif 操 作 系 统 | 进 程 的 同 步 与 通 信 38 CUIT 徐虹 Ssignal(S1,d1,…;Sn,dn) For i:=1 to n do Si := Si + di; 将所有等待Si资源的进程移到就绪队列。 Endfor 操 作 系 统 | 进 程 的 同 步 与 通 信 39 CUIT 徐虹 特例: ¾ Swait(S,d,d):一个信号量,可每次 申请d个资源; ¾ Swait(S,1,1):记录型信号量(S>1) 或互斥信号量(S=1); ¾ Swait(S,1,0):当S>=1,允许多个进 程进入某临界区;当S=0后,阻止任 何进程进入临界区。 操 作 系 统 | 进 程 的 同 步 与 通 信 40 CUIT 徐虹 3.3 经典进程同步问题 ¾同步的概念 例:计算进程和打印进程使用同一缓冲区Buf。 Pc: …… Pp: …… local Cbuf local PBuf A: Computer(Cbuf); B: While (Buf != NULL) While (CBuf!= NULL) Buf——> PBuf CBuf ——>Buf Print(PBuf); Goto A; Goto B; 操 作 系 统 | 进 程 的 同 步 与 通 信 41 CUIT 徐虹 ¾异步环境 相互合作的一组并发进程,其中每 一进程都能以各自独立的,不可预知的 速度向前推进。 ¾进程同步 相互合作的进程之间需要交换一定的 信息,当某进程未获得其合作进程发来的 信息之前,该进程等待,直到该信息到来 时才被唤醒继续执行,从而保证诸进程的 协调运行。 操 作 系 统 | 进 程 的 同 步 与 通 信 42 CUIT 徐虹 ¾生产者—消费者问题 ¾问题描述 通过由n个环形缓冲区构成的 缓冲池,把生产者P1,P2,……, PM和一群消费者C1,C2,……, CK联系起来。 ¾算法描述