导图社区 Os操作系统
Os思维导图:计算机系统概述(操作系统的运行环境、操作系统的基本概念、操作系统的发展与分类)、进程管理、内存管理、文件管理、输入/输出(I/O)管理等等
编辑于2022-03-31 15:02:07Os
进程管理
2.1 进程与线程
进程的概念
进程:动态的,是程序的执行过程
程序:静态的,就是存放在磁盘里的执行文件。
进程特征
动态性
并发性
独立性
异步性
结构性:从结构上看进程实体是由程序段,数据段,进程控制快三部分构成
🔺🔺🔺进程状态与转换
进程状态
运行态
就续态(仅缺少处理机,只要获得处理机就可直接运行,处理机一旦空闲就会立即从就绪队列选择一个进程进入运行态
就绪队列非空必定有一个进程处于运行态
没有进程处于运行态,就绪队列必为空
阻塞态(等待态):进程需要其它资源除了处理机或等待某一事件☠️🤡
创建态
进程正在被创建,尚未转到就绪态
🤡创建步骤
首先申请一个空白的PCB,并向PCB中填写一些控制和管理进程的信息。
然后由系统为该进程分配允许所需要的资源
最后将该进程转为就续态
结束态
进程需要结束运行时,系统首先必须将该进程置为结束态
然后进一步处理资源释放和回收等工作。
进程转换
就续态-运行态:就续态的进程被调度后,获得处理机资源
运行态-就续态
处于运行态的进程在时间片用完后,不得不让出处理机
🤡进程在时间片用完释放处理机进程优先级降低
在可剥夺的操作系统中,当有更高优先级的进程就续时,让更高优先级的进程执行
运行态-阻塞态(主动)
进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(🔺如i/o操作的完成)
进程以系统调用的形式请求操作系统提供服务,这是一种特殊的,由运行用户态程序调用操作系统内核过程的形式
阻塞态-就续态(被动)
进程等待的事件到来时,如i/o操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞态转为就续态
进程控制:进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,他是一个不可分割的基本单位
🤡创建(创建原语):父进程与子进程
1⃣️为新进程分配一个唯一的进程标识号,并申请一个空白的PCB(PCB是有限的),如PCB创建失败,则申请失败
2⃣️为进程分配资源:⚠️若资源不足(如内存空间)则不是创建失败,而是处于阻塞态,等待内存资源
3⃣️初始化PCB,主要包括标志信息,处理机状态信息,处理机控制信息,设置进程的优先级等
4⃣️若就续队列能够接纳新进程,则将新进程插入就续队列,等待被调度进行🤡🐉2013
终止
事件
正常结束
异常结束
外界干预
过程(撤销原语
1⃣️根据被终止进程的标识符,检索PCB,从中读出该进程的状态
2⃣️若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程
3⃣️若进程还有子孙进程,则应将其所有子孙进程终止
4⃣️将该进程的所有资源还原给其父进程,或归还给操作系统
5⃣️将该PCB从所在队列(链表)中删除
🤡进程切换(操作系统内核的支持下运行,与内核紧密相关
过程
1⃣️保存处理机上下文,包括程序计数器和其他计数器
2⃣️更新PCB
3⃣️把进程的PCB移入相应的队列
4⃣️选择另一个进程执行并更新PCB
5⃣️更新内存管理的数据结构
6⃣️恢复处理机上下文
⚠️进程切换和处理机模式切换是不同的
模式切换
处理机逻辑上可能还在同一进程中运行
切换进程
当前运行进程改变了,则当前进程的运行环境信息也需要改变
⚠️
调度是决策行为
切换是指实际分配行为
🤡当一个进程从运行态变为就绪态时必然引起进程的切换。
进程切换是指CPU调度不同的进程执行,当一个进程从运行态变为就绪态时,CPU调度另一个进程执行,引起进程切换。
阻塞和唤醒
阻塞(block)过程:被阻塞进程自我调用实现的
1⃣️找到将要被阻塞进程的标识号对应的PCB
2⃣️若该进程处于运行态则保护现场,将其转为阻塞态,停止运行
3⃣️把该PCB插入相应事件的等待队列,将处理机资源调度给其他就绪进程
唤醒(wakeup)过程:由一个被唤醒进程合作或被其他相关进程调用实现的
1⃣️在该事件的等待队列中找到相应进程的PCB
2⃣️将其从等待队列中移出,并置其状态为就续态
3⃣️把该PCB插入就续队列,等待调度程序调度
block原语和wakeup原语必须成对使用
进程的组织
进程PCB (进程存在的唯一标识
PCB主要包含:
进程描述信息
进程标识符
标志各个进程,每个进程都有一个唯一的标识号。
用户标识符
进程归属的用户,用户标识符主要为共享和保护服务
进程控制和管理信息
进程当前的状态
描述进程的状态信息,作为处理机分配调度的依据
进程优先级
描述进程抢占处理机的优先级,优先级高的进程可优先获得处理机。
资源分配清单🧾
用以说明有关内存地址空间或虚拟地址空间的状况,所打开文件的列表和所使用的输入/输出设备信息。
处理机相关信息
主要指处理机中各寄存器中的值,当进程被切换时,处理机状态信息都必须保存在相应的PCB中,以便在该进程重新执行时,能从断点继续执行。
操作系统通过PCB 表来管理和控制进程。
常见组织方式
链接方式
将同一状态的PCB 链接成一个队列,不同状态对应不同队列,也可以把处于阻塞态的进程PCB 根据其阻塞原因的不同,排成多个阻塞队列
索引方式
将同一进程组织在一个索引表中,索引表的表项指向相应的PCB ,不同状态对应不同的索引表,如就绪索引表和阻塞索引表等
程序段
程序可被多个进程共享,即多个进程可以运行同一个程序
数据段
原始数据
中间或最终结果
进程的通信
低级通信方式
PV 操作
高级通信方式
共享存储
低级:数据结构的共享
高级:存储区的共享
消息传递
进程间的数据交换是以结构化的信息为单位的
方式
直接通信:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息
间接通信方式
管道通信
用于连接一个读和写进程以实现它们之间的通信的一个🔺共享文件,又名pipe 文件。
为了协调双方的通信,管道机制必须提供:互斥,同步和确定对方的存在
可以克服的问题
限制管道的大小
读进程也可能工作得比写进程快
⚠️
管道读数据是一次性操作,一旦被读取就被抛弃,释放空间
只能采用半双工通信:即某一时刻只能单向传输。要实现父子进程双方互动通信,需要定义两个进程
线程概念和多线程模型
线程的基本概念
目的
引入进程的目的是更好的使多道程序并发执行,提高资源利用率和系统吞吐量
引入线程的目的是减少程序在并发执行所付出的时间开销,提高操作系统的并发性能
概念
是一个基本 的CPU 执行单元,也是程序执行流的最小单元,由线程ID ,程序计数器,寄存器 和堆栈组成
是进程中的一个实体,🤡是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点系统必不可少的资源,但它可与同属一个进程的其他线程共享进程所有的全部资源。
一个线程可以创建和撤销另外一个进程,同一个进程中的多个线程可以并发执行
由于线程之间相互制约,致使线程在运行中呈现出间断性。线程也有就绪,阻塞和运行三种基本状态
🔺引入线程后,进程的内涵发生了改变
🤡进程只做除CPU 外的系统资源的分配单元
🤡线程作为处理机的分配单元
线程与进程的比较
调度
拥有资源
并发性
系统开销
地址空间和其它资源
通信方面
线程的属性
进程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制快,线程控制块记录了线程执行的寄存器和栈等现场状态。
不同线程可以执行相同的程序
同一个进程中的各个线程共享该进程的所有资源
线程是处理机的独立调度单位,多个线程是可以并发执行的。
一个线程被创建后,便开始了它的生命周期,直至终止。
线程的实现方式
用户级线程
有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。
应用程序可以通过使用线程库设计成多线程程序。
内核级线程(内核支持的线程)
线程管理的所有工作由内核完成,应用程序没有进行线程管理的代码,只有一个到内核级线程的编程接口。
内核为进程及其内部的每个线程维护上下文信息,调度也在内核基于线程架构的基础上完成。
多线程模型
实现用户级线程和内核级线程的连接方式
分为
多对一模型
将多个用户级线程映射到一个内核级线程,线程管理在用户空间完成(用户级线程对操作系统不可见(透明))
🤡👹2019统考 优:线程管理是在用户空间进行的,效率较高
缺:一个线程在使用内核服务是被阻塞,整个进程都会被阻塞;多个线程不能并行地运行在多处理机上。
一对一模型
每个用户级线程映射到一个内核级线程
优:一个线程被阻塞,允许另外一个线程继续执行,并发能力较强
缺:每创建一个用户级线程都需要创建一个内核级线程与其对应,这样创建线程的开销比较大,会影响到应用程序的性能。
多对多模型
将n 个用户级线程映射到m 个内核级线程上,要求m<=n
特点:是多对一模型和一对一模型的折中,既克服了多对一模型并发度不高又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。还拥有着两个的优点。(效率较高,并发能力较强)
🤡🤡🤡多线程系统的特长
利用线程并行地执行矩阵乘法运算
Web服务器利用线程响应HTTP请求
基于GUI的调试程序用不同的线程分别处理用户输入,计算和跟踪等操作。
2.2 处理机调度
调度的概念
调度的基本概念
处理机调度是对处理机进行分配,即从就绪队列中按照一定的算法(公平,高效)选择一个进程并将处理机分配给它运行,以实现进程并发的执行。
处理机调度是多道程序操作系统的基础,是操作系统设计的核心问题。
调度的层次
1⃣️ 作业调度。又称高级调度
主要任务是按一定的原则从外存上处于后备状态的作业中挑选一个(或多个)作业,给它们分配内存,输入/输出设备等必要的资源,并建立相应的进程,以使它们获得竞争处理机的权利。
作业调度就是内存与辅存之间的调度。对于每个作业只调入一次,调出一次。
多批道处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度。
作业调度的执行率低,通常为几分钟一次。
2⃣️ 中级调度。又称内存调度
作用是提高内存利用率和系统吞吐量。
将暂时不能运行的进程调至外存等待,把此时的进程状态称为挂起态。
当它们具备运行条件且内存稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改为就绪态,挂在就绪队列上等待。
3⃣️ 进程调度。又称低级调度
主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。
是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
进程调度的频率很高,一般几十毫秒一次。
三级调度的关系
关系
作业调度从外存的后备队列中选择一批作业进入内存,为它们建立进程,这些进程被送入就绪队列
进程调度就从就绪队列中选出一个进程,并把其状态改为运行态,把CPU分配给它。
中级调度是为了提高内存利用率,系统将那些暂时不能运行的进程挂起来。
当内存空间宽松时,通过中级调度选择具备运行条件的进程,将其唤醒。
特点
1⃣️ 作业调度为进程活动做准备,进程调度使进程正常活动起来,中级调度暂时将不能运行的进程挂起,中级调度处于作业调度和进程调度之间。
2⃣️ 作业调度次数少,中级调度次数多,进程调度频率最高。
3⃣️ 进程调度是最基本的,不可或缺的。
调度的时机,切换与过程
执行情况
进程调度和切换程序是操作系统内核程序。请求调度的事件发生后,才可能运行进程调度程序,调度了新的就绪程序后,才会进行进程间的切换。
🤡不能进行进程的调度与切换的情况
1⃣️ 在处理机中断的过程中
2⃣️ 进程在操作系统内核程序临界区中
3⃣️ 其它需要完全屏蔽中断的原子操作过程中。
中断,临界和屏蔽
上述过程发生引起调度的条件,则不能马上进行调度和切换,应置系统的请求调度标志,直到上述过程结束后才进行相应的调度和切换。
🤡应该进行进程调度与切换的情况
1⃣️ 发生引起调度条件且当前进程无法继续运行下去时,可以马上进行调度与切换。
若操作系统只在这种情况下进行进程调度,则是非剥夺调度。
2⃣️ 中断处理结束或自陷处理结束后,返回被中断进程的用户态程序执行现场前,若置上请求调度标志,即可马上进行进程调度与切换。
若操作系统支持这种情况下的运行调度程序,则实现了剥夺方式的调度。
无法进行和结束
总
进程切换往往是在进程调度完成之后立刻发生,它要求保留原进程当前切换点的现场信息,恢复被调度进程的现场信息。
现场切换时,操作系统内核将原进程的现场信息堆入当前进程的内核堆栈来保存它们,并更新堆栈指针。
内核完成从新进程的内核栈中装入新进程的现场信息,更新当前运行进程空间指针,重设PC寄存器等相关工作之后,开始运行新的进程。
调度方式
概念
所谓进程调度方式,是指当某个进程正在处理机上执行,若有某个更为重要或紧迫的进程需要处理,即有优先权更高的进程进入就绪队列。
两种调度方式
非剥夺调度方式,又称非抢占式方式
🤡🐉2012 优点:实现简单,系统开销小,适用于大多数的批处理系统,但它不能用于分时系统和大多数的实时系统。
剥夺调度方式,又称抢占式方式
对提高系统吞吐率和响应效率都有明显好处
但不是任意行为,而是要遵循一定的原则,主要有优先权,短作业优先和时间片原则等。
调度的基本准则
1⃣️ CPU利用率
CPU是计算机系统中最重要和昂贵的资源之一,所以应尽可能使CPU保持忙的状态,使这一资源利用率最高。
2⃣️ 系统吞吐量
表示单位时间内CPU完成作业的数量
3⃣️ 周转周期
是指从作业提交到作业完成所经历的时间,是作业等待,在就绪队列中排队,在处理机上运行及进行输入/输出操作所花时间的总和。
周转时间 = 作业完成时间 - 作业提交时间
平均周转时间 = (作业1的周转时间+•••+作业n的周转时间)/ n。 (n是作业数)
带权周转时间 = 作业周转时间 / 作业实际运行时间
平均带权周转时间 = 作业1的带权周转时间+•••+作业n的带权周转时间)/ n。
4⃣️ 等待时间
处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。
通常用来衡量一个算法的优劣
平均等待时间 = 各个进程所花时间 / 作业等待时间的平均值
5⃣️ 响应时间
通常用来衡量调度算法的评价准则。
典型的调度算法
先来先服务(FCFS)算法(不可剥夺算法)
即可用于作业调度又可用于进程调度
不能作为分时系统和实时系统的主要调度策略
在使用优先级调度时面对具有相同优先级的进程按FCFS原则处理。
计算
特点
算法简单,但效率低
🤡对长作业有利,对短作业不利(相对SJF和高响应比)
☠️有利于CPU繁忙型作业,而不利于I/O繁忙型作业。
🤡🐉2011 短作业优先(SJF)调度算法
SJP和SPF(短进程优先调度算法)是非抢占式算法
缺点
1⃣️ 对长作业不利
死锁是系统环形等待
SJF是调度策略问题
2⃣️ 不能保证紧迫性的作业能够被及时处理
3⃣️ 🤡作业的长短只是根据用户所提供的估计执行时间而定的,不一定能真正做到短作业优先调度
🤡SJF调度算法的平均等待时间,平均周转时间最少。
条件
所有进程同时可以运行
所有进程都几乎可以同时到达
优先级调度算法(又称优先权调度算法)
即可用于作业调度又可用于进程调度
根据新的更高优先级进程能否抢占正在执行的进程分为
非剥夺式优先级调度算法
当一个进程正在执行时需等待其完成后才能将其让给紧急的进程
剥夺式优先级调度算法
根据进程创建后其优先级能否可以改变分为
静态优先级
优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。
确定静态优先级的主要依据
进程类型,进程对资源的要求,用户要求
动态优先级
在进程运行的过程当中,根据进程情况的变化动态调整优先级
主要依据
进程占有CPU时间的长短,就绪进程等待CPU时间的长短
🤡进程优先级的设置原则
系统进程 > 用户进程
系统进程作为系统的管理者
交互型进程 > 非交互型进程(前台进程>后台进程
I / O型进程 > 计算型进程(CPU)
I / O设备的处理速度比CPU慢得多,将其优先级设置得更高那么就能让其尽早的开始工作,从而提升系统的整体效率。
高响应比优先调度算法
主要用于作业调度(高级调度)
响应比最高的先运行。
🤡响应时间比 >=1
Rp = (等待时间+要求服务时间)/ 要求服务时间
特点
作业的等待时间相同时,要求服务时间越短,响应比越高,🤡有利于短作业
要求服务时间相同时,作业的响应比由其等待时间决定,等待时间越长,其响应比越高,因而实现的事先来先服务。
对于长作业,作业的响应比可以随等待时间的增加而提高,等待时间足够长,其响应比便可升到很高,从而也可以获得处理机。
克服了饥饿状态,兼顾了长作业。
🤡时间片轮转调度算法
主要适用于分时系统
👹使多个交互的用户能够得到及时响应
👹能实现人机交互。
操作
系统将所有就绪进程按到达时间的先后次序排成一个队列
进程调度程序总是选择就绪队列中的第一个进程执行,即先来先服务原则
仅能运行一个时间片,在使用完一个时间片后及时没有运行完成,也必须释放(🤡被剥夺)处理机给下一个就绪的进程
被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。
时间片对系统性能的影响很大
时间片大:先来先服务
时间片段:增大处理机开销
🤡通常由系统的响应时间,就绪队列中的进程数目和系统的处理能力所决定。
多级反馈队列调度算法(融合了前面算法的优点)
是时间片轮转调度算法和优先级调度算法的综合与发展
🤡UNIX采用该算法,属于分时操作系统。
思想
1⃣️ 设置多个就绪队列,并为之赋予不同的优先级,优先级逐次降低。
2⃣️ 赋予各个队列中进程执行时间片的大小各不相同
🤡在优先级越高的队列中,每个进程的运行时间片越小。
3⃣️ 一个新进程进入内存后,首先将它放入第一级队列的末尾,按FCFS原则排队等待调度。
4⃣️ 仅当第一级队列为空时,调度程序才调度第二级队列中的进程运行。
优点
终端型作业用户:短作业优先
短批处理作业用户:周转时间较短
长批处理作业用户:部分执行,不会长期得不到处理。
2.3进程同步
基本概念
在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约关系。
1⃣️ 临界资源
🤡多个进程可以共享系统中的各种资源,但其中许多资源一次只能为一个进程所用,将一次只能为一个进程所使用的资源称为临界资源。
许多物理设备属于临界资源:打印机等
许多变量、数据等都可以被若干进程共享,也属于临界资源
对临界资源的访问,必须互斥的进行,在每个进程中,访问临界资源的那段代码称为临界区。
临界资源的访问过程
进入区
为了进入临界区使用临界资源,在进入区要检查可否进入临界区,若能进入临界区,则应设置正在访问临界区的标志,以阻止其他进程同时进入临界区。上锁🔒
上锁🔒
临界区
🤡🐉2013进程中访问临界资源的那段代码(程序),又称临界段。
退出区
将正在访问临界区的标志排除。
解锁🔓
剩余区
代码中剩余的部分。
进入区和退出区是负责实现互斥的代码段。
2⃣️ 同步(直接制约关系)
指为完成某种任务而建立的两个或多个进程,这些进程因为需要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。
进程之间的制约关系源于它们之间的合作。
3⃣️ 互斥(间接制约关系)
当一个进程进入临界区使用临界资源时,另一个进程必须等待,当占用临界资源的进程退出临界区后,另一个进程才允许去访问次临界区。
为禁止两个进程同时进入临界区,同步机制应遵循
1⃣️ 空闲让进
2⃣️ 忙则等待
3⃣️ 有限等待
对请求访问的进程,应保证能让有限时间内进入临界区。(保证不会饥饿)
4⃣️ 让权等待
当进程不能进入临界区时,应立即释放处理器,防止进程忙等待。
实现临界区互斥的基本方法
软件实现方法
在进入区设置并检查一些标志来标明是否有进程在临界区中,若已有进程在临界区,则在进入区通过循环检查进行等待,进程离开临界区后则在退出区修改标志。
算法
算法一:单标志法
设置一个公用整型变量turn
可确保每次只允许一个进程进入临界区,但两个进程必须交替进入临界区,若某个进程不再进入临界区,则另一个进程也将无法进入临界区。
违背“空闲让进”易造成资源利用不充分。
算法二:双标志法先检查
优点:不能交替进入,可连续使用
缺:违背忙则等待,检查和修改操作不能一次进行。
算法三:双标志法后检查
先检测对方的进程状态标志,再置自己的标志
解决忙则等待,但又违背了“空闲让进”和“有限等待”原则。
会发生两次进程都无法进入临界区
算法四:Peterson’s Algorithm ( 彼得森算法
解决了进程互斥问题,遵循了空闲让进,忙则等待,有限等待三个原则,但是依然未遵循让权等待的原则,会发生忙等。
硬件实现方法
计算机提供了特殊的硬件指令,允许对一个字中的内容进行检测和修正,或对两个字的内容进行交换等。
通过硬件支持实现临界段问题的方法称为低级方法,或称元方法。
方法
中断屏蔽方法
当一个进程正在使用处理机执行它的临界代码时,防止其它进程进入其临界区进行访问的最简单方法是,禁止一切中断发生,或称之为屏蔽中断、关中断。
CPU只在发生中断时引起进程切换,因此屏蔽中断能够保证当前运行的进程让临界区代码顺利地执行完,进而保证互斥的正确实现,然后执行开中断。
优点:简单高效
缺点:不适合用于多处理机,只适合用于操作系统内核进程,不适合用于用户进程开/关中断指令,只能运行在内核态。
硬件指令方法
TestAndSet指令(TSL指令)
是原子操作,执行时不允许被中断,及一气呵成。
功能是读出指定标志后把该标志设置为真。
为每个临界资源设置一个共享布尔变量lock,表示资源的两种状态
true表示正在被占用
初始值为false
在进程访问临界资源之前,利用TestAndSet检查和修改标志lock
若有进程在临界区,则重复检查,直到进程退出。
Swap指令(Exchange/XCHG指令)
功能是交换两个字(字节)的内容
仅是功能(硬件逻辑直接,不会被中断)实现,而并非软件实现的定义。
硬件方法的优点
适用于任意数目的进程,而不管是单处理机还是多处理机
简单、容易验证其正确性。
可以支持进程内有多个临界区,只需为每个临界区设立一个布尔变量
硬件方法的缺点
进程等待进入临界区时要耗费处理机时间,不能实现让权等待(当进程不能进入临界区时,应立即释放处理器,防止进程忙等待)
从等待进程中随机选择一个进入临界区,有的进程可能一直选不上,从而导致“饥饿”现象。
信号量(解决互斥与同步问题)
它只能被两个标准的原语wait(S)和signal(S)访问,也可记为“P操作”和“V操作”。
原语是指完成某种功能且不被分割,不被中断执行的操作序列,通常可由硬件实现。
原语功能的不被中断执行特性在单处理机上可由软件通过屏蔽中断方法实现。
原语若被打断则可能会去运行另一个对同一变量的操作实现,从而出现临界段问题。
整型信号量
记录型信号量
利用信号量实现同步
利用信号量实现互斥
利用信号量实现互斥前驱关系
分析进程同步和互斥问题的方法步骤
管程
经典同步问题
2.4死锁
概念
死锁的定义
指多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向前推进。
死锁产生的原因
1⃣️ 系统资源的竞争
系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在运行过程中,会因争夺资源而陷入僵局,如磁带机、打印机等。
只有对不可剥夺资源的竞争才可能产生死锁,对可剥夺资源的竞争是不会引起死锁的。
2⃣️ 进程推进顺序非法
进程在运行过程中,请求和释放资源的顺序不当,也同样会导致死锁。
信号量使用不当也会造成死锁。
3⃣️ 死锁产生的必要条件
必须同时满足
1⃣️ 互斥条件
2⃣️ 不可剥夺条件
🤡进程所获得的资源在未使用完之前,不能被其它进程强行夺走,即只能由获得该资源的进程自己来释放(只能主动释放)
3⃣️ 请求并保持条件
4⃣️ 循环等待条件
发生死锁一定会有循环等待,但发生循环等待不一定发生死锁。
循环等待是死锁的必要不充分条件。
资源分配图含圈而系统又不一定有死锁的原因是,同类资源数大于1。
但若系统中每类资源都只有一个,则资源分配图含圈就变成了系统出现死锁的充分必要条件。
🤡死锁的发生至少有两个进程。
处理策略
为使系统不发生死锁,必须设法破坏产生死锁的四个必要条件之一,或允许死锁发生,但当死锁发生时能检测出死锁,并有能力实现恢复。
死锁预防
死锁避免
死锁检测和解除
策略比较
死锁预防
破坏死锁产生的四个必要条件之一
破坏互斥条件
不太可行
破坏不剥夺条件
暂时释放一个进程所占有的资源,或者说是被剥夺,或从而破坏了不剥夺条件。
实现复杂,释放资源可能会导致前一阶段工作的失效。
反复的申请和释放资源会增加系统开销,降低系统吞吐量。
常用于状态易于保存和恢复的资源,如CPU的寄存器及内存资源,一般不能用于打印机之类的资源
破坏请求并保持条件
采用预先静态分配方法,即进程在运行前一次申请完它所需要的全部资源,在它的资源未满足前,不把它投入运行。
一旦投入运行,这些资源就一直归它所有,不再提出其它资源请求,这样就可以保证系统不会发生死锁。
优点:实现简单
缺点:
系统资源严重浪费,其中有些资源可能仅在运行初期或快结束时才使用,甚至根本不使用。
容易导致饥饿,由于个别资源长期被其它进程占用时,将致使等待该资源的进程迟迟不能开始运行。
破坏循环等待条件
采用顺序资源分配法。
给系统的资源编号,规定每个进程必须按编号递增的顺序请求资源,同类资源一次申请完。
缺点:
编号必须稳定,限制了新类型设备的增加
尽管在为资源编号时已考虑到大多数作业实际使用这些资源的顺序,但也经常会发生作业使用资源的顺序与系统规定顺序不同的情况,造成浪费。
按次序申请资源的方法,必然会给用户的编程带来麻烦。
🤡若资源分配图没有出现环路即不满足循环等待条件即进程不是处于死锁状态。
死锁避免
在资源动态分配过程中,🤡防止系统进入不安全状态,以避免发生死锁。
施加的限制条件较弱,可以获得更好的性能。
🤡属于事先预防策略,但并不是事先采取某种限制措施破坏死锁的必要条件。
系统安全状态
避免死锁的方法中,运行进程动态的申请资源,但系统在进行资源分配之前,应先计算此次分配的安全性。
若此次分配不会导致系统进入不安全的状态,则运行分配,
否则让进程等待。
安全状态是指系统按某种进行推进顺序为进程分配其所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺序完成。
若系统无法找到一个安全序列则处于一个不安全状态。
并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态
只要系统处于安全状态,系统就可以避免进入死锁状态。
银行家算法
安全性算法举例
银行家算法举例
死锁检测和解除
资源分配图
从进程到资源的有向边称为请求边
从资源到进程的有向边称为分配边
圆圈⭕️代表一个进程,用框代表一类资源,框中的一个圆代表一类资源中的一个资源。
🤡每种资源只有一个,并出现环路。即处于死锁状态。
🤡死锁定理
判断某种资源是否有空闲,应该用它的资源数量减去它在资源分配图中的出度。
S为死锁的条件是当且仅当S状态的资源分配图是不可完全简化的,该条件为死锁定理。
☠️用来处理死锁检测的方法。
死锁解除
资源剥夺法
挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。
应防止被挂起的进程长时间得不到资源而处于资源匮乏的状态。
撤销进程法
强制撤销部分甚至全部死锁进程并剥夺这些进程的资源。
原则可以按进程优先级和撤销进程代价的高低进行。
🤡进程回退法
让一或多个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非剥夺。
要求系统保持进程的历史信息,设置还原点。
常考题
2.5疑难点
内存管理
3.1内存管理概念
3.2虚拟内存管理
文件管理
4.1文件系统基础
4.2文件系统实现
4.3文件组织与管理
4.4疑难点
输入/输出(I/O)管理
5.1 I/O管理概述
5.2 I/O核心子系统
I/O子系统的概念
I/O调度概念
高速缓存与缓冲区
设备分配与回收
🤡🐉SPOOLing技术(假脱机技术) 2011
为了缓和CPU的高速性与I/O设备低速性之间的矛盾
利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,或者相反。
外部设备同时联机操作,又称假脱机输入/输出操作。是操作系统中采用的一项将独占设备改造成共享设备的技术。
5.3 疑难点
计算机系统概述
操作系统的基本概念
操作系统的发展与分类
操作系统的运行环境
操作系统的运行机制
中断和异常的概念
概念
操作系统内核工作在核心态,用户程序工作在用户态。
用户程序不运行使用核心态的功能,而它们又必须使用这些功能就是通过中断或异常。
发生中断或异常时,运行用户态的CPU会立刻进入核心态,就是通过硬件实现的。
操作系统的发展过程大体上就是想方设法不断提高资源利用率的过程,而提高资源利用率就需要在程序并未使用某种资源时,把它对那种资源的占有权释放,这一行为就要通过中断实现。
中断和异常的定义
中断(Interruption)也称外中断,指来自CPU执行指令意外的事件的发生。
常见外中断
时钟中断,表示一个固定的时间片已到,让处理机处理计时,启动定时运行的任务等。
这一类中断通常是与当前指令执行无关的事件,即它们与当前处理机运行的程序无关。
I / O请求
异常(Exception)也称内中断,指源自CPU执行指令内部的事件。
对异常处理一般要依赖于当前程序的运行现场,而且异常不能被屏蔽,一旦出现应立即处理。
常见内中断
1⃣️ 除数是零
2⃣️ 程序的非法操作码
3⃣️ 地址越界
4⃣️ 算术溢出
5⃣️ 虚拟地址的缺页
6⃣️ 专门的陷入指令
🤡👹2013中断处理的过程
1⃣️ 关中断
2⃣️ 保存断点
原来的程序断点(程序计数器PC)
3⃣️ 中断服务程序寻址
取出中断服务程序的入口地址送入程序计数器PC
CPU进入中断程序后,由硬件自动完成的(中断隐指令)
4⃣️ 保存现场和屏蔽字
现场信息一般是程序状态字寄存器PSWR和某些通用寄存器的内容。
5⃣️ 开中断
允许更高级中断请求得到响应
6⃣️ 执行中断服务程序
中断请求的目的
7⃣️ 关中断
8⃣️ 恢复现场和屏蔽字
9⃣️ 开中断,中断返回
中断服务程序完成
恢复现场是指在中断返回前,必须讲寄存器的内容恢复到中断处理前的状态,这部分工作由中断服务程序完成。
中断返回由中断服务程序的最后一条中断返回指令完成。
系统调用
操作系统的体系结构