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

Posted Zeker62

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作系统: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);//此时第二个缓冲区又可以写资源进去了
    }
}

以上是关于操作系统:PV操作习题分析的主要内容,如果未能解决你的问题,请参考以下文章

PV操作与前趋图题型

S5PV210-uboot源码分析-uboot的硬件驱动部分

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

pv操作与信号量

软考-前驱图PV操作

pv习题收集ing_23333