文章目录
作业(1⭐)
定义
用户在一次解题或一个事务处理过程中要求计算机系统所做工作的集合。
作业的组成
三级调度(2⭐)
高级调度(作业调度、长程调度)
主要任务
根据**JCB(作业控制块)**中的信息,根据某种调度算法,决定将外存上处于后备队列中的哪几个作业调入内存,为它们创建进程、分配必要的资源,并将它们放入就绪队列。
每次执行作业调度时,都需做出以下决定:
- 接纳多少作业
- 接纳哪些作业
低级调度(进程调度、短程调度)
其所调度的对象是进程(或LWP 轻量级进程 (LWP, light weight process)
) 。其主要功能是,根据某种算法,决定就绪队列中的哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。
进程调度的任务
- 保存处理机的现场信息。
- 按某种算法选取进程。
- 把处理器分配给进程。
OS必不可少!
中级调度(内存调度)
那些暂时不能运行的进程调至外存等待,此时进程的状态称为就绪驻外存状态(或挂起状态)。当它们已具备运行条件且内存稍有空闲时,由中级调度来决定把外存上的那些已具备运行条件的就绪进程再重新调入内存,并修改它们的状态为就绪状态,挂在就绪队列上等待。
两级调度模型
三级调度模型
处理机调度算法的目标
共同目标
-
资源利用率
应使系统中的处理机和其他所有资源都尽可能地保持忙碌状态。 -
公平性
各进程都获得合理的CPU时间,以防止发生进程饥饿现象。紧急程度或者重要性的不同,则应提供不同的服务。
-
平衡性
系统中可能具有多种类型的作业(e.g. I/O型,计算型等),调度算法要尽可能保证系统资源使用的平衡性。 -
策略强制执行
作业调度算法(5⭐)
调度算法既可以作用于作业,也可适用于进程。
先来先服务(FCFS)调度算法
排队策略
例子
进程 | 到达 | 要求服务时间 | 开始 | 完成 | 周转时间 完成-到达 | 带权周转时间 周转/要求服务 |
---|---|---|---|---|---|---|
A | 0 | 1 | 0 | 1 完成时只有B到达 | 1-0=1 | 1/1=1 |
B | 1 | 100 | 1 | 101 完成时C、D到达 | 101-1=100 | 100/100=1 |
C | 2 | 1 | 101 | 102 | 102-2=100 | 100/1=100 |
D | 3 | 100 | 102 | 202 | 202-3=199 | 199/100=1.99 |
C进程:集中服务较短:I/O繁忙型作业
FCFS不利于I/O繁忙型作业(短作业)
D进程:集中服务较长:CPU繁忙型作业
短作业优先(SJF)调度算法
定义
SJF调度算法是以作业的长短来计算优先级,作业越短,其优先级越高。
- 当SJF调度算法用于作业调度时,它将从**外存的作业后备队列中选择估计运行时间最短的作业,并优先将它调入内存运行**。
- 当SJF调度算法用于进程调度时,它将从就绪队列中选择估计运行时间最短的进程,并为之分配CPU运行。
缺点
- 要预先知道每个作业的运行时间
很难对其进行准确估计。如果估计偏短,系统就可能会按估计的时间终止作业的运行,但此时作业并未完成。所以故一般都会估计偏大。 - 对CPU繁忙型作业(长作业)非常不利,长作业的周转时间会明显增长。
SJF完全忽视作业的等待时间,这可能会使作业的等待时间过长,进而出现饥饿现象。 - 无法实现人机交互。
- 不能保证紧迫性作业能得到及时处理。
优先级调度算法
非抢占式
一旦把处理机分配给就绪队列中优先级最高的进程, 该进程便会一直执行下去直至完成,或当该进程因发生某事件而放弃处理机时,系统方可将处理机重新分配给优先级次高的进程。
抢占式
高相应比优先调度算法
优先权 = R p ( 响应比 ) = 等待时间 + 要求服务时间 要求服务时间 = 响应时间 要求服务时间 优先权=R_p(响应比)=\frac{等待时间+要求服务时间}{要求服务时间}=\frac{响应时间}{要求服务时间} 优先权=Rp(响应比)=要求服务时间等待时间+要求服务时间=要求服务时间响应时间
时间片轮转(RR)算法
Round Robin 时间片轮转
时间片大小的确定
- 若选择很小的时间片,则将有利于短作业,因为它能在该时间片内完成。但是,若时间片选择得太小,则意味着系统会频繁地执行进程调度和进程上下文的切换,这无疑会增加系统的开销。
- 若时间片选择得太大,且为使每个进程都能在一个时间片内完成, 算法便会退化为FCFS调度算法,无法满足短作业和交互式用户的需求。
多级队列调度算法
多级队列调度算法将系统中的进程就绪队列从一个拆分为若干个,将不同类型或性质的进程固定分配在不同的就绪队列,不同的就绪队列采用不同的调度算法, 一个就绪队列中的进程可以设置不同的优先级,不同的就绪队列本身也可以设置不同的优先级。
多级反馈队列调度算法
周转时间(3⭐)
周转时间
周转时间 ( 亦称为作业周转时间 ) ,是指**从作业被提交给系统开始到作业完成**为止的这段时间间隔。
T
i
=
服务时间
+
等待时间
=
完成点
−
到达点
T_i= 服务时间+等待时间=完成点-到达点
Ti=服务时间+等待时间=完成点−到达点
平均周转时间
平均周转时间短,不仅可以有效提高系统资源的利用率,还可以使大多数用户都感到满意。
T
=
1
n
(
∑
i
=
1
n
T
i
)
T=\frac{1}{n}(\sum_{i=1}^{n}T_i)
T=n1(i=1∑nTi)
带权周转时间(4⭐)
带权周转时间
T w = 1 + T 等待 T 服务 T_w=1+\frac{T_{等待}}{T_{服务}} Tw=1+T服务T等待
平均带权周转时间
即作业的周转时间Ti与系统为它提供服务的时间TSi 之比
T
w
=
1
n
(
∑
i
=
1
n
T
i
T
S
i
)
T_w=\frac{1}{n}(\sum_{i=1}^n\frac{T_i}{T_{S_i}})
Tw=n1(i=1∑nTSiTi)
CPU利用率(2⭐)
C P U 的利用率 = C P U 有效工作时间 C P U 有效工作时间 + C P U 空闲等待时间 CPU的利用率=\frac{CPU有效工作时间}{CPU有效工作时间+CPU空闲等待时间} CPU的利用率=CPU有效工作时间+CPU空闲等待时间CPU有效工作时间
死锁
死锁概述
双方都希望对方能释放出自己所需要的资源,但它们都会因为 不能获得自己所需的资源去继续运行 而无法释放自己当下占有的资源,并且一直处于这样的僵持状态而形成死锁。
死锁通常被定义为:指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。
进程互斥
进程间因争夺资源而表现出的竞争关系。
临界资源
一次只允许一个进程使用的资源。
e.g. 银行账户、车票等
计算机系统中的死锁
例子
系统有一台打印机p和一台扫描仪s,进程P1、P2并发执行,在执行过程中均需使用打印机和扫描仪。
// 程序1
Request(p);
Request(s);
Release(p);
Release(s);
// 程序2
Request(s);
Request(p);
Release(s);
Release(p);
两个并行执行的进程P1、P2执行顺序:
-
进程P1请求打印机。
-
进程P2请求扫描仪。
-
假设在P2未释放扫描仪之前,进程P1请求扫描仪(未响应)
-
假设在进程P1未释放打印机之前,进程P2请求打印机(未响应)
上述两种情况,互相牵制住对方,即死锁。
-