一、前言
处理机调度是操作系统至关重要的部分。
二、处理机调度层次与目标
1.处理机调度层次
- 高级调度:执行对作业调度,决定将外存上处于后备队列中的作业调入内存。
- 低级调度:进程调度(或内核级线程),决定就绪队列中的哪个进程获得处理机。
- 中级调度:将暂时不能运行的进程,调至外存等待。或者将具备运行条件的就绪进程重新调入内存。
2.调度目标
(1)资源利用率:提高系统的资源利用率。(2)公平性:应该使进程都获得何力的CPU时间。(3)平衡性:应该使多种类型的进程得到调度,以保证系统中设备都在忙碌状态。(4)策略强制执行
三、作业与作业调度
1.作业
作业是比程序更广泛的概念,他不仅包含了通常的程序和数据,还包括作业说明书,系统根据作业说明书对程序的运行进行控制。
作业步,每个作业都必须经过若干个相对独立又相互联系的加工步骤才能的到结果。通常,编译->链接装配->运行。
作业控制块,其中保存了作业管理和作业调度所需的全部信息。
作业存在三个阶段和状态,收容、运行、完成。
2.作业调度
- 先来先服务(FCFS)调度算法:根据作业的先后次序来进行调度,先来的作业在就会优先得到执行。
- 短作业优先(SJF);从后备队列中选取若干个估计运行时间最短的作业,优先将他们调入内存。对长作业不利。
- 优先级调度(PSA):根据作业的优先级调度。
- 高响应比优先调度算法:既考虑了等待时间和运行时间,融合前面的算法的优点。但是,存着系统开销的缺点。
四、进程调度
1.轮转调度算法
轮转调度基本原理是让每一个进程执行一定的时间片,然后将cpu资源让出其他进程使用。
进程切换时机,在一个时间片尚未使用完,进程执行完毕,就立即激活调度程序,将就绪队列中的队首进程运行,启动一个时间片;在一个时间片用完,计算器中断处理程序被激活,如果未执行完,将程序加入就绪队列的末尾。
时间片大小确定,一般取典型任务一次交互所需要的时间。
2.优先级调度算法
优先级调度中分为抢占式和非抢占式,静态优先级和动态优先级的区别。
3.多队列调度算法
设置多个就绪队列,对于每个就绪队列执行不同的调度算法。
4.多级反馈队列调度算法
5.基于公平原则的调度算法设置多个就绪队列,每个就绪队列的优先级不同,每个就绪队列的时间片也不同。每个队列使用先来先服务的调度算法。
五、死锁
1.死锁定义
每一个进程都在等待其他进程。
2.死锁条件
互斥条件:一段时间内,资源只能被一个进程占用。请求和保持条件:进程已经获得了一个资源,但又提出了新的资源请求,而这个资源已被其他进程占有。不可抢占条件:资源占用后不可抢占。循环等待:形成循环链。
3.预防死锁
请求和保持条件:一次获取所有资源,分为获取资源释放资源再获取资源释放资源分为两个阶段。不可抢占条件:不能满足请求资源时,释放不可占资源。循环等待:将资源编号,规定按照序号递增的顺序进行请求资源。
4.避免死锁
银行家算法
5.检测死锁
资源分配图,不可完全简化图为死锁。利用银行家算法的数据结构,判断当前的资源能否满足。
6.死锁解除
终止进程