【发布时间】:2017-04-18 09:52:53
【问题描述】:
我有一个作业,我必须在task_struct 中添加一些条目并用它们做一些事情。此外,当task_struct 初始化时,我必须将一个条目初始化为特定的 int。
task_struct 第一次初始化的文件/代码在哪里?
我找到了INIT_TASK.h,但有task_struct 表的第一个进程。我想找到每个task_struct 的初始化位置并定义它的起始值,以便为我插入的新条目定义一些数字。
【问题讨论】:
-
因为这是你的作业,我们只能给你一些提示。哪个系统调用用于创建新进程?它是在内核源代码中定义的?一旦您知道它的位置,您就可以查看
task_struct是如何被初始化的(在代码中)。此外,当您知道该系统调用名称时,您可以使用 Google 查找有关如何在其中初始化task_struct的说明。您可以使用LXR 导航内核代码。祝你好运。 -
不知道用的是哪个系统调用。我尝试了 fork、do_fork、init_task,但我找不到除了 init_task.h 之外的东西,正如我在第一篇文章中所说的那样。你能告诉我系统调用或者我可以找到task_struct初始化代码的文件吗?这是我在完成所有其他任务时唯一错过的事情。
-
没错。
fork()系统调用用于创建进程,从man 2 fork 可以看出。现在,使用grep工具,找到fork系统调用在内核中的定义位置。提示:寻找SYSCALL_DEFINE0宏,因为fork()需要0 个参数。内核源代码可以从kernel.org 获得(使用mainline 内核),或者您可以使用LXR,如前所述。提示#2(如上所述):使用fork和task_struct关键字google进行解释;然后在找到的页面中搜索task_struct。
标签: linux process linux-kernel kernel