当前位置: 首页 > 面试题库 >

在Linux中哪个实时优先级是最高优先级

越安翔
2023-03-14
问题内容

在Linux实时进程优先级范围为1到99的情况下,我不清楚哪个是最高优先级,即1或99。

“了解Linux内核”(O’Reilly)的7.2.2节说1是最高优先级,考虑到正常进程的静态优先级从100到139,其中100是最高优先级,这是有道理的:

“每个实时过程都与一个实时优先级相关联,该优先级的值范围是1(最高优先级)到99(最低优先级)。”

另一方面,sched_setscheduler手册页(RHEL 6.1)声称99是最高的:

“根据一种实时策略(SCHED_FIFO,SCHED_RR)调度的进程的sched_priority值在1(低)到99(高)之间。”

哪个实时优先级最高?


问题答案:

我做了一个实验来确定这一点,如下所示:

  • process1:RT优先级= 40,CPU关联性= CPU0。此进程“旋转” 10秒钟,因此它不会让任何较低优先级的进程在CPU 0上运行。

  • process2:RT优先级= 39,CPU关联性= CPU0。此进程每0.5秒将一条消息打印到stdout,并在它们之间hibernate。它随每条消息一起打印出经过的时间。

我正在运行带有PREEMPT_RT补丁的2.6.33内核。

为了运行实验,我在一个窗口(以root用户身份)中运行process2,然后在另一个窗口中以root用户身份启动process1。结果是进程1似乎抢占了进程2,不允许其运行整整10秒钟。

在第二个实验中,我将process2的RT优先级更改为41。在这种情况下,process2 被process1抢占。

此实验表明,sched_setscheduler()中 较大的 RT优先级值具有较高的优先级。这似乎与Michael
Foukarakis从sched.h中指出的内容相矛盾,但实际上并没有。在内核源代码的sched.c中,我们具有:

static void
__setscheduler(struct rq *rq, struct task_struct *p, int policy, int prio)
{
        BUG_ON(p->se.on_rq);

        p->policy = policy;
        p->rt_priority = prio;
        p->normal_prio = normal_prio(p);
        /* we are holding p->pi_lock already */
        p->prio = rt_mutex_getprio(p);
        if (rt_prio(p->prio))
                p->sched_class = &rt_sched_class;
        else
                p->sched_class = &fair_sched_class;
        set_load_weight(p);
}

rt_mutex_getprio(p)执行以下操作:

return task->normal_prio;

而normal_prio()恰好执行以下操作:

prio = MAX_RT_PRIO-1 - p->rt_priority;  /* <===== notice! */
...
return prio;

换句话说,我们有(我自己的解释):

p->prio = p->normal_prio = MAX_RT_PRIO - 1 - p->rt_priority

哇!太混乱了!总结一下:

  • 使用p-> prio时,较小的值优先于较大的值。

  • 使用p-> rt_priority时,较大的值优先于较小的值。这是使用sched_setscheduler()设置的实时优先级。



 类似资料:
  • 我有这样的表达: 以下哪些元素(

  • 问题内容: 我有这个表达: 这些元素的(,,)有优先权? 您能用方括号显示操作顺序吗? 问题答案: 首先,然后,然后。 您的表情将被评估为。 https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

  • 我需要一个优先级队列,它首先获得具有最高优先级值的项目。我当前正在使用队列库中的PriorityQueue类。但是,这个函数只先返回值最小的项。我尝试了一些很难看的解决方案,比如(sys.maxint-priority)作为优先级,但我只是想知道是否存在更优雅的解决方案。

  • 本文向大家介绍行内css和important哪个优先级高?相关面试题,主要包含被问及行内css和important哪个优先级高?时的应答技巧和注意事项,需要的朋友参考一下 !important 将覆盖行内css css优先级:行内css>id选择器(#)>伪类(:)>属性选择器([])>类选择器(.) > 类型选择器(div p a等) > 通用选择器(*)

  • Linux 是一个多用户、多任务的操作系统,系统中通常运行着非常多的进程。但是 CPU 在一个时钟周期内只能运算一条指令(现在的 CPU 采用了多线程、多核心技术,所以在一个时钟周期内可以运算多条指令。 但是同时运算的指令数也远远小于系统中的进程总数),那问题来了:谁应该先运算,谁应该后运算呢?这就需要由进程的优先级来决定了。 另外,CPU 在运算数据时,不是把一个集成算完成,再进行下一个进程的运

  • 本文向大家介绍v-if和v-show哪个优先级更高?相关面试题,主要包含被问及v-if和v-show哪个优先级更高?时的应答技巧和注意事项,需要的朋友参考一下 v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。 v-if 也是惰性的:如果在初始渲染时条件为假,则什么也不做——直到条件第一次变为真时,才会开始渲染条件块。 相比之下,v-show