处理机调度
处理机调度有三个层次:作业调度(高级调度)、中级调度、进程调度(低级调度)
作业调度:从外存上将处于后备状态的作业中选一个(或多个)作业,给他们分配内存、输入/输出设备等必要的资源,并建立相应的进程,使他们获得竞争处理机的权利(放到就绪队列中等候)。每个作业只会被调入一次,调出一次。
中级调度:将内存中暂时不能运行的进程调出到外存上暂存(又称“挂起”),等他们具有再次运行的条件的时候再次调回内存的就绪队列中。
进程调度:按照某种方式和策略从就绪队列中选一个进程并将处理机分配给它。这是最基本的不可或缺的调度策略。
在以下情况下不能发生进程的调度和切换:
- 在处理中断的过程中。中断是系统工作的一部分,逻辑上不属于某一进程,不应被剥夺处理机资源。
- 进程在操作系统内核程序临界区中。进入临界区后必须加锁,独占式访问共享资源,在解锁前不允许其他任何进程访问。
- 需要完全屏蔽中断的原子性操作时
进程的调度和切换分两类:剥夺式调度(抢占式)和非剥夺式调度
进程调度的几种方法:
1、先来先服务 FCFS
不可剥夺,对长作业有利,不利于I/O繁忙的作业,用于批处理可还行,不适合分时和实时系统。
2、短作业优先 SJF
对短作业有利,但是可能造成长作业饥饿(很长时间得不到调度)。
完全没有考虑作业的紧迫程度
作业的长短是根据用户预估的,不一定准确,用户总喜欢缩短自己的预估时间长度,因此不一定能真的短作业优先
另外,SJF的平均等待时间、平均周转时间最短。
3、优先级调度
可以有剥夺式的,也可以有非剥夺式的。
根据进程创建后优先级是否可以改变分为静态优先级和动态优先级。
4、高响应比优先调度
响应比=(等待时间+要求服务时间)/ 要求服务时间
这方法比较好,长作业和短作业都能够得到调度,不至于产生饥饿,且短作业的优先级相对较高。
5、时间片轮转
常用于分时系统,时间片的大小对系统性能影响很大
6、多级反馈队列调度算法
结合了前几个算法的优点
抢占式的
设置了很多级别的就绪队列,每一级就绪队列内部采用时间片轮转,且第二级队列的时间片比第一级队列的时间片长1倍
对终端型作业用户:短作业优先
短批处理作业用户:周转时间较短
长批处理作业用户:不会长期得不到执行,在前几个队列中可以得到部分执行