【问题标题】:Each process has its own kernel stack, right?每个进程都有自己的内核堆栈,对吧?
【发布时间】:2016-06-17 17:57:46
【问题描述】:

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

main()
{
    while(1)
        ;
}

或者这个怎​​么样?

main()
{
}

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

更多: 对于上面的第一个代码,我像下面一样对其进行了测试。按Ctrl+C停止,看到系统时间小于1ms如下。

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

$ time ./a.out 
^C

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

【问题讨论】:

    标签: linux kernel


    【解决方案1】:

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

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

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

    【讨论】:

    • 内核创建进程对象,为用户空间提供执行环境
    • 我不能很好地理解你。您说:“执行它需要完全构造进程对象”,那么内核就完成了吗?即便如此,这是否意味着分配了相应的内核堆栈?
    猜你喜欢
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2021-01-09
    • 2018-11-04
    • 2013-07-30
    • 2015-05-03
    • 1970-01-01
    • 2011-05-21
    相关资源
    最近更新 更多