【问题标题】:Virtual memory allocated to a process分配给进程的虚拟内存
【发布时间】:2014-02-15 18:26:34
【问题描述】:

我一直在读虚拟内存,分页等。对此我有些疑问。

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

  2. 不同进程的大小是否不同?如果是,那么如何决定?

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

【问题讨论】:

  • 如果您还有任何问题,请告诉我。我很乐意回答。

标签: memory-management operating-system


【解决方案1】:

我会尽量按照你问的顺序回答。

  • 没有固定的进程初始大小
  • 是的,映射到进程的内存量取决于可执行文本/数据段的大小、链接对象、初始堆栈大小和初始堆大小。堆栈会自动增长,因为堆栈上的引用地址会导致页面错误。
  • 通过系统调用(sbrk()mmap() 等...)向操作系统发出请求,将额外的非堆栈内存映射到进程

【讨论】:

    【解决方案2】:

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

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

    我知道就您提出问题本身而言,我的回答已经很晚了,但希望对您有所帮助。如果您发现更有趣和更有见地的东西,请在此处分享,以便其他人也可以接受教育。

    【讨论】:

    • 感谢您的认可 :)。当您试图弄清楚某些东西如何从磁盘到内存中执行时,了解二进制格式绝对很重要。您提供的链接有很多用于探索的好命令。对于内存方面的内容,我可能会添加 Ulrich Drepper 的 paper。它有点冗长,但相当全面。
    猜你喜欢
    • 2012-06-20
    • 2011-03-08
    • 2013-12-13
    • 1970-01-01
    • 2011-09-26
    • 2020-05-21
    • 1970-01-01
    • 2011-09-09
    • 1970-01-01
    相关资源
    最近更新 更多