首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作系统调用的每个例程都会创建自己的“堆栈”吗?

操作系统调用的每个例程都会创建自己的“堆栈”吗?
EN

Stack Overflow用户
提问于 2011-02-05 22:39:06
回答 1查看 559关注 0票数 0

对不起,这是一个简单的问题,但当我谈到操作系统理论时,这个问题总是让我感到困惑。

我的书声称,通过使用“栈”,可重入性成为可能--这是否意味着存在一个“栈”,它以某种方式在所有例程之间共享,或者“栈”指的是栈的抽象概念,每次调用某个子例程时,都会创建一个栈并将其存储在主内存中?(假设需要)。

在这种情况下,CPU中的堆栈指针又如何呢?在这两种情况下,这是如何发挥作用的?

很抱歉我的描述含糊不清,整个想法对我来说只是一种相互矛盾的想法!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-05 22:44:29

这是特定于平台的(取决于所使用的硬件和软件)。

x86/x64上的Windows为每个线程准备了一个用于系统堆栈的内存。每当您在该线程中执行系统调用时,它都会被重用。

当多个独立的进程或线程可以同时调用系统例程时,系统是可重入的。在这种情况下,每个线程都使用自己的系统堆栈。系统堆栈(技术上是环0堆栈)独立于用户模式(环3)堆栈。

我也可以提供更多的信息,只要问你是否想知道更具体的事情。

堆栈指针:

  • 在正常执行期间,每个线程都有自己的普通堆栈和堆栈指针。
  • 当一个特定的线程调用操作系统例程时,当前堆栈指针值被存储并将堆栈指针设置为始终相同的地址系统(环0)堆栈。
  • 每个线程都有自己的系统(环0)堆栈。
  • 当系统调用结束时,堆栈指针的原始值被恢复。所以这里我们实际上放弃了系统堆栈,回到了普通堆栈,在编译器/链接器中设置了“正常”堆栈的
  • 大小。它可以增长到兆字节。但是系统栈有一个有限的静态大小,你永远不能改变它的位置或大小。
  • 如果一个系统例程在内部调用另一个系统例程,则由硬件检测并直接调用,即在这种情况下不进行堆栈指针的特殊排列。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4907423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档