操作系统:PV操作习题分析

PV操作习题

有三个并发进程,R负责从输入设备读入信息并传送给M,M将信息加工后并传送给P,P把加工后的信息打印输出。现有:
(1)一个缓冲区;
(2)两个缓冲区;
用PV操作写出这三个进程能正确工作的程序。

当只有一个缓冲区的时候
缓冲区是这样的一个过程:

在这里插入图片描述

Semaphore S1=1,S2=0,S3=0;
cobegin

void R(){
    while(1){
        [输入设备读入信息]
        P(S1);
        [把信息放入缓冲区中]
        V(S2);
    }
}
void M(){
    while(1){
        P(S2);
        [从缓冲区中取出信息读入]
        [加工数据信息并放入缓冲区]
        V(S3);
    }
}
void P(){
    while(1){
        P(S3);
        [从缓冲区中读出数据]
        V(S1);
        [打印刚刚读出的数据]
    }
}

当有两个缓冲区的时候

它将缓冲区这么使用:

在这里插入图片描述

Semaphore S1=1,S2=0,S3=1,S4=0;
//S1 表示R是否可以放资源到第一个缓冲区
//S2 表示M是否可以到第一个缓冲区取资源
//S3 表示M是否可以放资源到第二个缓冲区,一开始是可以放资源的,所以这里要设置成1
//S4 表示P是否可以从第二个缓冲区取资源

cobegin;
void P(){
    while(1){
        [read information form machine]
        P(S1);
        [input source in frist buffer]
        V(S2);
    }
}
void R(){
    while(1){
        P(S2);
        P(S3);
        [get source from frist buffer]
        [input source in secound buffer]
        V(S4);
        V(S1); //此时R又可以读数据放到第一个缓冲区了
    }
}
void P(){
    while(1){
        P(S4);
        [get information from secound buffer]
        V(S3);//此时第二个缓冲区又可以写资源进去了
    }
}
posted @ 2021-06-26 17:28  Zeker62  阅读(693)  评论(0编辑  收藏  举报