tra*_*t0r 3 linux kernel scheduler
当您调用系统调用(例如fork在进程X中)时,内核被称为在进程上下文中执行.那么,fork可以说是在进程X中运行,对吧?
但是如果schedule()在同一个进程中被调用(并且它不是一个sys调用),你会说它是作为X的一部分运行的吗?或者它是否在交换器进程中运行?或者考虑到内核的整体性质,这听起来有些荒谬吗?
schedule()始终在进程上下文中运行.关于它的特殊部分是它可以改变哪个进程上下文是最新的 - 但它总是有一个进程上下文.在调用context_switch()它之前,在要交换的进程的上下文中运行,并在它交换的进程中运行之后.
Linux内核没有专门的"交换器"任务(有一个空闲任务,如果没有其他资格可以运行,它总是可以运行).
这实际上取决于schedule()从哪里拨打电话;schedule()可以从进程上下文或工作队列中调用。工作队列是内核调度的线程:
# ps auxw | grep worker
root 1378 0.0 0.0 0 0 ? S 20:45 0:00 [kworker/1:0]
root 1382 0.0 0.0 0 0 ? S 20:45 0:00 [kworker/2:0]
root 1384 0.0 0.0 0 0 ? S 20:45 0:00 [kworker/3:1]
...
Run Code Online (Sandbox Code Playgroud)
这[..]表示进程不在用户空间中执行。
该函数在处理工作项之后但重新开始之前worker_thread()调用。schedule()
schedule()也可以代表进程调用,无论是通过驱动程序还是通过信号处理代码、文件系统内部结构或无数其他选项。
| 归档时间: |
|
| 查看次数: |
1794 次 |
| 最近记录: |