Linux kernel 进程堆栈和CPU堆栈之间有什么区别?

Linux kernel 进程堆栈和CPU堆栈之间有什么区别?,linux-kernel,x86,operating-system,kernel,context-switch,Linux Kernel,X86,Operating System,Kernel,Context Switch,我了解到,每个进程在内存中都有自己的区域/块,包括堆栈、堆、数据和文本(代码)(请参阅) 现在我正在读有关上下文切换的内容。我读到,在上下文切换期间,CPU寄存器被推送到堆栈上,然后整个堆栈将保存到进程控制块中。基本上就是这样吗 如果每个进程都有自己的堆栈,为什么还要保存堆栈?当发生上下文切换时,内核会引入一个新进程并“踢出”旧进程。但是,当轮到旧进程占用CPU时,必须恢复其以前的状态(即“被踢出”时的状态),以便从停止的点开始执行。 所有体系结构都有数量有限的寄存器。寄存器还包括在要存储以进行

我了解到,每个进程在内存中都有自己的区域/块,包括堆栈、堆、数据和文本(代码)(请参阅)

现在我正在读有关上下文切换的内容。我读到,在上下文切换期间,CPU寄存器被推送到堆栈上,然后整个堆栈将保存到进程控制块中。基本上就是这样吗


如果每个进程都有自己的堆栈,为什么还要保存堆栈?

当发生上下文切换时,内核会引入一个新进程并“踢出”旧进程。但是,当轮到旧进程占用CPU时,必须恢复其以前的状态(即“被踢出”时的状态),以便从停止的点开始执行。
所有体系结构都有数量有限的寄存器。寄存器还包括在要存储以进行逐出的进程的状态中。在堆栈上保存寄存器是为了提高效率,因此您只需重新弹出值即可。
此外,每个进程都有自己的进程控制块(PCB),用于将这些值存储在上下文开关上,这样调度算法就不会受到阻碍,并且可以处理一些简单的进程ID。当进程获取CPU时,附加了该ID的PCB就会恢复

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

整个堆栈不会保存在上下文开关中。进程上下文块只包含我所知道的每个系统上的寄存器值


堆栈只是一块内存。这没什么特别的。使它成为堆栈的唯一方法是堆栈指针寄存器引用它。一个进程可以有多个堆栈。事实上,他们通常是这样做的。对于每个处理器模式,进程通常都有一个堆栈。在多线程处理中,每个线程有一个堆栈。

添加体系结构。是x86吗?每个CPL都有自己的堆栈。了解TSS(任务状态段)。是x86,单核。也许你能给我解释一下上下文转换。我读的文档清楚地说:寄存器被推到堆栈上->堆栈保存在PCB中。我遗漏了什么?请你链接到文件以便更好地向你解释一下好吗?对不起。我不被允许。这是我就读的大学的财产