gpt4 book ai didi

linux - Linux 内核中的 setscheduler()

转载 作者:太空狗 更新时间:2023-10-29 11:16:21 26 4
gpt4 key购买 nike

各位,我在 static int setscheduler(pid_t pid, int policy, struct sched_pa​​ram *param) 中发现了这个:

p->policy = policy;

if (policy != SCHED_OTHER) p->prio = MAX_USER_RT_PRIO-1 - p->rt_priority;

p 是指向具有当前 pid 的任务描述符的指针(上面的参数)所以如果它的策略不是 SCHED_OHTER(这意味着 SCHED_FIFO 或 SCHED_RR)但是为什么我们要这样改变 p->prio 呢? rt_priority 到底是什么意思?提前致谢

最佳答案

简答:rt_priority表示实时优先级,对于SCHED_RRSCHED_FIFO,它决定了多少时间过程会得到。

长答案

首先,Linux 实现了称为实时进程调度 的东西(SCHED_RRSCHED_FIFO)。在这些策略下运行的进程始终优先于其他进程。Linux 提供 99 个实时优先级,编号为 1(最低)到 99(最高)。

在内核中,如果我没记错的话“数字越小意味着偏好越好”——较小的 p->prio 意味着更好的优先级

这是 sched_setscheduler 的样子:

int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param);

sched_pa​​ram

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

整数 sched_priority,对于 SCHED_RRSCHED_FIFO 的策略意味着“实时优先级”,我假设它是 rt_priority。所以内核做了正确的事情

  • 取最大优先权
  • 从该值中减去实时优先级。优先级越大(减去越多),调度程序的处理就越好。

关于linux - Linux 内核中的 setscheduler(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com