操作系统综合题之“采用记录型信号量机制实现进程INPUT、PROCESS和OUTPUT的同步算法(代码补充)”
1.问题:系统中有有三个进程INPUT、PROCESS和OUTPUT,共用两个缓冲区BUF1和BUF2。假期设BUF1中最多可放10个数据,现已放入了2个数据;BUF2最多可放5个数据。INPUT进程负责不断将输入的原始数据推送入BUF1,PROCESS进程负责从BUF1中取出原始数据进行处理,并将处理后的结果数据送入到BUF2中,OUTPUT进程负责从BUF2中读取结果数据并输出。请采用记录型信号量机制,实现进程INPUT、PROCESS和OUTPUT的同步算法。补充完成下列带标号处空缺的内容。(注:空缺处可能有多行代码)
struct semaphore empty1,full1,empty2,full2;// 对应BUF1、BUF2空、满的信号量
____(1)______
void process INPUT()
{
____(2)______
}
void process PROCESS()
{
____(3)______
}
void process OUTPUT()
{
____(4)______
}
2.参考答案
答:
(1)full1.value = 2; empty1.value = 8;full2.value = 0; empty2.value = 5
(2)
while(TRUE){
wait(empty1);
将原始数据送入数据BUF1;
signal(full1);
}
(3)
while(TRUE){
wait(full1);
将BUF1中取出的原始数据进行处理;
signal(empty1);
wait(empty2);
将处理后的结果数据送到BUF2中;
signal(full2);
}
(4)
while(1){
wait(full2);
从BUF2中读取结果数据并输出;
signal(empty2);
}
* 博客文章部分截图及内容来自于学习的书本及相应培训课程,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。
* 备注:王子威
* 我的网易邮箱:wzw_1314_520@163.com