2013-08-21 74 views
15

当我从一个进程创建多个线程时,那么每个线程都有自己的堆栈,还是它们共享父进程的堆栈?线程进行系统调用时会发生什么?线程是否也像进程一样维护自己的内核栈?每个线程都有自己的堆栈吗?

+1

是线程特定的堆栈!,全局值可以在线程之间共享(本地不可用) –

+0

@GrijeshChauhan当我们从一个线程进行系统调用时会发生什么?例如,如果您调用'open()'系统调用来打开文件,则为 –

+2

。使用'int f = open()'然后当然'f'是线程本地的。但请记住文件描述符是在这些线程之间共享的。如果你知道'f'的值,那么你可以在不同的线程中使用该值来访问相同的文件(不需要再次打开) –

回答

9

是的线程有自己的堆栈和他们自己的内核堆栈(例如linux)。

当一个线程进行系统调用时,陷入内核模式(从用户模式),将参数传递给内核,检查参数,内核做它需要做的事情(在内核中堆栈),将最终值返回给线程,并返回用户模式。

+0

内核如何在没有堆栈的情况下“做它需要做的事情”? – avakar

+0

我会在我的回答中予以澄清 – Joohwan

+2

内核堆栈只是添加到预先存在的模型中的安全预防措施。多堆栈是多线程的先决条件。内核本质上提供了用户空间中发生的任何并行版本,以防止敏感数据泄露。 – Potatoswatter

相关问题