操作系统 第四章
重难点:
处理器调度、作业调度算法、进程调度算法、进程死锁及解决方案
处理器调度
- 调度就是对资源分配的决策
- 操作系统中的调度:作业调度、进程调度、交换调度、设备调度
- 调度的衡量指标
-
周转时间 / 平均周转时间
- 作业提交给计算机到最终完成所花费的时间 t 即为周转时间,说明了作业在系统中停留时间的长短,越短说明调度越有效$$t = t_c - t_s$$ 其中 $t_s$ 是作业提交时刻(Start),$t_c$ 是作业完成时刻(Complete)
单个作业的周转时间不足以表明整个调度的效率,平均周转时间把所有作业的周转时间求平均。越短,意味着这些作业在系统内停留的时间越短,因而系统吞吐量越大,资源利用率越高$$t = (t_1 + t_2 + ... + t_n) / n$$
- 作业提交给计算机到最终完成所花费的时间 t 即为周转时间,说明了作业在系统中停留时间的长短,越短说明调度越有效$$t = t_c - t_s$$ 其中 $t_s$ 是作业提交时刻(Start),$t_c$ 是作业完成时刻(Complete)
-
加权周转时间 / 平均加权周转时间
- 周转时间与作业大小有关,所以定义加权周转时间 w,表明作业在系统相对停留时间(相对自己的运行时间)$$w = t / t_r$$ 其中 $t_r$ 是作业运行时间(Run),它可以表征作业大小。$t$ 是作业周转时间。但实际中 $t_r$ 难以准确衡量
平均加权周转时间$$w = (w_1 + w_2 + ... + w_n) / n$$
- 周转时间与作业大小有关,所以定义加权周转时间 w,表明作业在系统相对停留时间(相对自己的运行时间)$$w = t / t_r$$ 其中 $t_r$ 是作业运行时间(Run),它可以表征作业大小。$t$ 是作业周转时间。但实际中 $t_r$ 难以准确衡量
-
响应时间
- R = 用户得到对请求的反馈 - 请求提交时刻
-
其他
- 公平合理、提高资源利用率、吞吐量;对于一个调度算法不可能满足全部指标,只能侧重几个
- 公平合理、提高资源利用率、吞吐量;对于一个调度算法不可能满足全部指标,只能侧重几个
-
作业调度
-
写在前面
- 作业调度主要针对批处理系统,对于脱机批处理系统,一批作业需要先由专门的输入计算机输入到磁带上,操作员再把磁带移到主计算机,然后启动主计算机,也就是提交之后可能不是马上执行。而联机批处理系统中,作业主要一经提交立刻进入主计算机,也就是提交之后马上执行。
- 作业调度主要针对批处理系统,对于脱机批处理系统,一批作业需要先由专门的输入计算机输入到磁带上,操作员再把磁带移到主计算机,然后启动主计算机,也就是提交之后可能不是马上执行。而联机批处理系统中,作业主要一经提交立刻进入主计算机,也就是提交之后马上执行。
-
作业状态
-
作业调度功能
- 设计数据结构,登记调度所需要的参数
- 执行指定的算法,从作业的后备队列中选择一个作业
- 为选中的作业分配资源,创建进程
- 作业完成时的资源回收
-
作业调度算法
- 先来先服务(First Come First Serve)
- 就是排队,按照作业进入系统的时间先后来挑选作业。先进先运行。
- 公平合理、容易实现,效率不高。只考虑了等候时间,没考虑运行时间。比如一个晚来的短作业要很久才被执行,此算法不利于短作业,有利于大作业
- 短作业优先调度算法(Short Job First)
- 参考运行时间,选运行时间最短的作业运行
- 思想简单,实现困难(因为要事先知道作业大小,而又无法准确估计作业大小),拥有最小平均周转时间,吞吐量大,但效率不高。忽视了作业等候时间。比如一个早来的长作业很长时间得不到调度,易出现资源“饥饿”现象
- 高响应比优先调度算法(HRN)
- 响应比定义:作业的等待时间与作业大小的比值
响应比 = 等待时间 / 作业大小
=(系统当前时间 - 作业提交时刻)/ 作业运行时占用处理器时间的总和
= 1 + 等待时间 / 运行时间
计算每个作业的响应比,选择响应比高的作业优先运行 - 特点
- 综合了先来先服务算法 (FCFS) 和短作业优先算法 (SJF)
- 响应比 R 与作业的大小成反比,体现 SJF 算法,缺点也是实现困难
- 响应比 R 与作业的等待时间成正比,体现 FCFS 算法
- 响应比定义:作业的等待时间与作业大小的比值
- 先来先服务(First Come First Serve)
进程调度
-
解决进程并发时如何轮流交替运行?进程调度方式解决怎么停下来,进程调度算法解决怎么补新进程上去
-
进程调度的功能
- 进程调度方式:简单来说就是正在执行中的进程怎么停下来,以让出处理器
- 抢占方式(实时、分时操作系统常用)
- 系统可以基于某些原则(常见的原则有:时间片原则、优先级原则、任务紧迫性、重要性原则等等),在没有任何警告的情况下,让运行的进程停下来,让出处理器
灵活但是系统开销大
- 系统可以基于某些原则(常见的原则有:时间片原则、优先级原则、任务紧迫性、重要性原则等等),在没有任何警告的情况下,让运行的进程停下来,让出处理器
- 非抢占方式(批处理操作系统常用)
- 让运行的进程继续执行,除非它自身原因让出处理器,否则一直运行直至完成
管理简单、系统开销小但是不灵活
- 让运行的进程继续执行,除非它自身原因让出处理器,否则一直运行直至完成
- 抢占方式(实时、分时操作系统常用)
- 进程调度算法:从就绪队列中按照指定的算法选择一个进程,准备执行
-
先来先服务(FCFS)
- 按进入就绪队列的先后顺序,优先选择先进入就绪队列的进程
“进程调度采用先来先服务算法时,因为先进入就绪队列的进程先被选中运行,后来的进程后运行,所以 FCFS 算法导致系统工作流程只能是顺序执行而不能实现并发执行”此说法对吗?不对,因为进程运行过程中可能进入阻塞状态,此时调度程序就可以选择下一个就绪进程运行,实现并发。
- 按进入就绪队列的先后顺序,优先选择先进入就绪队列的进程
-
时间片轮转算法(RR)
- 把所有就绪进程按先进先出原则排成队列,新来进程加到队列末尾。从就绪队列的队首移出一个进程,并分配一个时间片 q(允许进程连续使用处理器的最长时间段)。进程以 q 为单位轮流使用 CPU。刚刚运行一个时间片的进程排到队列末尾,等候下一轮运行。不同进程的时间片可以不同,特别的,如果每个进程分配的时间片相同,就叫做简单 RR 算法。
-
RR 算法需要设计一个定时器,定时器为 0 时产生中断。用分配的时间片作为定时器初值
-
三种情况:
- 时间片用完,任务还没完成 -> 回到就绪队列末尾,进行新一轮调度
- 时间片没完,任务完成 -> 立即进行新一轮调度,新一轮分配的时间片独立(不考虑还剩多少时间片)
- 时间片没完,进程阻塞 -> 立即进行新一轮调度,新一轮分配的时间片独立(不考虑还剩多少时间片)
-
优点:
- 公平性:每个就绪进程有平等机会获得 CPU
- 交互性:每个进程等待(N - 1)× q 的时间就可以重新获得 CPU
-
改进:
- 时间片大小可变
- 组织多个就绪队列
-
- 进程调度方式:简单来说就是正在执行中的进程怎么停下来,以让出处理器
-
优先数调度算法
- 根据进程优先级,把 CPU 分配给优先级最高的进程
- 静态优先级:进程创建时根据当前系统情况赋予进程一个优先级,之后整个进程运行期间,优先级不再改变
- 动态优先数:进程创建时赋予进程一个初始优先级,之后整个进程运行期间,可以根据系统的状况变化,修改进程的优先级
死锁问题
- 什么是死锁
- 对于一组进程 P1、P2、···、Pn(n > 1),它们当前都处于阻塞状态,对于这组进程中的一个进程 Pi,至少存在同组的另一个进程 Pj,Pi 的阻塞状态只能由 Pj 的某个操作执行后才能唤醒,而 Pj 处于阻塞状态,无法执行这个操作,此时,这组进程处于死锁状态
- 和死循环的区别(没有联系)
死循环 死锁 产生 必然性 偶然性 进程状态 执行状态 阻塞状态 原因 程序设计不当或编写错误 操作系统的管理、控制 - 死锁产生的根本原因
系统拥有的资源数量小于各进程对资源的需求总数 - 死锁的四个必要条件
- 互斥条件:每一个进程至少和同组的的另一个进程共享一类临界资源
- 不剥夺条件:一个进程申请的资源,只能由自己执行归还操作,别的进程不能剥夺
- 请求与保持条件:进程在申请新资源得不到满足而阻塞时,对原来已经申请分配得到的资源仍然保持着
- 环路等待条件:一组进程处于死锁,可以对这组进程适当排序后,得到一个等待的环路
死锁的解决方法
- 死锁预防
- 在资源分配上采取一定的限制措施,来破坏死锁产生的 4 个必要条件。根本上解决,但很难实现
- 互斥条件:原则上不能被破坏,打印等个别资源可以采取虚拟技术
- 不剥夺条件:原则上不能被破坏
- 请求与保持条件
- 静态分配:对于一个进程运行所需要的全部资源,要在开始运行之前就一次性地提出申请,系统在全部满足的情况下才实施分配,有一个不满足就都不分配;具有一般性,但事先很难准确地估计进程运行所要全部资源,且降低了资源的利用率
- 资源暂时释放:进程在申请新资源得不到满足而阻塞时,主动归还已经申请到的所有资源,之后在重新申请;仅限于个别资源的操作;进程不稳定,一直申请-归还-申请-归还
- 环路等待条件
- 按序分配:对于一组需要限制的资源,将它们进行编号,其中任意两个资源的编号可以比较大小,规定,一个进程只能申请比它已经获得的所有编号还大的编号的资源;具有一般性,但存在与静态分配的问题,且编号管理困难。
- 单请求方式:不适用于复杂任务的进程
- 死锁避免
- 定义:允许进程动态地申请资源,但系统在资源分配时进行系统的安全状态检查,如果分配后系统处于安全状态
- 安全状态和安全序列
- 对于系统所有进程,可以找出一个处理器执行这些进程的顺序,按照这个顺序依次执行各个进程,每个进程都可以运行完成;这个顺序就是安全序列
- 某一时刻,如果系统当前是不安全状态的,说明一个存在一组进程(就是某个顺序),它们将进入死锁状态。如果系统当前是安全状态的,也有可能存在进程死锁,只有在之后的每次资源分配后,都能保证系统处于安全状态,才能保证不存在进程死锁
- 银行家算法
- 死锁检测与恢复
- 死锁检测:系统不采用死锁预防、避免等方法,允许系统存在进程死锁,但安排一个检测程序,检测到时再处理;原理:进程死锁是小概率事件
- 死锁恢复:
- 剥夺资源
- 撤销进程
- 重新启动系统
- 假设某一道程序运行时需要访问临界资源R,该程序可供多个用户同时运行,如果系统拥有资源R的数量为k,而程序申请使用资源R的数量为x(假定程序每次只申请1个,先后分x次申请),有n个用户同时运行该程序。那么,k、x和n满足什么条件下,可以保证用户运行时不会产生进程死锁?
$$k - n × (x - 1) >= 1$$

浙公网安备 33010602011771号