与线程初始化相关的pintos中的线程问题

时间:2017-05-28 09:24:50

标签: linux multithreading unix linux-kernel pintos

我正在尝试阅读pintos的来源。 在init.c文件中调用main()之后,当调用thread_init()时,它会将指针移动到包含main方法的页面的起始位置。然后打电话给:

thread.c文件的init_thread方法中的memset(t,0,sizeof * t)。

我需要知道,这是否清楚包含main()方法代码的内存内容?

需要帮助.....

1 个答案:

答案 0 :(得分:-1)

我担心你的编程技能暂时禁止这方面的工作。我强烈建议你重温入门课程,尤其是C语言课程。

我认为你的意思是:

init_thread (initial_thread, "main", PRI_DEFAULT);

所以,让我们来看看init_thread:

init_thread (struct thread *t, const char *name, int priority)

首先,我们很容易看到" main"是线程的名称。与名为main的函数无关。

{
  enum intr_level old_level;

  ASSERT (t != NULL);
  ASSERT (PRI_MIN <= priority && priority <= PRI_MAX);
  ASSERT (name != NULL);

  memset (t, 0, sizeof *t);

memset在t指向的内存上,这是第一个参数。从调用中可以看到它是initial_thread指向的内存。

  t->status = THREAD_BLOCKED;
  strlcpy (t->name, name, sizeof t->name);

此处字符串main与strlcpy一起放置。