我正在操作系统课程中学习 CPU 和内存交互,并且对内存堆栈的工作原理感到困惑。据我了解,堆栈一次向下一行,要么将数据存储在累加器中,要么向 IR 发送指令。
我的问题是:每个进程都有自己的内存堆栈还是每个处理器都有一个巨大的内存堆栈,不断在不同进程之间切换(并且偶尔会被 I/O 调用中断)?如果有一个巨大的堆栈,那么是否只有一个堆栈,因为大多数现代处理器每秒可以执行如此多的指令,以至于对于我们缓慢的人类大脑来说,看起来就像进程在同时运行?
从技术上讲,大多数现代 CPU 都没有硬件堆栈(也就是说,没有专门用于堆栈的专用内存,主要是因为它效率低下,而且您无法确定任何实际系统上需要多少空间)。然而,几乎所有的寄存器都有一个堆栈指针寄存器,这是在堆栈上操作的指令所使用的。但是,每个进程仍然有自己的堆栈(实际上,通常至少有两个堆栈,但这会涉及操作系统和用户程序之间复杂的权限分离,并且与问题并不完全相关),但是堆栈指针寄存器由所有进程共享(该寄存器是上下文切换期间保存和恢复的内容的一部分,以及大多数其余 CPU 状态)。
坦白地回答你问题的后半部分,多任务处理是一种幻觉,它只取决于规模。每个单独的 CPU 核心一次可以运行一个进程,并且它(通常)会在系统上的所有进程之间切换,这些进程不会以足够高的频率等待某些进程,从人类的角度来看,它们在功能上同时运行(大多数运行对于进程每秒 100 到 1000 次的系统来说,这对于每个进程中执行数亿条 CPU 指令来说仍然绰绰有余)。换个角度来看,单核CPU就像一个人,它必须定期将注意力切换到“多任务”,而多核CPU就像一个团队,每个人只能做一件事一次可靠地,但作为一个整体,团队可以轻松地完成与团队成员一样多的任务。
然而,就你的课程而言,所有这些要么是无关紧要的(如果课程是使用像 CP/M 或 DOS 这样的简约操作系统教授的,它们不执行多任务处理,因此只有一个堆栈),要么将在适当的时候进行讨论(如果使用像 UNIX、MINIX 这样的真实操作系统,甚至是各种现代商业产品之一进行教学,所有这些都可以进行多任务处理,这通常会在课程结束时进行讨论,因为理解它需要了解基础知识(例如堆栈的工作原理))。
| 归档时间: |
|
| 查看次数: |
2589 次 |
| 最近记录: |