在用户空间中,我们可以通过在程序中执行程序或调用fork来创建进程,内核将为每个用户空间进程创建进程描述符(task_struct)。
在内核空间中是否存在任何称为进程的概念,如果是这样,它们将如何创建?
根据我的理解,内核空间将使用kernel_thread()
等在内核空间中创建,kernel_thread()
在内部调用do_fork()
,因此内核线程也使用task_struct
表示? / p>
如果使用task_struct
表示用户空间进程和内核空间线程,那么调度程序将如何调度用户空间进程和内核空间线程?
答案 0 :(得分:2)
是的,它们都是通过task_struct
处理的。
关键内核线程具有RT("实时")调度程序类,它优先于通常用于用户空间线程的CFS调度程序。 。请检查你的ps:
# ps ax --format uname,pid,ppid,tty,cmd,cls,pri,rtprio | egrep '(FF|RR)'
(内核线程显示在方括号中)
但是,正如您所看到的,许多内核线程都有TS调度程序。我不认为有理由让所有内核线程实时。例如,您可以通过VLC播放器显示的情绪场景推迟回写到磁盘。
答案 1 :(得分:1)
此外,我认为即使POSIX线程与其他线程共享内存段(例如堆,全局变量)也由task_struct处理。