0

我正在研究 Pintos。

这有点像用于学习构建操作系统的教育工具,并且我正在从事第二个项目,该项目旨在为用户程序构建支持。

因此,首要任务是设置堆栈!伟大的。

问题是——从一开始我就对堆栈这个词感到不寒而栗——因为我永远无法完全理解堆栈是什么以及它如何影响程序或线程的执行。所以我知道这是在 RAM 中设置的内存区域,仅此而已。

我的问题如下:

  • 栈的作用是什么?
  • 关于程序计数器、寄存器和堆栈指针,“堆栈”如何影响 CPU 中线程的执行?
  • 东西是如何添加到堆栈中的,又是如何从堆栈中删除的?
  • 此外,即使您不了解 Pintos,在操作系统中构建对用户程序的支持时,“设置堆栈”是什么意思?
4

1 回答 1

0

堆栈只是内存。使内存成为堆栈的唯一原因是进程以后进先出的方式访问它。

栈的作用是什么?

计算机中栈的作用是支持函数调用。函数调用反映了堆栈的操作。调用函数会推送它。退出函数弹出。

关于程序计数器、寄存器和堆栈指针,“堆栈”如何影响 CPU 中线程的执行?

从 CPU 的角度来看,线程就是一个进程。操作系统通过让多个进程共享相同的地址空间来欺骗 CPU。因此,该进程成为一个线程。

程序计数器和堆栈指针是寄存器。在大多数处理器上,都有操作堆栈指针寄存器的指令。例如,函数调用指令将通过递减堆栈指针并将程序计数器存储在堆栈指针引用的新位置将程序计数器压入堆栈。

东西是如何添加到堆栈中的,又是如何从堆栈中删除的?

Stack memory is allocated by decrementing the stack pointer. Something like:

   SUB   #32, SP

将在堆栈上分配 32 个字节,并且

  ADD  #32, SP

将释放该内存。堆栈的优点是分配内存非常快。

此外,如上所述,一些指令可能会操作堆栈。

此外,即使您不了解 Pintos,在操作系统中构建对用户程序的支持时,“设置堆栈”是什么意思?

要设置堆栈,您必须:

  1. 为堆栈分配内存。
  2. 您可能还希望分配在堆栈的任一侧受保护的保护内存以检测上溢和下溢。
  3. 您分配将堆栈顶部的地址移动到状态指针寄存器中。

正如我之前所说,堆栈只是内存。程序可以轻松地分配自己的内存并将其地址移动到堆栈指针中以创建新堆栈。

于 2018-04-13T06:32:40.847 回答