- 1、本文档共74页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[操作系统]2.3
1
《操作系统》
2.3 进程互斥与同步
2
一、进程间制约关系
二、互斥
三、同步
四、信号量机制
返回
2018年4月30日星期一
北京交通大学海滨学院
3
由于进程并发执行,共享系统资源,各进程不能以任意的速度向前推进,而是互相受到制约。
一、进程间的制约关系
1、制约产生的原因
1)资源共享:
一个进程必须等另一个进程释放临界资源才能继续运行。
2)进程合作:
一个进程必须等另一个进程送来数据(消息), 才能继续运行。
2018年4月30日星期一
北京交通大学海滨学院
4
1)间接制约:各进程申请使用同一临界资源产生竞争引起。OS设计中用“互斥”技术解决竞争问题。
2)直接制约:各进程合作完成同一项任务,共享对方的私有资源引起,要协调各进程向前推进的速度。 OS设计中用“同步”技术解决各进程向前推进速度问题。
2、制约种类
2018年4月30日星期一
北京交通大学海滨学院
5
二、 互斥(解决间接制约问题)
由于各进程要求共享临界资源,而资源需要互斥使用,因此各进程间竞争使用这些资源。进程的这种关系为进程的互斥。
临界资源:
互斥:
系统中某些共享资源一次只允许一个进程使用,这样的资源称:临界资源或互斥资源或共享变量。
2018年4月30日星期一
北京交通大学海滨学院
6
(1)结果为4所希望的
2018年4月30日星期一
北京交通大学海滨学院
7
(2)结果为3所不希望的
发生了与时间有关的错误
1、与时间有关的错误:
并发执行结果不唯一(结果不可再现)或永远等待。
2、产生错误的原因:
A、B交替使用了共享变量count。如果每次只允许一个进程去使用count(资源),就不会出现错误。
3、临界资源:一次只允许一个进程使用的资源。
2018年4月30日星期一
北京交通大学海滨学院
8
进程中涉及到临界资源的代码。
CS
CS
CS是若干涉及到临界资源程序段的集合,这些程序段分散在不同的进程中,对某个共享的数据结构(共享资源)进行操作。
3、临界区(CS):
4、为避免与时间有关的错误:
临界资源要互斥使用,
临界区要互斥访问。
临界资源种类:一些物理设备、变量、数据、表格、队列等。
临界资源(Critical Resouce)
生产者-消费者(producer-consumer)问题是一个著名的进程同步问题。它描述的是:有一群生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有n个缓冲区的缓冲池,生产者进程将它所生产的产品放入一个缓冲区中; 消费者进程可从一个缓冲区中取走产品去消费。
我们可利用一个数组来表示上述的具有n个(0,1,…,n-1)缓冲区的缓冲池。用输入指针in来指示下一个可投放产品的缓冲区,每当生产者进程生产并投放一个产品后,输入指针加1;用一个输出指针out来指示下一个可从中获取产品的缓冲区,每当消费者进程取走一个产品后,输出指针加1。
由于这里的缓冲池是组织成循环缓冲的,故应把输入指针加1表示成 in∶=(in+1)mod n;输出指针加1表示成out∶=(out+1) mod n。当(in+1) mod n=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;
指针in和out初始化为1。在生产者和消费者进程的描述中,no-op是一条空操作指令,while condition do no-op语句表示重复的测试条件(condication),重复测试应进行到该条件变为false(假),即到该条件不成立时为止。在生产者进程中使用一局部变量nextp,用于暂时存放每次刚生产出来的产品;而在消费者进程中,则使用一个局部变量nextc,用于存放每次要消费的产品。
producer: repeat
…
produce an item in nextp;
…
while counter=n do no-op;
buffer[in]∶ =nextp;
in∶ =in+1 mod n;
counter∶ =counter+1;
文档评论(0)