- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(操作系统进程部分的习题
进程部分的习题
1. 在公共汽车上,司机进程和售票员进程各司其职。司机在正常行车中售票员售票,两者之间没有制约关系,可以任意并发。但是在其他环节,司机和售票员进程之间存在着如下同步关系:
1)司机停车后等待售票员关门后才能启动车辆。
2) 售票员售完票后,等待司机到站停车,停车后才能打开车门。
var door,stop:semaphore:=0,0;
begin
parbegin
司机进程:
begin
while(true){
wait(door); //等待售票员发送关门信息
启动车辆;
正常行车;
到站停车;
signal(stop); //给售票员发送到站信息
}
end;
售票员进程:
begin
while(true){
关车门;
signal(door); //给司机发送关门信息
售票;
wait(stop); //等待司机发送到站信息
开车门;
上下乘客;
}
end;
parend;
end.
2.某寺庙,有小和尚,老和尚若干。有一水缸,由小和尚提水入缸供老和尚饮用。水缸可容10桶水,水取自同一井中。水井径窄,每次中能容下一个桶取水。水桶总数为3个。每人一次取缸水仅为1桶,且不可同时进行。试用记录型信号量给出有关取水、入水的算法描述。
根据题意,定义信号量及其初值如下:
(1)水桶为临界资源需互斥使用, 定义信号量bucket,因有3个桶,故初值为3;
(2)水井一次只能允许下一个桶取水,定义互斥信号量well,初值为1;
(3)水缸一次只能允许一个人取水,定义互斥信号量jar,初始值为1;
(4)empty和full用于小和尚和老和尚之间的同步制约关系。因为缸能存10桶水,所以empty初始值为10;开始时缸中没有水,full的初始值为0。
semaphore bucket=3,jar=1,full=0,empty=10,well=1;
young_monk(){ /*小和尚入水算法*/
while(1){
wait(empty);
wait (bucket);
wait (well);
从水井中打水;
signal(well);
wait (jar);
倒入水缸;
signal (jar);
signal (bucket);
signal (full);
}
}
old_monk(){ /*老和尚取水算法*/
while(1){
wait(full);
wait (bucket);
wait (jar);
从缸中取水;
signal (jar);
signal (bucket);
signal (empty);
从桶中倒入饮用;
}
}
3.设有3个进程A、B、C,其中A与B构成一对生产者与消费者(A为生产者,B为消费者),共享一个由n个缓冲区组成的缓冲池;B与C也构成一对生产者与消费者(此时B为生产者,C为消费者),共享另一个由m个缓冲区组成的缓冲池。用信号量机制协调它们的同步问题。
Semaphore full1 = 0, full2 = 0, empty1 = n, empty2 = m, mutex1 = 1, mutex2 = 1;
int in1 = 0, out1 = 0, in2 = 0, out2 = 0;
Buffer buffer1[n], buffer2[m];
A( ){
while(true){
to produce an item;
wait(empty1);
wait(mutex1);
把产品放入buffer1[in1];
in1 = (in1+1) mod n;
signal(mutex1);
signal(full1);
}
}
B( ){
while(true){
wait(full1);
wait(mutex1);
从buffer1[out1]获得产品;
out1 = (out1+1) mod
您可能关注的文档
最近下载
- 汉语作为第二语言教学的教材课件.ppt VIP
- 2024年会计专业求职计划书.pptx
- 泵站安全培训课件.pptx VIP
- 公共艺术(基础模块)美术中职全套完整教学课件.pptx
- 特种设备生产单位落实质量安全主体责任监督管理规定学习解读教育课件.pptx VIP
- 01685《动漫艺术概论》历年考试真题试题库资料(含答案).pdf VIP
- 中国特色高水平高职学校和专业建设计划申报书——浙江工贸职业技术学院.pdf VIP
- 火力发电机组检修项目管理.pdf VIP
- 福州铜盘中学国防教育与音乐教育相结合的实践-国防教育论文-军事论文.docx VIP
- 学堂在线 中国建筑史——元明清与民居 章节测试答案.docx VIP
文档评论(0)