在计算机科学中,段页存储是一种混合记忆管理方案。虚拟内存被分成多个段,每个段由连续的虚拟页组成。由于不同的进程可以拥有相同的页,因此不同的页可以在内存中的任何位置,并且页与段之间的映射通常保存在页表中。这种存储机制是否有外部碎片是一个值得讨论的问题。
首先,我们需要了解碎片。外部碎片是由于内存管理的空间不连续而产生的碎片。当一片内存被占用后,此片内存变成了不可用的碎片,如果不连续的空间不能被使用,则会导致外部碎片的发生。在段页存储机制中,分配的页面可以在物理内存中的任意位置,这意味着页面之间可能会产生填充的碎片,但不会产生外部碎片。
其次,我们需要了解如何分配存储。段页存储分配的大小可以与进程请求的大小不同,这可以避免出现内部碎片。当一个段被分配后,它被拆分成固定大小的虚拟页,然后这些页被映射到物理内存中的空闲页。当请求更多内存时,若该进程有足够的虚拟页,可以分配连续的虚拟页并映射它们到物理内存。因为已分配的物理页不会被释放,所以不会出现外部碎片。
然而,页表维护,可能会导致性能问题。每个进程都需要一张页表,页表的大小与进程的大小成正比,这可能会导致页表很大,而且一些页可能不会被使用。因此,页面替换和加载可能会导致性能问题,甚至可能会导致“页错误”。
此外,在某些情况下,当内存被多个进程共享时,可能会出现外部碎片。这是因为多个进程可以共享同一段,当其中一个释放了一个页面时,该页面的物理位置可能在两个进程之间的位置。这可能导致填充碎片,但在某些情况下不太可能导致外部碎片。
综上所述,段页存储机制在分配内存时不会出现外部碎片,但由于页表维护的复杂性和多进程共享内存的情况,可能会出现外部碎片。
扫码咨询 领取资料