目录
1.处理机调度层次
高级调度:高级调度的对象是作业,根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存。
低级调度(频率最高):低级调度的对象是进程(或者内核级线程);根据某种算法,决定就绪队列中的哪个进程应该获得处理机,并由分派程序将处理机分配给被选中的进程
中级调度:又叫内存调度,目的是为了提高系统的利用率和系统吞吐量。
2.作业调度
(1)FCSF算法(先来先服务)
算法思想:当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是最优先考虑在系统中等待时间最长的作业,不管作业执行时间的长短。在进程调度中,采用FCFS算法时,每次调度就是从就绪队列中选择最先进入该队列的进程,为其分配处理机,运行。
优点:简单,容易实现。
缺点:平均等待时间波动较大。 I/O资源和CPU资源的利用率低,对短作业不利。
(2)短作业优先(SJF)
算法思想:系统从进程队列中选择执行时间最短的进程优先执行,时间越短,优先级越高。
优点 :降低了短作业的等待时间,平均周转时间减小了;系统吞吐量提高。
缺点:很难准确预估作业运行时间;对长作业不利,可能等待长时间得不到执行;也未考虑作业的紧迫程度。
(3)优先级调度算法(PSA)
算法思想:基于作业紧迫程度,赋予作业响应的优先级,系统从后备队列获取优先级高的进程优先执行。
优点:紧迫作业可以优先执行;适合分时、实时系统。
缺点:低优先级的进程需要等待很久或者永远执行不了。
(4)高响应比优先调度算法
算法思想:系统从后备队列中选择响应比高的进程优先执行
响应比:响应比 = (作业等待时间 + 作业运行时间)/ 作业运行时间 = 1 + 作业等待时间 / 作业运行时间.
优点:优先级动态变化,既可以考虑到作业进入系统的次序,又能考虑到作业运行的时间;保证长作业等待足够时间必然能执行.
缺点:每次调度都要计算相应比,开销大
3.实时调度
3.1 实时调度的基本条件
- 提供必要的信息
- 系统处理能力强大
- 采用抢占式调度机制
- 具有快速切换机制
3.2 实时调度算法的分类
- 非抢占式调度算法
- 抢占式调度算法
① 基于时钟中断的抢占式优先级调度算法
② 立即抢占式优先级调度算法
3.3 最早截止时间优先算法(EDF)
任务的截止时间越早,其优先级越高,具有最高截止时间的任务排列在队列的队首
3.4 最低松弛优先算法(LLF)
根据任务的紧急程度来定任务优先级,松弛度最低的排在队首
松弛度=必须完成时间-其本身运行时间-当前时间
4.死锁预防,死锁避免和死锁检测
5.银行家算法实例
case 1:系统有五个进程P1、P2、P3、P4、P5,三种资源R1、R2、R3,在T0时刻的状态如图所示,回答下列问题:
已分配资源数量(Allocation) | 最大资源需求数量(Max) | 剩余资源数(Available) | |||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 0 | 0 | 1 | 0 | 0 | 1 | 3 | 3 | 0 |
P2 | 2 | 0 | 0 | 2 | 7 | 5 | |||
P3 | 0 | 0 | 3 | 6 | 6 | 5 | |||
P4 | 1 | 1 | 5 | 4 | 3 | 5 | |||
P5 | 0 | 3 | 3 | 0 | 6 | 5 |
(1)T0时刻是否为安全状态?为什么?
(2)若这时P4请求资源(1,2,0),是否实施资源分配?,为什么?
(3)在上面基础上,若进程P3请求资源(1,1,0),是否能实施资源分配?为什么?
答:
(1)T0时刻是安全状态,序列为P1->P4->P5->P2->P3
(2)P4请求(1,2,0),则Request=(1,2,0),
比较:Request<=Need(1,2,0<=3,2,0)
Request<=Available(1,2,0<=3,3,0)
更新:Need = Need-Request(3,2,0-1,2,0=2,0,0)
Available = Available -Request(3,3,0-1,2,0=2,1,0)
Aollcation = Aollcation+Request(1,1,5+1,2,0=2,3,5)
已分配资源数量(Allocation) | 最大资源需求数量(Max) | Need | |||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 0 | 0 | 1 | 0 | 0 | 1 | |||
P2 | 2 | 0 | 0 | 2 | 7 | 5 | |||
P3 | 0 | 0 | 3 | 6 | 6 | 5 | |||
P4 | 2 | 3 | 5 | 4 | 3 | 5 | 2 | 0 | 0 |
P5 | 0 | 3 | 3 | 0 | 6 | 5 |
R1 | R2 | R3 | |
剩余资源数(Available) | 2 | 1 | 0 |
安全序列为P1->P4->P5->P2->P3
(3)在上面基础上,P3请求(1,1,0),则Request=(1,1,0),
比较:Request<=Need(1,1,0<=6,6,2)
Request<=Available(1,1,0<=2,1,0)
更新:Need = Need-Request(6,6,2-1,1,0=5,5,2)
Available = Available -Request(2,1,0-1,1,0=1,0,0)
Aollcation = Aollcation+Request(0,0,3+1,1,0=1,1,3)
已分配资源数量(Allocation) | 最大资源需求数量(Max) | Need | |||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 0 | 0 | 1 | 0 | 0 | 1 | |||
P2 | 2 | 0 | 0 | 2 | 7 | 5 | |||
P3 | 1 | 1 | 3 | 6 | 6 | 5 | 5 | 5 | 2 |
P4 | 2 | 3 | 5 | 4 | 3 | 5 | 2 | 0 | 0 |
P5 | 0 | 3 | 3 | 0 | 6 | 5 |
R1 | R2 | R3 | |
剩余资源数(Available) | 1 | 0 | 0 |
不为安全序。
6.死锁检测例题
case 1:
设有进程P1和P2并发执行,都要使用R1和R2,使用资源情况如表所示,试判断是否会产生死锁,并说明原因
进程P1 | 进程P2 |
申请资源R1 | 申请资源R2 |
申请资源R2 | 申请资源R1 |
释放资源R1 | 释放资源R2 |
答:(可能会死锁)当进程P1和P2分别申请完R1和R2,当P1再去申请R2时,P2未将R2资源释放,P1处于等待状态,因此,P1和P2都申请不到资源而造成死锁。
case 2:
系统有同类资源m个,供n个进程共享,若每个进程对资源的最大需求量为k,试问,当m,n,k的值分别为下列情况时,是否会发生死锁?
序号 | m | n | k | 是否死锁((k-1)*n+1<=m) | 说明 |
1 | 6 | 3 | 3 | (3-1)*3+1=7>6 (可能死锁) | |
2 | 9 | 3 | 3 | (3-1)*3+1=7<9 (不会死锁) | |
3 | 13 | 6 | 3 | (3-1)*6+1=13==13(不会死锁) |
case 3:
有三个进程P1,P2,P3并发工作。进程P1需要资源S3和S1,进程P2需要资源S2和S1,进程P3需要S3和S2,问
(1)若对资源分配不加限制,会发生什么情况?为什么?
(2)为保证进程正确运行,应采用怎样的分配策略?
答:
(1)可能会发生死锁。满足发生死锁的4大条件,例如,P1占有S1申请S3,P2占有S2申请S1,P3占有S3申请S2。
(2)方法一:静态分配(由于执行前已获得所需的全部资源,因此不会出现占有资源又等待别的资源的现象)
方法二:按序分配(不会出现循环等待资源的现象)
方法三:银行家算法(因为在分配时,保证了系统处于安全状态)