进程栈和CPU栈有什么区别?

4
我了解到每个进程都有自己的内存区块,包括栈、堆、数据和代码文本(请参见此处)。
现在我正在阅读有关上下文切换的内容。我了解到,在上下文切换期间,CPU寄存器会被推入堆栈,然后整个堆栈将保存到进程控制块中。这基本上是它工作的原理吗?
为什么需要保存堆栈,如果每个进程都有自己的堆栈呢?

添加架构。它是x86吗? - cadaniluk
每个CPL都有自己的堆栈。了解一下TSS(任务状态段)。 - cadaniluk
是的,x86架构,单核处理器。也许你可以解释一下上下文切换。我读的文档清楚地说:寄存器被推入堆栈->堆栈被保存在PCB中。我错过了什么? - Richard
请问您能否提供链接,以便更好地向您解释吗? - cadaniluk
对不起。我不被允许。这是我所就读的大学的财产。 - Richard
2个回答

3

完整的堆栈在上下文切换中不会被保存。就我所知,进程上下文块只包含寄存器的值。

堆栈只是一块内存区域,没有什么特别之处。唯一让它成为一个堆栈的原因是堆栈指针寄存器引用了它。一个进程可以有多个堆栈,通常情况下也确实如此。进程通常为每个处理器模式分配一个堆栈,在多线程编程中,每个线程都有一个堆栈。


1
当发生上下文切换时,内核会引入一个新进程并“踢出”旧进程。但是,当旧进程获得其使用CPU的机会时,必须恢复其先前的状态(即被“踢出”时的状态),以便从离开的地方开始执行。
所有架构都有限定数量的寄存器。这些寄存器也包含在要存储以进行逐出的进程的状态中。将寄存器保存在堆栈上是为了效率,因此您只需要将值弹回去即可。
此外,每个进程都有自己的进程控制块(PCB)来存储这些值,在上下文切换时,以便调度算法不受干扰,并在一些简单的进程ID上工作。当进程获取CPU时,附加有该ID的PCB将被恢复。

编辑 据我所知,x86没有CPU堆栈。CPU有指向堆栈第一个元素的堆栈指针。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接