堆栈向下增长,堆积增长,如果他们遇到了什么?

时间:2016-12-10 03:40:30

标签: operating-system virtual-memory

此图片可在第9章开始的Operating system concepts上找到。虚拟地址空间的大小为 0 max 。我的问题是:

  1. 什么决定最大值?它固定了吗?
  2. 如果堆栈和堆之间的漏洞被填满,并且其中一个漏洞想要不断增长,会发生什么?
  3. enter image description here

    我知道我的问题可能重复,但我读过很多帖子,但我仍然无法得到答案。提前谢谢!

1 个答案:

答案 0 :(得分:1)

请记住,您所看到的是一个非常简化的图表。首先,底层硬件设置了最大逻辑地址范围。

该范围的某些部分将通过操作系统保留(通过硬件或软件,具体取决于处理器)。其余地址用于用户地址空间。

所以你所看到的是用户地址空间的概念视图。这可以通过系统参数和过程配额进一步限制。

  

什么决定最大值?它固定了吗?

因此,MAX是硬件限制,操作系统地址分配,系统参数和过程配额的组合。因此,它可以是不固定的。

  如果堆栈和堆之间的漏洞被填满,并且其中一个漏洞想要不断增长,会发生什么?

首先要记住这个图只是概念性的。一个简化是地址空间内的有效地址不需要是连续的。可能有漏洞。其次,内存布局通常由链接器控制。 “文本”和“数据”可以颠倒甚至交错。

蓝色“洞”通常是未分配(无效)的内存页面。有些操作系统不会增加堆栈。它由链接预先分配。在多线程系统中,可能存在多个堆栈(图的另一个简化),并且通常有多个堆。

随着各种功能映射页面进入逻辑地址空间,蓝色区域缩小。如果go变为零,则下一次映射页面的尝试将失败。