第6章进程间的制约关系 本章讲述内容: 6.1进程间的制约关系; 6.2信号量与P、V操作: 6.3死锁、高级进程通信
第6章 进程间的制约关系 6.1 6.2 6.3 本章讲述内容: 进程间的制约关系 ; 信号量与P、V操作 ; 死锁、高级进程通信
6. 1进程间的制约关系 ● 6.1.1与时间有关的错误 1.与时间有关的错误 进程的并发,使一个进程何时占有处理机、占有多长时间、执行速度的快慢、以及 外界对进程产生作用等都带有随机性。因此,一个进程对其他进程的影响无法预测。在 操作系统里,把这种由于时间因素的影响而产生的错误,称为“与时间有关的错误”。 输入井文件目录表 2.例:对输入井文件目录的管理 为输出井设置一张“输出井文件目录表”,它由若干目 out 录项组成。每个目录项记录一个要打印输出的文件名以及该 44 test.c 文件在磁盘的存放地址。 5 group.p ·为管理该目录表,系统安排两个 井管理写”程序 指针:out和in。“缓输出程序”根据out 6 robit.txt 的指点进行打印,out总是指向下一个被 7 读的当前内容 打印的文件;井管理写程序根据n的指 根据指点,存入打印文件名 点存放要求输出的文件目录信息,in总 n的值加1 是指向下一个可用的目录项位置
为输出井设置一张 “输出井文件目录表”,它由若干目 录项组成。每个目录项记录一个要打印输出的文件名以及该 文件在磁盘的存放地址。 6.1 进程间的制约关系 • 6.1.1与时间有关的错误 1. 与时间有关的错误 进程的并发,使一个进程何时占有处理机、占有多长时间、执行速度的快慢、以及 外界对进程产生作用等都带有随机性。因此,一个进程对其他进程的影响无法预测。在 操作系统里,把这种由于时间因素的影响而产生的错误,称为“与时间有关的错误”。 2. 例:对输入井文件目录的管理 读in的当前内容 ; 根据指点,存入打印文件名 ; in的值加1 ; test . c group . p robit . txt 4 5 6 7 4 out 7 in 输入井文件目录表 “井管理写” 程序 . 为管理该目录表,系统安排两个 指针:out和in。“缓输出程序”根据out 的指点进行打印,out总是指向下一个被 打印的文件;井管理写程序根据in的指 点存放要求输出的文件目录信息,in总 是指向下一个可用的目录项位置。
.若现在进程A要求打印名为“games'的文件。为此调用“井管理写”程序。在做 了准备工作后,读出i中当前的内容为7。恰在此时,系统分配给进程A的时间片到,调 度进程B运行。假定现在进程B要求打印文件“mail”,于是也去调用“井管理写”程序。 在做了准备工作后,它读取中的内容。此时,n中的值没改变,得到的仍为7。于是把 它的文件“mai存入输出井文件目录表中的第7个表目,并把in改为8,然后做其他的操 作。.再次调度进程A运行,从断点往下做。由于它已做读in的操作,就把文件“games” 存入输出井文件目录表中的第7个表目,把原来里面进程B的文件名删去,并且把i更新 为9(因为进程B已把in改为8了),然后做其他的操作。 。这样一来,进程B要输出的文件信息全无,永远也得不到任何打印输出。另外, 输出井文件目录表的表目8被跳过去了,它里面没有记录下任何要输出 输入井文件目录表 的文件信息。从而产生了“与时间有关的错误”。 3.例:通过双缓冲区复制文件 out ·编写复制个记录的程序,它把文件F中的记录依次读到输入缓钟感 ,再头拷贝 到输出缓冲区工,最后写到文件G中。假定R和T督率放序个记录。写下面上伞子程宇 作为进程来完成整个工作: 6 robit.txt (④)GET:从文件F按照顺序读出一个记录,然后送入输入缓,7 (②COPY:把输入缓冲区R里的记录转霞理 (③)PUT:从输出缓冲区T里读出一个记然后依照顺序写入文件G
. 再次调度进程A运行,从断点往下做。由于它已做读in的操作,就把文件“games” 存入输出井文件目录表中的第7个表目,把原来里面进程B的文件名删去,并且把in更新 为9(因为进程B已把in改为8了),然后做其他的操作。 若现在进程A要求打印名为“games”的文件。为此调用“井管理写”程序。在做 了准备工作后,读出in中当前的内容为7。恰在此时,系统分配给进程A的时间片到,调 度进程B运行。假定现在进程B要求打印文件“mail”,于是也去调用“井管理写”程序。 在做了准备工作后,它读取in中的内容。此时,in中的值没改变,得到的仍为7。于是把 它的文件“mail”存入输出井文件目录表中的第7个表目,并把in改为8,然后做其他的操 作。. 这样一来,进程B要输出的文件信息全无,永远也得不到任何打印输出。另外, 输出井文件目录表的表目8被跳过去了,它里面没有记录下任何要输出 的文件信息。从而产生了“与时间有关的错误”。 . 3. 例:通过双缓冲区复制文件 . 编写复制n个记录的程序,它把文件F中的记录依次读到输入缓冲区R,再从R拷贝 到输出缓冲区T,最后写到文件G中。假定R和T正好存放一个记录。写下面三个子程序 作为进程来完成整个工作: (1) GET:从文件F按照顺序读出一个记录,然后送入输入缓冲区R; (2) COPY:把输入缓冲区R里的记录拷贝到输出缓冲区T里; (3) PUT:从输出缓冲区T里读出一个记录,然后依照顺序写入文件G。 读in的当前内容 ; 根据指点,存入打印文件名 ; in的值加1 ; test . c group . p robit . txt 4 5 6 7 4 out 7 in 输入井文件目录表 “井管理写” 程序
,复制时,若COPY已把R里的记录 文件F 文件G 拷贝到了T中,那GET和PUT就可并发 记录1 记录 执行了。即GET从F里读下一个记录送 记录2 记录2 到R中的操作,与PUT从T中取出内容 GET COPY PUT 写入G的操作,谁先谁后都没有关系, 不会影响到复制结果的正确性。由于 输入缓冲区R 输出缓冲区T 利用并发性,工作效率就会提高。 。假定现在处于如图所示的状态, 记录 记录 文件F的第1个记录已顺利地复制到了 文件G,文件F的第2个记录也已由GET读到了输入缓冲区R中。 。若不顾及这三者间执行顺序的内在 制约关系,随意让GET、COPY、PUT 文件F 文件G 并发执行,那么就会产生“与时间有关的 记绿1 错误”。 .不管GET、COPY、PUT的执行关系, 记录3 有六种可能的执行顺序: 记录4 记录2 记录1 1)COPY→PUT→GET; 2)COPY→GET→PUT: 记录知 3)PUI→COPY→GET: 4)PUT→GET→COPY;5)GET→COPY→PUT;6)GET-→PUT→COPY
复制时,若COPY已把R里的记录 拷贝到了T中,那GET和PUT就可并发 执行了。即GET从F里读下一个记录送 到R中的操作,与PUT从T中取出内容 写入G的操作,谁先谁后都没有关系, 不会影响到复制结果的正确性。由于 利用并发性,工作效率就会提高。 记录1 记录2 记录n GET COPY PUT 文件F 记录1 记录2 记录n 文件G 输入缓冲区R 输出缓冲区T . 若不顾及这三者间执行顺序的内在 制约关系,随意让GET、COPY、PUT 并发执行,那么就会产生“与时间有关的 错误”。 . 不管GET、COPY、PUT的执行关系, 有六种可能的执行顺序: 1)COPY→PUT→GET; 2)COPY→GET→PUT; 3)PUT→COPY→GET; 4)PUT→GET→COPY;5)GET→COPY→PUT;6)GET→PUT→COPY . 假定现在处于如图所示的状态, 文件F的第1个记录已顺利地复制到了 文件G,文件F的第2个记录也已由GET读到了输入缓冲区R中。 记录3 记录4 记录n 文件F 记录2 记录1 文件G R T 记录1
.比如在前图基础上,来看第6种可能“GET→PUT→COPY”时导致的错误结果。 。这时先执行GET,把文件F中的第3个记录读入缓冲区R,致使原来R中的记录2被删 去,由记录3代替,如图(a)所示。 。然后,执行PUT,把现在还在输出缓 文件F 文件G 冲区中的记录1写入到文件G中,成为它的 记录1 第2个记录,如图(b)所示。 ,最后做COPY,把记录3从R拷贝到T 中,如图(c)所示。 记录4 GET 记录3 记录1 。由于没有遵循三个程序在执行顺序 R T 上的限制,复制过程中,丢失了第2个记 记录n 录,第1个记录在文件G里重复复制了两 (a) 次。导致了“与时间有关的错误”的发 生文件F 文件G 文件F 文件G 记录1 记录1 记录1 记录1 记录4 PUT 记绿3 记录 记录4 COPY 记录3 记录3 R 人 记录n 记录n b
GET PUT 记录1 记录1 文件G R T 记录 记录3 4 记录n 文件F 记录1 记录4 记录n 文件F 记录3 记录1 文件G R T 记录1 COPY 记录1 记录4 记录n 文件F 记录3 记录3 文件G R T 记录1 1 2 3 . 比如在前图基础上,来看第6种可能“GET→PUT→COPY”时导致的错误结果。 . 这时先执行GET,把文件F中的第3个记录读入缓冲区R,致使原来R中的记录2被删 去,由记录3代替,如图(a)所示。 (a) . 然后,执行PUT,把现在还在输出缓 冲区中的记录1写入到文件G中,成为它的 第2个记录,如图(b)所示。 . (b) (c) 最后做COPY,把记录3从R拷贝到T 中,如图(c)所示。 . 由于没有遵循三个程序在执行顺序 上的限制,复制过程中,丢失了第2个记 录,第1个记录在文件G里重复复制了两 次。导致了“与时间有关的错误”的发 生