操作系统第二章——进程与线程(圆满)

欲渡黄河冰塞川,将登太行雪满山

文章目录

  • 2.3.7 生产者消费者问题
    • 能否改变相邻的PV操作的顺序
    • 知识回顾
  • 2.3.8 多生产者多消费者问题
    • 问题描述
    • 关系分析
    • 各个进程之间的PV操作
    • 设置信号量
    • 若是不设置互斥信号量
    • 缓冲区大于一
    • 知识回顾
  • 2.3.9 吸烟者问题
    • 知识回顾
    • 2.3.10读者写者问题
    • 实现
    • 实现2
    • 实现3
    • 知识回顾
  • 2.3.11哲学家进餐问题
    • 解决方式
    • 方案三
    • 知识回顾
  • 2.3.12 管程
    • 知识总览
    • 为什么引入管程?
    • 管程的定义和基本特征
    • 管程解决生产者消费者问题
    • Java中类似管程的机制
    • 知识回顾
  • 2.4.1 死锁的概念
    • 知识总览
    • 什么是死锁
    • 饥饿,死循环的区别
    • 死锁产生的必要条件
    • 什么时候会发生死锁
    • 死锁的处理策略
    • 知识回顾
  • 2.4.2预防死锁
    • 破坏互斥条件
    • 破坏不剥夺条件
    • 破坏请求和保持条件
    • 破坏循环等待条件
    • 知识回顾
  • 2.4.3 避免死锁(银行家算法)
    • 知识总览
    • 什么是安全序列
    • 银行家算法
    • 安全状态
    • 不安全状态
    • 知识回顾
  • 2.4.4死锁的检测和解除
    • 死锁的检测
    • 死锁的解除
    • 知识回顾


2.3.7 生产者消费者问题

操作系统第二章——进程与线程(圆满)_第1张图片

PV操作题目分析步骤:
1.关系分析。找出题目中描述的各个进程,分析它们之间的同步、互斥关系。
2.整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
3.设置信号量。并根据题目条件确定信号量初值.(互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
操作系统第二章——进程与线程(圆满)_第2张图片

能否改变相邻的PV操作的顺序

操作系统第二章——进程与线程(圆满)_第3张图片
这里没有将使用产品放入到PV之间是因为放入之后,原则上是可以的,但是对临界资源锁的时间也会变长,对系统的效率造成影响

知识回顾

操作系统第二章——进程与线程(圆满)_第4张图片

2.3.8 多生产者多消费者问题

前V后P:同步关系中,前面时间发生之后发生V操作,后面事件发生之前发生P操作

问题描述

操作系统第二章——进程与线程(圆满)_第5张图片

关系分析

操作系统第二章——进程与线程(圆满)_第6张图片

各个进程之间的PV操作

互斥关系很简单:就是在访问临界资源之后分别对临界变量实行一个P操作 一个V操作,
同步关系:前面事件发生之后我们实行一个V操作,后面事件发生之前执行一个P操作

设置信号量

对于实现互斥关系来说,我们当然需要设置一个初值为1的互斥信号量
对于同步关系我们需要根据具体的情况设置同步变量的值,这里由于刚开始的时候盘中是没苹果的,所以设置apple 设置为0,同样的srange也设置为0 ,刚开始的时候盘子本来就是空的所以设置为1
操作系统第二章——进程与线程(圆满)_第7张图片

若是不设置互斥信号量

操作系统第二章——进程与线程(圆满)_第8张图片
通过分析我们发现即使不设置专门的互斥变量mutex,也不会出现多个进程同时访问盘中的现象,原因在于,本题中的缓冲区大小为1,在任何时刻,apple,orange,plate 三个同步信号量最多只有一个是1 ,因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利的进入临界区

缓冲区大于一

操作系统第二章——进程与线程(圆满)_第9张图片
这个盘子并不是是一个人一个盘子,有可能两个进程申请的是一个盘子,所以有可能会数据覆盖,

知识回顾

操作系统第二章——进程与线程(圆满)_第10张图片

操作系统第二章——进程与线程(圆满)_第11张图片

2.3.9 吸烟者问题

操作系统第二章——进程与线程(圆满)_第12张图片
操作系统第二章——进程与线程(圆满)_第13张图片

知识回顾

操作系统第二章——进程与线程(圆满)_第14张图片

2.3.10读者写者问题

操作系统第二章——进程与线程(圆满)_第15张图片

实现

操作系统第二章——进程与线程(圆满)_第16张图片

实现2

这里说一下为什么要加mutex。
比如:当count=0时,第一个读者进程执行到p(rw),rw=0,假设此时时间片到了,切换到第二个读者进程,第二个进程发现count=0,则执行p(rw),但是此时rw=0,于是第二个进程被堵在p(rw)这里,同理,后面的可能会有多个进程堵在p(rw),只有当第一个进程再次获得时间片,执行count++,让count不为0,然后其他进程就可以直接绕过if直接进行count++来访问文件,但是第三个读者进程和后面的几个可能堵在p(rw)的多个读者进程则必须得等count–为0后才可以再次和写进程竞争来访问文件,对count的访问没有做到一气呵成,会导致本来一些进程一直堵在p(rw)。
操作系统第二章——进程与线程(圆满)_第17张图片

实现3

在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有 一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程“饿死”的情况。
若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和 reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序
操作系统第二章——进程与线程(圆满)_第18张图片
加了之后依然是可以实现多个读进程并行的,若是此时有读进程申请w释放w之后,此时count不为零,下一个读不会p(rw),所以依然进入读文件,若是此时是读过写,最后一个读文件未完成的时候rw未释放所以是不支持写的,但是写进程也申请了P(w),所以下一个读进程需要等这个写进程释放才能继续读

知识回顾

操作系统第二章——进程与线程(圆满)_第19张图片

2.3.11哲学家进餐问题

操作系统第二章——进程与线程(圆满)_第20张图片

解决方式

操作系统第二章——进程与线程(圆满)_第21张图片

方案三

增加一个互斥信号量,使得只有左右筷子都存在的时候才会取,并且取筷子操作一气呵成,若是先进行第一个哲学家,然后进行4号哲学家,则依然可能会拿到一个筷子

知识回顾

操作系统第二章——进程与线程(圆满)_第22张图片

2.3.12 管程

知识总览

操作系统第二章——进程与线程(圆满)_第23张图片

为什么引入管程?

操作系统第二章——进程与线程(圆满)_第24张图片

管程的定义和基本特征

操作系统第二章——进程与线程(圆满)_第25张图片

管程解决生产者消费者问题

操作系统第二章——进程与线程(圆满)_第26张图片
操作系统第二章——进程与线程(圆满)_第27张图片

Java中类似管程的机制

操作系统第二章——进程与线程(圆满)_第28张图片

知识回顾

操作系统第二章——进程与线程(圆满)_第29张图片

2.4.1 死锁的概念

知识总览

操作系统第二章——进程与线程(圆满)_第30张图片

什么是死锁

操作系统第二章——进程与线程(圆满)_第31张图片
操作系统第二章——进程与线程(圆满)_第32张图片

饥饿,死循环的区别

操作系统第二章——进程与线程(圆满)_第33张图片

死锁产生的必要条件

操作系统第二章——进程与线程(圆满)_第34张图片

什么时候会发生死锁

操作系统第二章——进程与线程(圆满)_第35张图片

死锁的处理策略

操作系统第二章——进程与线程(圆满)_第36张图片

知识回顾

操作系统第二章——进程与线程(圆满)_第37张图片

2.4.2预防死锁

操作系统第二章——进程与线程(圆满)_第38张图片

破坏互斥条件

操作系统第二章——进程与线程(圆满)_第39张图片

破坏不剥夺条件

操作系统第二章——进程与线程(圆满)_第40张图片

破坏请求和保持条件

操作系统第二章——进程与线程(圆满)_第41张图片

破坏循环等待条件

操作系统第二章——进程与线程(圆满)_第42张图片
(那如果说P3进程需要使用到1不是就要一直堵塞了?)

知识回顾

操作系统第二章——进程与线程(圆满)_第43张图片

2.4.3 避免死锁(银行家算法)

知识总览

操作系统第二章——进程与线程(圆满)_第44张图片

什么是安全序列

操作系统第二章——进程与线程(圆满)_第45张图片

银行家算法

操作系统第二章——进程与线程(圆满)_第46张图片

安全状态

操作系统第二章——进程与线程(圆满)_第47张图片
操作系统第二章——进程与线程(圆满)_第48张图片

不安全状态

操作系统第二章——进程与线程(圆满)_第49张图片
操作系统第二章——进程与线程(圆满)_第50张图片

知识回顾

操作系统第二章——进程与线程(圆满)_第51张图片

2.4.4死锁的检测和解除

操作系统第二章——进程与线程(圆满)_第52张图片

死锁的检测

操作系统第二章——进程与线程(圆满)_第53张图片
操作系统第二章——进程与线程(圆满)_第54张图片
操作系统第二章——进程与线程(圆满)_第55张图片

死锁的解除

操作系统第二章——进程与线程(圆满)_第56张图片

知识回顾

操作系统第二章——进程与线程(圆满)_第57张图片

你可能感兴趣的:(操作系统,操作系统,408,考研)