【发布时间】:2015-06-28 18:36:54
【问题描述】:
根据我的理解,当内核发现当前正在运行的进程应该剥离 CPU 时,它会启用 need_resched 标志。 然后在返回用户空间之前检查该标志,如果启用该标志,则内核启动对 schedule() 的调用。 但是我注意到,在 sys_sched_yield() 例程中,我们不使用 need_resched 标志,而是显式调用 schedule() 例程。 为什么?
【问题讨论】:
-
sys_sched_yield用于重新调度(实际上是系统调用)。因为它是从用户空间调用的,所以内核可以立即执行调度,而不是设置need_resched标志。 -
我知道 sys_sched_yield() 是一个系统调用实现。 need_resched 无法从用户模式访问,因此您的第二句话实际上没有意义。
-
您说的是
need_resched can't be accessed from user mode,但希望sys_sched_yield检查need_resched标志。为什么? -
sys_sched_yield 是 sched.c 中的一个方法,它在内核模式下运行。不要混淆系统调用包装函数和内核代码。
-
sys_sched_yield 是 sched.c 中的一个方法,它在内核模式下运行并且它实现了系统调用
sched_yield。这里没有混淆。每个系统调用都作为内核代码实现。
标签: linux linux-kernel redhat rhel