目录
什么是进程调度程序?
调度程序是内核的组成部分,负责选择下一个要运行的进程,进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统。
调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是只要有可以执行的进程,那么就总会有进程正在执行。只要系统中进程的数目比处理器的个数多,就注定某一给定时刻会有一些进程不能执行。在一组处于可运行状态的进程中选择一个来执行,是调度程序所需完成的基本工作。
多任务操作系统
多任务操作系统就是能同时的并发交互执行多个进程的操作系统
非抢占式多任务:除非进城自己主动停下,否则他会一直执行,进程主动挂起自己的操作称为让步,有很多缺点一般不会使用。
抢占式多任务:由调度程序来决定什么时候停止一个进程的运行以便其他进程能够得到执行机会,这个强制的挂起动作就叫做抢占。
时间片
进程在被抢断之前能够独立运行的时间是之前预设好的,而且有一个专门的名字叫做进程的时间片。时间片实际上就是分配给每个可运行进程的处理器时间段,有效管理时间,便能使调度程序从系统全局的角度做出调动决定,还可以避免个别进程独占系统资源。
进程调度的策略
I/O消耗型:大部分的时间都在用来提交I/O请求,或者是等待I/O请求,这样的进程,经常处于可运行状态,但是运行时间较短,因为在等待更多的I/O请求时,总是会阻塞。
处理器消耗:把时间大多用在执行代码上,除非被抢断,否则他们通常都一直不停的运行,因为他们没有太多的io需求。
对于以上的两种可能出现的情况,对于io消耗型,我们可以提高它的优先级,快速的响应。对于消耗型系统我们可以降低它的优先级较低,时间片比较长。我们需要在两个矛盾的目标中寻找平衡,进程响应速度和最大系统利用率。
进程优先级
调度算法中最基本的一类就是基于优先级的调度。是根据进程的优先级和其对处理器的时间需求来分配
Linux内部实现的是一个动态的优先级的调度方法,一开始,该方法设置基本的优先级,然而它允许调度程序根据需要来加、减优先级。
主要有两种独立的优先级范围
- nice值(-20 ~ 19),nice值越高表示该进程的优先级越低,nice值越低优先级越高
- 实时优先级:其值在0到99,任何事和操作进程的优先级都高于普通