zoukankan      html  css  js  c++  java
  • ULK --- Chap3 Processes: Lists of Tasking_Running processes

    When looking for a new process to run on a CPU, the kernel has to consider only the runnable processes

    (that is, the processes in the TASK_RUNNING state).

    Earlier Linux version put all runnable processes in the same list called runqueue. Because it would be too

    costly to maintain the list ordered according to process priorities, the earlier schedulers were compelled 

    to scan the whole list in order to select the best runnable process.

    Linux 2.6 implements the runqueue differently. The aim is to allow the scheduler to select the best runnable

    process in constant time, independently of the number of runnable processes. We will defer to Chapter 7 a 

    detailed description of this new kind of runqueue, and we will provide here only some basic information.

    The trick used to achieve the scheduler speedup consists of spliting the runqueue in many lists of runnable

    processes, one list per process priority. Each task_struct descriptor includes a run_list field of type list_head.

    If the process priority is equal to k (a value ranging between 0 and 139), the run_list field links the process

    descriptor into the list of runnable processes having priority k. Furthermore, on a multiprocessor system, each

    CPU has its own runqueue, that is, its own set of lists of processes. This is a classic example of making a data

    structures more complex to improve performance: to make scheduler operation more efficient, the runqueue

    list has been split into 140 different lists!

  • 相关阅读:
    2018/12/08 L1-043 阅览室 Java
    2018/12/08 L1-042 日期格式化 Java
    breeze源码阅读心得
    Spark ML源码分析之四 树
    Spark ML源码分析之三 分类器
    Spark ML源码分析之二 从单机到分布式
    Spark ML源码分析之一 设计框架解读
    Adaboost的意义
    RBM如何训练?
    ChromeTimeline
  • 原文地址:https://www.cnblogs.com/miaoyong/p/4948920.html
Copyright © 2011-2022 走看看