当前位置:网站首页 > 编程语言 > 正文

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

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(R) 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) 理发 } }

到此这篇 操作系统例题(操作系统经典例题)的文章就介绍到这了,更多相关内容请继续浏览下面的相关 推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • hpl是什么文件(.hpp是什么文件)2025-04-25 17:36:06
  • 学籍认证码怎么弄(学籍认证码在哪儿看)2025-04-25 17:36:06
  • yolov3作者(yolov3作者退出)2025-04-25 17:36:06
  • linux就该这样学(Linux就该这样学 第2版 配套PPT)2025-04-25 17:36:06
  • jmj是哪个明星(jm是哪位明星)2025-04-25 17:36:06
  • py文件怎么打包成exe(py文件如何打包成exe文件)2025-04-25 17:36:06
  • 医院启动绿色代码(医院启动蓝色代码是什么意思)2025-04-25 17:36:06
  • 广度优先搜索是什么(广度优先搜索是什么搜索)2025-04-25 17:36:06
  • 重绘重排区别(重绘和重排是什么,如何避免)2025-04-25 17:36:06
  • 拆包机器(拆包机器人国内外背景)2025-04-25 17:36:06
  • 全屏图片