优先级调度算法
#算法思想
随着计算机发展,尤其是实时操作系统的出现,很多的应用场景需要根据任务的紧急程度来决定处理顺序。
#算法规则
每个作业/进程都有各自的*优先级*,调度是选择优先级最高的作业/进程
#用于作业/进程调度
既可用于作业调度,也可用于进程调度。甚至还会应用于之后的IO调度
#是否可抢占
抢占式和非抢占式都有
区别:非抢占式只需要在进程主动放弃处理机时进行调度即可。而抢占式还需要再就绪队列变化时,检查是否会发生抢占。
#优缺点
*优点*:用优先级区分紧急程度,重要程度,适用于实时操作系统。可以灵活调整各种作业/进程的偏好程度。
*缺点*:若有源源不断的高优先级进程到来,可能导致进程饥饿
#是否会导致饥饿
会
#补充
就绪队列未必只有一个,可以按照不同优先级来组织。
另外,也可以把优先级高的进程排在更靠近队头的位置。
根据优先级是否可以动态改变,可将优先级分为静态优先级和动态优先级
静态优先级:创建进程时确定,之后一直不变
动态优先级:创建进程时有一个初始值,之后会根据情况动态调整优先级
通常:
*系统进程优先级高于用户进程*
*前台进程优先级高于后台进程*
*操作系统更偏好I/O型进程(或称I/O繁忙型进程)PS:与I/O型进程相对的是计算机进程(或称CPU繁忙型进程)*
why?
所以更偏好I/O进程
采用*动态优先级时,可以参考以下操作调整进程优先级*
1.如果进程在就绪队列中等待很长时间,可以适当提升其优先级
2.如果进程占用处理机运行了很长时间,可以适当降低其优先级
3.如果发现一个进程频繁进行I/O操作,可以适当提升其优先级(why参考上图)