- 1、本文档共142页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统汤子英课件第三章进程同步
第三章 进程同步与通信 ;回顾操作系统的特性:
并发
资源共享
异步性(不确定性 或 随机性)
虚拟性;3.1 进 程 同 步 (重点);3.1. 1 进程同步的基本概念 ;进程互斥—资源共享关系(间接相互制约关系)
进程本身之间不存在直接联系。
处于同一系统中的进程,必然是共享着某种系统资源,如共享CPU、I/O设备。
例如,在仅有一台打印机的系统中,有两个进程A和B,如果在A进程提出打印请求时,系统已将打印机分配给进程B,则系统让A进程等待,直至B将打印机用完并释放后,系统才将打印机分配给进程A。;进程同步—相互合作关系(直接相互制约关系)
进程本身之间存在着相互制约的关系。
例如,有一输入进程A通过单缓冲向进程B提供数据。当该缓冲空时,计算进程B因不能获得所需数据而等待。
当进程A把数据送入缓冲时,便应向进程B发送一信号,将它唤醒;
(接力棒)
;2. 临界资源(Critical Resouce) ;进程间的关系——进程间并发举例;例2 ;进程间的关系——并发执行举例
例3:与进程的执行顺序有关的错误;进程间的关系——并发执行举例
例3:与进程的执行顺序有关的错误;进程间的关系——并发执行举例
例3:与进程的执行顺序有关的错误
正确执行顺序; 例4 生产者—消费者问题(Producer-Consumer)
有一个生产者进程和一个消费者进程。他们共享一个缓冲区。
生产者进程每生产一件物品就要存入缓冲区,但缓冲区每次只能存放一件物品,只有消费者取走物品,才能放入第二件物品。
缓冲区中有物品消费者进程就可以去取,每取走一件物品后必须等生产者再放入物品后才可以去取。
生产者进程与消费者进程是以异步方式进行的,但它们之间必须保持同步;
即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个装满产品的缓冲区中投放产品。;生产者进程
Buffer:interger
Processer producer
Begin
L1:produce a product;
Buffer:=product;
go to L1
end ; 生产者—消费者问题(Producer-Consumer)
有一群生产者进程在生产产品,并将产品提供给消费者进程去消费,
为使生产者进程和消费者进程能并发执行,在他们之间设置了一个具有n个缓冲区的缓冲池,生产者进程将他所生产的产品放入一个缓冲区中;
消费者进程可从一个缓冲区中取走产品去消费。
生产者进程与消费者进程是以异步方式进行的,但它们之间必须保持同步;
即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个装满产品的缓冲区中投放产品。;in; 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时表示缓冲池空。; 还引入一个整型变量counter,初值为0,
生产者进程向缓冲池投放一个产品后,counter加1;
消费者进程从中取走一个产品时,使counter减1;
生产者和消费者共享下面的变量:
var n:integer;
type item=…;
var buffer:array[0,1,…,n-1] of item;
in,out:0,1,…,n-1;
counter:0,1,…,n-1; ;producer: repeat
…
produce an item in nextp;
…
while counter=n do no_op;
buffer[in]=nextp;
in:=(in+1)modn;
counter=counter+1;
until false;; 虽然上面的生产者程序和消费者程序,在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发执行时
文档评论(0)