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大题相关推荐

  1. 操作系统PV大题_小和尚老和尚喝水问题

    题目描述 某寺庙有小和尚和老和尚若干人,水缸一只,由小和尚提水放入缸中给老和尚引用.水缸可容纳12桶水,水取自同一口水井,水井井口直径窄,每次仅能容纳一只水桶取水,水桶总数为4个.每次小和尚只能往水缸 ...

  2. PV操作考研大题笔记

    PV操作大题 2019真题题解 PV操作大题 PV操作知识结构 哲学家进餐问题 问题描述: 解法1:限制最多可以访问资源的人数 解法1优化 解法2:互斥访问资源(上锁) 解法二优化 PV操作知识结构 ...

  3. 2013浙大878操作系统大题答案解析

    需要2013年浙大878考研真题的朋友,请点击http://benworld.iteye.com/blog/2161062 整理了2013年浙大878考研的操作系统大题答案, 一.试分析大页面和小页面 ...

  4. python银行家算法例题详解_攒人品之作-能考408大题的知识点整理(有两个知识点的补充)...

    本帖最后由 wudi971 于 2014-1-5 17:47 编辑 ::98::明年出题那么综合,我对不起大家...::116:: 经过陈123同学的提醒,补充两个知识点: 组成原理的微指令的设计以及 ...

  5. 分式的二阶导数怎么求_高考数学导数大题如何抢分? 名师手把手教你! 高一高二也要看...

    题型一:讨论含有参数函数的单调性 下面四道题都与lnx.e^x有关,与e^x结合的函数出现的更多一些. ①2018全国Ⅰ卷导数题,与lnx相关,解题时首先考虑定义域,而且求导通分后,分子为二次函数,讨 ...

  6. c++ 判断数学表达式有效性_高考数学大题如何quot;保分quot;?学霸教你六大绝招!...

    高中里有句话,得数学者得高考,此言不虚,清北学生难见数学不足140的,反之,数学140多分的除非特别偏科,大学一般不会差.那么我们怎么"得数学"呢? 针对目前高三的学生:如果你的数 ...

  7. 元素周期表超清pdf_重磅分享||化学II卷5个大题汇编PDF

    "文武之道HX"是湖北黄冈黄老师个人公众号,旨在传播个人教学资料和资源,公众号坚持分享个人汇编.组编和自编的精品资料,号内所有资源均可下载,但时间有限定,希望您第一时间下载!您若觉 ...

  8. 分式求二阶导数_近10年高考数学“导数大题”分析,附2021备考建议

    今天小马给大家整理了近10年高考数学"导数大题"分析,以及2021高考备考建议 相关推荐(点击跳转)???▶语文干货 | 高中必修1-5古代文化常识大汇总!▶高中数学 | 知识点结 ...

  9. 椭圆极点极线性质_又见阿氏圆——适合作椭圆大题的小题

    如下图:过椭圆内一点作的直线交椭圆于,两点.是椭圆上相异的两点,满足分别平分,,求外接圆半径的最小值. 解:作的外角角平分线与的延长线交于,的外角平分线与的延长线交于,根据内外角平分线定理(调和点列. ...

最新文章

  1. NodeJs 的几种文件路径
  2. python数字排序分组代码_python pandas 组内排序、单组排序、标号的实例
  3. 计算机中的进制和编码
  4. Tomcat集群快速入门:Nginx+Tomcat搭建集群
  5. php cli和fastcgi,php的几种运行模式CLI、CGI、FastCGI、mod_php
  6. 几种php 删除数组元素方法
  7. 小黄鸡 php,PHP调用小黄鸡 api post发送
  8. Docker学习之守护进程
  9. 系统级程序设计结课实验-第一部分
  10. Windows XP操作系统自带工具应用详解(转)
  11. PS去掉图片上反光的操作流程
  12. 信息安全密码学实验二:序列密码的设计与实现
  13. ssh时提示“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED”
  14. python中append函数解析_对python中的pop函数和append函数详解
  15. 剪枝中的train from scratch的解释
  16. zabbix模板关联群组
  17. Docker - volume、-v 区别
  18. 3维空间中点、线、面之间的数学关系(python代码)
  19. Python读取CSV文件:UnicodeDecodeError: 'gbk' codec can't decode byte 0xba ....illegal multibyte sequence
  20. 基础向:「财务对账」的秘密都在这篇 3000 字的文章里

热门文章

  1. GO 依赖管理工具go Modules
  2. MySQL 添加用户并授予只能查询权限
  3. AWS的SQS队列教程
  4. python输入成绩并且计算平均分
  5. HBuilder-简易banner制作
  6. k8s监控 heapster部署
  7. 到底什么是云原生?CNCF又是个什么鬼?
  8. 不满足现在,渴望突破自我,增加知识体系,改变观念,破茧重生!
  9. matlab遗传算法函数实例,matlab遗传算法工具箱函数及实例讲解
  10. 22.Atomicity and Transactions-官方文档摘录