【问题标题】:Context switch on time interrupt上下文切换时间中断
【发布时间】:2017-06-01 13:06:22
【问题描述】:

引用操作系统的以下段落:三个简单的部分

请注意,有两种类型的寄存器保存/恢复发生 在此协议期间。第一个是定时器中断发生的时候;在 在这种情况下,正在运行的进程的用户注册是隐式的 由硬件保存,使用该进程的内核堆栈。这 第二个是当操作系统决定从 A 切换到 B 时;在这种情况下, 内核寄存器软件(即操作系统)明确保存, 但这次是在进程的进程结构中写入内存。

阅读有关上下文切换的其他文献,我了解到定时器中断会将 cpu 投入内核模式,然后将进程上下文保存到内核堆栈中。

为什么作者要强调硬件/软件的多重上下文保存?

【问题讨论】:

    标签: operating-system context-switch


    【解决方案1】:

    作者强调其中的硬件/软件部分,因为基本上它的上下文保存正在完成,有时由硬件完成,有时由软件

    当定时器interrupt发生时,user registershardware(意思是由CPU自己保存)保存在该进程的kernel stack上。当interrupt handler代码完成后,将使用该进程的kernel stack恢复user registers,从而恢复user stack,进程成功从kernel mode返回到user mode

    如果context switch从进程A到进程B,则AB这两个进程中的kernel stacks被切换,在kernel内部,这间接意味着节省并恢复kernel registers。使用术语软件是因为scheduler 进程在选择下一个要运行的进程后调用function(thats why software),它执行kernel stacks 的切换。 context switch 代码不必担心 user register 值 - 到那时,这些值已经安全地保存在 kernel stack 中。

    【讨论】:

      【解决方案2】:

      第一个是定时器中断发生的时候;在这种情况下,正在运行的进程的用户寄存器由硬件隐式保存,使用该进程的内核堆栈。

      通常,只有一些寄存器被保存,这通常是一个中断堆栈。

      第二个是操作系统决定从A切换到B的时候;在这种情况下,内核寄存器由软件(即操作系统)显式保存,但这次是在进程的进程结构中保存到内存中。

      通常这种切换通过特殊指令在硬件中发生。也许他们指的是开关是通过软件触发的,而不是由硬件触发的中断。

      也感谢您的参考。我刚刚开始经历它。它比大多数只会混淆的操作系统书籍要好得多。

      【讨论】:

        猜你喜欢
        • 2012-05-09
        • 2017-11-19
        • 2021-09-21
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多