操作系统——第二章

操作系统——第二章

  • 2 进程管理
    • 2.1 进程与线程
      • 2.1.1 进程的定义、特征、组成、组织
      • 2.1.2 进程的状态及转换
      • 2.1.3 原语实现对进程的控制
      • 2.1.4 进程之间的通信(共享通信、消息传递、管道通信)
      • 2.1.5 线程概念与多线程模型
    • 2.2 处理机的调度
      • 2.2.1 处理机调度的概念及层次
      • 2.2.2 进程调度的时机(主动放弃与被动放弃)、切换与过程、方式
      • 2.2.3 调度算法的评价指标(cpu利用率、系统吞吐量、周转时间、等待时间、响应时间)
      • 2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
      • 2.2.5 作业/进程调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)
    • 2.3 进程的同步与互斥
      • 2.3.1 进程的同步与互斥
      • 2.3.2 实现临界区进程互斥的软件实现方法
      • 2.3.3 实现临界区进程互斥的硬件实现方法
      • 2.3.4 信号量机制(整型信号量、记录型信号量P、V)
      • 2.3.5 信号量机制实现进程的互斥、同步与前驱关系
      • 2.3.6 进程同步与互斥经典问题
      • 2.3.7 管程和java中实现管程的机制
    • 2.4 死锁
      • 2.4.1 死锁详解(预防、避免、检测、解除)

  1. 该篇文章为转载多位大佬的文章!!!!
  2. 主要目的是方便自己了解!!!!
  3. 无其他商业价值!!!!
  4. 希望跟大佬共同努力!!!!

2 进程管理

2.1 进程与线程

2.1.1 进程的定义、特征、组成、组织

1.进程的定义——fork创建进程
(1)程序的概念
操作系统——第二章_第1张图片
(2)进程的概念
操作系统——第二章_第2张图片
操作系统——第二章_第3张图片
在这里插入图片描述
操作系统——第二章_第4张图片
进程实体:
操作系统——第二章_第5张图片
操作系统——第二章_第6张图片

进程和程序的区别和联系:

区别:
1)进程是动态的;程序是静态的。
(2)进程有独立性,能并发执行;程序不能并发执行。
(3)二者无一一对应关系。
(4)进程异步运行,会相互制约;程序不具备此特征。 但是,进程与程序又有密切的联系: 进程不能脱离具体程序而虚设,
程序规定了相应进程所要完成的动作。
(5)组成不同。进程包含PCB、程序段、数据段。程序包含数据和指令代码。
(6)程序是一个包含了所有指令和数据的静态实体。本身除占用磁盘的存储空间外,并不占用系统如CPU、内存等运行资源。
(7)进程由程序段、数据段和PCB构成,会占用系统如CPU、内存等运行资源。
(8)一个程序可以启动多个进程来共同完成。

联系:
进程不能脱离具体程序而虚设, 程序规定了相应进程所要完成的动作。

(3)进程的定义
操作系统——第二章_第7张图片
2.进程的特征
操作系统——第二章_第8张图片
3.进程的组成
操作系统——第二章_第9张图片

  1. 而其中最重要的就是进程控制块PCB(Process Control Block)
  2. PCB简介:
      PCB中记录了操作系统所需的,用于描述进程的当前情况以及控制进程运行的全部信息。
      PCB的作用是使一个在多道程序环境下不能独立运行的程序(含数据),成为一个能独立运行的基本单位,一个能与其他进程并发执行的进程。
      或者说,OS是根据PCB来对并发执行的进程进行控制和管理的。
      例如,当OS要调度某进程执行时,要从该进程的PCB中查处其现行状态及优先级;在调度到某进程后,要根据其PCB中所保存的处理机状态信息,设置该进程恢复运行的现场,并根据其PCB中的程序和数据的内存始址,找到其程序和数据;
      进程在执行过程中,当需要和与之合作的进程实现同步,通信或者访问文件时,也都需要访问PCB;
      当进程由于某种原因而暂停执行时,又须将器断点的处理机环境保存在PCB中。
      可见,在进程的整个生命期中,系统总是通过PCB对进程进行控制的,即系统是根据进程的PCB而不是任何别的什么而感知到该进程的存在的。
      所以说,PCB是进程存在的唯一标志。

PCB通常包含的内容:
操作系统——第二章_第10张图片
4.进程的组织
操作系统——第二章_第11张图片
(1)链接方式
操作系统——第二章_第12张图片
(2)索引方式
操作系统——第二章_第13张图片

2.1.2 进程的状态及转换

1.思维导图总览

操作系统——第二章_第14张图片

2.进程的状态

(1)三种基本状态(就绪、运行、阻塞)
操作系统——第二章_第15张图片

(2)创建态和结束态

在这里插入图片描述

  • 创建态
    操作系统——第二章_第16张图片

  • 结束态

操作系统——第二章_第17张图片

3.进程状态之间的转换
进程一共有如下5种状态,那么他们之间如何实现切换呢?
操作系统——第二章_第18张图片

咱们从一个进程的从无到有看起,来了解进程5种状态之间的转换
请添加图片描述

  1. 系统未来一个进程的建立,先处于创建态,完成一系列的分配资源工作。
  2. 当进程到达就绪态,说明可以有机会被处理机调度。
  3. 当进程被调度,说明进入了运行态

来一张形象生动的图片感受一下5种状态之间的切换

操作系统——第二章_第19张图片

2.1.3 原语实现对进程的控制

0.思维导图
操作系统——第二章_第20张图片

1.什么是进程控制?
操作系统——第二章_第21张图片
最基本的三个状态:
操作系统——第二章_第22张图片
三个状态的关系是什么?
操作系统——第二章_第23张图片
没头没尾的?好!给你头和尾!
操作系统——第二章_第24张图片

就绪态与阻塞态太绝对,一个是 缺CPU、一个是缺某种资源,为什么让我已经有的资源白白运行着,等待缺少的东西!!!OK,给你个挂起态,当我缺东西的时候,我先把我身上的资源给出去,我一身轻,资源还不白白浪费。

  1. 挂起就绪:提交的进程可能会很久获得CPU和资源,但是作为就绪态,也会占用很多资源,但是由于是就绪态,不是在运行,所以现在不给他分配资源(没有CPU)也是对资源的一种节约。
  2. 挂起阻塞:阻塞状态是由于运行时,我缺少了某种资源,被迫转化为阻塞态,但是阻塞态除了缺少的资源,其他的资源还是在占用,太浪费了。出现挂起阻塞,可以通过唤醒回到阻塞态。

2.原语实现对进程的控制

(1)操作系统的运行机制和体系结构
操作系统——第二章_第25张图片
(2)操作系统内核在计算机系统中的层次结构
操作系统——第二章_第26张图片
(3)操作系统体系结构类比
操作系统——第二章_第27张图片
(4)操作系统用户态和核心态的转换
操作系统——第二章_第28张图片

操作系统——第二章_第29张图片

3.回忆进程的组织
进程在操作系统中的组织使各个进程能够有序的进行切换和运行
在这里插入图片描述

4.进程控制大致图解
操作系统——第二章_第30张图片

这里说明一下调度和切换的区别:
调度是指决定资源分配给哪个进程的行为,是一种决策行为
切换是指实际分配的行为,是执行行为
一般来说现有资源调度,后有进程切换

5.进程控制原语的相同点
学习技巧:进程控制会导致进程状态的转换。无论哪个原语,要做的无非三类事情:

  1. 更新PCB中的信息(如修改进程状态标志、将运行环境保存到PCB、从PCB恢复运行环境)
    a.所有的进程控制原语一定都会修改进程状态标志
    b.剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    c.某进程开始运行前必然要恢复期运行环境

  2. 将PCB插入 合适的队列

  3. 分配/回收资源

接下来我们就具体学习一下关于进程控制的五种原语,进程的创建、终止、唤醒、阻塞、切换
6.进程控制的五种原语
(1)进程的创建原语
操作系统——第二章_第31张图片

(2)进程的终止原语
操作系统——第二章_第32张图片

  1. 根据被终止进程的标识符,从PCB集合中找出该进程的PCB,从中取出该进程的状态;
  2. 若将被终止的进程正处于执行状态,则终止该进程的执行,并将处理机资源分配给其他进程;
  3. 若该进程还有子孙进程,还应将其所有子孙进程予以终止,以防它们成为不可控的进程;
  4. 将被终止进程所拥有的全部资源,或者归还给其父进程,或者归还给系统;

(3)进程的唤醒和阻塞原语
进程的阻塞和唤醒原语是成对存在的,必须成对使用
阻塞原语是由被阻塞进程自我调用实现的
唤醒原语是由一个被唤醒进程合作或被其他相关的进程调用实现的
操作系统——第二章_第33张图片

进程的阻塞

  1. 先用进程标识符找到要被阻塞的进程;
  2. 若该进程处于运行状态,先立即停止执行,将其状态转为阻塞态;
  3. 将本进程插入到阻塞队列,如果系统中设置了因不同事件而阻塞的多个阻塞队列,则插入具有相同事件的阻塞(等待) 队列;
  4. 转调度程序进行重新调度,将处理机分配给另一就绪进程。

进程的唤醒

  1. 把被阻塞的进程从等待该事件的阻塞队列中移出;
  2. 将其PCB中的现行状态由阻塞改为就绪:
  3. 然后再将该PCB插入到就绪队列中。

(4)进程的切换原语
操作系统——第二章_第34张图片

  1. 保存被中断进程的处理机上下文信息;
  2. 更新被中断进程的PCB信息,如进程状态;
  3. 把被中断进程的PCB加入相关队列;
  4. 选择一个新进程并更新其PCB信息,如进程状态;
  5. 更新被选中进程的存储管理信息;
  6. 恢复被选中进程的处理机上下文信息。

2.1.4 进程之间的通信(共享通信、消息传递、管道通信)

操作系统——第二章_第35张图片
什么是进程通信?
  图中我们可以知道什么是进程通信,以及进程通信的低级和高级方式;
  我们还可以知道为什么要引入进程通信方式,以及它的意义
操作系统——第二章_第36张图片

1.共享存储
  共享一块大家都可以访问的空间,一次只能有一个进程进行读或写操作
操作系统——第二章_第37张图片

2.管道通信
操作系统——第二章_第38张图片

3.消息传递
  发送信息的进程将消息头写好,接受信息进程根据消息头读取信息或寻找信封是哪一个
操作系统——第二章_第39张图片

2.1.5 线程概念与多线程模型

0.思维导图
操作系统——第二章_第40张图片

1.为什么要引入线程?
操作系统——第二章_第41张图片
操作系统——第二章_第42张图片
操作系统——第二章_第43张图片
因为进程存在问题:

  1. 系统在创建一个进程时,必须为它分配其所必需的、除处理机以外的所有资源,如内存空间、I/O 设备,以及建立相应的PCB,开销大;
  2. 系统在撤消进程时,又必须先回收其所占有的资源,然后再撤消PCB,开销大;
  3. 对进程进行切换时,由于要保留当前进程的CPUJ环境和恢复新选中进程的CPU环境,因而 须花费不少的处理机时间;
  4. 不同进程之间,资源独立分配,不共享地址空间,不便于协作。

操作系统——第二章_第44张图片

为了方便于理解,我打开了我的任务管理器,可以看出chrome一个进程,下面有很多分支,可以把这些分支当做线程看待,PID即进程和线程都有的标识符。
操作系统——第二章_第45张图片

2.什么是线程?
操作系统——第二章_第46张图片

3.引入线程带来的变化及进程与线程的比较
操作系统——第二章_第47张图片

4.线程的属性
操作系统——第二章_第48张图片

5.线程的实现方式
前面我们了解了引入线程的好处和引入线程的变化,以及线程的属性,那么线程如何实现呢?
线程的实现分为两类:用户级线程(User-Level Thread,UTL)内核级线程(Kernel-Level Thread, KTL)。内核级线程又称内核支持的线程。

什么是内核!简单粗暴!内核就是访问硬件的软件程序!如果word可以访问硬件(bushi),你可以管word叫内核(狗头)。

QQ是内核吗?不是!为什么?因为他不能访问硬件,那QQ为什么可以开摄像头这硬件。因为QQ要去舔内核,内核同意了,QQ才能得到摄像头的使用权限。 如下图:
操作系统——第二章_第49张图片
所以什么是内核态!当一个进程陷入内核代码中执行时,我们就称进程处于内核态。(进入内核态:系统调用、异常、外围设备的中断)
操作系统——第二章_第50张图片

  1. 用户级线程

  通过运行时系统来管理线程,运行时系统实际上是一套库函数,存在于用户空间内;

  内核管理的还是进程,感觉不到线程的存在;

  线程切换不需要内核管理。

优点:线程切换速度快,调度算法可根据应用程序需要而定制,可运行在任何操作系统上。
缺点:内核只能将CPU以进程为单位分配,同一进程中的两个线程就无法分配到不同的CPU。
进程被阻塞,则进程内的所有线程都会被阻塞。

  1. 内核级线程

  内核管理所有线程,并向用户提供APl接口来创建线程;

  内核即维护进程相关数据结构还维护线程相关数据结构;

  线程切换由内核来支持;

  调度以线程为单位

优点:
1)在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行;
2)进程中的一个线程被阻塞了,内核可以调度该进程中的其它线程占有处理器运行, 也可以运行其它进程中的线程;
3)内核本身也可以采用多线程技术,可以提高系统的执行速度和效率。
缺点:
对于用户的线程切换而言,其模式切换的开销较大,在同一个进程中,从一个线程切换 到另个线程时,需要从用户态转到内核态进行,
这是因为用户进程的线程在用户态运 行,而线程调度和管理是在内核实现的,系统开销较大

(1)用户级线程
操作系统——第二章_第51张图片

(2)内核级线程
操作系统——第二章_第52张图片

(3)特殊的组合方式及重点注意
操作系统——第二章_第53张图片

6.多线程模型
前面我们提到了线程的实现方式,有用户级和内核级。那么这两种模式的交叉组合就会产生几种不一样的组织结构,即不一样的模型。
(1)多对一模型
操作系统——第二章_第54张图片

(2)一对一模型
操作系统——第二章_第55张图片

(3)多对多模型
此种模型效率是三种模型中最好的
操作系统——第二章_第56张图片

2.2 处理机的调度

2.2.1 处理机调度的概念及层次

0.思维导图

操作系统——第二章_第57张图片

1.调度的基本概念
操作系统——第二章_第58张图片
2.调度的三个层次
(1)高级调度( 作业调度)
操作系统——第二章_第59张图片

(2)中级调度(内存调度)

操作系统——第二章_第60张图片
换出

换入

(3)进程的挂起状态与七状态模型
操作系统——第二章_第61张图片

(4)低级调度(进程调度)
操作系统——第二章_第62张图片

(5)三层调度的联系和对比
操作系统——第二章_第63张图片

2.2.2 进程调度的时机(主动放弃与被动放弃)、切换与过程、方式

0.思维导图
操作系统——第二章_第64张图片

1.时机
(1)什么时候进行进程调度?
操作系统——第二章_第65张图片

(2)什么时候不能进行进程调度?
操作系统——第二章_第66张图片

(3)OS内核程序临界区与普通临界区的进程调度情况

操作系统——第二章_第67张图片
操作系统——第二章_第68张图片

2.进程调度的方式
所谓进程调度方式,是指当某个进程正在处理机上执行时,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列,此时应如何分配处理机。
操作系统——第二章_第69张图片

3.进程的切换和过程

操作系统——第二章_第70张图片

2.2.3 调度算法的评价指标(cpu利用率、系统吞吐量、周转时间、等待时间、响应时间)

0.思维导图
操作系统——第二章_第71张图片

1.CPU利用率
操作系统——第二章_第72张图片

2.系统吞吐量
操作系统——第二章_第73张图片

3.周转时间

在这里插入图片描述
在这里插入图片描述

4.等待时间

操作系统——第二章_第74张图片

5.响应时间
在这里插入图片描述
在这里插入图片描述

2.2.4 作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)

作业:包含程序、数据和一份作业说明书,系统根据该说明书来对程序的运行进行控制。
作业控制块(JCB):它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。

0.思维导图
在这里插入图片描述

1.先来先服务—FCFS
First come first sever
操作系统——第二章_第75张图片
操作系统——第二章_第76张图片
2.短作业优先—SJF
Shortest Job First
操作系统——第二章_第77张图片

  • 非抢占式—SJF
    操作系统——第二章_第78张图片

  • 抢占式—SJF(SRTN)
    操作系统——第二章_第79张图片
    操作系统——第二章_第80张图片

注意几个细节
操作系统——第二章_第81张图片

3.高响应比优先—HRRN
Highest Response Ratio Next
操作系统——第二章_第82张图片
操作系统——第二章_第83张图片
操作系统——第二章_第84张图片

4.三种算法的对比和总结
操作系统——第二章_第85张图片

2.2.5 作业/进程调度算法(时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法)

0.思维导图
操作系统——第二章_第86张图片

1.时间片轮转—RR
Round-Robin
操作系统——第二章_第87张图片

时间片为2举例
操作系统——第二章_第88张图片

以时间片为5举例
操作系统——第二章_第89张图片

可能出现的问题,比如与FCFS对比
操作系统——第二章_第90张图片
操作系统——第二章_第91张图片

2.优先级调度算法
操作系统——第二章_第92张图片

非抢占式例子
操作系统——第二章_第93张图片
抢占式例子
操作系统——第二章_第94张图片

补充
操作系统——第二章_第95张图片

3.多级反馈队列调度算法
操作系统——第二章_第96张图片
操作系统——第二章_第97张图片
操作系统——第二章_第98张图片

举个例子

操作系统——第二章_第99张图片
操作系统——第二章_第100张图片
操作系统——第二章_第101张图片
操作系统——第二章_第102张图片
操作系统——第二章_第103张图片
操作系统——第二章_第104张图片

4.三种算法的对比总结
操作系统——第二章_第105张图片

2.3 进程的同步与互斥

2.3.1 进程的同步与互斥

0.思维导图
操作系统——第二章_第106张图片
操作系统的一个重要功能是什么?
就是让程序并发执行。
1.进程同步

  • 同步也称为直接制约关系。
  • 在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系,如等待、传递信息等,引入了进程同步的概念。进程同步是为了解决进程的异步问题。
  • 一个简单的例子来理解这个概念。 例如,让系统计算1 + 2x3,假设系统产生两个进程:
  • 一个是加法进程,一个是乘法进程。要让计算结果是正确的,一定要让加法进程发生在乘法进程之后,但实际上操作系统具有异步性,若不加以制约,加法进程发生在乘法进程之前是绝对有可能的,因此要制定一定的机制去约束加法进程,让它在乘法进程完成之后才发生。
  • 异步性:进程具有异步性的特征。异步性是指,各并发执行的进程以各自独立的、不可预知的速度向前推进。

2.进程互斥

  • 互斥,亦称间接制约关系。进程互斥指当一个进程访问某临界资源时,另一个想要访问该临界资源的进程必须等待。当前访问临界资源的进程访问结束,释放该资源之后,另一个进程才能去访问临界资源。
  • 在这里需复习一下临界资源的概念。
  • 我们把一个时间段内只允许一个进程使用的资源称为临界资源。许多物理设备(比如摄像头、打印机)都属于临界资源。此
  • 还有许多变量、数据、内存缓冲区等都属于临界资源。
  • 对临界资源的访问,必须互斥地进行。
    操作系统——第二章_第107张图片

为了禁止两个进程同时进入临界区,需遵循以下准则
在这里插入图片描述

2.3.2 实现临界区进程互斥的软件实现方法

0.思维导图
操作系统——第二章_第108张图片

软件实现方法的思想:
在进入区设置并检查一些标志 来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。

1.单标志法
操作系统——第二章_第109张图片

操作系统——第二章_第110张图片

2.双标志先检查法

操作系统——第二章_第111张图片
两个是可以同时进入临界区,违反了互斥!!!!
所以不能先检查上锁

3,双标志后检查法
操作系统——第二章_第112张图片
双方产生饥饿现象。

4.Peterson算法
操作系统——第二章_第113张图片

操作系统——第二章_第114张图片

2.3.3 实现临界区进程互斥的硬件实现方法

0.思维导图
操作系统——第二章_第115张图片

1.中断隐藏方法
操作系统——第二章_第116张图片

2.TestAndSet指令

  • 执行TSL指令时,它的内部运转逻辑:
  • 假设lock现在为false,代表临界资源A空闲,那么我就可以访问这个资源,同时将lock=true,提醒别的进程,这个临界资源A我正在使用,让他们等等
  • 假设lock为true,代表临界资源正在有人使用,所以我必须等待,并且将lock=true,并不影响什么,所以没关系,只是为了让lock为false时可以上锁,将上锁与检查在一个TSL指令完成。

操作系统——第二章_第117张图片

3.Swap指令

  • old是每个进程都要进行的一步,都必须将old=true
  • 分析一下这样做的原因:
  • 因为lock是某一特定临界资源的共享变量,当每一个进程准备访问这个特定的临界资源时,初始化old=true,然后进入while循环进行交换,如果当前lock是false,则交换后old=false,则当前进程可以跳出循环进入临界区代码段,同时因为交换,lock=old=true上锁,不让别的进程来打扰,别的进程会因为lock变为true,一直在while循环等待,当我使用完临界资源,则将lock=false,此时别的进程再交换old和lock就能判断old=false,可以跳出循环,使用临界资源。

操作系统——第二章_第118张图片

2.3.4 信号量机制(整型信号量、记录型信号量P、V)

0.思维导图
操作系统——第二章_第119张图片

1.为什么引入信号量机制?
为了更好的解决进程互斥与同步的问题
操作系统——第二章_第120张图片

2.什么是信号量机制?
操作系统——第二章_第121张图片

3.整型信号量
操作系统——第二章_第122张图片

4.记录型信号量
操作系统——第二章_第123张图片

(1)举一个生动形象的例子了解记录型信号量
一张图咱们回忆一下进程的状态
操作系统——第二章_第124张图片

一个例子
操作系统——第二章_第125张图片

操作系统——第二章_第126张图片

操作系统——第二章_第127张图片

操作系统——第二章_第128张图片

操作系统——第二章_第129张图片

(2)梳理一下记录型信号量的知识点(P、V)
操作系统——第二章_第130张图片

2.3.5 信号量机制实现进程的互斥、同步与前驱关系

0.思维导图
操作系统——第二章_第131张图片

1.信号量机制实现进程互斥

操作系统——第二章_第132张图片

2.信号量机制实现进程同步
想象一下四则运算的顺序,加减乘除;
操作系统——第二章_第133张图片

要想理解这一部分知识,必须知道P、V操作的内部实现原理
在这里插入图片描述

3.信号量机制实现前驱关系
在这里插入图片描述

2.3.6 进程同步与互斥经典问题

(生产者-消费者问题、多生产者-多消费者问题、吸烟者问题、读者-写者问题、哲学家进餐问题)
0.前言
同步时,前V后P。
在这里插入图片描述

1.生产者-消费者问题
(1)问题描述

  • 系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取出一个产品并使用。(注: 这里的“产品”理解为某种数据)
  • 生产者、消费者共享一个初始为空、大小为n的缓冲区。
  • 只有缓冲区没满时,生产者才能把产品放入缓冲区,否则必须等待。
  • 只有缓冲区不空时,消费者才能从中取出产品,否则必须等待。
  • 缓冲区是临界资源,各进程必须互斥地访问。
    操作系统——第二章_第134张图片

(2)问题分析

  • 1)关系分析。生产者和消费者对缓冲区互斥访问是互斥关系,同时生产者和消费者又是一个相互协作的关系,只有生产者生产之后,消费者才能消费,它们也是同步关系。
  • 2)整理思路。根据各进程的操作流程确定P、V操作的大致顺序。
    生产者每次要消耗(P)一个空闲缓冲区,并生产(V)一个产品。
    消费者每次要消耗(P)一个产品,并释放一个空闲缓冲区(V)。
    往缓冲区放入/取走产品需要互斥。
  • 3)信号量设置。设置信号量。设置需要的信号量,并根据题目条件确定信号量初值。( 互斥信号量初值一般为1,同步信号量的初始值要看对应资源的初始值是多少)
    在这里插入图片描述

(3)如何实现?
操作系统——第二章_第135张图片

(4)实现互斥的P操作一定要在实现同步的P操作之后
在这里插入图片描述

(5)知识回顾与重要考点
操作系统——第二章_第136张图片

2.多生产者-多消费者问题
(1)问题描述
操作系统——第二章_第137张图片

(2)问题分析
操作系统——第二章_第138张图片

(3)实现方法
① 有mutex
操作系统——第二章_第139张图片

② 无mutex
操作系统——第二章_第140张图片

③ 为什么有mutex和没有mutex一样呢?

原因在于:本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate
三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…

④ 如果有两个盘子plate
操作系统——第二章_第141张图片

(4)知识总结与重要考点
总结:在生产者_消费者问题中,如果缓冲区大小为1,那么有可能不需要设置互斥信号量就可以实现互斥访问缓冲区的功能。当然,这不是绝对的,要具体问题具体分析。
建议:在考试中如果来不及仔细分析,可以加上互斥信号量,保证各进程一定会互斥地访问缓冲区。但需要注意的是,·实现互斥的P操作一定要在实现同步的P操作之后·,否则可能引起·“死锁”·。
操作系统——第二章_第142张图片

3.读者-写者问题
(1)问题描述
在这里插入图片描述

(2)问题分析
操作系统——第二章_第143张图片

(3)实现方法
① 给count加mutex互斥访问

这里说一下为什么要加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)。

操作系统——第二章_第144张图片

② 加一个w实现“读写公平法”

在上面的算法中,读进程是优先的,即当存在读进程时,写操作将被延迟,且只要有
一个读进程活跃,随后而来的读进程都将被允许访问文件。这样的方式会导致写进程可能长时间等待,且存在写进程“饿死”的情况。
若希望写进程优先,即当有读进程正在读共享文件时,有写进程请求访问,这时应禁止后续读进程的请求,等到已在共享文件的读进程执行完毕,立即让写进程执行,只有在无写进程执行的情况下才允许读进程再次运行。为此,增加一个信号量并在上面程序的writer()和
reader()函数中各增加一对PV操作,就可以得到写进程优先的解决程序。

操作系统——第二章_第145张图片

(4)知识回顾与重要考点
操作系统——第二章_第146张图片

4.吸烟者问题
(1)问题描述
操作系统——第二章_第147张图片

(2)问题分析
操作系统——第二章_第148张图片

操作系统——第二章_第149张图片

(3)实现方法
操作系统——第二章_第150张图片

(4)知识回顾与重要考点
操作系统——第二章_第151张图片

5.哲学家进餐问题
(1)问题描述
操作系统——第二章_第152张图片

(2)问题分析
操作系统——第二章_第153张图片

(3)如何实现

操作系统——第二章_第154张图片

操作系统——第二章_第155张图片

(4)知识回顾与重要考点
操作系统——第二章_第156张图片

2.3.7 管程和java中实现管程的机制

0.思维导图
操作系统——第二章_第157张图片

1.为什么引入管程?
操作系统——第二章_第158张图片

2.管程的组成及基本特征
操作系统——第二章_第159张图片

3.管程实现生产者消费者问题
操作系统——第二章_第160张图片

操作系统——第二章_第161张图片

操作系统——第二章_第162张图片

操作系统——第二章_第163张图片

4.java中类似于管程的机制
1

2.4 死锁

2.4.1 死锁详解(预防、避免、检测、解除)

0.思维导图

1.什么是死锁?
操作系统——第二章_第164张图片

操作系统——第二章_第165张图片

2.死锁、饥饿、死循环的区别

操作系统——第二章_第166张图片

操作系统——第二章_第167张图片

3.死锁产生的四个必要条件

4.什么时候会发生死锁?
操作系统——第二章_第168张图片

5.死锁的处理策略
操作系统——第二章_第169张图片

(1)预防死锁
① 破坏互斥条件
操作系统——第二章_第170张图片

② 破坏不可剥夺条件
操作系统——第二章_第171张图片

③ 破坏请求和保持条件
操作系统——第二章_第172张图片

④ 破坏循环等待条件
操作系统——第二章_第173张图片

(2)避免死锁
① 什么是安全序列?
所谓安全序列
操作系统——第二章_第174张图片
操作系统——第二章_第175张图片
操作系统——第二章_第176张图片
操作系统——第二章_第177张图片
操作系统——第二章_第178张图片

② 安全序列、安全状态、不安全状态、死锁之间的联系
操作系统——第二章_第179张图片
操作系统——第二章_第180张图片

③ 避免系统进入不安全状态------银行家算法

操作系统——第二章_第181张图片
操作系统——第二章_第182张图片

操作系统——第二章_第183张图片
操作系统——第二章_第184张图片
操作系统——第二章_第185张图片
操作系统——第二章_第186张图片
操作系统——第二章_第187张图片
操作系统——第二章_第188张图片

使用代码实现
操作系统——第二章_第189张图片

操作系统——第二章_第190张图片

(3)死锁的检测和解除
在这里插入图片描述

① 死锁的检测
操作系统——第二章_第191张图片

举个例子,可以消除所有边,即无死锁发生

操作系统——第二章_第192张图片

操作系统——第二章_第193张图片

操作系统——第二章_第194张图片

操作系统——第二章_第195张图片

举个例子,不可消除所有边,即产生死锁

操作系统——第二章_第196张图片

操作系统——第二章_第197张图片

操作系统——第二章_第198张图片

② 死锁的解除

操作系统——第二章_第199张图片

你可能感兴趣的:(操作系统,服务器,网络)