Linux内核学习笔记——进程调度(一)

1、多任务

多任务操作系统就是能同时并发地交互执行多个进程的操作系统。多任务操作系统都能使多个进程处于阻塞或者睡眠状态,即实际上不被投入执行,直到工作就绪。
多任务系统可以划分为两类:非抢占式多任务抢占式多任务

  • 抢占:由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行机会。这个强制的挂起动作叫做抢占。进程在被抢占之前能够运行的时间是预先设置好的,叫进程的时间片
  • 非抢占:除非进程自己主动停止运行,否则它会一直执行。进程主动挂起自己的操作称为让步

2、Linux的进程调度

O(1)调度程序:在多处理器环境下能表现出完美性能和可扩展性,但该调度算法对于调度那些对响应时间敏感的交互进程具有不足。
反转楼梯最后期限调度算法(RSDL):吸取了队列理论,将公平调度的概念加入Linux调度程序,被称为“完全公平调度算法(CFS)”

3、调度策略

3.1 I/O消耗型进程和处理器消耗型进程

  • I/O消耗型进程:大部分时间用来提交I/O请求或等待I/O请求。这样的进程经常处于可运行状态,但通常都是运行短短的一会儿,因为它在等待更多的I/O请求时最后总会阻塞
  • 处理器消耗型进程:时间大多用在执行代码上,除非被抢占,否则它们通常都一直不停地运行,因为它们没有太多的I/O需求。

调度策略通常需要在两个矛盾的目标中间寻找平衡:进程响应迅速(响应时间短)最大系统利用率(高吞吐量)

3.2 进程优先级

调度算法中最基本的一类就是基于优先级的调度,根据进程的价值和其对处理器时间的需求来对进程分级。Linux采取了两种不同的优先级范围:

  1. nice值:它的范围是从-20 ~ +19默认值为0越大的nice值代表着更低的优先级
  2. 实时优先级其值可配置默认情况下它的变化范围是从0~99(包括0和99)。与nice值意义相反,越高的实时优先级数值意味着进程优先级越高

任何实时进程的优先级都高于普通进程,即实时优先级和nice优先级处于互不相交的两个范畴

3.3 时间片

时间片是一个数值,它表明进程在被抢占前所能持续运行的时间。时间片过长会导致系统对交互的响应表现欠佳;时间片太短会明显增大进程切换带来的处理器耗时。 I/O消耗型不需要长的时间片,而处理器消耗型的进程则希望时间片越长越好(比如这样可以提高它们的高速缓存命中率)。任何长时间片都将导致系统交互表现欠佳。
Linux中使用心得CFS调度器,其抢占时机取决于新的可运行程序消耗了多少处理器使用比。如果小号的使用比比当前进程小,则新进程立刻投入运行,抢占当前进程,否则将推迟其运行。

你可能感兴趣的:(Linux内核学习笔记——进程调度(一))