【发布时间】:2012-01-17 10:53:37
【问题描述】:
do_fork() 可以避免被抢占吗?换句话说,父进程是否可以分配一个新的任务结构然后被抢占,然后才有机会将新的任务结构插入到就绪队列中?
【问题讨论】:
标签: process linux-kernel kernel
do_fork() 可以避免被抢占吗?换句话说,父进程是否可以分配一个新的任务结构然后被抢占,然后才有机会将新的任务结构插入到就绪队列中?
【问题讨论】:
标签: process linux-kernel kernel
抢占是不安全的。
do_fork 调用copy_process,后者又执行初始化任务的sched_fork。然后do_fork 调用wake_up_new_task 以将其放入运行队列。
这是分开的,以便能够在计划之前终止或终止进程。
sched_fork 禁用抢占,但在完成工作后启用它,使内核可以在调用 wake_up_new_task 并将其放入运行队列之前进行抢占。
这是基于我对 2.6 内核的了解。
【讨论】: