进程同步与通信1

进程同步与通信1

ID:38317644

大小:404.81 KB

页数:36页

时间:2019-06-09

进程同步与通信1_第1页
进程同步与通信1_第2页
进程同步与通信1_第3页
进程同步与通信1_第4页
进程同步与通信1_第5页
资源描述:

《进程同步与通信1》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第4章进程的同步与通信进程的同步(synchronism)问题,是操作系统的关键问题之一,这个问题解决不好,就有可能导致同一程序运行结果不确定这种不能容忍的错误,关系到操作系统的成败,因此必须认真解决。通信(communication),指的是处于同一系统的进程之间的信息交换,它也是操作息统必不可少的功能之一。这两个内容有一定的联系,因为从某种意义上讲,同步也是进程间的一种通信,故这两个内容放在同一章讲述。4.1.互斥与同步的基本概念互斥与同步是同一问题的两个侧面,同步,最基本的含义是相互协调,步伐一致,从

2、这个意义上讲,互斥也是一种同步。互斥(mutualexclusion):所谓互斥指的是多个进程之间相互排斥地使用临界资源(CR:CriticalResource)这样一种相互制约关系。而临界资源,就是一次只允许一个进程使用的资源,也就是说,在一个进程未使用完之前,另一个进程不得开始使用。输入机、打印机、磁带机等,是“硬”临界资源的例子;而多个进程共用的数据、表格、队列等则是“软”临界资源的例子。这些资源为什么要互斥使用呢?因为不互斥使用就会出现错误。譬如说打印机,如果不互斥使用,则有可能将两个或多个进程的结

3、果打在同一张纸上,如何区分呢!再看书上P55-56经典的关于软临介资源也必须互斥使用的例子。临界区和同类临介区在上面的举例中,涉及到临界区(CS:CriticalSection)和同类临界区的概念。临界区是使用临界资源的程序段,而同类临界区是涉及到同一个临界资源的若干个程序段。同类临界区,作为程序不一定是相同的,作为进程程序的一部分也不一定属于同一进程。有了同类临界区的概念后,在实践上互斥使用临界资源的方法是:多个进程之间互斥地进入各自的同类临界区。同步(Synchronism)如上所说,一般意义上的同步,

4、指的是相互协调、步伐一致的关系。这里所说的进程之间的同步,包含有两层意思,一是指有协作关系的若干个进程要协调它们之间的相对速度,二是指有数据相关的若干个进程要正确地确定它们之间的执行顺序。对第一种同步,看书上P56的举例。CP缓冲区进程之间相互协调的举例4.2解互斥问题的算法解互斥问题的算法,就是进程之间互斥地进入的同类临界区的算法。正确的解互斥问题的算法要符合以下五条准则:(1)空闲让进;(2)忙则等待;(3)有限等待;(4)让权等待;(5)驻留有限。在这五条里面,最重要的是两条,就是”空闲让进”和”互斥

5、进入”,其它的准则可以由其它机制来实现。算法表示的约定首先,用如下所示的方式表示两(多)进程的并发执行:voidmain(){公共变量说明;cobeginp0();p1();coend}}接上屏其次,用如下的方式表示一个进程进入和退出自己的临介区:voidp(inti){while(true){entrycodecriticalsection;exitcodenon-criticalsection;}}错误的和正确的算法下面给出四个解互斥问题的算法,其中前三个是有这样那样缺陷的,是不完全正确的,第四个是正确

6、的算法。通过这些算法,可以使我们了解人们探索正确算法的过程,也可以在比较中知道错误的为什么错误,正确的为什么正确,以加深对这些算法的理解。不失一般性,这些算法只考虑两个进程(Pi,Pj)的情况,它们很容易推广到多个进程的环境下。算法1voidp(inti){while(true){while(turn!=i){};criticalsection;turn=j;non-criticalsection;}}该算法的问题是:空闲不让进。例如,当turn=i时,Pi不想进,这时临介区是空闲的,但Pj不能进。问题就在

7、于,turn值的修改是在进入临介区之后进行。算法2voidp(inti){while(true){while(flag[j]){};flag[i]=true;criticalsection;flag[i]=false;non-criticalsection;}}该算法的问题是:有可能两个进程同时进入临介区,从而违背了互斥进入的原则。算法3voidp(inti){while(true){flag[i]=true;while(flag[j]){};criticalsection;flag[i]=false;no

8、n-criticalsection;}}该算法的问题是:有可能出现两个都不能进且相互等待的死锁局面。算法4的描述voidp(inti){while(true){flag[i]=true;turn=1;while(flag[j]&&(turn==j));criticalsection;flag[i]=false;non-criticalsection;}}要证明该算法的正确性,只要证明两点:空闲让进,互斥进入。4.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。