操作系统知识点总结——第二章进程管理

目录

一、进程与线程

(一)⭐进程的概念、组成、特征⭐

进程的概念

程序:是静态的,存放在系统磁盘中的可执行文件。
进程:是动态的,是程序的一次执行过程。
就好比我写了一个算法,然后有五道题目都需要使用这个算法解题,这个算法就相当于程序,而我使用这个算法同时解答这五个题目,算法还是那个算法,拿来用罢了,这就是进程。一个程序多次执行产生多个进程。

进程控制块PCB

  • PCB是进程存在的唯一标志,当进程被创建时,操作系统为其创建一个数据结构PCB,当进程结束时,会回收其PCB。但凡管理时所需要的信息都会被放在PCB中。
    在这里插入图片描述

程序段:进程运行的指令
数据段:进程运行中所需要的数据
⭐PCB供操作系统使用⭐
⭐程序段、数据段供进程自己使用。⭐

进程vs进程实体
一个进程实体(进程映像)由PCB、程序段、数据段组成。

  • 进程是动态的,指的是程序运行的过程,进程实体(进程映像)是静态的,反应的是进程在某一时刻的状态。
  • ⭐进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位⭐

进程的特征

在这里插入图片描述

小节回顾

在这里插入图片描述

(二)进程的状态与转换、进程的组织

⭐进程的状态与转换⭐

创建态

  • 进程正在被创建时,它的状态是“创建态”,在这个阶段操作系统会为进程分配资源、初始化PCB

⭐就绪态⭐

  • 当进程创建完成后,便进入“就绪态”,处于就绪态的进程已经具备运行条件,但由于没有空闲CPU,就暂时不能运行

⭐运行态⭐

  • 如果一个进程此时在CPU上运行,那么这个进程处于“运行态”。CPU会执行该进程对应的程序(执行指令序列)
  • 当运行态中的进程资源或者条件不满足了,进程用系统调用,转入阻塞态
  • 当进程时间片运行结束,但其他条件满足,则会转入就绪态等待下一个时间片。

⭐阻塞态⭐

  • 在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态”
  • 当阻塞态所需要的资源或者条件满足,则阻塞态转为就绪态

终止态

  • 一个进程可以执行exit系统调用,请求操作系统终止该进程。此时该进程会进入“终止态”,操作系统会让该进程下CPU,并回收内存空间等资源,最后还要回收该进程的PCB。
  • 当终止进程的工作完成之后,这个进程就彻底消失了。

在这里插入图片描述

⭐进程PCB中,会有一个变量state来表示进程的当前状态⭐
在这里插入图片描述

进程的组织

不同状态的进程进行组织起来。
链式方式
索引方式

章节回顾

在这里插入图片描述

(三)⭐进程控制⭐

进程控制就是为了实现进制的状态转换,一般把进程控制用的程序段称为原语。⭐原语的执行具有“原子性”,一气呵成。⭐
⭐原语的实现需要开中断和关中断两个特权指令配合完成。⭐

进程的创建
在这里插入图片描述
进程的结束
在这里插入图片描述
进程的阻塞和唤醒
在这里插入图片描述
进程的切换
在这里插入图片描述

小节回顾
在这里插入图片描述

(四)进程通信

进程间通信是指两个进程之间产生数据交互。
进程是分配系统资源的单位,⭐因此各进程拥有的内存地址空间相互独立⭐。为了保证安全,一个进程不能直接访问另一个进程的内存地址空间。

共享存储
各个进程之间需要通信,则申请一个共享的存储区,通过该共享存储区进行数据的交换。
为避免出错,各个进程对共享空间的访问应该是互斥的。(PV操作)
在这里插入图片描述
基于数据结构的共享:比如共享空间里只能放一个长度为10的数组。这种共享方式速度慢、限制多,是一种低级通信方式
基于存储区的共享:操作系统在内存中划出一块共享存储区,数据的形式、存放位置都由通信进程控制,而不是操作系统。这种共享方式速度很快,是一种高级通信方式。

消息传递
进程间的数据交换以格式化的消息(Message)为单位。进程通过操作系统提供的“发送消息/接收消息”两个原语进行数据交换。
在这里插入图片描述

管道通信

“管道”是一个特殊的共享文件,又名pipe文件。其实就是在内存中开辟一个大小固定的内存缓冲区

从一端写入数据,一端读取数据,是单向的,数据的读写是先进先出的
在这里插入图片描述

  1. 管道只能采用半双工通信,某一时间段内只能实现单向的传输。如果要实现双向同时通信,则需要设置两个管道
  2. 各进程要互斥地访问管道(由操作系统实现)
  3. 当管道写满时,写进程将阻塞,直到读进程将管道中的数据取走,即可唤醒写进程。
  4. 当管道读空时,读进程将阻塞,直到写进程往管道中写入数据,即可唤醒读进程。
  5. 管道中的数据一旦被读出,就彻底消失。因此,当多个进程读同一个管道时,可能会错乱。一个管道允许⭐多个写进程,一个读进程⭐

小节回顾
在这里插入图片描述

(五)线程概念

  • 可以把线程理解为“轻量级进程”
  • 线程是一个基本的CPU执行单元,也是程序执行流的最小单位。引入线程之后,不仅是进程之间可以并发,进程内的各线程之间也可以并发,从而进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务(如QQ视频、文字聊天、传文件)
  • ⭐引入线程后,进程只作为除CPU之外的系统资源的分配单元(如打印机、内存地址空间等都是分配给进程的)。⭐,资源只分配给进程,而线程被CPU进行调度执行,相当于把进程模块化了。

在这里插入图片描述
线程带来的变换在这里插入图片描述
线程的属性
在这里插入图片描述

(六)线程的实现方式和多线程模型

线程的实现方式

用户级线程

  1. 用户级线程由应用程序通过线程库实现,所有的线程管理工作都由应用程序负责(包括线程切换)
  2. 用户级线程中,线程切换可以在用户态下即可完成,无需操作系统干预。
  3. 在用户看来,是有多个线程。但是在操作系统内核看来,并意识不到线程的存在。“用户级线程”就是“从用户视角看能看到的线程”
  4. 优缺点
    优点:用户级线程的切换在用户空间即可完成,不需要切换到核心态,线程管理的系统开销小,效率高
    缺点:当一个用户级线程被阻塞后,整个进程都会被阻塞,并发度不高。多个线程不可在多核处理机上并行运行。

在这里插入图片描述
内核级线程

  1. 内核级线程的管理工作由操作系统内核完成
  2. 线程调度、切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成
  3. 操作系统会为每个内核级线程建立相应的TCB (Thread Control Block,线程控制块),通过TCB对线程进行管理。“内核级线程”就是“从操作系统内核视角看能看到的线程”
  4. 优缺点
    优点:当一个线程被阻塞后,别的线程还可以继续执行,并发能力强。多线程可在多核处理机上并行执行。
    缺点:一个用户进程会占用多个内核级线程,线程切换由操作系统内核完成,需要切换到核心态,因此线程管理的成本高,开销大

在这里插入图片描述

⭐多线程模式⭐

⭐⭐操作系统只“看得见”内核级线程,只会给内核级线程分配资源。内核级线程才是处理机的分配单位⭐⭐
一对一模型

  • 一个用户级线程对应一个内核级线程。数量相同
    在这里插入图片描述
    一个内核级线程被阻塞后其他的内核级线程能够继续执行,并发性强,但是内核级线程多,在线程的切换过程中需要进入核心态,线程的管理成本高,开销大。

多对一模型

  • 多个用户级线程映射到一个内核级线程。一个进程只有一个内核级线程。
    在这里插入图片描述
    当一个用户级线程被阻塞则其他的用户级线程也会被阻塞。并发很低。同时只有一个内核级线程,不需要来回切换,管理成本低,开销小,效率高。

多线程模型

  • n用户级线程映射到m个内核级线程(n>=m)。

在这里插入图片描述克服了多对一模型并发度不高的缺点(一个阻塞全体阻塞),又克服了一对一模型中一个用户进程占用太多内核级线程,开销太大的缺点。

小节回顾

在这里插入图片描述

(七)线程的状态与转换(新增大纲)


现成的组织与控制
每一个线程都有一个TCP线程控制块。
在这里插入图片描述
线程切换时要保存/恢复程序计数器PC、寄存器、堆栈指针。

二、处理机调度

(一)调度的概念

当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。

⭐调度的层次⭐

作业:一个具体的任务,即要启动的程序。

  • 高级调度
    按照调度算法原则从外存的作业后备队中挑选一个作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
  • 中级调度(内存调度)
    按照某种策略决定将那个处于挂起状态的进程重新调入内存。调度频率比
    高级调度高。
  • 低级调度(进程调度/处理机调度)
    按照某种策略从就绪队列中选取一个进程,将处理机分配给它。进程调度时操作系统中最基本的一种调度。进程调度的频率很高

⭐三层调度的对比⭐
在这里插入图片描述

小节回顾

在这里插入图片描述

(二)进程调度的时机、切换与过程、方式

进程调度的时机

在这里插入图片描述
这里的进程在操作系统内核程序临界区中,不能进行进程调度与切换。临界资源指一段时间内只允许一个进程使用的资源。临界区指访问临界资源的那段代码。可见临界区也是互斥访问的。当进程执行临界区代码时会对资源进行上锁,但是这段时间如果时内核数据结构,这段时间内如果内核资源能够被调度和切换会影响到其他进程的执行。所以不能够被调度和切换。

进程调度的方式

在这里插入图片描述

进程的切换与过程

在这里插入图片描述

小节回顾

在这里插入图片描述

(三)⭐⭐调度算法的评价指标⭐⭐

  1. CPU利用率
    指CPU”忙碌“的时间占总时间的比例
    利用率=忙碌的时间/时间
  2. 系统吞吐量
    单位时间内完成作业的数量
    系统吞吐量=总共花了多少道作业/总共花了多少时间
  3. 周转时间
    是指作业被提交给系统开始,到作业完成为止的这段时间间隔。
    周转时间=作业完成时间-作业提交时间
    平均周转时间=各作业周转时间之和/作业数
    带权周转时间=作业周转时间/作业实际运行的时间(越小越好)
    平均带权周转时间=各作业带权周转时间之和/作业数
  4. 等待时间
    指进程/作业处于等待处理及状态时间之和,等待时间越长,用户满意度越低。
    对于进程来说,等待时间就是指进程建立后等待被服务的时间之和,在等待I/O完成的期间其实进程也是在被服务的,所以不计入等待时间。
    对于作业来说,不仅要考虑建立进程后的等待时间,还要加上作业在外存后备队列中等待的时间
  5. 响应时间
    指从用户提交请求到首次产生响应所用的时间。
  6. 响应比
    响应比=(等待时间+要求服务时间)/要求服务时间

小节回顾
在这里插入图片描述

(四)⭐调度算法⭐

先来先服务FCFS

对长作业有利,对短作业不利。每个作业迟早会被服务,不会产生饥饿。
在这里插入图片描述

⭐短作业优先SJF⭐

对于非抢占式而言,每次调度时判断已经到达的作业/进程中最短的,为其分配处理机。
对于抢占式而言,每次进来一个进程/作业,就要与已经在运行的进程/作业还需运行时间进行比较,如果需要时间更短则进行调度抢占处理机。
在这里插入图片描述
如果题目中未特别说明,所提到的”短作业/进程优先算法“默认是非抢占式的。

高响应比优先HRRN

在这里插入图片描述

小节回顾

在这里插入图片描述

⭐时间片轮转调度算法RR⭐

轮流让就绪队列中的进程依次执行一个时间片。
在这里插入图片描述
如果时间片太大,使得每个进程都可以在一个时间片内就完成,则时间片轮转调度算法退化为先来先服务调度算法,并且会增大进程响应时间因此时间片不能太大
如果时间片太小,则进程切换过程过于频繁,则导致实际用于进程执行的时间比例减少。可见时间片也不能太小

优先级调度算法

根据进程/作业的优先级来调度,优先级高的先处理。
在这里插入图片描述

根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级两种。
静态优先级:创建进程时确定,之后一直不变。
动态优先级:创建进程时有一个初始值,之后会根据情况动态地调整优先级。

多级反馈队列调度算法

  1. 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
  2. 新进程到达时先进入第1级队列,按FCFS原则排队等待被分配时间片。若用完时间片进程还未结束,则进程进入下一级队列队尾。如果此时已经在最下级的队列,则重新放回最下级队列队尾
  3. 只有第k级队列为空时,才会为k+1级队头的进程分配时间片
  4. 最后一级队列进程时间片结束后还没运行完毕则重新放回原队列队尾
    在这里插入图片描述

小节回顾

在这里插入图片描述

多级队列调度算法

在这里插入图片描述

三、进程同步

(一)进程同步的基本概念

同步亦称直接制约关系,它是指为完成某种任务而建立的两个或多个进程,⭐这些进程因为需要在某些位置上协调它们的工作次序而产生的制约关系⭐。进程间的直接制约关系就是源于它们之间的相互合作。

进程互斥
临界资源:我们把一个时间段内只允许一个进程使用的资源称为临界资源。
⭐而互斥就是控制进程对临界资源进行互斥的访问⭐
在这里插入图片描述
临界区也可称为“临界段”
为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则:

  1. 空闲让进:临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区;
  2. 忙则等待:当已有进程进入临界区时,其他试图进入临界区的进程必须等待;
  3. 有限等待:对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿)﹔
  4. 让权等待:当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。

小节回顾
在这里插入图片描述

(二)⭐进程互斥的软件实现方法(考察频率高)⭐

单标志法

两个进程在访问完临界区后,会把使用临界区的权限转交给另一个进程。也就是说每个进入临界区的权限只能被另一个进程赋予。
在这里插入图片描述
很好理解,其实就是设置一个标志turn,每个进程都有一个进程ID,然后turn=ID就表示对应编号的进程可以访问临界资源。看代码中两个进程按序进行while,而while里面的条件turn不是自己的编号的时候说明这个进程不能够访问临界区,一直进行while,而如果turn等于自己的进程编号,那么则进入第二部,执行临界区代码,访问临界区资源。在访问结束后,修改标志turn给下一个进程。

⭐该算法可以实现“同一时刻最多只允许一个进程访问临界区”⭐,但是如果P0一直都不访问临界区,而P1临界区访问完会修改turn为0,这样P0进程会一直while,不访问临界区也不允许P1访问,⭐违背了“空闲让进”原则。⭐

双标志先检查法

设置一个布尔型数组flag[],数组中各个元素用来标记各进程想进入临界区的意愿,比如“flag[0] = ture”意味着О号进程Po现在想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区,如果没有,则把自身对应的标志flag[i]设为true,之后开始访问临界区。
在这里插入图片描述
违反了“忙则等待”的原则
忙则等待的问题是因为检查和上锁两个步骤不是一气呵成的。

双标志后检查法

和双标志检查法一样,但是时先上锁再检查。
在这里插入图片描述
违背了“空闲让进”和“有限等待”原则,会产生“饥饿现象”

⭐Peterson算法⭐

结合双标志法、单标志法的思想。
在这里插入图片描述
谁先使用临界区是由谁最后进行了谦让谁就丧失了主动权
⭐Peterson算法用软件方法解决了进程互斥问题,遵循了空闲让进、忙则等待、有限等待三个原则,但是依然未遵循让权等待的原则。⭐

小节回顾

在这里插入图片描述

(三)进程互斥的硬件实现方法

  1. 中断屏蔽方法
    利用”开/关中断指令”实现。
    在这里插入图片描述
    优点简单、高效
    缺点不适用多处理机,一个处理机执行了关中断后访问临界区,但是另一个处理机的进程也要访问临界区的话,就会造成冲突。只适用于操作系统内核进程,开关中断需要在内核态进行。
  2. ⭐TestAndSet指令⭐
    简称TS指令,也有地方称为TestAndSetLock指令,或TSL指令。
    TSL指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成
    在这里插入图片描述
  3. Swap指令
    有的地方也叫 Exchange指令,或简称XCHG指令。
    Swap指令是用硬件实现的,执行的过程不允许被中断,只能一气呵成。以下是用c语言描述的逻辑

在这里插入图片描述
小节回顾
在这里插入图片描述

(四)信号量机制

用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。
信号量其实就是一个变量(可以是一个整数,也可以是更复杂的记录型变量),可以用一个信号量来表示系统中某种资源的数量
一对原语: wait(S)原语和 signal(S)原语,可以把原语理解为我们自己写的函数,函数名分别为wait和signal,括号里的信号量S其实就是函数调用时传入的一个参数
wait、signal原语常简称为P、v操作(来自荷兰语proberen和verhogen)。因此,做题的时候常把wait(S)、signal(S)两个操作分别写为P(S)、V(S)
关于信号量的问题,要从代码出发。多做两道题深入理解一下就会了,不详细记录。

整型信号量

用一个整数型的变量作为信号量,用来表示系统中某种资源的数量。
在这里插入图片描述
⭐不满足“让权等待”原则,会发生“忙等”⭐

⭐⭐记录型信号量⭐⭐

在这里插入图片描述
⭐遵循了“让权等待”,不会出现“忙等”⭐

小节回顾

在这里插入图片描述

⭐信号量机制实现进程互斥⭐

⭐⭐注意⭐⭐

  1. 初始化信号量时使用semaphore,则表示为记录型信号量,不会产生忙等。
  2. 对不同的临界资源需要设置不同的信号量
  3. P、V操作必须成对出现

在这里插入图片描述

⭐信号量机制实现进程同步⭐

⭐进程同步⭐:要让各并发进程按要求有序地推进。
在这里插入图片描述
关键就是前V后P,先V后后一个操作才能有信号量提示,然后才可以往下走。
在这里插入图片描述

小节回顾

在这里插入图片描述

(五)经典同步问题

这里的消费者、哲学家等问题,看视频吧,理解了就会,不理解PV操作看文章不太好理解,我也不太好描述,反正要注意前后关系。
⭐⭐我习惯的步骤⭐⭐

  1. 画关系图
  2. 确定互斥关系(只允许互斥访问)与同步关系(先后顺序)
  3. 定信号量
  4. 写代码

(六)管程

管程的定义和基本特征

管程是一种特殊的软件模块,有这些部分组成:

  1. 局部于管程的共享数据结构说明
  2. 对该类数据结构进行操作的一组过程(函数)
  3. 对局部于管程的共享数据设置初始值的语句
  4. 管程有一个名字

⭐类似于面向对象设计中的类,内部数据结构只允许内部函数访问。⭐

⭐管程的基本特征⭐:

  1. 局部于管程的数据只能被局部于管程的过程所访问;
  2. 一个进程只有通过调用管程内的过程才能进入管程访问共享数据;
  3. ⭐每次仅允许一个进程在管程内执行某个内部过程⭐。完成了进程的同步

在这里插入图片描述

  1. 需要在管程中定义共享数据(如生产者消费者问题的缓冲区)
  2. 需要在管程中定义用于访问这些共享数据的“入口”――其实就是一些函数(如生产者消费者问题中,可以定义一个函数用于将产品放入缓冲区,再定义一个函数用于从缓冲区取出产品)
  3. 只有通过这些特定的“入口”才能访问共享数据
  4. 管程中有很多“入口”,但是每次只能开放其中一个“入口”,并且只能让一个进程或线程进入(如生产者消费者问题中,各进程需要互斥地访问共享缓冲区。管程的这种特性即可保证一个时间段内最多只会有一个进程在访问缓冲区。注意:这种互斥特性是由编译器负责实现的,程序员不用关心)
  5. 可在管程中设置条件变量等待/唤醒操作以解决同步问题。可以让一个进程或线程在条件变量上等待(此时,该进程应先释放管程的使用权,也就是让出“入口”);可以通过唤醒操作将等待在条件变量上的进程或线程唤醒。

小节回顾
在这里插入图片描述

四、死锁

(一)死锁的概念

死锁

  • 在并发环境下,各进程因竞争资源而造成的一种互相等待对方手里的资源,导致各进程都阻塞,都无法向前推进的现象,就是“死锁”发生死锁后若无外力干涉,这些进程都将无法向前推进

饥饿

  • 由于长期得不到想要的资源,某进程无法向前推进的现象

死循环

  • 某进程执行过程中一直跳不出某个循环。

1、⭐死锁、饥饿、死循环的区别⭐
在这里插入图片描述
2、⭐死锁产生的条件⭐

  • 互斥条件
    只有对必须互斥使用的资源的争抢才会导致死锁
  • 不剥夺条件
    进程所获得的资源在未使用完之前,不能由其他进程强行夺走,只能主动释放
  • 请求和保持条件
    进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已经被其他进程占有。
  • 循环等待条件
    存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被下一个进程所请求。

⭐⭐注发生死锁时一定有循环等待,但是发生循环等待时未必死锁。⭐⭐

3、小节回顾
在这里插入图片描述

(二)预防死锁

1、破坏互斥资源
把只能互斥使用的资源改造为允许共享使用,则系统不会进入死锁状态。如SPOOLing技术
缺点:并不是所有的资源都可改造成共享使用的资源,并且为了系统安全,很多地方还必须保护这种互斥性。因此,很多时候都无法破坏互斥条件

2、破坏不剥夺条件
方案一:当某个进程请求新的资源得不到满足时,它必须立即释放保持的所有资源,待以后需要时再重新申请。也就是说,即使某些资源尚未使用完,也需要主动释放,从而破坏了不可剥夺条件
方案二:当某个进程需要的资源被其他进程所占有的时候,可以由操作系统协助,将想要的资源强行剥夺。这种方式一般需要考虑各进程的优先级(比如:剥夺调度方式,就是将处理机资源强行剥夺给优先级更高的进程使用)

3、破坏请求和保持条件
可以采用静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不让它投入运行。一旦投入运行后,这些资源就一直归它所有,该进程就不会再请求别的任何资源了。
缺点:有些资源可能只需要用很短的时间,因此如果进程的整个运行期间都一直保持着所有资源,就会造成严重的资源浪费,资源利用率极低。另外,该策略也有可能导致某些进程饥饿

4、破坏循环等待条件
可采用顺序资源分配法。首先给系统中的资源编号,规定每个进程必须按编号递增的顺序请求资源同类资源(即编号相同的资源)一次申请完。
原理分析:一个进程只有已占有小编号的资源时,才有资格申请更大编号的资源。按此规则,已持有大编号资源的进程不可能逆向地回来申请小编号的资源,从而就不会产生循环等待的现象。

小节回顾
在这里插入图片描述

(三)⭐避免死锁⭐

  1. 安全序列
    所谓安全序列,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个
    如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。
    ⭐⭐如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁(处于安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)⭐⭐
  2. ⭐银行家算法⭐
    思想:在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。
    看视频,理解最重要

(四)死锁的检测和解除

为了能对系统是否已发生了死锁进行检测,必须:

  1. 某种数据结构来保存资源的请求和分配信息;
  2. 提供一种算法,利用上述信息来检测系统是否已进入死锁状态。

在这里插入图片描述
该图要注意,⭐⭐进程指出去的时请求变,需要所指向的资源,资源指出去的时分配边,表示已经分配出去的资源⭐⭐
⭐按照上述规则,如果能够得到一个安全序列,并且消除所有边,此时一定没有发生死锁,反之就是发生了死锁⭐。

死锁的解除
在这里插入图片描述

小节回顾
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
操作系统概念背诵 一、进程管理 1. 进程管理的功能 ① 进程控制 ② 进程同步 ③ 进程通信 ④ 进程(线程)调度 2. 程序顺序执行时的特征:顺序性、封闭性、可再现性。 3. 程序并发执行时的特征:间断性、失去封闭性、不可再现性。 4. 进程程序段、数据段和进程控制块(PCB)组成。 5. 进程的定义 ① 进程程序的一次执行。 ② 进程一个程序及其数据在处理机上顺序执行时所发生的活动。 ③ 进程进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。 ④ 进程程序一个数据集合上的运行过程,是系统进行资源分配和调度的一个独立单位。 6. 进程的基本特征:动态性、并发性、独立性、异步性、结构特征(程序+数据+PCB) 7. 进程的状态 三态:就绪状态、运行状态、阻塞状态。 五态:活动就绪、静止就绪、活动阻塞、静止阻塞、运行。 8. 进程控制块(PCB)的组成:进程标识符、处理机状态、进程调度信息、进程控制信息。 9. 临界区:进程中访问临界资源的那段代码叫做临界区。 10. 同步机制必须遵循的原则:空闲让进、忙则等待、有限等待、让权等待。 11. P, V 操作的定义 P(S):S = S − 1; 若S≥0,则当前进程继续运行; 若S<0,则将当前进程插入到S 的等待队列中去。 V(S):S = S + 1; 若S>0,则当前进程继续运行; 若S≤0,则从S 的等待队列中移出一个进程放到就绪队列中去。 12. 信号量的物理意义 S = −n 时,表示有n 个等待进入临界区的进程,当前已有进程在临界区中访问临界资源; S = 0 时,表示不允许任何进程进入临界区,当前已有进程在临界区中访问临界资源; S = n 时,表示临界区是空闲的,该类资源的可用数目为n,可以有n 个进程访问该类资源。 13. 高级通信机制有:共享存储器系统、消息传递系统、管道通信系统。 14. 线程的定义:线程是进程内的一个实体,是处理机调度的基本单位,是程序内部一个单一的顺序控 制流。 15. 引入进程的目的:是为了使多个程序并发执行,提高资源利用率和系统吞吐量。 16. 引入线程的目的:是为了减少程序并发执行时的时空开销,使操作系统具有更好的并发性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖安大龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值