程序员人生 网站导航

《操作系统》――解决并发进程中与时间有关的错误

栏目:服务器时间:2015-07-02 09:02:12

    在多道程序设计的系统中同时存在着许多进程。他们可能同时装入主存,等待处理器的调度,这就构成的并发进程。对单核处理器来讲,并发进程其实不是多个进程同时占用途理器同时履行,而是同时装入主存,至于进程甚么时候被履行,这要看进程的调度策略啦! 谈到并发进程,我就想到进程的并发会产生许多毛病,这些毛病在我们在设计系统或编写软件时都是尽可能要避免的。 

    那末进程的并发履行为何会产生毛病那?归根究竟是并发进程访问同享变量的事,当多个进程访问同享变量的进程中,就有可能会产生与时间有关的毛病,或是死锁。

    1、导图分析


   2、导图分析

   说到进程访问同享资源,我觉得首先先明白进程的同步与进程的互斥问题。

   1、进程的互斥:指当有若干个进程都要使用某1同享资源时,任什么时候候最多只允许1个进程去使用同享资源,其他要使用的进程必须等待,知道该资源的占用者释放了该资源。

   2、进程的同步:在并发进程之间存在1种制约关系,1个进程的履行依赖另外一个进程的消息,当1个进程没有得到另外一个进程的消息时应当等待,知道消息到达后才被唤醒。

   3、与时间有关的毛病:多个进程共同履行时,交替的访问了同享变量,但是有1个进程由于本身缘由或外界缘由被中断了后,稍后又接着履行,最后致使运行结果出错。

   例如:

   某小区有两扇门,其中1扇门是入口,另外一扇门是出口,用1个计数器count显示在小区的人数,当有人进入时,由进程PIN实现计数加1,当有人退出时,由进程POUT减1。这两个进程以下

<span style="font-family:KaiTi_GB2312;font-size:18px;">begin count: interge count: =0 cobegin process PIN R1: integer; begin R1:=count; R1:=R1+1; count: =R1; end ; process POUT R2: integer; begin R2:= count; R2:=R2⑴; count:=R2; end; coend; end;</span>
    假定某个时候的计数值count=n,这时候有1个人要进入,正好有1个同时要出去,因而进程PIN和POUT同时都要履行,如果进程PIN和POUT都没有被打断,那末各自完成了count+1和count⑴操作,count还是n,但是若果被打断了PIN操作,看下图



这样履行过后,结果会变成n+1,这就是与时间有关的毛病的实例。

    解决办法:采取PV操作,引进PV操作会引进1个叫临界区的名词,临界区是指并发进程中与同享变量有关的程序段。相干临界区是指并发进程中设计到相同变量的那些临界区。PV操作的原理是保证1个进程在临界区履行时,不让另外一个进程进入相干临界区履行,即个进程对同享变量的访问是互斥的,这就不会造成与时间有关的毛病。对上面表格的1个例子来讲,当进程PIN被打断后,POU不能访问同享变量count,直到PIN进程结束后才让POUT访问,这样最后的结果就正确了。

   3、小结

    解决并发进程之间的毛病关键就是解决同享变量的访问方式,当多个进程都想访问同享变量时,我们1定要管理好各个进程的使用规律,不然的话程序就会出错。采取PV操作,让相干进程互斥的进入各自的临界区履行,这样就解决了并发进程间与时间有关的毛病。好了,并发进程访问同享变量时,还会产生死锁,要想看死锁的构成缘由及解决办法,请关注我的下1篇博客!

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐