代码之家  ›  专栏  ›  技术社区  ›  JanLikar

当操作系统切换到其他任务时,存储在寄存器和堆栈中的数据会发生什么?

  •  0
  • JanLikar  · 技术社区  · 10 年前

    在过去的几周里,我对低级编程有点兴趣。我想知道当操作系统“决定”切换到另一个任务时,存储在proc寄存器中的数据会发生什么。它存放在哪里?

    3 回复  |  直到 10 年前
        1
  •  4
  •   m0skit0    10 年前

    “在哪里” 严重依赖于底层硬件架构,但通常在主存储器(RAM)中。例如,Intel体系结构具有“ protected mode “(在268+个处理器上可用),提供硬件级工具来处理多任务;例如 task state segment (它是一个主内存段),它保存CPU寄存器以及该任务的其他数据。

        2
  •  4
  •   Variable Length Coder    10 年前

    此操作称为上下文开关。操作系统保存寄存器的内容,并在返回任务时恢复它们。堆栈内容保持在原来的位置,新任务将为堆栈分配不同的内存区域。当返回到第一个任务时,堆栈指针将恢复为指向上一个堆栈区域。

        3
  •  0
  •   Björn Hallström    10 年前
     I've been getting a bit interested in low level programming in the last 
     couple of weeks. I wonder what happens to the data stored in proc registers, 
     when the OS "decides" to switch to another task. Where is it stored?
    

    CPU的状态-即寄存器的内容存储在 印刷电路板 - 过程控制块。 (用于螺纹 TCB公司 - 螺纹控制块 )它是为进程分配的内存的一部分,例如堆、堆栈等。

    操作系统中有一个dispather程序,它处理这些所谓的上下文开关,并对时钟中断做出反应。进程之间的切换可能每毫秒发生一次,这种情况发生得如此频繁,以至于用户认为这是两个程序同时执行的情况,也就是所谓的多任务处理。