操作系统如何处理虚拟地址空间中的碎片

时间:2015-01-25 06:19:38

标签: memory operating-system fragment virtual-memory

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

让我为你的陈述添加资格。当内核可分页时,分页系统几乎消除了物理地址空间中的碎片。

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

虚拟地址空间中的碎片往往发生在堆分配中。堆管理器的挑战是管理空间,同时最大限度地减少碎片。