2014-02-15 104 views
1

我一直在阅读虚拟内存,分页等。我对此有些怀疑。分配给进程的虚拟内存

  1. 创建进程时,其虚拟地址空间大小是多少?

  2. 对于不同的过程,尺寸是否不同?如果是,那么它是如何决定的?

  3. 如果进程在运行过程中需要更多的虚拟地址空间,如何为其分配额外的内存量?

+0

如果您还有任何问题,请让我知道。我很乐意回答。 – Jason

回答

2

我会尝试按照您询问的顺序来回答。

  • 没有的过程的固定的初始大小
  • 是的存储器映射到一个过程中的量依赖于可执行文本/数据部分,链接的对象,初始堆栈大小的大小,和初始堆大小。由于引用堆栈上的地址会导致页面错误,堆栈会自动增长。
  • 附加非堆叠存储器经由通过系统调用操作系统的请求映射到一个处理(sbrk()mmap()等...)
2

它是由Jason辉煌简要说明。为了增加它并使其更清晰,我建议你也了解可执行映像的格式,例如ELF本身。 ELF executable explained将是获得基本理解的好地方。您也可能会发现connection between ELF (segments - loadable sections of an ELF executable) and VM有用。

对基本可执行映像的理解以及它的各种组件将补充Jason的答案,并且您将了解如何决定将多少虚拟内存分配给进程。

我知道我的回答很晚,就您问这个问题本身而言,但希望它有帮助。如果你发现更有趣和更有见地的东西,请在此分享,以便其他人也能接受教育。

+0

我赞赏赞同:)。当你试图弄清楚从磁盘到内存中的执行情况时,理解二进制格式是非常重要的。你给的链接有很多好的命令用于探索。具体来说,我可能会添加Ulrich Drepper的[论文](https://lwn.net/Articles/250967/)。这有点冗长,但相当全面。 – Jason