操作系统期末复习1

本文介绍进程调度的基本概念,包括进程调度的任务、机制及各种调度算法,如FCFS、SJF、SRTN、HRRN等,并探讨了批处理、实时调度算法以及磁盘访问调度算法。

进程调度算法

进程调度的任务

(1)保存处理机的现场信息
(2)按某种算法选取进程
(3)把处理器分配给进程

进程调度机制

(1)排队器
(2)分派器
(3)上下文切换器

进程调度方式

(1)非抢占方式
某一进程被调度运行后,除非由于它自身的原因不能运行,否则一直运行下去
(2)抢占方式
当有比正在运行的进程优先级更高的进程就绪时,系统可强行剥夺正在运行进程的CPU,提供给具有更高优先级的进程使用

批处理系统的调度算法

先来先服务(FCFS-First Come First Serve)

按照进程就绪的先后顺序使用CPU

最短作业优先(SJF-Shortest Job First)

具有最短完成时间的进程优先执行
非抢占式

最短剩余时间优先

(SRTN-Shortest Remaining Time Next)

最高响应比优先

(HRRN-Highest Response Ratio Next)
调度时,首先计算每个进程的响应比R;之后,总是选择 R 最高的进程执行
响应比R = 周转时间 / 处理时间
= (处理时间 + 等待时间)/ 处理时间

批处理系统的调度算法

轮转调度算法
优先级调度算法

是把处理机分配给就绪队列中优先级最高的进程,分为以下两种:
(1)非抢占式优先级调度算法
(2)抢占式优先级调度算法

多队列调度算法
多级反馈队列调度算法

设置多个就绪队列,第一级队列优先级最高
给不同就绪队列中的进程分配长度不同的时间片,第一级队列时间片最小;随着队列优先级别的降低,时间片增大
当第一级队列为空时,在第二级队列调度,以此类推
各级队列按照时间片轮转方式 进行调度
当一个新创建进程就绪后,进入第一级队列
进程用完时间片而放弃CPU,进入下一级就绪队列
由于阻塞而放弃CPU的进程进入相应的等待队列,一旦等待的事件发生,该进程回到原来一级就绪队列(?)

基于公平原则的调度算法

死锁的预防和避免方法

一组进程中,每个进程都无限等待被该组进程中另一进程所占有的资源,因而永远无法得到的资源,这种现象称为进程死锁,这一组进程就称为死锁进程

产生死锁的必要条件

互斥使用(资源独占)

一个资源每次只能给一个进程使用

占有且等待(请求和保持,部分分配)

进程在申请新的资源的同时保持对原有资源的占有

不可抢占(不可剥夺)

资源申请者不能强行的从资源占有者手中夺取资源,资源只能由占有者自愿释放

循环等待

存在一个进程等待队列 {P1 , P2 , … , Pn},
其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路

解决死锁的办法

不考虑此问题(鸵鸟算法)

不让死锁发生

死锁预防
静态策略:设计合适的资源分配算法,不让死锁发生
死锁避免
动态策略:以不让死锁发生为目标,跟踪并评估资源分配过程,根据评估结果决策是否分配

让死锁发生
死锁检测与解除

死锁预防

定义:在设计系统时,通过确定资源分配算法,排除发生死锁的可能性
具体的做法是:防止产生死锁的四个必要条件中任何一个条件发生

破坏“互斥使用/资源独占”条件

资源转换技术:把独占资源变为共享资源
SPOOLing技术的引入
解决不允许任何进程直接占有打印机的问题
设计一个“守护进程/线程”负责管理打印机,进程需要打印时,将请求发给该daemon,由它完成打印任务

破坏“占有且等待”条件

实现方案1:要求每个进程在运行前必须一次性申请它所要求的所有资源,且仅当该进程所要资源均可满足时才给予一次性分配
问题:资源利用率低;“饥饿”现象
实现方案2:在允许进程动态申请资源前提下规定,一个进程在申请新的资源不能立即得到满足而变为等待状态之前,必须释放已占有的全部资源,若需要再重新申请

破坏“不可抢占”条件

实现方案:
当一个进程申请的资源被其他进程占用时,可以通过操作系统抢占这一资源(两个进程优先级不同)
局限性:适用于状态易于保存和恢复的资源
CPU、内存

破坏“循环等待”条件

通过定义资源类型的线性顺序实现
实施方案:资源有序分配法
把系统中所有资源编号,进程在申请资源时必须严格按资源编号的递增次序进行,否则操作系统不予分配
实现时要考虑什么问题呢?
例子:解决哲学家就餐问题

死锁避免

定义:
在系统运行过程中,对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,若分配后系统发生死锁或可能发生死锁,则不予分配,否则予以分配
安全状态
如果系统中存在一个由所有进程构成的安全序列P1,…,Pn,则称系统处于安全状态

一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n):
它以后还需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和
则称系统处于安全状态

安全状态一定没有死锁发生
不安全状态:系统中不存在一个安全序列
不安全状态一定导致死锁

银行家算法:
仿照银行发放贷款时采取的控制方式而设计的一种死锁避免算法
应用条件:
1. 在固定数量的进程中共享数量固定的资源
2. 每个进程预先指定完成工作所需的最大资源数量
3. 进程不能申请比系统中可用资源总数还多的资源
4. 进程等待资源的时间是有限的
5. 如果系统满足了进程对资源的最大需求,那么,进程应该在有限的时间内使用资源,然后归还给系统

n:系统中进程数量
m:资源类数量
Available: ARRAY[1..m] of integer;
Max: ARRAY[1..n,1..m] of integer;
Allocation: ARRAY[1..n,1..m] of integer;
Need: ARRAY[1..n,1..m] of integer;
Request: ARRAY[1..n,1..m] of integer;
简记符号:
Available
Max[i]
Allocation[i]
Need[i]
Request[i]

算法:
当进程Pi提出资源申请时,系统执行下列步骤:
(1)若Request[i] ≤ Need[i],转(2);
否则,报错返回;
(2)若Request[i] ≤ Available,转(3);
否则,进程等待;
(3)假设系统分配了资源,则有:
Available = Available - Request[i];
Allocation[i] = Allocation[i] + Request[i];
Need[i] = Need[i] - Request[i];
若系统新状态是安全的,则分配完成
若系统新状态是不安全的,则恢复原来状态,进程等待

为进行安全性检查,定义数据结构:
Work: ARRAY[1..m] of integer;
Finish: ARRAY[1..n] of Boolean;
安全性检查的步骤:
(1) Work = Available;
Finish = false;
(2) 寻找满足条件的i:
a. Finish[i]==false;
b. Need[i]≤Work;
如果不存在,则转(4)
(3) Work = Work + Allocation[i];
Finish[i] = true;
转(2)
(4) 若对所有i,Finish[i]==true,则系统处于安全状态,否则系统处于不安全状态

实时调度算法

分类
①根据实时任务性质,可将实时调度的算法分成硬实时调度算法和软实时调度算法
②按调度方式,则可分为非抢占调度算法和抢占调度算法
1.非抢占式调度算法
(1)非抢占式轮转调度算法
(2)非抢占式优先调度算法
2.抢占式调度算法
(1)基于时钟中断的抢占式优先级调度算法
(2)立即抢占的优先级调度算法

最早截止时间优先EDF算法

任务的截止时间愈早,其优先级愈高。

最低松弛度优先LLF算法

磁盘访问调度算法

磁盘调度对的目标是使磁盘的平均寻倒时间最少

先来先服务(FCFS)

适用于I/O进程数较少的场合

最短寻道时间(SSTF)

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,不能保证平均寻道时间最短。(实质上是基于优先级的调度算法,可能出现“饥饿”现象)

基于扫描的磁盘调度算法

扫描(SCAN)算法

不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如:当磁头正在自里向外移动时,SCAN算法所考虑的是下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向为自里向外移动。避免了“饥饿”现象。

循环扫描(CSCAN)算法

CSCAN规定磁头单向移动,例如,只是自里向外移动,当磁头移到最外的磁道并访问后,磁头立即返回到最里的欲访问磁道,亦即将最小磁道号紧接着最大磁道号构成循环,进行循环扫描。

NStepSCAN和FSCAN调度算法

NStepSCAN算法是将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法依次处理这些子队列。而每处理一个队列时有时按SCAN算法,对一个队列处理完后,再处理其他队列。当正在处理某子队列时,如果又出现新的磁盘I/O请求,便将新请求进程放入其他队列,这样就可以避免出现粘着现象。当N=1时,NStepSCAN算法便蜕化为FCFS算法。
FCFS算法只将磁盘请求队列分成两个子队列。一个由当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按SCAN算法进行处理。另一个是在扫描期间,将新出现的所有请求磁盘I/O的进程放入等待处理的请求队列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值