《操作系统》——解决并发进程中与时间有关的异常

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

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

    那么进程的并发执行为什么会产生错误那?归根到底是并发进程访问共享变量的事,当多个进程访问共享变量的过程中,就有可能会产生与时间有关的错误,或者是死锁。

    一、导图分析

《操作系统》——解决并发进程中与时间有关的异常

   二、导图分析

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

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

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

   3、与时间有关的错误:多个进程共同执行时,交替的访问了共享变量,但是有一个进程由于自身原因或者外界原因被中断了后,稍后又接着执行,最后导致运行结果出错。

   例如:

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

<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-1;
     count:=R2;
end;
coend;
end;</span>
    假定某个时候的计数值count=n,这时有一个人要进入,正好有一个同时要出去,于是进程PIN和POUT同时都要执行,如果进程PIN和POUT都没有被打断,那么各自完成了count+1和count-1操作,count还是n,但是若果被打断了PIN操作,看下图

《操作系统》——解决并发进程中与时间有关的异常


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

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

   三、小结

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

11楼u013047584昨天 21:48
与时间有关的,考试的时候最后一个题用两个信号量就会出这个错误。
10楼u012308971昨天 20:48
总结地很认真!
Re: u013067402昨天 21:18
回复u012308971n谢谢。。
9楼u013086062昨天 20:47
考试结束了,学习还没有结束。以后还会用到的
Re: u013067402昨天 20:47
回复u013086062n是这么回事。。
8楼u013036688昨天 20:47
死锁什么的是吗~
Re: u013067402昨天 20:45
回复u013036688n是
7楼u013045552昨天 20:47
操作系统被总结的很好。
Re: u013067402昨天 20:45
回复u013045552n谢谢。
6楼u012704843昨天 20:44
很不多的积累。。学习。额
Re: u013067402昨天 20:46
回复u012704843n好的
5楼u013028876昨天 20:23
期待你的下一篇博客
4楼u013033838昨天 19:45
考试结束了,学习还没有结束。
Re: u013067402昨天 20:01
回复u013033838n没有结束。
3楼u013036278昨天 14:18
学完操作系统知道了这个东东是什么了
Re: u013067402昨天 18:41
回复u013036278n恩 慢慢来
2楼u013046597昨天 11:02
考后总结,现在还在继续,好样的
Re: u013067402昨天 11:09
回复u013046597n谢谢。
1楼u013036685昨天 10:46
考试结束了,学习依旧。
Re: u013067402昨天 10:48
回复u013036685n好的。。