【发布时间】:2015-01-25 10:10:37
【问题描述】:
在用户空间我们可以通过执行程序或在程序内部调用fork来创建一个进程,内核将为每个用户空间进程创建进程描述符(task_struct)。
在内核空间中是否有任何称为进程的概念,如果有,它们将如何创建?
据我了解,内核线程将使用kernel_thread() 等在内核空间中创建,kernel_thread() 在内部调用do_fork(),所以内核线程也使用task_struct 表示?
如果用户空间进程和内核空间线程都使用task_struct 表示,那么调度程序将如何调度用户空间进程和内核空间线程?
【问题讨论】:
-
task_struct 控制单个线程(内核或用户空间),而不是进程。
-
task_thread 控制单线程意味着,用户空间和内核空间的一切都是线程?用户空间中的进程和线程有何不同?
-
用户空间中的进程和线程共享的内容不同。线程共享 FD 和内存(以及其他一些东西),而进程不共享(除非明确共享)。 kernell内存空间只有一个,所以说内核进程没有意义,只说内核线程。
标签: linux linux-kernel linux-device-driver embedded-linux archlinux