处理器作为计算机系统里的一种资源,也是需要管理,从而调度分配给需要的程序以达到最高效率,所以调度器应运而生。
1. 调度器overview
调度器本身也是一个程序,目的是为了给执行用户的程序提供资源,包含了一个决定一组程序中谁会赢得CPU时钟周期的算法。
![664ad7949a9b93de4b971252fef13a16.png](https://i-blog.csdnimg.cn/blog_migrate/f650beb1a60edd60b169c919e215c8f5.jpeg)
在桌面机,嵌入式设备或大型机等不同的环境中,产生了不同的调度器。我们一般针对不同层面,分为下面几种调度器:
- 高级调度器(long-term scheduler): 通常用于面向批处理的多程序环境中,通过均衡内存中的任务以欧化系统资源,包括CPU,内存和硬盘存储等。
- 中级调度器(medium-term scheduler):跟踪CPU上执行的进程的动态内存用量来决定是否要增加或减少“多通道程度“(内存中竞争CPU的进程个数),以防止”颠簸“。颠簸即当前的进程集合的内存需求超过了系统容量,导致进程在各自的执行中变得缓慢。
- 低级调度器(short-term scheduler):负责在当前驻留的内存里的进程中选择一个来运行。这篇内容设计的算法主要关注的都是低级调度器。
2. 调度的步骤
在低级调度器中,一般划分为:非抢占式和抢占式。非抢占式的调度器中,一个进程要不然就一直执行到底,要不然就自己主动资源放弃处理器,以处理I/O请求,调度器只是安排先后顺序;而抢占式调度器里,调度器从当前进程手中把处理器抢走,交给另一个进程,有这么一个主动的动作。不管是哪一种,调度器的执行步骤一般如下:
- 获得处理器的控制权
- 把当前正在运行的进程状态(PCB,process control block)保存下来
- 选择一个新的进程来执行
- 把新选择出来的进程分发给处理器运行,这一步会把第二步中的状态再加载到CPU寄存器中。
可以看出,在调度器调度过程中,进程状态很重要,它包括了很多信息:程序执行到哪儿了(PC指针)以便回来继续执行,程序