Linux内核创建一个新进程

《Linux内核分析》MOOC课程

创建新进程

如果同一个程序被多个用户同时运行,那么这个程序就有多个相对独立的进程,与此同时他们又共享相同的执行代码。在Linux系统中进程的概念类似于任务或者线程     

创建进程,调用fork函数,这是一个系统函数。fork函数与系统函数的调用大体相同,但是fork之后产生了一个新的进程,会发生两次返回。

task_struct的数据结构

每个可以独立被调度的执行上下文都有一个进程描述符,不管是进程还是线程都有自己的 task_struct结构     

task_struct的定义链接是,其代码很长,下面就列出一部分

1235struct task_struct { 1236 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped 描述进程运行状态*/ 1237 void *stack; //指定进程的内核堆栈 1238 atomic_t usage; 1239 unsigned int flags; /* per process flags, defined below */ 1240 unsigned int ptrace; 1241 1242#ifdef CONFIG_SMP 1243 struct llist_node wake_entry; 1244 int on_cpu; 1245 struct task_struct *last_wakee; 1246 unsigned long wakee_flips; 1247 unsigned long wakee_flip_decay_ts; 1248 1249 int wake_cpu; 1250#endif 1251 int on_rq; //运行队列 1252 1253 int prio, static_prio, normal_prio; //定义优先级 1254 unsigned int rt_priority; 1255 const struct sched_class *sched_class; //进程调度相关的定义 1256 struct sched_entity se; 1257 struct sched_rt_entity rt; 1258#ifdef CONFIG_CGROUP_SCHED 1259 struct task_group *sched_task_group; 1260#endif 1261 struct sched_dl_entity dl;
......

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzpzs.html