操作系统中的进程同步详析
用pv操作实现进程的互斥 【相关文章:2.4.22 V Kernel Syst】
进程同步包括进程的互斥与进程的同步两个方面,是操作系统管理共享资源的一种手段。从考试情况来看,许多考生对这部分知识掌握的不好,理解的不透。用pv 操作解决进程同步问题时首先应确定问题是属于进程互斥还是进程同步,或是互斥与同步的混合问题。然后根据共享资源的数量以及使用共享资源的规则正确的定义信号量及其初值。然后决定在不同信号量上应实施的p操作与v操作,用这些p操作与v操作保证并发进程正确地使用共享资源。下面我们就一些考题做一些分析,让考生在分析中理解进程同步,掌握进程同步。 【扩展阅读:Many useful Links】
【扩展信息:qmail+mysql+vpopmail】用pv操作实现进程的互斥,只要用一个信号量与一组相关临界区联系起来,信号量的初值定义为“1”。每个进程要进入临界区之前调用p操作,测试自己是否可以立即进入临界区;执行完临界区的程序段后,调用v操作表示自己退出临界区。
例题:观察者与报告者是两个并发执行的进程,观察者不断观察并对通过的卡车计数,报告者定时的将观察者的计数值打印,两个进程并发执行的程序如下: begin count:integer; count:=0; cobegin process observer begin l1: observe a car;/*观察到一辆卡车*/ count:=count+1; goto l1 end; process reporter begin l2:print count; count:=0; goto l2 end; coend; end; 请用pv操作进行管理使其不产生与时间有关的错误。分析:观察者与报告者共享了变量count,观察者进程的临界区是“count:=count+1”,报告者进程的临界区是“print count; count:=0”。按给出的程序,对临界区的执行没有限制,当它们并发执行时对共享变量count会出现如下三种操作序列:
count:=count+1; print count;count:=0; print count;count:=count+1;count:=0; print count;count:=0;count:=count+1; 按第一、二种序列执行时,总能把观察者在一段时间里观察到的卡车数正确打印出来,然后再重新开始计数。而按第二种序列执行时,在打印了某段时间里观察到的卡车数后,观察者又观察到有一辆卡车通过作count+1,但由于接下去执行的是count:=0,以后观察者将从“0”开始计数,于是打印出来的count值的总与将比实际观察到的卡车数少。这种与时间有关的错误是因为它们同时在临界区执行,两个进程交替地访问了共享变量count而造成地。用pv操作管理时。只要保证互斥进入临界区即可。 解答: begin count:integer; s:semaphore; count:=0;s:=1; cobegin ... 下一页