什么类型的数据存储在进程的内核模式堆栈中?进程“用户模式”调用链是否存储在内核堆栈中?
谢谢, 维杰
答案 0 :(得分:5)
Linux内核本身就是一个通过切换堆栈来工作的线程程序。
所以,假设你做read(0, space, 100);
,或者只是c = getchar();
,最终会变成read()
。
当linux获得控制权时,它将开始进行函数调用,自然地使用内核堆栈。它将使内核中的调用越来越低,直到它最终到达tty或网络层。
但你还没有输入任何东西!
所以它只是切换到另一个进程,一个真正可运行的进程,它将所有这些函数调用激活帧留在堆栈上。最后你输入了一些东西,内核发现你的进程现在是可以运行的,当它切换回来时,再次切换堆栈,实现你的read(2)
的所有函数调用现在都可以解除并最终返回用户模式。
答案 1 :(得分:2)
当进程进入内核模式时[由于系统调用或故障等异常,或者由于硬件中断],使用进程的内核模式堆栈。进程在进入内核模式直到离开它时执行的步骤序列称为内核控制路径。内核控制路径的状态信息存储在进程的内核模式堆栈中。另外,假设由于过期时间片,如果发生上下文切换,则process-cpu寄存器的状态存储在内核模式堆栈中,以便在cpu上重新调度进程时可以检索它们。
由于内核模式堆栈仅在进入内核模式时使用,因此“用户模式”调用链不会存储在此堆栈中。
答案 2 :(得分:1)
This question显示当进程从用户模式转换到内核模式时存储在内核堆栈中的值