操作系统: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操作习题分析的主要内容,如果未能解决你的问题,请参考以下文章
S5PV210-uboot源码分析-uboot的硬件驱动部分
Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段