操作系统汤子英课件进程同步

上传人:宝路 文档编号:47710571 上传时间:2018-07-04 格式:PPT 页数:142 大小:1.56MB
返回 下载 相关 举报
操作系统汤子英课件进程同步_第1页
第1页 / 共142页
操作系统汤子英课件进程同步_第2页
第2页 / 共142页
操作系统汤子英课件进程同步_第3页
第3页 / 共142页
操作系统汤子英课件进程同步_第4页
第4页 / 共142页
操作系统汤子英课件进程同步_第5页
第5页 / 共142页
点击查看更多>>
资源描述

《操作系统汤子英课件进程同步》由会员分享,可在线阅读,更多相关《操作系统汤子英课件进程同步(142页珍藏版)》请在金锄头文库上搜索。

1、第二章 进 程 管 理 第三章 进程同步与通信 3.1 进程同步 3.2 经典进程的同步问题 3.3 管程机制 3.4 进程通信 第二章 进 程 管 理 回顾操作系统的特性:并发资源共享异步性(不确定性 或 随机性)虚拟性第二章 进 程 管 理 3.1 进 程 同 步 (重点)第二章 进 程 管 理 3.1. 1 进程同步的基本概念 1. 一组并发进程执行时存在两种相互制约关系: 进程互斥资源共享关系(间接相互制约关 系) 进程本身之间不存在直接联系。 进程同步相互合作关系(直接相互制约关 系)进程本身之间存在着相互制约的关系。 在多道程序系统中,进程之间存在2种不同的制约关 系: (互斥/间

2、接制约关系)、 (同步/直接制约关系)第二章 进 程 管 理 进程互斥资源共享关系(间接相互制约关系 ) 进程本身之间不存在直接联系。处于同一系统中的进程,必然是共享着某 种系统资源,如共享CPU、I/O设备。例如,在仅有一台打印机的系统中,有两 个进程A和B,如果在A进程提出打印请求时,系 统已将打印机分配给进程B,则系统让A进程等 待,直至B将打印机用完并释放后,系统才将打 印机分配给进程A。第二章 进 程 管 理 进程同步相互合作关系(直接相互制约关系 )进程本身之间存在着相互制约的关系。 例如,有一输入进程A通过单缓冲向进程B提供数 据。当该缓冲空时,计算进程B因不能获得所 需数据而等

3、待。当进程A把数据送入缓冲时,便应向进程B 发送一信号,将它唤醒;(接力棒)第二章 进 程 管 理 2. 临界资源(Critical Resouce) 临界资源:在一段时间内只允许一个进 程访问 的资源。诸进程间应采取互斥 方式,实现对资源的共享。共享变量,打印机 等均属于此类资源。第二章 进 程 管 理 进程间的关系进程间并发举例例1:一飞机订票系统,两 个终端,运行T1、T2进程T1 : T2:. .Read(x); Read(x);y1:=x; y2:=x;if y1=1 then if y2=1 theny1:=y1-1; y2:=y2-1;x:=y1; x:=y2;write(x);

4、 write(x);. .设x的当前值为:1001. 若执行顺序为:先T1; 后T2;则结果:x = 982. 若执行顺序为: T1: Read(x); T2: Read(x); T1: if y1=1 then y1:=y1-1; T2: if y2=1 then y2:=y2-1; T1: write(x); T2: write(x); 则结果 x = 99分析:产生错误的原因是不 加控制地访问共享变量x第二章 进 程 管 理 例2 司机 P1 售票员 P2REPEAT REPEAT启动 关门正常运行 售票到站停 开门UNTIL FALSE UNTIL FALSE 进程间的关系进程间并发举

5、例第二章 进 程 管 理 进程间的关系并发执行举例 例3:与进程的执行顺序有关的错误复制一个记录Cobeginget;copy;put;Coendgetcopyputfstg源记录目标记录第二章 进 程 管 理 进程间的关系并发执行举例 例3:与进程的执行顺序有关的错误f s t g 0 初始状态 3,4,.,m 2 2 (1,2) 1 g,c,p 4,5,.,m 3 3 (1,2,3) 2 g,p,c 4,5,.,m 3 3 (1,2,2) X 3 c,g,p 4,5,.,m 3 2 (1,2,2) X 4 c,p,g 4,5,.,m 3 2 (1,2,2) X 5 p,c,g 4,5,.,

6、m 3 2 (1,2,2) X 6 p,g,c 4,5,.,m 3 3 (1,2,2) X 序 初始状态 源记录的 目标记录 结果正确性 号 及执行顺序 剩余部分 的当前值 注:从1到6的各个执行,是在0(初始状态)的基础上进行的错误的原因是get, copy, put 过程 没有按照应该的顺序执行第二章 进 程 管 理 进程间的关系并发执行举例 例3:与进程的执行顺序有关的错误 正确执行顺序cmpmc1g2p1c2g3p2g1第二章 进 程 管 理 例4 生产者消费者问题(Producer-Consumer)有一个生产者进程和一个消费者进程。他们共享一 个缓冲区。生产者进程每生产一件物品就要

7、存入缓冲区,但缓 冲区每次只能存放一件物品,只有消费者取走物品, 才能放入第二件物品。缓冲区中有物品消费者进程就可以去取,每取走一 件物品后必须等生产者再放入物品后才可以去取。生产者进程与消费者进程是以异步方式进行的,但 它们之间必须保持同步;即不允许消费者进程到一个空缓冲区去取产品,也 不允许生产者进程向一个装满产品的缓冲区中投放产 品。第二章 进 程 管 理 生产者进程 Buffer:interger Processer producer BeginL1:produce a product ;Buffer:=product ;go to L1 end 消费者进程 Buffer:interg

8、er Processer consumer BeginL2:take a product;consumer;go to L2 end 第二章 进 程 管 理 生产者消费者问题(Producer-Consumer)有一群生产者进程在生产产品,并将产品提供给 消费者进程去消费,为使生产者进程和消费者进程能并发执行,在他 们之间设置了一个具有n个缓冲区的缓冲池,生产者进 程将他所生产的产品放入一个缓冲区中;消费者进程可从一个缓冲区中取走产品去消费。生产者进程与消费者进程是以异步方式进行的, 但它们之间必须保持同步;即不允许消费者进程到一个空缓冲区去取产品, 也不允许生产者进程向一个装满产品的缓冲区中

9、投放 产品。第二章 进 程 管 理 inout第二章 进 程 管 理 1、用一个数组来表示上述的具有n个缓冲区的缓 冲 池,用0,1,n-1表示。2、用输入指针in来指示下一个可投放产品的缓冲 ,每当生产者投放一个产品,输入指针加1;3、用输出指针out来指示下一个可从中获取产品 的缓冲区,每当消费者进程取走一个产品后,输 出指针加1。这里的缓冲池是组织成循环缓冲的,故应把输入指针加1表示成in:=(in+1)modn;把输出指针加1表示成out:=(out+1)modn.当(in+1)=out时表示缓冲池满;in=out时表示缓冲池空。?第二章 进 程 管 理 还引入一个整型变量counte

10、r,初值为0,生产者进程向缓冲池投放一个产品后,counter加1 ; 消费者进程从中取走一个产品时,使counter减1;生产者和消费者共享下面的变量:var n:integer;type item=;var buffer:array0,1,n-1 of item;in,out:0,1,n-1;counter:0,1,n-1; 第二章 进 程 管 理 producer: repeatproduce an item in nextp;while counter=n do no_op;bufferin=nextp;in:=(in+1)modn;counter=counter+1;until fa

11、lse;consumer: repeatwhile counter=0 do no_op;nextc:=bufferout;out:=(out+1)modn;counter=counter-1;consume the item in nextc;until false;表示目前 缓冲区产 品已放满刚生产出 来的产品第二章 进 程 管 理 虽然上面的生产者程序和消费者程序,在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发执行时,就会出现差错,问题就在于这两个进程共享变量counter。生产者对它做加1操作,消费者对它做减1操作,这两个操作在用机器语言实现时, 常可用下面的形

12、式描述:register1 =counter; register2=counter;register1=register1+1; register2=register2-1; counter =register1; counter=register2; 假设:counter的当前值是5。无论是先执行生产者的语句还是先执行消费者的语句,counter都为5第二章 进 程 管 理 但是,如果按下述顺序执行:register1 = counter; (register1 = 5)register1 = register1 + 1; (register1 = 6)register2 = counter

13、; (register2 = 5)register2 = register2 - 1; (register2 = 4)counter = register1; (counter = 6)counter = register2; (counter = 4) 最后counter 的值为4,并且结果不可预见.解决问题的关键是,把counter作为临界资源来处理,即令生 产者和消费者进程互斥访问变量counter.执行过程相当于 生产一点拿一点, 而不是消费完整 的产品第二章 进 程 管 理 3.1、临界区的定义与进入 临界区:把在每个进程中访问临界资源的那段代码 称为临界区(critical section)。 进入区:在临界区前面增加一段用于进行临界资源检查 的代码,称为进入区 。3. 临界区(critical section) 退出区:将临界区正被访问的标志恢复为未被访问的标 志。 剩余区:其余部分。第二章 进 程 管 理 repeatEntry sectionCritical section;Remainder sectionUntil false;exit section进入区,P、V操作临界区退出区,P、V操作剩余区P:wait(S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号