首页 文章

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

提问于
浏览
4

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

  • 静态优先级

  • 动态优先级

  • 实时优先

现在我所理解的是:

  • Static priority and Dynamic priority are defined only for Conventional processes ,他们只能从100到139取值 .

  • 静态优先级用于确定进程的基本时间片

  • 动态优先级用于选择下一个要执行的进程 .

  • 实时优先级定义为 only for Real time processes ,其值可以在0到99之间

现在我的问题是:

  • 如果我错了,请纠正我,还请告诉我为什么我们在Linux中使用三种优先级,这些优先级有何不同?

  • 过程是否根据优先级区分为实时或常规,如果优先级在100到139之间则过程是常规过程否则是实时过程?

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

1 回答

  • 3

    Disclaimer :以下是适用于Linux中的调度(我不确定Windows或其他操作系统) . 线程和进程在这里可以互换使用,但是它们之间存在差异 .

    Priorities & differences

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

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

    其中,sched_param包含优先级:

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

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

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

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

    Now, to your questions:

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

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

    如果优先级在100到139之间,那么流程是按实时还是常规来区分的,那么流程是否是传统流程否则是实时流程?

    不是真的,它取决于适当的调度机制 .

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

    那就是动态进入画面的时候 . 阅读给定链接中的“好 Value ” .

相关问题