如何" Stack"玩一个线程的执行?

时间:2018-04-13 02:13:37

标签: multithreading operating-system stack cpu pintos

我正在研究Pintos。

这有点像学习构建操作系统的教育工具,我正在开展第二个项目,该项目旨在构建对用户程序的支持。

所以,第一项业务是设置堆栈!很棒。

问题是 - 自从课程开始以来,我一直在那些词语 The Stack 中颤抖 - 因为我无法完全理解 The Stack 是以及它如何影响程序或线程的执行。所以我理解它是RAM中设置的内存区域,但是关于它。

我的问题如下:

  • 堆栈的功能是什么?
  • " Stack"在程序计数器,寄存器和堆栈指针方面,如何在CPU中执行线程?
  • 如何将内容添加到堆栈中以及如何将其从中删除?
  • 此外,即使您不了解Pintos,对于#34;设置堆栈"它意味着什么?什么时候在操作系统中构建对用户程序的支持?

1 个答案:

答案 0 :(得分:1)

堆栈只是内存。使内存成为堆栈的唯一方法是进程访问它Last In First Out。

  

堆栈的功能是什么?

计算机中堆栈的功能是支持函数调用。函数调用镜像堆栈的操作。调用函数会推动它。退出函数弹出。

  

" Stack"在程序计数器,寄存器和堆栈指针方面,如何在CPU中执行线程?

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

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

  

如何将内容添加到堆栈中以及如何将其从中删除?

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

   SUB   #32, SP

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

  ADD  #32, SP

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

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

  

此外,即使你不了解Pintos,对于#34;设置堆栈"它意味着什么?什么时候在操作系统中构建对用户程序的支持?

要设置堆栈,您必须:

  1. 为堆栈分配内存。
  2. 您可能还想分配在堆栈两侧受保护的保护内存,以检测溢出和下溢。
  3. 您可以将堆栈顶部的地址移动到状态指针寄存器中。
  4. 正如我之前所说,堆栈只是内存。程序可以轻松分配自己的内存并将其地址移动到堆栈指针中以创建新堆栈。