处理器中有多少个堆栈?

处理器中有多少个堆栈?

我在操作系统课上学习了 CPU 和内存的交互,但一直搞不清楚内存堆栈的工作原理。我理解堆栈每次向下移动一行,要么将数据存储在累加器中,要么将指令发送到 IR。

我的问题是:每个进程都有自己的内存堆栈吗?还是每个处理器都有一个巨大的内存堆栈,不断在不同进程之间切换(偶尔会被 I/O 调用中断)?如果有一个巨大的堆栈,那么是否只有一个堆栈,因为大多数现代处理器每秒可以执行如此多的指令,以至于在我们缓慢的人类大脑看来,进程只是同时运行的?

答案1

从技术上讲,大多数现代 CPU 都没有硬件堆栈(也就是说,没有专门用于堆栈的内存,这主要是因为它效率低下,而且您无法确定在任何实际系统上到底需要多少空间)。但是,几乎所有 CPU 都有一个堆栈指针寄存器,这是操作堆栈的指令使用的。但是,每个进程仍然有自己的堆栈(实际上,通常至少有两个堆栈,但这涉及到操作系统和用户程序之间权限分离的复杂性,与问题并不完全相关),但堆栈指针寄存器由所有进程共享(此寄存器是上下文切换期间保存和恢复的内容的一部分,与大多数其余 CPU 状态一起保存和恢复)。

直截了当地回答你问题的后半部分,多任务处理是一种幻觉,它只是取决于规模。每个单独的 CPU 核心一次可以运行一个进程,并且它(通常)将在系统上所有不等待某些东西的进程之间切换,切换频率足够高,以至于从人的角度来看它们可以同时运行(大多数操作系统的进程速率为每秒 100 到 1000 次,这仍然足以在每个进程中执行数亿条 CPU 指令)。从不同的角度来看,单核 CPU 就像一个人,它必须定期将注意力转移到“多任务”上,而多核 CPU 就像一个团队,每个人一次只能可靠地做一件事,但作为一个整体,团队可以轻松完成与团队成员数量相同的任务。

但是,对于您的课程目的而言,所有这些要么无关紧要(如果课程使用 CP/M 或 DOS 等极简操作系统授课,它们不支持多任务处理,因此只有一个堆栈,仅此而已),要么会在适当的时候讲到(如果课程使用 UNIX、MINIX 或各种现代商业产品等真实操作系统授课,它们都支持多任务处理,而这通常在课程结束时讲到,因为要理解它就需要理解基础知识(比如堆栈的工作原理))。

相关内容