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

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

  1. 静态优先
  2. dynamic优先
  3. 实时优先

现在我所理解的是:

  • 静态优先级和dynamic优先级仅为常规进程定义,只能从100到139。
  • 静态优先级用于确定进程的基本时间片
  • dynamic优先级用于select下一个要执行的进程。

  • 实时优先级只针对实时进程定义,其值可以在0到99之间

现在我的问题是:

  1. 如果我错了,请纠正我,还请告诉我为什么我们在Linux中使用三种types的优先级,这些优先级之间有什么区别?
  2. stream程是否按照实时或传统的方式区分,如果优先级在100到139之间,则stream程是常规stream程,否则是实时stream程?
  3. Linux中的优先级如何改变,我的意思是,我们知道一个进程的优先级在执行之后并不会保持不变。

Solutions Collecting From Web of "Linux内核使用的三个优先级有什么区别?"

免责声明 :以下是在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动态优先级 :当线程开始饿死时,因为更高优先级的线程一直在调度,所以需要使用各种机制来提高这样的线程的优先级。 这个升高/降低(是的,这也发生了)优先级被称为动态优先级,因为它不断变化。 在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中的优先级如何改变,我的意思是,我们知道一个进程的优先级在执行之后并不会保持不变。

那就是当动态发生的时候。 阅读给定链接中的“nice value”。