i**p 发帖数: 902 | 1 【 以下文字转载自 Linux 讨论区 】
发信人: isup (No), 信区: Linux
标 题: Linux scheduler
发信站: BBS 未名空间站 (Wed Oct 22 20:32:24 2014, 美东)
用户空间的进程是由scheduler调度的.
内核空间的任务也是由scheduler调度的吗? 比如我写了一个device driver,让它死循
环, 内核有没有机制在一段时间以后将这个任务挂起? 还是只有用高优先级的中断打段
它的执行? | m********2 发帖数: 89 | 2 只要不 diable local interrupt and preempt ion,就可能被 scheduler preempt。
当然还有 nmi。
【在 i**p 的大作中提到】 : 【 以下文字转载自 Linux 讨论区 】 : 发信人: isup (No), 信区: Linux : 标 题: Linux scheduler : 发信站: BBS 未名空间站 (Wed Oct 22 20:32:24 2014, 美东) : 用户空间的进程是由scheduler调度的. : 内核空间的任务也是由scheduler调度的吗? 比如我写了一个device driver,让它死循 : 环, 内核有没有机制在一段时间以后将这个任务挂起? 还是只有用高优先级的中断打段 : 它的执行?
| i**p 发帖数: 902 | 3 我记得在哪里读过一旦进入内核空间, 调度程序就只有等到该进程回到用户空间才能切
换.
换句话说, 我能否设计一个巨大计算在内核空间完成, 同时又给其他同优先级的进程不
必等到该计算完成也能有机会运行?
【在 m********2 的大作中提到】 : 只要不 diable local interrupt and preempt ion,就可能被 scheduler preempt。 : 当然还有 nmi。
| S*A 发帖数: 7142 | 4
这个是没有 preempt 的 kernel 情况。不一定回到 user space。
直接调用 schedule() 也可以导致被切换。
为吗要放到内核来作计算呢?这个完全不 make sense.
你完全可以用 user space 的程序来完成这个啊。
【在 i**p 的大作中提到】 : 我记得在哪里读过一旦进入内核空间, 调度程序就只有等到该进程回到用户空间才能切 : 换. : 换句话说, 我能否设计一个巨大计算在内核空间完成, 同时又给其他同优先级的进程不 : 必等到该计算完成也能有机会运行?
| i**p 发帖数: 902 | 5 "为吗要放到内核来作计算呢?"
这不是举个例子来说明我的问题吗.
【在 S*A 的大作中提到】 : : 这个是没有 preempt 的 kernel 情况。不一定回到 user space。 : 直接调用 schedule() 也可以导致被切换。 : 为吗要放到内核来作计算呢?这个完全不 make sense. : 你完全可以用 user space 的程序来完成这个啊。
| z******g 发帖数: 271 | | i**p 发帖数: 902 | 7 Thanks! Got it from one link. There is a change for this in 2.6.x
The Linux kernel provides preemptive scheduling under certain conditions.
Until kernel version 2.4, only user processes were preemptive, i.e., in
addition to time quantum expiration, an execution of current process in user
mode would be interrupted if higher dynamic priority processes entered TASK
_RUNNING state.[59] Toward 2.6.x series of the Linux kernel, an ability to
interrupt a task executing kernel code was added, although with that not all
sections of the kernel code can be preempted.
【在 z******g 的大作中提到】 : These might help: : http://en.wikipedia.org/wiki/Kernel_preemption : http://en.wikipedia.org/wiki/Linux_kernel#PREEMPTION
|
|