进程的内核模式堆栈中存储了什么类型的数据?进程的“用户模式”调用链是否存储在内核堆栈中?
谢谢,vIjay
发布于 2011-01-17 14:43:42
你的内核调用链,和"no“
linux内核本身就是一个线程程序,它通过切换堆栈来工作。
所以,让我们假设你做了read(0, space, 100);,或者仅仅是c = getchar();,它最终会变成一个read()。
当linux获得控制权时,它将开始进行函数调用,自然地使用内核堆栈。它将在内核中进行越来越低的调用,直到它最终到达tty或网络层。
但是您还没有键入任何内容!
因此,它只是切换到另一个进程,一个真正可运行的进程,并将所有这些函数调用激活帧留在堆栈上。最后,您输入一些内容,内核会发现您的进程现在是可运行的,当它切换回来,再次切换堆栈时,所有实现您的read(2)的函数调用现在都可以展开并最终返回到用户模式。
发布于 2011-01-19 14:30:34
当进程由于诸如系统调用或故障等异常或由于硬件中断而进入内核模式时,将使用进程的内核模式堆栈。进程在进入内核模式时执行的步骤序列,直到它离开内核模式,称为内核控制路径。内核控制路径的状态信息存储在进程的内核模式堆栈中。另外,比方说,由于时间片过期,如果发生上下文切换,则进程- cpu寄存器的状态被存储在内核模式堆栈上,以便当进程在cpu上被重新调度时可以检索它们。
由于内核模式堆栈仅在进入内核模式时使用,因此“用户模式”调用链不会存储在此堆栈中。
发布于 2012-04-02 07:12:52
This question显示进程从用户模式转换到内核模式时存储在内核堆栈中的值
https://stackoverflow.com/questions/4710577
复制相似问题