我是Linux内核的新手,现在我正在研究Linux内核中的进程调度。 Linux中有三种types的优先级:
现在我所理解的是:
dynamic优先级用于select下一个要执行的进程。
实时优先级只针对实时进程定义,其值可以在0到99之间
现在我的问题是:
免责声明 :以下是在Linux中进行调度(我不确定有关Windows或其他操作系统)。 线程和进程在这里可以互换使用,但是它们之间是有区别的。
重点和差异
1.静态优先级 :这是创建新线程时设置的默认优先级(传统进程的值为0,即非实时进程,即不使用实时调度时)。 您可以使用以下方法更改
`pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param);`
其中,sched_param包含优先级:
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”。