交互式操作系统的调度算法

交互式操作系统的调度算法_第1张图片

时间片轮转调度算法

round-robin(RR)

公平地, 轮流的为各个进程服务,
让每个进程在一定时间间隔都可以得到响应
(周期响应)

按照各个进程到达就绪队列的顺序, 轮流让各个进程执行一个时间片
如果进程未在一个时间片内执行完, 则剥夺处理机, 将进程重新放入就绪队列末尾重新排队

例如100ms为一个时间片, 则处理机一次为每个进程服务100ms,
如果在这100ms内没有执行完, 则处理机转而为其他进程服务, 该进程下处理机, 放入就绪队列队尾, 重新排队等待被处理机服务

只用于进程调度, 针对进程, 只有在作业放入了内存建立了相应的进程后, 才会分配处理机时间片

属于抢占式算法
(如果一个时间片内进程没有执行完则剥夺处理机)
通过时钟装置发出时钟中断来通知cpu, 时间片已到

常用于分时系统, 更注重"响应时间"

优点:
公平, 响应快, 适用于分时系统
缺点:
进程切换频率高, 有一点开销,
不区分任务的紧急程度

不会导致饥饿

需要选择合适的时间片

例1:
交互式操作系统的调度算法_第2张图片
交互式操作系统的调度算法_第3张图片
交互式操作系统的调度算法_第4张图片

考虑如果每个进程都可以在一个时间片内完成?
那么时间片轮转方法变成了先来先服务算法
交互式操作系统的调度算法_第5张图片

根据时间片轮转算法, 第二个进程被响应的时间为第一个进程执行完或执行一个时间片
如果时间片过大, 可能某些进程的响应时间过大, 例如键盘输入, 时间片为10秒, 你可能需要等待10秒才会被响应

同样的时间片也不能太小, 太小会频繁切换进程, 导致进程切换开销较大, 处理机效率不高
在这里插入图片描述
交互式操作系统的调度算法_第6张图片

优先级调度算法

随着计算机发展, 特别是实时操作系统的出现
越来越多的地方需要根据任务的紧急程度来决定处理程序

各个作业/进程有各自的优先级, 调度时选择优先级最高的

既可用于作业调度
也可用于进程调度
(还可以用于I/O调度)

有抢占式和非抢占式版本
非抢占式:
进程主动放弃处理机时进行调度
抢占式
在就绪队列发生变化时, 检查判断是否需要发生抢占

就绪队列未必只有一个, 可以按照不同的优先级来组织
也可以选择将优先级高的进程排在队头, 这样每次只需要提取队头进程

根据优先级初次确定后是否还可以动态改变, 可以将优先级分为静态优先级动态优先级两种
静态优先级:
创建进程时确定, 确定后不改变
动态优先级:
创建进程时初次确定, 之后根据算法设定的某个角度进行动态的调整优先级

合理地确定进程的优先级? 一般来说:
1 系统进程优先级 高于 用户进程
2 前台进程 高于后台进程
3 操作系统更偏好I/O型进程(或称为I/O繁忙型)--------(与I/O型进程相对的是计算型进程, 或称CPU繁忙型进程)
交互式操作系统的调度算法_第7张图片
何时调整优先级? 例如:
交互式操作系统的调度算法_第8张图片
优缺点:
交互式操作系统的调度算法_第9张图片

可能会发生饥饿

例:
交互式操作系统的调度算法_第10张图片
对该题使用抢占式优先级调度算法:

交互式操作系统的调度算法_第11张图片
上题中的优先级数与优先级的关系, 要看具体题目给的具体情况, 可能按优先级数大的优先级高, 也可能是优先级数小的优先级高

多级反馈队列调度算法

结合多种算法, 折中

算法:
设置多级就绪队列, 各个队列优先级从高到底, 时间片从小到大
新进程放入第1级队列, 按FCFS排队等待分配时间片
如果进程时间片用完仍未结束, 则将其放入下一级队列末尾
如果当前执行队列是最下级队列, 则将时间片用完未完成的进程放入当前队尾
如果当前队列已空, 执行下一级队列
如果当前队列的上一级队列出现新进程, 则当前执行进程中断, 从新进程的队列开始执行

由上述算法的简述可见, 该算法为抢占式算法
在实现上也可以不完全遵从上述算法的简述, 可能将其改造为非抢占式算法,
但考试认准上述算法简述, 并认为该算法为抢占式算法

用于进程

优缺点:
交互式操作系统的调度算法_第12张图片
上述SPF的优点具体的表现其实是多级队列各个队列的时间片逐渐增大,
先执行上面的队列(相当于先执行用时少的), 再执行下面的队列(再执行用时多的)
同时避免了SPF中可能出现的进程对所需时间的造假

对于上节提到的CPU密集型进程, 可以单独设置其执行完放入原队列的队伍, 从而保持其的高优先级

总结

交互式操作系统的调度算法_第13张图片

你可能感兴趣的:(操作系统,后端,系统架构,jvm,算法)