- 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:修改书上读者优先的程序为读写公平;例2:用PV操作解决读者和写者之间的同步问题,且写者优先;int readcount, writecount;
semaphore mutex=1,wmutex=1,rwmutex=1,x=1;
void reader( )
{
while(1){
p(x)
p(rmutex)
++readcount;
if(readcount==1) p(rwmutex);
v(rmutex);
v(x);
read data;
p(rmutex);
- - readcount;
If(readcount==0) v(rwmutex);
v(rmutex);
}
}
;int readcount, writecount;
semaphore mutex=1,wmutex=1,rwmutex=1,x=1;
void writer( )
{
while(1){
p(wmutex)
++writecount;
if(writecount==1) p(x);
v(wmutex);
p(rwmutex);
write data;
v(rwmutex);
p(wmutex);
- - writecount;
If(writecount==0) v(x);
v(wmutex);
}
}
;例3:改进书上的哲学家进餐算法,通过限制同时进餐的人数来防止死锁;semaphore fork[5];
semaphore count=4;
for(int i=0;i5;i++)
fork[i]=1;
cobegin
process phiosopher_i() //i=0,1,2,3,4
{ while(true){
think();
P(count);
P(fork[i]);
P(fork[(i+1)%5]);
eat();
V(fork[i]);
V(fork[(i+1)%5]);
v(count);
} } coend;;例4:现有四个进程:R1,R2,W1和W2,它们共享可以存放一个数的缓冲区B。进程R1每次把从键盘上读入的一个数存到缓冲区B中,供进程W1打印输出;进程R2每次把从磁盘上读一个数存放到缓冲区B中,供进程W2打印输出。怎样用P、V操作协调四个并发进程的工作。;设信号量e,f1,f2;
其初值分别为 e=1,f1=0,f2=0;例5:设有3个并发执行的进程:输入进程Pi、计算进程Pc和输出进程Po。其中进程Pi不断地从键盘读入整数,放入缓冲区Buf1,Pc按输入顺序从Buf1中取数据,每次取出2个整数,计算其和,将结果放入缓冲区Buf2。Po负责将Buf2中的数据按顺序输出。设缓冲区Buf1、Buf2可存放的整数个数分别为m、n(m、n0)。要求利用信号量的P、V操作写出进程Pi、Pc、Po的算法。;; 例6:举例说明P、V操作为什么要求设计成原语(即对同一信号量上的操作必须互斥)
(1)设信号量S的初值为1,当一个P操作执行完S=S-1后,S的值为0,该P操作不应被阻塞。但若P操作不是一个原语,也就是说在一个P操作执行过程中可以由另一个P操作同时,???这时的S的值为-1。这是第一个P操作将会被阻塞。这样的P操作不符合P操作的语义。;(2)设信号量S的初值为-1,当一个V操作执行完S:=S+1后,S的值为0,该V操作应该唤醒一个被P操作阻塞得进程。但若V操作不是一个原语,也就是说在一个V操作执行的过程中可以有另一个V操作同时在执行。加入第2个V操作在第1个V操作执行判断语句IFS=0前夜执行了S :=S+1操作,则这时的S值为1。这时第1个操作将不再去唤醒被阻塞得进程。这样的V操作不符合V操作的语义。
(3)同样地,当P操作的执行过程中插入了V操作,也会出现不符合原语语义的情况。例如,在P操作执行完S:=S-1后,S的值为-1,经判断,该进程应该被阻塞。但若要在进行判断后阻塞进程前执行完另外-V操作,则该V操作并没有可以唤醒的被阻塞得进程。而当V操作执行完后继续执行P操作时,该P操作仍将阻塞该进程,这一进程将不被唤醒。对于V操作的执行过程中插入了P操作,也会出现不符合原语语义的情况。例
您可能关注的文档
最近下载
- COLMO洗衣机工程师资格认证考试题及答案.doc VIP
- 《合理用药与用药安全》课件.ppt VIP
- 配件部经理岗位职责(24篇).docx VIP
- (人教2024版)英语八年级上册Unit 4 大单元教学设计(新教材).docx
- TCECS 179-2023 健康住宅建设技术规程.pdf VIP
- 数字孪生及车间实践第二篇数字孪生研究体系.pptx VIP
- 2025年四川省绵阳市初中学业水平考试语文真题试卷含参考答案与习作例文精品.pdf VIP
- 2024版行政管理培训课件.pptx VIP
- 《公安机关互联网安全监督检查规定》培训与解读课件.pptx VIP
- 数字孪生及车间实践第一篇数字孪生的内涵及研究应用现状.pptx VIP
文档评论(0)