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

  • 静态优先级
  • 动态优先级
  • 实时优先级

  • 现在我明白的是:
  • 静态优先级和动态优先级仅针对常规进程 定义,它们的值只能从 100 到 139。
  • 静态优先级用于确定进程的基本时间片
  • 动态优先级用于选择下一个要执行的进程。
  • 定义实时优先级 仅用于实时进程 其值可以从 0 到 99

  • 现在我的问题是:
  • 如果我错了,请纠正我,还请告诉我我们为什么使用
    Linux中的三种优先级以及有什么区别
    在这些优先事项中?
  • 根据优先级(如果优先级在 100 到 139 之间)将进程区分为实时还是常规
    那么进程是常规进程,否则是实时的
    流程?
  • 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 动态优先级 :当线程因为一直在调度更高优先级的线程而开始饿死时,就需要使用 various mechanism 来提高此类线程的优先级。这种提高/降低(是的,这种情况也发生)的优先级被称为动态优先级,因为它一直在变化。在 Linux 中,即使是胖 child 也可以玩。

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

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

    现在,回答您的问题:



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



    并非如此,这取决于现有的调度机制。



    这就是动态性出现的时候。阅读给定链接中的“不错的值(value)”。

    关于linux - Linux内核中使用的三个优先级有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22163722/

    10-13 08:08