扬州大学操作系统综合题_第1页
扬州大学操作系统综合题_第2页
扬州大学操作系统综合题_第3页
扬州大学操作系统综合题_第4页
扬州大学操作系统综合题_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1. 生产者与消费者设有一缓冲池P,P中含有20个可用缓冲区,一个输入进程将外部数据读入P,另有一个输出进程将P中数据取出并输出。若讲程每次操作均以一个缓冲区为单位,试用记录型信号量写出两个进程的同步算法,要求写出信号量的初值。解:semaphoremutex=1; semaphoreempty=20;semaphorefull=0;intin,out=0;item p 20; voidProducer()while(ture)producer an item in nextp; wait(empty); wait(mutex); pin := nextp; in := (in+1) mod

2、20; signal(mutex); signal(full); voidConsumer() while(ture) wait(full); wait(mutex); nextc := pout; out := (out+1) mod 20; signal(mutex); signal(empty); 有一群生产者进程在生产产品,此产品提供给消费者去消费。为使生产者和消费者进程能并发执行,在它们之间设置一个具有n个缓冲池,生产者进程可将它所生产的产品放入一个缓冲池中,消费者进程可从一个缓冲区取得一个产品消费。semaphore mutex=1,empty=n,full=0;item buff

3、ern; /缓冲区int in=out=0; /输入、输出指针void producer() while(1) 生产一个产品nextp;wait(empty); /等待空缓冲区的数目非0wait(mutex); /等待无进程操作缓冲区 bufferin= nextp; /往Buffer in放产品in = (in+1) mod n;signal(mutex); /允许其它进程操作缓冲区signal(full); /增加已用缓冲区的数目void consumer() while(1) wait(full); /等待已用缓冲区的数目非0wait(mutex); /等待无进程操作缓冲区nextc =

4、 bufferout; /从Buffer out取产品out = (out +1) mod n;signal(mutex); /允许其它进程操作缓冲区signal(empty); /增加空缓冲区的数目消费nextc产品;main()cobeginproducer();consumer();利用AND信号量解决生产者-消费者问题semaphore mutex=1,empty=n,full=0;item buffern; /缓冲区int in=out=0; /输入、输出指针void producer() while(1) 生产一个产品nextp;swait(empty, mutex);buffer

5、in= nextp; /往Buffer in放产品in = (in+1) mod n;ssignal(mutex, full);void consumer() while(1) swait(full, mutex);nextc = bufferout; /从Buffer out取产品out = (out +1) mod n;signal(mutex, empty);消费nextc产品;有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用wait和signal原语描述读者进程的同步问题var mutex,

6、 readcount :semaphore := 1,100;BeginParbeginProcess Reader:beginrepeatwait(readcount);wait(mutex);;signal(mutex);wait(mutex)signal(mutex);signal(readcount);until false;end;parend;End;在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操作实现司机和售票员的同步。var s1,s2:semaphore:=0,0;be

7、ginparbeginProcess Driverbeginrepeat;signal(s2);wait(s1);until false;end;Process BookingClerk;beginrepeat;wait(s2);signal(s1);until falseend;parend;end;2. 吃水果桌上有一只盘子,可以放一个水果。父亲总放苹果;母亲总放香蕉;儿子专等吃盘里的香蕉;女儿专等吃盘里的苹果。设三个信号量:dish表示是否可以放水果 apple表示是否盘中有苹果 banana表示是否盘中有香蕉Father:P(dish);放苹果;V(apple);mother:P(di

8、sh);放香蕉;V(banana);son:P(banana);eat;V(dish);daughter:P(apple);eat;V(dish);桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子;儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿3个并发进程的同步。Begin Plate:=1;apple:=0;orange:=0; Cobegin Father:begin repeat p(plate); 将水果放入盘中; if 放入的是桔子 then V(orange) else V(apple)

9、Until false End; Son: begin repeat p(orange); 从盘中取出桔子; V(plate) 吃桔子 Until false End; Daughter: begin repeat p(apple); 从盘中取出苹果; V(plate) 吃苹果 Until false End Coend End;3. 5个哲学家围绕一张圆桌而坐,进餐时需要同时拿起他左边和右边的两支筷子Philosopheri:Repeat think; P(chopsticki); P(chopstick(i+1) mod 5); eat; v(chopsticki); v(chopstic

10、k(i+1)mod 5); think;Until false3. 读者写者问题 读者: if (readcount=0) then P(wmutex); readcount=readcount+1; 读; readcount=readcount-1; if (readcount=0) then V(wmutex); ; 写者: P(S); P(wmutex); 写 V(wmutex); V(S); ;4. 设有观察者和报告者在一条单向行驶的公路上统计通过的卡车数。其中观察者负责对通过的卡车计数;报告者负责将计数值打印出来,然后将计数值清零。Begin count: integer; count:=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论