6.假设缓冲区buf1和缓冲区buf2无限大,进程p1向buf1写数据,进程p2向buf2写数据,要求buf1数据个数和buf2数据个数的差保持在(m,n)之间(m<n,m,n都是正数).
分析:题中没有给出两个进程执行顺序之间的制约关系,只给出了一个数量上的制约关系,即m<=|buf1数据个数-buf2数据个数|<=n.不需要考虑缓冲区的大小,只需要考虑两个进程的同步和互斥.p2向buf2写数据比p1向buf1写数据的次数最少不超过m次,最多不能超过n次,反之也成立.所以是一个生产者和消费者问题。
将等式展开得:(1)m<=(buf1数据个数-buf2数据个数)<=n; (2)m<=(buf2数据个数-buf1数据个数)<=n;由于m,n都是正数,等式只有一个成立,不妨设(1)成立.在进程p1和p2都没有运行时,两个缓冲区数据个数之差为0,因此,p1必须先运行,向buf1至少写m+1个数据后再唤醒p2运行.信号量s1表示p1一次写入的最大量,初值为n,s2表示p2一次写入的最大量,初值为-m.
begin 
var mutex1=1,mutex2=1,s1=n,s2=-m:semaphore;
cobegin
process p1
begin
repeat
get data;
p(s1);
p(mutex1);
写数据到buf1;
v(mutex1);
v(s2);
end
process p2
begin
repeat;
get data;
p(s2);
p(mutex2);
写数据到buf2;
v(mutex2);
v(s1);
end
coend
end
注:p1和p2每次执行时需要进行一些额外的操作.对于p2来说,它首先必须在自己的缓冲区buf2中写入至少m个数据,此后p1和p2的同步可简单通过两个信号量来控制.题目的一个变形是要求:-m<=(buf2数据个数-buf1数据个数)<=n;那么信号量的初值就变成m和n,若只有p1向buf1放入数据而p2不放入数据到buf2中,则p1最多可放m次.因此,设置信号量s1,初值为m,此外,每当p2放入一个数据到buf2中时,则使信号量s1增1,即p1增加一次放入数据到buf1的机会.反之,若只有p2向buf2放入数据而p1不放入数据到buf1中,则p2最多可放次.因此,设置信号量s2,初值为n,此外,每当p1放入一个数据到buf1中时,则使信号量s2增1,即p2增加一次放入数据到buf1的机会.
begin 
var mutex1=1,mutex2=1,s1=m,s2=n:semaphore;
cobegin
process p1
begin
repeat
get data;
p(s1);
p(mutex1);
写数据到buf1;
v(mutex1);
v(s2);//p1每放入一个数据到buf1同时使s2增加1
end
process p2
begin
repeat;
get data;
p(s2);
p(mutex2);
写数据到buf2;
v(mutex2);
v(s1);//p2每放入一个数据到buf2同时使s1增加1
end
coend
end
7,两人公用一个账号,每次限存或取10元;
begin 
var mutex=1:semaphore;
amount =0:integer;
cobegin
process save
m1: integer;
begin
repeat
p(mutex);
m1= amount ;
m1 = m1 +10;
amout = m1;
v(mutex);
end
process take
m2: integer;
begin
repeat;
p(mutex);
m2= amount ;
m2 = m2 -10;
amout = m2;
v(mutex);
end
coend
end
8,有个盘子,可以容纳两个水果,每次只能放入或取出一个水果,爸爸专向盘子中放苹果,妈妈专向盘子中放橘子,两个儿子专等吃橘子,两个女儿专等吃苹果.
分析:盘子是临界资源,而爸爸和妈妈可以同时向其中放水果,因此要设置一个互斥信号量mutex.盘子最多容纳两个水果,因此,要对放入盘子的水果进行计数,就是要设置一个信号量empty,初值为2.由于盘子可以放两个水果,即当盘子里有一个水果时,存在即可以放也可以取的情况,因此,除了对放水果进行互斥外,对取水果也要互斥.此外,爸爸和女儿,妈妈和儿子之间存在同步关系,要设置信号量apple和orange实现同步,初值都是0.
begin 
var mutex=1,empty =2,apple = 0,orange = 0:semaphore;
cobegin
process father
begin
repeat
p(empty );
p(mutex);
放入苹果;
v(mutex);
v(apple);
end
process mother
begin
repeat
p(empty );
p(mutex);
放入橘子;
v(mutex);
v(orange);
end
process son-i(i=1,2)
begin
repeat
p(orange);
p(mutex);
取橘子;
v(mutex);
v(empty);
end
process daughter-i(i=1,2)
begin
repeat
p(apple);
p(mutex);
取苹果;
v(mutex);
v(empty);
end
coend
end
注:要注意盘子的容量,当盘子的容量大于1时,不仅要考虑同步,还要考虑互斥.变形后:一个盘子,可以放一个水果,爸爸放苹果,妈妈放香蕉,一个儿子专等吃香蕉,一个女儿专等吃苹果.
begin 
var mutex=1,apple = 0,banana= 0:semaphore;
cobegin
process father
begin
repeat
p(mutex);
放入苹果;
v(apple);
end
process mother
begin
repeat
p(mutex);
放入香蕉;
v(banana);
end
process son
begin
repeat
p(banana);
取香蕉;
v(mutex);
end
process daughter
begin
repeat
p(apple);
取苹果;
v(mutex);
end
coend
end
9.银行有n个柜员,每个顾客进入银行后先取一个号,并且等着叫号,当一个柜员空闲后,就叫下一个号.
分析:将顾客号码排成一个队列,顾客进入银行领取号码后,将号码由队尾插入;柜员空闲时,从队首取得顾客号码,并且为这个顾客服务,由于队列为若干进程共享,所以需要互斥.柜员空闲时,若有顾客,就叫下一个顾客为之服务.因此,需要设置一个信号量来记录等待服务的顾客数.
begin 
var mutex=1,customer_count=0:semaphore;
cobegin
process customer
begin
repeat
取号码;
p(mutex);
进入队列;
v(mutex);
v(customer_count);
end
process serversi(i=1n)
begin
repeat
p(customer_count);
p(mutex);
从队列中取下一个号码;
v(mutex);
为该号码持有者服务;
end
coend
end
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/08/27/487833.html,如需转载请自行联系原作者

操作系统复习笔记(三)相关推荐

  1. 单处理机系统的进程调度动态优先_操作系统复习笔记(王道)C2.1

    进程与线程 一.进程特征和概念 前提:允许多个程序并发执行. 1.概念 PCB(process control block)进程控制块,系统利用 PCB 来描述进程的基本情况和运行状 态,进而控制和管 ...

  2. 现代操作系统学习笔记三、死锁

    死锁   操作系统相关的内容可以分为内存管理.进程和线程.死锁三个部分.本篇文章记录死锁部分. 内存管理 进程和线程   在计算机系统中,有很多独占性资源,在任一时刻,它们都只能被一个进程使用,如打印 ...

  3. [个人笔记]操作系统复习笔记

    一 绪论 OS的作用 用户与硬件之间的接口 管理计算机资源 抽象计算机资源 OS的发展 单道批处理系统 用户程序交给监控程序,由监控程序控制作业一个接一个交给IO处理 CPU等待IO.内存浪费.资源浪 ...

  4. 30天自制操作系统读书笔记(三)

    来吧.第三天. 制作真正的IPL: 作者又是那样,一上来就甩一堆代码,用他的话猜测,下面这段代码应该是用来装载下一个512字节的内容的. MOV AX,0x0820MOV ES,AXMOV CH,0 ...

  5. 信息系统管理工程师考前复习笔记三

    101.内部控制和访问控制的共同目标是保护资产 102.实现访问控制的三种方法:要求用户输入一此保密信息:采用物理识别设备:采用生物统计学系统 . 103.访问控制的特性:多个密码:一次性密码:基于时 ...

  6. 操作系统复习笔记(四)

    10.司机和售票员之间要协同工作:一方面只有售票员把车门关好了司机才能开车,因此售票员关好车门应通知司机开车;另一方面只有当汽车已经停下时,售票员才能开门让乘客上下客,司机停车后应该通知售票员,假定某 ...

  7. 操作系统复习笔记 05 Thread 线程

    进程的两个基本属性 1.拥有资源的独立单位 2.可独立调度和分派的基本单位 进程的数目不宜过多,进程切换频率不宜过高,限制了并发程度. 操作系统的设计目标是:提高并发度.减小系统开销. 引入线程的目的 ...

  8. 操作系统复习笔记 04 Process 进程

    []进程的概念 1.进程是操作系统执行的各种程序. 2.现在的操作系统多为并发执行,具有许多新的特征.引入并发执行的目的是提高资源利用率. 3.OS的基本特征是[并发与共享]. 4.顺序环境计算机系统 ...

  9. 操作系统复习笔记 02-03 OS Structure 操作系统结构

    02-03操作系统结构(OS_Structure) []陈述: 1.IO设备与CPU可并行运行. 2.每一个设备控制器负责一个设备类型. 3.每一个设备控制器有一个局部缓存. 4.CPU通过局部缓存与 ...

  10. 操作系统复习笔记(二)

    1.问答题:有一个文件F,有A,B两组进程共享这个文件,同组的进程可以同时读文件F,但当有A组(或B组)的进程在读文件F时就不允许B组(或A组)的进程读, 解:定义两个计数器C1,C2,分别记录A组和 ...

最新文章

  1. Redis的数据模型
  2. 我为什么最终放弃了 Linux 桌面版的研发
  3. javaScript设计模式---(单例模式学习)
  4. 贴花纸怎么贴_木纹纸怎么贴? 贴木纹纸的方法与详细步骤
  5. java web开发问题集合
  6. 纪年法:公元和公元前
  7. vs安装 c语言编译环境,Visual Studio Code安装与C/C++开发调试环境搭建
  8. 星期四星期五,越学越难
  9. eclipse 装配server时找不到tomcat
  10. paip.php-gtk 桌面程序 helloworld总结
  11. 华为BFD的配置规范
  12. java实现康威生命游戏
  13. 学习纠错码和相关的计算代数系统
  14. 华为防火墙重启_华为USG6000系列防火墙的Console密码重置过程
  15. 一个让人不得不转的故事-《通宵达旦工资只有3200 博客网架构师艰难浪迹于北京》...
  16. 编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。
  17. ie 无法打开服务器网页,无法打开internet站点怎么办
  18. ibm 服务器 总显示f1,联想ThinkPad笔记本中F1/F4键盘指示灯一直常亮着如何解决
  19. 超详细HttpClient加载安全证书post请求访问https示例
  20. DZ先生怪谈国标28181之利用crontab为linux服务器做时间同步

热门文章

  1. 不敢相信?System.currentTimeMillis() 居然存在性能问题
  2. 仿摩拜单车APP(包括附近车辆、规划路径、行驶距离、行驶轨迹记录,导航等)...
  3. H.264技术及原理
  4. Android Multimedia框架总结(十)Stagefright框架之音视频输出过程
  5. 性能测试---性能指标【1】
  6. 解释python中的join()和split()函数_python 中join()函数strip() 函数和 split() 函数的详解及实例...
  7. mysql-conn.php_PHP连接MySQL方式
  8. php 远程函数,php 远程图片保存到本地的函数类
  9. Arts 第九周(5/13 ~ 5/19)
  10. mysql 原理 ~ 并行复制