OS ---PV大题
1. 生产者消费者问题——进程间关系为“生产资源-消费资源”
动作:
P1车间生产A,送到货架F1上
P2车间生产B,送到货架F2上
C车间取A、B,组装成产品
Semaphore mutex1=1; //互斥访问货架F1
Semaphore mutex2=1; //互斥访问货架F2
Semaphore empty1=10;//货架F1上有几个空位
Semaphore full1=0;//货架F1上有几个A零件
Semaphore empty2=10;//货架F2上有几个空位
Semaphore full2=0;//货架F2上有几个B零件
P1(){while(1){生产A;P(empty1);P(mutex1);把A放上货架F1;V(mutex1);V(full1);}} P2(){while(1){生产B;P(empty2);P(mutex2);把B放上货架F2;V(mutex2);V(full2);}
}C(){while(1){P(full1);P(mutex1);取A;V(mutex1);V(empty1);P(full2);P(mutex2);取B;V(mutex2);V(empty2);组装A、B成产品; }
}
动作:
生产者:放产品到缓冲区
消费者:从缓冲区取产品条件:取10件产品
Semaphore empty=1000; //1000个空位
Semaphore mutex1=1; //互斥访问缓冲区
Semaphore mutex2=1; //一个消费者进程在一个周期对缓冲区的访问
Semaphore full=0;//缓冲区中有几个产品
pro(){while(1){生产产品;P(empty);P(mutex1);放产品到缓冲区;V(mutex1); V(full);}
}
cust(){while(1){P(mutex2);for(int i = 0; i < 10; i ++){P(full);P(mutex1);从缓冲区取产品;V(mutex1);V(empty);消费产品; }V(mutex2);}
}
figure:
小和尚、老和尚、水缸、水桶、井
move:
小和尚拿桶入井取水,提水入缸
老和尚拿桶入缸取水 Semaphore mutex1=1;//互斥访问井
Semaphore mutex2=2;//互斥访问水缸
Semaphore empty1=3;//水桶个数
Semaphore empty2=10;//水缸容量
Semaphore full=0;//水缸中有几桶水
small(){while(1){P(empty2);P(empty1);拿桶;P(mutex1);入井取水;V(mutex1);P(mutex2);提水入缸;V(mutex2);V(full);V(empty1);}
}old(){while(1){P(full);P(empty1);拿桶;P(mutex2);入缸取水;V(mutex2);V(empty2);喝水; V(empty1);}
}
2. 理发师问题——进程间关系为“服务-被服务”
figure: 理发师、顾客、理发椅子、顾客椅子
move:
顾客:-若理发师忙- 有空位,等待 - 没空位,那我走 -不忙,叫醒理发师,理发
理发师:-没人来,睡觉-有人来,理发int wait=0; //等待理发顾客数
semaphore mutex=1;//互斥访问wait
semaphore cust=0;//实现"理发师等待顾客"的同步关系
semaphore tony=0;//实现"顾客等待理发师"的同步关系 Tony(){while(1){P(cust);P(mutex);wait--;V(mutex);V(tony);给顾客理发;}
}Cust(){P(mutex);if(wait<n){wait++;V(mutex);V(cust);P(tony);理发; }else V(mutex);
}
cobegin{process 顾客i{P(mutex1);if(wait < 10){wait++;V(mutex1);P(mutex2);从取号机获取一个号码;V(mutex2);等待叫号;V(cust);P(seller); 获取服务; }else V(mutex1);} process 营业员{while(true){P(cust);P(mutex1);wait--;V(mutex1);叫号;V(seller);为客户服务; }}
}coend
figure:
销售人员,顾客顾客取号,等待叫号
销售人员,叫号int i = 0;//顾客取到哪个号
int j = 0;//销售员叫到哪个号
semaphore mutex_i=1;//互斥访问i
semaphore mutex_j=1;//互斥访问j
seller(){while(1){P(mutex_j);if(j < i){叫号j;j++;V(mutex_j);销售面包; }else{V(mutex_j);}}
} cust(){进店; P(mutex_i);取号i;i++; V(mutex_i);等待叫号i并购买面包;
}
3.读者写者问题——同类进程不互斥、异类进程互斥
--------------------------------------------------------------
semaphore bridge=1;
NtoS(){P(bridge);过桥; V(bridge);
}
StoN(){P(bridge);过桥; V(bridge);
}
--------------------------------------------------------------
int countNS=0;
int countSN=0;
semaphore mutexNS=1;
semaphore mutexSN=1;
semaphore bridge=1;
NtoS(){P(mutexNS);if(countNS==0)P(bridge);countNS++;V(mutexNS);过桥;P(mutexNS);countNS--;if(countNS==0)V(bridge);V(mutexNS);
}StoN(){P(mutexSN);if(countSN==0)P(bridge);countSN++;V(mutexSN);过桥;P(mutexSN);countSN--;if(countSN==0)V(bridge);V(mutexSN);
}
4. 哲学家进餐问题——只有一类进程,每个进程需要同时拥有多种资源才能运行
int wan=m;
int a[n];
for(int i = 0; i < n; i ++){a[i] = 1;
}
semaphore mutex=1;
CoBegin
while(1){P(mutex);if(wan <= 0) V(mutex),continue;if(a[i]!=1||a[(i+1)%n]!=1) V(mutex),continue;wan--;a[i]=0,a[(i+1)%n]=0;V(mutex);
}
CoEnd
5. 单纯的同步问题——前驱后继图
semaphore AC=1;
semaphore BC=1;
semaphore CE=1;
semaphore DE=1;
CoBegin
A(){完成动作A;V(AC);
}
B(){完成动作B; V(BC);
}
C(){P(AC);P(BC);完成动作C; V(CE);
}
D(){完成动作D; V(DE);
}
E(){P(CE);P(DE);完成动作E;
}
CoEnd
OS ---PV大题相关推荐
- 操作系统PV大题_小和尚老和尚喝水问题
题目描述 某寺庙有小和尚和老和尚若干人,水缸一只,由小和尚提水放入缸中给老和尚引用.水缸可容纳12桶水,水取自同一口水井,水井井口直径窄,每次仅能容纳一只水桶取水,水桶总数为4个.每次小和尚只能往水缸 ...
- PV操作考研大题笔记
PV操作大题 2019真题题解 PV操作大题 PV操作知识结构 哲学家进餐问题 问题描述: 解法1:限制最多可以访问资源的人数 解法1优化 解法2:互斥访问资源(上锁) 解法二优化 PV操作知识结构 ...
- 2013浙大878操作系统大题答案解析
需要2013年浙大878考研真题的朋友,请点击http://benworld.iteye.com/blog/2161062 整理了2013年浙大878考研的操作系统大题答案, 一.试分析大页面和小页面 ...
- python银行家算法例题详解_攒人品之作-能考408大题的知识点整理(有两个知识点的补充)...
本帖最后由 wudi971 于 2014-1-5 17:47 编辑 ::98::明年出题那么综合,我对不起大家...::116:: 经过陈123同学的提醒,补充两个知识点: 组成原理的微指令的设计以及 ...
- 分式的二阶导数怎么求_高考数学导数大题如何抢分? 名师手把手教你! 高一高二也要看...
题型一:讨论含有参数函数的单调性 下面四道题都与lnx.e^x有关,与e^x结合的函数出现的更多一些. ①2018全国Ⅰ卷导数题,与lnx相关,解题时首先考虑定义域,而且求导通分后,分子为二次函数,讨 ...
- c++ 判断数学表达式有效性_高考数学大题如何quot;保分quot;?学霸教你六大绝招!...
高中里有句话,得数学者得高考,此言不虚,清北学生难见数学不足140的,反之,数学140多分的除非特别偏科,大学一般不会差.那么我们怎么"得数学"呢? 针对目前高三的学生:如果你的数 ...
- 元素周期表超清pdf_重磅分享||化学II卷5个大题汇编PDF
"文武之道HX"是湖北黄冈黄老师个人公众号,旨在传播个人教学资料和资源,公众号坚持分享个人汇编.组编和自编的精品资料,号内所有资源均可下载,但时间有限定,希望您第一时间下载!您若觉 ...
- 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议
今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...
- 椭圆极点极线性质_又见阿氏圆——适合作椭圆大题的小题
如下图:过椭圆内一点作的直线交椭圆于,两点.是椭圆上相异的两点,满足分别平分,,求外接圆半径的最小值. 解:作的外角角平分线与的延长线交于,的外角平分线与的延长线交于,根据内外角平分线定理(调和点列. ...
最新文章
- NodeJs 的几种文件路径
- python数字排序分组代码_python pandas 组内排序、单组排序、标号的实例
- 计算机中的进制和编码
- Tomcat集群快速入门:Nginx+Tomcat搭建集群
- php cli和fastcgi,php的几种运行模式CLI、CGI、FastCGI、mod_php
- 几种php 删除数组元素方法
- 小黄鸡 php,PHP调用小黄鸡 api post发送
- Docker学习之守护进程
- 系统级程序设计结课实验-第一部分
- Windows XP操作系统自带工具应用详解(转)
- PS去掉图片上反光的操作流程
- 信息安全密码学实验二:序列密码的设计与实现
- ssh时提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”
- python中append函数解析_对python中的pop函数和append函数详解
- 剪枝中的train from scratch的解释
- zabbix模板关联群组
- Docker - volume、-v 区别
- 3维空间中点、线、面之间的数学关系(python代码)
- Python读取CSV文件:UnicodeDecodeError: 'gbk' codec can't decode byte 0xba ....illegal multibyte sequence
- 基础向:「财务对账」的秘密都在这篇 3000 字的文章里