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

标签 linux kernel

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

main()
{
    while(1)
        ;
}

或者这个怎​​么样?

main()
{
}

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

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

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

$ time ./a.out 
^C

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

最佳答案

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

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

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

关于linux - 每个进程都有自己的内核堆栈,对吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37858029/

相关文章:

linux - 如何获得捕捉 SIGABRT 的信号

operating-system - 对于内核/操作系统,C 仍然是它吗?

linux - 我应该什么时候编写 Linux 内核模块?

gdb - 使用 gdbserver 和 qemu 进行调试,如何在控制寄存器 cr3 上设置观察点

linux-kernel - ARM 板中的内核崩溃错误

linux - 循环 Linux Shell 的空主体

c - 错误: sql. h:路径名中的文件或目录不存在

c - mmap 是内置函数吗?

c - 在套接字中使用 offsetof() 而不是 sizeof() 有什么区别吗?

linux - Linux内核代码的哪一部分负责实现LRU?