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

时间:2014-03-27 19:02:56

标签: assembly computer-science cpu-architecture low-level

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

3 个答案:

答案 0 :(得分:4)

此操作称为上下文切换。操作系统保存寄存器的内容并在返回任务时恢复它们。堆栈内容保持原样,新任务被赋予堆栈的不同内存区域。返回第一个任务时,堆栈指针将恢复为指向上一个堆栈区域。

答案 1 :(得分:4)

“Where”在很大程度上取决于底层硬件架构,但通常它位于主内存(RAM)中。例如,英特尔架构有“protected mode”(可在268+处理器上使用),提供处理多任务的硬件级工具;例如,task state segment(它是一个主存储器段)保存CPU寄存器,以及此任务的其他数据。

答案 2 :(得分:0)

 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的状态 - 即寄存器的内容存储在 PCB - 过程控制块中。(对于线程 TCB - 线程控制块)它为进程分配的内存部分 - 例如堆,堆栈等。

操作系统中有一个处理这些所谓的上下文切换并对时钟中断做出反应的调度程序。进程之间的切换可能每隔几毫秒发生一次 - 它经常发生,用户认为它是两个程序同时执行 - 所谓的多任务处理。