【问题标题】:How os handle fragmentation in virtual address space操作系统如何处理虚拟地址空间中的碎片
【发布时间】:2015-03-23 21:43:27
【问题描述】:

据我所知,分页系统确实消除了物理地址空间中的外部碎片,但是虚拟地址空间中的碎片呢?

【问题讨论】:

    标签: memory operating-system fragment virtual-memory


    【解决方案1】:

    让我在你的陈述中添加一个限定条件。当内核可分页时,分页系统几乎消除了物理地址空间中的碎片。

    在某些系统上,用户模式页表本身是可分页的。在其他情况下,它们是不可分页的物理位置。然后你可以得到碎片。

    虚拟地址空间中的碎片往往发生在堆分配中。堆管理器面临的挑战是在管理空间的同时尽量减少碎片。

    【讨论】:

      【解决方案2】:

      在现代操作系统中,每个进程都使用虚拟地址空间(内核有自己的专用虚拟范围),这意味着与整个操作系统相比,需求要低得多。虚拟地址空间通常足够大(x86 上每个进程 2-3 GB,x64 机器上多个 TB(Windows 上 8)),因此碎片对于操作系统范围的物理地址空间来说并不是一个大问题。仍然会出现问题,尤其是对于 x86 或其他 32 位架构上的长时间运行和内存消耗大的应用程序。为此,操作系统提供了机制,例如以堆代码的形式。应用程序通常在启动时将一个或多个内存范围保留为堆,然后从那里分配所需的内存块(例如 malloc)。有多种实现以不同的方式处理堆的碎片。 Windows 提供了一个特殊的低碎片堆实现,如果需要,可以使用它。其他一切通常取决于应用程序或其库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-23
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 2016-12-28
        • 2010-10-01
        • 2014-12-11
        • 2012-11-06
        相关资源
        最近更新 更多