1、 前置知识
1.1 非抢占式与抢占式
1.1.1 非抢占式
非抢占式指的是一个线程的在执行期间,另一个线程的到达,尽管各项标准都优于执行线程(例如优先级高于当前执行线程),也不会抢占CPU资源,会耐心的等待该线程执行完毕,再尝试获取CPU资源(有点公平锁的味道)。
1.1.2 抢占式
抢占式指的是一个线程再执行期间,另一个线程的到达会影响该线程的执行,例如到达线程优先级高于执行线程,那它会抢占CPU资源(有点非公平锁的味道)。
1.2 饥饿现象
是否存在进程不被分配资源。
1.3 文中例子:
进程 | 到达时间 | 运行时间 | 优先级 |
P1 | 0 | 7 | 1 |
P2 | 2 | 4 | 2 |
P3 | 4 | 1 | 3 |
P4 | 5 | 4 | 2 |
1.4 涉及的公式:
1. 周转时间=完成时间-到达时间
2. 带权周转时间=周转时间/运转时间
3. 等待时间=周转时间-运行时间
2. 进程调度算法
2.1 先来先服务
算法规则:按照进程到达的先后顺序进行服务
是否可抢占:非抢占式算法
调度顺序:P1->P2->P3->P4
优点:公平、算法实现简单
缺点:排在长作业(进程)后面的短作业需要等待很长时间,带权周转时间很大,对短作业来说用户体验不好。即:对长作业有利,对短作业不利
是否会导致饥饿:不会
2.2 短作业优先
算法规则:按照执行时间的长度进行服务
是否可抢占:非抢占式算法、抢占式算法 (两个版本都有)
2.2.1 非抢占式
调度顺序:P1->P3->P2->P4
2.2.2 抢占式
调度顺序:P1->P2->P3->P2->P4->P1
调度顺序分析:()里面表示还需要多少执行时间
0时刻(P1到达):P1(7)
2时刻(P2到达):P1(5)、P2(4)
4时刻(P3到达):P1(5)、P2(2)、P3(1)
5时刻(P3完成、P4到达):P1(5)、P2(2)、P4(4)
7时刻(P2完成):P1(5)、P4(4)
11时刻(P4完成):P1(5)
2.2.3 总结
优点:执行时间短的进程收益
缺点:对执行时间长的进程不利,如果有陆续的执行时间比较短的进程进来,执行时间长的进程可能永远得不到服务;
是否会导致饥饿:会,如果有陆续的执行时间比较短的进程进来,执行时间长的进程可能永远得不到服务,这种现象为"饥饿"现象。
2.3 高响应比优先
调度顺序:P1->P3->P2->P4
调度顺序分析:()里面表示进程的响应比
0时刻:只有P1到达就绪队列,P1上处理机
7时刻(P1完成):就绪队列有P2((5+4)/4=2.25)、P3((3+1)/1=4)、P4((2+4)/4=1.5)
8时刻(P3完成):P2((6+4)/4=2.5)、P4((3+4)/4=1.75)
12时刻(P2完成):P4((7+4)/4=2.75)
响应比公式:(等待时间+要求服务的时间)/ 要求服务的时间
是否可抢占:非抢占式算法
优点:综合考虑了等待时间和要求服务的时间,等待时间相同时,要求服务时间端的优先(短作业优先的优点),要求服务时间相同时,等待时间长的优先(先到先服务的优点)。对于长作业来说,随着等待时间越来越久,其响应比也会越来越大,从而避免了长作业饥饿的问题。
是否会导致饥饿:不会
2.4 时间片轮转
算法规则:按照个进程到达就绪队列的顺序,轮流让各个进程执行一个时间片(如:100ms),若进程未在一个时间片内执行完成,则剥夺处理机,将进程重新放到就绪队列的队尾。
是否可抢占:抢占式算法
优点:公平,响应快,适用于分时操作系统
缺点:由于高频率的进程切换,因此有一定的开销;没有区分任务的紧急程度
是否会导致饥饿:不会
2.5 优先级调度
2.5.1 非抢占式
调度顺序:P1->P3->P2->P4
2.5.2 抢占式
调度顺序:P1->P2->P3->P2->P4->P1
调度顺序分析:与响应比优先一样逻辑,只不过那里比较的是响应比,这里比较的是优先级
静态优先级策略:
【1】系统进程优先级高于用于进程
【2】前台进程优先级高于后台进程
【3】重点关注I/O操作频繁的进程--提升其优先级
动态优先级策略(从追求公平、提升资源利用率等角度考虑):
【1】如果某进程在就绪队列中等待了很长时间,则可以适当提升其优先级
【2】如果某进程占用处理机运行了很长时间,则可以适当降低其优先级
【3】如果发现一个进程需要频繁的进行I/O操作,则可以适当提升其优先级
是否可抢占:非抢占式算法、抢占式算法 (两个版本都有)
优点:用优先级区分紧急程度、重要程度,适用于实时操作系统。可灵活地调整对各个进程的偏好程度。
缺点:如果源源不断的有高优先级的进程进来,则可能会导致饥饿线程
是否会导致饥饿:会
2.6 多级反馈队列调度
算法规则:
【1】设置多级就绪队列,各级队列优先级从高到低,时间片从小到大;
【2】新进程到达时想进入第1级队列,按先到先服务原则排队等待被分配时间片,若用完时间片进程还没结束,则进程进入下一级队列队尾;
【3】只有第k级队列为空时,才会为k+1级队头的进程分配时间片
是否可抢占:抢占式算法 (在k级运行的进程,如果此时有新的进程进入{1至k-1级},则会先运行该进程,因为该进程的优先级较高)
优点:
【1】对各类型进程相对公平(先到先服务的优点)
【2】每个新到达的进程都可以很快的就得到响应(时间片轮转的优点);
【3】短进程只用较少的时间就可以完成(短作业优先的优点);
【4】不必实现估计进程的运行时间,可以灵活地调整各类进程的偏好程度(优先级调度的优点)
是否会导致饥饿:会,如果有源源不断的新进程进来会导致饥饿