进程调度是确保进程能有效工作的一个内核子系统
多任务
能同时并发地交互执行多个进程的操作系统叫做多任务操作系统。
多任务系统分为:非抢占式多任务和抢占式多任务。linux提供了抢占式的多任务系统。在此模式下,由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会。这个强制的挂起动作就叫抢占。进程在被抢占之前能够运行的时间时预先设置好的,而且有一个专门的名字,叫进程的时间片。时间片实际上时分配给每个可运行进程的处理器时间段。
Linux的进程调度
从2.5开发系列的内核中,开始了叫做O(1)调度程序的新调度程序。对于大服务器的工作负载很理想,但是在有很多交互程序要运行的桌面系统则表现不佳,因为其缺少交互进程。2.6.23采用CFS,完全公平调度算法。
策略
1.I/O消耗型和处理器消耗型的进程
进程可分为 I/O消耗型和处理器消耗型。前者进程的大部分时间用来提交I/O请求或是等待I/O请求。因此进程经常处于可运行状态,但是通常都是运行短短一会儿,因为它在等待更多的I/O请求时最后总会阻塞(I/z是指任何类型的可阻塞资源,比如键盘输入或网络I/O)。
2.进程优先级
优先级高的进程先运行,低的后运行,相同优先级的进程按照轮转方式进行调度。调度程序总是选择时间片未用尽而且优先级最高的进程运行。用户和系统都可以通过设置进程的优先级来影响系统的调度。
linux采用两种不同的优先级范围。第一种时nice值,它的范围从-20到+19,默认值为0:越大的nice值意味着更低的优先级—nice似乎意味着你对系统中的其他进程更“优待”。macOS X,进程的nice值代表分配给进程的时间片的绝对值;而linux系统中,nice值则代表时间片的比例。
第二种范围是实时优先级,其值时可配置的,默认情况下它的变化范围从0-99。与nice值意义相反。越高的实时优先级数意味着进程优先级越高。任何实时进程的优先级都高于普通的进程。
3.时间片
时间片是一个数值,表明进程在被抢占前所能持续运行的时间。
Linux调度算法
1.调度器类
以模块方式提供,目的:允许不同类型的进程可以有针对性的选择调度算法。
2.公平调度
进程调度的效果应如同系统具备一个理想的完美多任务系统。系统中每个进程都将能获得1/n的处理时间—n是指可运行进程的数量。同时可以调度给它们无限小的时间周期,所以在任何可测量的周期内,我们给予n个进程中每个进程同样多的运行时间。
Linux调度的实现
CFS代码位于文件kernel/sched_fair.c中。包含4个组成部分:时间记账;进程选择;调度器入口;睡眠和唤醒。
时间记账
所有的调度器都必须对进程运行时间做记账。