每个进程都有自己的内核堆栈,对吧?

时间:2016-06-16 11:35:56

标签: linux kernel

我看到一些SO问题得出结论:每个进程都有自己的内核堆栈。但是这个代码怎么样?

main()
{
    while(1)
        ;
}

或者这个怎​​么样?

main()
{
}

这个程序是否也有相应的内核堆栈?

更多: 对于上面的第一个代码,我测试了它如下。按Ctrl + C将其停止,并查看系统时间小于1毫秒,如下所示。

我想我想知道的是用户空间程序的执行路径是否必须通过内核空间?对于我的示例代码,我认为进程本身在执行时不会通过内核空间,这是对的吗?

$ time ./a.out 
^C

real    0m24.953s
user    0m24.942s
sys     0m0.000s

1 个答案:

答案 0 :(得分:1)

内核将应用程序代码(从可执行文件)加载到内存中。但内核不执行反汇编。因此,内核无法检测,代码是否短缺,是否使用系统调用等等。

因此,对于任何应用程序,内核都需要创建完整执行上下文。因此,在任何情况下都需要分配内核堆栈

另请注意,当内核在应用程序进程的上下文中执行代码时,系统调用不是唯一的情况。进程的抢占,异常处理也由内核执行,需要内核堆栈。