操作系统例题(操作系统经典例题)

操作系统例题(操作系统经典例题)1 推广例子中的消息缓冲问题 消息缓冲区为 k 个 有 1 个发送进程 n 个接收进程 每个接收进程对发送来的消息都必须取一次 若有 m 个发送进程呢 Send SB k 信号量 标记当前空余缓冲区资源 i 0 标记存放消息的缓冲区位置 while true P SB 往 Buffer i 放消息 V SM i i 1 k

大家好,我是讯享网,很高兴认识大家。

1. 推广例子中的消息缓冲问题。 消息缓冲区为k个,有1个发送进程, n个接收进程,每个接收进程对发送来的消息都必须取一次 若有m个发送进程呢? Send: SB=k; //信号量,标记当前空余缓冲区资源。 i = 0; //标记存放消息的缓冲区位置 while (true) { P(SB); 往Buffer [i]放消息; V(SM); i = (i+1) % k; }; Receive: j = 0; //标记取产品的缓存区位置 SM=0;//信号量,标记初始没有消息 ReadCount=0;//读进程计数器 Mutex =1; //读进程互斥信号量 SW=0; //信号量,读进程在此信号量等待 while (true) {

P(SM); 从Buffer[j]取消息; ReadCount++ If(ReadCountn){ V(SM); 

讯享网

P(SW) }else{ V(SB); j = (j+1) % k; for(int g=1; g ReadCount;g++)

讯享网V(SW); 

ReadCount=0; }

}; 

2.第二类读者写者问题: 写者优先 条件: 1)多个读者可以同时进行读 2)写者必须互斥(只允许一个写者写,也不能读者写者???时进行) 3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者) rc=0, //正在读者计数器 wc, //写计数器 rw, //读等计数器 R //等待读信号量 W //等待写信号量 读者:

讯享网 while (true) { P(mutex); if (wc 0){ rw++ P (R); } rc++; If(rw0wc=0){ 

V® rw–

 } V(mutex); 读 P(mutex); rc --; if (rc==0){ If(wc0) V(w) 

}


讯享网

讯享网 V(mutex); }; 

写者:

 while (true) { P(mutex); wc ++; if((wc 1)||(rc0)){ P(W) 

}

讯享网 V(mutex); 

 P(mutex); Wc --; if(wc0) V(W); Else if(rw0) V(R) 

rw–

讯享网 V(mutex); }; 

3.理发师睡觉问题 理发店里有一位理发师,一把理发椅和N把供等候理发的顾客坐的椅子 如果没有顾客,则理发师便在理发椅上睡觉。当一个顾客到来时,他必须先唤醒理发师

如果顾客到来时理发师正在理发,则如果有空椅子,可坐下来等;否则离开 

Wait =0; 表示等待顾客资源; Barber=1;表示可以理发 custNum 关键资源,表示当前顾客数量 顾客进程:

讯享网Coming//顾客来到 P(mutex) 

If(custNum0){

 If(custNum=N){ V(mutex) P(wait); 

}else{ V(mutex)

讯享网离开; 

} }else{

V(mutex) V(Barber); 理发; 离开; P(mutex) custNum--; 

V(mutex)

讯享网V(wait) 

} 理发师进程:

While{ P(mutex) If(custNum ==0){ V(mutex) P (Barber) }else{ V(mutex) 理发 

}

讯享网 } 
小讯
上一篇 2025-06-03 23:11
下一篇 2025-04-29 14:02

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198001.html