Operating system 从内核模式返回到用户模式
我对Unix内核中的模式切换的理解有点困惑。我在此给出我的理解,并将其打开以供讨论/更正 当从用户模式转换到内核模式时,处理器在每进程用户堆栈和每进程内核堆栈之间进行切换。然后,每个进程的用户堆栈段选择器和堆栈指针存储在内核堆栈中,然后将Operating system 从内核模式返回到用户模式,operating-system,system-calls,context-switch,kernel-mode,Operating System,System Calls,Context Switch,Kernel Mode,我对Unix内核中的模式切换的理解有点困惑。我在此给出我的理解,并将其打开以供讨论/更正 当从用户模式转换到内核模式时,处理器在每进程用户堆栈和每进程内核堆栈之间进行切换。然后,每个进程的用户堆栈段选择器和堆栈指针存储在内核堆栈中,然后将eip指令指针(用户模式下的返回地址)和其他硬件寄存器推送到内核堆栈中 当内核必须返回到用户模式时,trapret代码将存储在内核堆栈中的所有值弹出回硬件寄存器 但是当iret从内核堆栈中弹出eip时,应该执行的下一条指令是用户模式下的返回地址 这在不完全弹出
eip
指令指针(用户模式下的返回地址)和其他硬件寄存器推送到内核堆栈中
当内核必须返回到用户模式时,trapret
代码将存储在内核堆栈中的所有值弹出回硬件寄存器
但是当iret
从内核堆栈中弹出eip时,应该执行的下一条指令是用户模式下的返回地址
这在不完全弹出内核堆栈的其他值的情况下发生
其余的值(%cs,%eflags,%esp,%ss
)如何恢复
内核堆栈中的用户堆栈指针是如何弹出回%esp的
iret
还原所有这些内容
iret
指令相当复杂。引用
当从中断或异常处理程序返回时,处理器将执行以下操作:
也在这里发布了另一个疑问。。。你能帮我回答这个问题吗?