Linux内核中使用的三个优先级有什么区别?

时间:2014-03-04 05:33:42

标签: linux linux-kernel

我是Linux内核的新手,现在我正在研究Linux内核中的进程调度。 Linux中有三种类型的优先级:

  1. 静态优先级
  2. 动态优先级
  3. 实时优先
  4. 现在我所理解的是:

    • 仅为常规流程定义静态优先级和动态优先级,它们的值仅为100到139。
    • 静态优先级用于确定进程的基本时间片
    • 动态优先级用于选择下一个要执行的进程。

    • 实时优先级定义仅适用于实时流程,其值的范围为0到99

    现在我的问题是:

    1. 如果我错了,请纠正我,也请告诉我为什么要使用     Linux中有三种类型的优先级,有哪些区别     在这些优先事项中?
    2. 如果优先级在100到139之间,那么流程是根据优先级区分为实时还是常规 那么过程就是传统过程,否则是实时的 流程?
    3. 如何在Linux中更改优先级,我的意思是,我们知道在执行过程中进程的优先级不会保持不变?

1 个答案:

答案 0 :(得分:3)

免责声明:以下适用于Linux中的日程安排(我不确定Windows或其他操作系统)。线程和过程在这里可以互换使用,但是它们之间存在差异。

优先事项&差异

1.静态优先级:这些是创建新线程时设置的默认优先级(传统进程的值0,即非实时进程,即未使用实时调度时)。您可以使用以下方式更改它们:

`pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param);`

其中,sched_pa​​ram包含优先级:

struct sched_param 
{
    int sched_priority;     /* Scheduling priority */
};

2动态优先级:当线程开始饿死因为一直在调度优先级较高的线程时,需要使用various mechanism来提高此类线程的优先级。这种提升/降低(是的,这种情况也会发生)优先级被称为动态优先级,因为它不断变化。在Linux中,即使是胖孩子也可以玩。

3.实时优先级:仅当在一个实时策略(SCHED_FIFO,SCHED_RR)下调度线程(进程)并且sched_priority值在1范围内时才会出现此情况(低)到99(高)。与非实时流程的静态/动态优先级相比,这是最高的。

更多信息:http://man7.org/linux/man-pages/man3/pthread_getschedparam.3.html

现在,问题:

  

如果我错了,请纠正我,还请告诉我为什么我们在Linux中使用三种类型的优先级,以及它们之间的区别是什么   这些优先事项?

因此,对于非实时调度策略,每个进程都有一些静态优先级,更高的优先级使线程启动,后来为了避免任何不公正,优先级被提升/降低,这成为动态优先级。

  

如果优先级在100到139之间,那么流程是根据优先级区分为实时还是常规   那么过程就是传统过程,否则是实时的   过程

不是,它取决于现有的调度机制。

  

如何在Linux中更改优先级,我的意思是,我们知道流程的优先级不会保持不变   执行?

这就是动态进入画面的时候。阅读给定链接中的“好价值”。