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

标签 linux-kernel x86 operating-system kernel context-switch

我了解到每个进程在由堆栈、堆、数据和文本(代码)组成的内存中都有自己的区域/块(参见 this)。

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

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

最佳答案

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

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

关于linux-kernel - 进程堆栈和 CPU 堆栈之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33239200/

相关文章:

Linux 内核 API 更改/添加

android 使用存储在 assets 文件夹中的 Linux 工具

performance - SIMD/SSE 新手 : simple image filtering

performance - _mm_shuffle_epi8 内在函数的使用

java - Java Applet 可以发现多少硬件细节?

linux - Arm64 Linux 页表遍历

linux - 如何找到我的 64 位 Linux 内核的 task_size?

assembly - 如何将字节复制到xmm0寄存器中

linux - 政策与机制

python - Python 脚本中的 ImageMagick 代码