Linux2.6内核进程调度队列

Linux2.6内核进程调度队列

Linux2.6内核中,每一个CPU都维护一个运行队列,其结构如下:

Linux2.6内核进程调度队列_第1张图片

运行队列由4部分构成:

  1. active指针:指向活跃队列
  2. expired指针:指向过期队列
  3. 活跃队列:活跃队列中包含时间片还没有被耗尽的进程,这些进程会被CPU调度
  4. 过期队列:过期队列中包含的是时间片耗尽的进程,这些进程会等待下一次时间片到来,进而被CPU调度

活动队列的结构

活跃队列与过期队列的结构一致,均由3个部分构成:

  1. nr_active:一个整数,表示位于活跃队列/过期队列的进程数量
  2. queue:queue数组共有140个元素,该数组中每一个元素都是一个队列,队列中维护一个一个的进程(进程的PCB),其中下标为100的队列中均为优先级为60的进程,下标101的队列中均为优先级61的进程,以此类推,下标139的队列中均为优先级99的进程,在queue中的下标越小,优先级越高,相同优先级的进程按照FIFO规则在队列中进行排列,CPU调度一个进程,首先在queue当中从前往后遍历,找到一个非空的队列,这个队列中的所有进程优先级相同,按照入队的先后顺序进行调度。queue中下标为[0,99]的队列维护的进程采用实时优先级(不常用),下标[100,139]的队列使用的是普通优先级,依次对应nice值为[-20,19]的进程
  3. bitmap:使用位图结构,一共有160个比特位,其中第i个比特位表示队列数组中的第i个队列是否为空,bitmap可以提高CPU查找非空队列的效率,系统查找一个最适合调度进程的时间复杂度是一个常数,不会随着进程数量的增多而增加,称为进程调度的O(1)算法
    增多而增加,称为进程调度的O(1)算法
  4. 活动队列上的进程被处理完毕后,会放到过期队列,活动队列上进程的数量减少,过期队列上进程的数量增多,当活动队列上没有进程时,将active指针与expired指针进行交换,如此一来,相当于又有了一批活动进程,循环这个过程即可完成进程的合理调度

你可能感兴趣的:(linux,运维,服务器)