进程调度
调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间。
调度程序没有太复杂的原理,最大限度地利用处理器时间的原则是,只要有可以执行的进程,那么就总会有进程正在执行。
多任务
多任务系统可以划分为两类:非抢占式多任务和抢占式多任务。
Linux提供了抢占式的多任务模式,在此模式下,有调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会。
这个强制挂起的动作就叫抢占。进程在被抢占之前,能够运行的时间是预先设置好的,叫进程的时间片。
Linux 的进程调度
最终在2.6.23中确定了Linux的调度算法,称为“完全公平调度算法”,简称CFS。
策略
I/O消耗型和处理器消耗型进程
进程可以被分为I/O消耗型和处理器消耗型。
调度策略通常要在两个矛盾的目标中间寻找平衡:进程响应速度(响应时间短)和最大系统利用率(高吞吐量)。
进程优先级
调度算法中最基本的一类就是基于优先级的调度。通常做法是优先级高的进程先运行,低的后运行,相同优先级的进程按轮转方式进行调度。
Linux采用了两种不同优先级范围,第一种是用nice值,从-20到+19,默认为0。nice值越大,优先级越低
第二种范围是实时优先级,其值是可配置的。范围是0到99(包括0和99),实时优先级越高,数值越大。
nice和实时优先级是两个互不相交的范畴。
时间片
时间片是一个数值,它表明进程再被抢占前所能持续运行的时间。过长或过短的设置时间片都不合适,会增加系统开销。
很多操作系统默认10ms,但Linux的CFS调度系统不是直接分配时间片给进程,而是按nice值比例分配进程时间片。
而Linux的抢占也是需要根据时间片的,如果消耗的使用比比当前进程小,则新进程立刻投入运行,抢占当前进程。否则,退出其运行。
Linux调度算法
Linux调度器是以模块方式提供的,目的是可以允许不同类型的进程可以针对性的选择调度算法。这种模块化结构被称为调度器类。
原文:https://www.cnblogs.com/ch122633/p/9963196.html