【问题标题】:How does a switch from a thread's user mode stack to kernel stack occur without losing the original stack pointer?如何在不丢失原始堆栈指针的情况下从线程的用户模式堆栈切换到内核堆栈?
【发布时间】:2014-08-13 00:30:21
【问题描述】:

在阅读了this 关于上下文切换如何发生的问题后,我仍然对如何从线程的用户模式堆栈到其内核堆栈进行切换感到有些困惑。我假设这意味着将堆栈指针的值更改为指向内核模式堆栈,但是如果要将线程的原始堆栈指针保存在内核堆栈上,它如何更改堆栈指针以指向内核堆栈先保存栈指针的旧值再保存?

【问题讨论】:

    标签: linux-kernel kernel context-switch


    【解决方案1】:
    1. 将堆栈指针复制到另一个寄存器;
    2. 加载新的堆栈指​​针;
    3. 将寄存器推入新堆栈。

    【讨论】:

    • 但是如果它保存线程上下文是否也需要保留所有寄存器?
    • 线程之间的切换可以保存所有内容。但是您的问题是关于用户/内核模式切换,即系统调用机制。
    • 好的,那么当硬件中断发生时它是如何工作的,我们需要保存当前线程的上下文并切换到内核模式(和内核堆栈)才能运行中断处理例程?
    • 这是一个不同的问题。在大多数情况下,它是由硬件自动完成的。
    猜你喜欢
    • 2015-11-16
    • 2014-10-16
    • 2013-10-13
    • 2017-09-24
    • 2015-08-05
    • 2012-04-23
    • 2014-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多