欢迎来到天天文库
浏览记录
ID:50321082
大小:606.00 KB
页数:92页
时间:2020-03-08
《操作系统 教学课件 作者 宗大华 宗涛 第六章.ppt》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第6章进程间的制约关系在多道程序设计环境下,一方面,系统中有若干个作业同时执行,每一个作业又可能需要多个进程协同工作;另一方面,这些进程使用系统中的各种资源,而资源个数往往少于进程数,从而导致对系统资源的竞争。于是,系统中的所有进程,相互之间必定存在着这样那样的关系。这些关系势必影响到进程执行的速度快慢,影响到进程执行的顺利与否,甚至会影响到进程执行结果的正确性。由于进程间的制约关系,程序执行的结果失去了“再现性”:在相同条件下,这一次的执行结果,可能与下一次的执行结果不同(见第2章对图2-2的解释),这就是所谓的
2、“与时间有关的错误”。退出进程之间存在着哪些制约关系,它们是如何产生的,怎样处理这些关系,才能确保进程执行的正确性,这些是本章要解决的主要问题。本章将引入操作系统中的重要概念:信号量以及在信号量上的P、V操作。利用信号量以及在信号量上的P、V操作,可以很好地解决进程间的互斥与同步关系,保证进程程序的正确执行。本章着重讲述四个方面的内容。(1)进程间的两种制约关系——互斥与同步。(2)正确处理互斥与同步的方法——信号量以及在信号量上的P、V操作。(3)死锁以及解决死锁的途径。(4)进程间的高级通信。6.1进程间的制约
3、关系6.2信号量与P、V操作6.3死锁、高级进程通信6.1进程间的制约关系6.1.1与时间有关的错误在第2章中,是通过图2-2所给出的例子,来说明在多道程序设计环境下,程序执行时“结果的再现性”被打破了。这就是说,在相同的前提条件下,两次执行的结果有可能不相同。这是因为在多道程序设计环境下,进程程序的执行具有并发性。进程的“并发”,使得一个进程何时占有处理机、占有处理机时间的长短、执行速度的快慢以及外界对进程何时产生作用等都带有随机性,使得一个进程对另一个进程的影响无法预测。在操作系统里,把这种由于时间因素的影响而
4、产生的错误,称为“与时间有关的错误”。下面,再来看几个这方面的例子。在讲虚拟设备时曾涉及到输出井等概念。现在假定是这样进行管理的:为输出井设置一张“输出井文件目录表”,它由若干个目录项组成,每个目录项记录一个要打印输出的文件名以及该文件在磁盘的存放地址。为了管理该目录表,系统安排两个指针:out和in。“缓输出程序”根据out的指点进行打印,out总是指向下一个被打印的文件;井管理写程序根据in的指点存放要求输出的文件目录信息,in总是指向下一个可用的目录项位置,如图6-1所示。如果现在进程A要求打印自己名为“ga
5、mes”的文件。为此调用“井管理写”程序。在做了一些准备工作后,它读出in中当前的内容为7。若恰在此时,系统分配给进程A的时间片到时,调度进程B运行。假定现在进程B要求打印输出自己的文件“mail”,于是也去调用“井管理写”程序。在做了一些准备工作后,它读取in中的内容。此时,in中的值没有改变,同样得到的值为7。于是把它的文件“mail”存入输出井文件目录表中的第7个表目,并且把in更新为8,然后继续做其他的操作。调度程序再次调度进程A运行,从断点往下执行。由于它已读过in中的内容是7,就把文件“games”存入
6、输出井文件目录表中的第7个表目,把原来里面进程B的文件名删去,并且把in更新为9(因为进程B已经把in改为8了),然后继续做其他的操作。这样一来,进程B要输出的文件信息荡然无存,它永远也得不到任何打印输出。另外,输出井文件目录表的表目8被跳过去了,它的里面没有记录下任何要输出的文件信息。再来看一个例子。编写一个复制n个记录的程序,它把文件F中的每一个记录依次先读到输入缓冲区R,再从R拷贝到输出缓冲区T,最后写到文件G中。假定R和T的大小正好存放一个记录,如图6-2所示。可以编写三个子程序来完成这一工作。GET:负
7、责从文件F中按照顺序读出一个记录,然后送入输入缓冲区R。COPY:负责把输入缓冲区R中的记录拷贝到输出缓冲区T中。PUT:负责从输出缓冲区T中读出一个记录,然后依照顺序写入文件G。用Gi、Ci、Pi分别表示读出、拷贝、写入第i个记录的操作。如果这3个程序的工作顺序是:G1→C1→P1→G2→C2→P2→…→Gi→Ci→Pi→…→Gn→Cn→Pn也就是先由GET从F读第1个记录到R,接着由COPY把它拷贝到T,再由PUT取出并写到G的第1个记录。接着,GET从F读第2个记录到R,接着由COPY把它拷贝到T,再由P
8、UT取出并写到G的第2个记录。如此循环,直到GET从F读第n个记录到R,接着由COPY把它拷贝到T,再由PUT取出并写到G的第n个记录为止。这样的执行序列,绝对保证拷贝的正确性。但是工作速度慢,效率低下。其实不难看出,在复制过程中,如果COPY已经把R中的记录拷贝到了T中,那么GET和PUT就可以并发执行了。即GET从F中读出下一个记录送到R中的操作,与PU
此文档下载收益归作者所有