操作系统中的连续和非连续内存分配

2025 年 7 月 11 日 | 10 分钟阅读

内存是字节的巨大集合,内存分配是指为计算机应用程序分配空间。内存分配主要有两种类型:连续内存分配 非连续内存分配。连续内存分配允许单个内存空间完成任务。另一方面,非连续内存分配将方法分配给多个内存位置的不同内存部分。

在本文中,您将了解连续非连续内存分配及其优点、缺点和区别。

什么是连续内存分配?

高效的内存管理是现代操作系统的基石,它确保进程获得足够的内存,同时最大限度地提高系统性能并最大限度地减少浪费。内存分配中使用的两种主要技术是连续非连续内存分配。这些方法中的每一种都提供独特的优点和缺点,并适用于不同的计算需求。

在连续内存分配中,每个进程都被分配一个在物理地址空间中连续的内存块。这种方法在实现和概念上都相对简单。操作系统会跟踪内存的哪些部分是空闲的,并分配一个足够大的连续块来容纳整个进程。当进程终止时,该块被释放并标记为空闲。

连续分配可以通过不同的策略实现,例如单分区和多分区分配。在单分区系统中,整个内存都保留给一个进程,这是一种简单但不高效的方法。更常见的是,系统使用多个分区。这些分区可以是固定大小的,也可以根据进程的需求动态调整。

为了确定新进程在内存中的位置,操作系统可能会采用放置算法,例如首次适应(选择第一个合适的可用块)、最佳适应(选择最小的合适块)或最差适应(使用最大的可用块)。虽然每种方法都有其优点,但它们都面临外部碎片问题,即空闲内存被分割成过小的块,无法容纳新进程,导致空间利用效率低下。

连续分配在地址转换方面通常很快,因为内存地址直接映射。但是,它缺乏灵活性。如果进程在执行期间需要更多内存,可能无法扩展其内存块,从而强制进程重新定位或重新启动。

它是内存分配方法的一种类型。当进程请求内存时,会根据其需求分配一个单一的连续内存块。

连续分配如何工作

内存划分

在连续内存分配中,主内存分为两部分。一部分保留给操作系统本身,另一部分可供用户进程使用。这确保了系统级功能和用户级应用程序相互隔离,从而提高了性能和安全性。

进程加载

当新进程到达时,操作系统会搜索一个足够大的空闲内存块来容纳整个进程。这里的要求是整个内存块必须是连续的,这意味着分配给进程的所有内存地址在物理内存中必须是顺序的。一旦找到这样的块,进程就会被加载到其中并开始执行。

内存分配策略

为了决定新进程的放置位置,操作系统使用分配策略,例如首次适应、最佳适应和最差适应。首次适应选择内存中第一个足够大的块来容纳进程。最佳适应搜索整个内存以找到可以容纳进程的最小块,试图留下最少的未使用空间。最差适应则选择最大的可用块,以通过留下更大的剩余间隙来最小化碎片。这些策略对性能和内存利用率都有不同的影响。

内存释放

一旦进程执行完成或被系统终止,它所占用的内存块就会被释放并标记为空闲。然后,此空间可用于新进程。然而,分散位置的内存块释放会导致外部碎片,即存在空闲内存,但它被分解成小的、不连续的片段,这些片段对于大型进程来说没有用处。

地址转换

连续分配的一个优点是它简化了地址转换。由于分配给进程的所有内存都在一个单一块中,因此将逻辑地址(由进程使用)转换为物理地址(由硬件使用)是直截了当的。系统只需向分配的内存块的基地址添加一个偏移量。这导致更快的访问时间和更少的内存管理单元 (MMU) 开销。

连续内存分配中的分配策略

当新进程到达并需要加载到内存中时,操作系统必须决定将其精确地放置在可用空闲空间的哪个位置。由于内存是以连续块的形式分配的,因此选择哪个空闲块会显著影响系统性能和内存效率。为了做出此决定,操作系统使用几种分配策略之一,每种策略都有其选择合适的内存块和处理空闲空间的方法。

首次适应

首次适应策略从内存的开头开始扫描,并分配第一个足够大的可用块来容纳进程。它简单快速,因为它一找到合适的空间就停止搜索。然而,它可能导致内存的下半部分碎片化,因为小间隙会随着时间的推移迅速积累在那里。这些小碎片可能对未来的进程没有用,即使总空闲内存是足够的。

最佳适应

最佳适应策略搜索所有空闲内存块的列表,并选择大小最接近进程所需内存的块。目标是最小化剩余空间并减少内存浪费。虽然这种方法可以在短期内更有效地利用内存,但由于需要检查所有空闲块,因此速度较慢。此外,它可能导致创建许多微小的、无法使用的碎片,从而增加外部碎片的机会。

最差适应

最差适应策略采取与最佳适应相反的方法。它不是选择最小的足够块,而是从最大的可用块中分配内存。这种策略的逻辑是留下更大的内存块,这些内存块可能对未来的进程更有用。然而,在实践中,这种方法也可能导致内存利用效率低下,因为它经常会分解大块,并且仍然会留下小的、无法使用的碎片。

权衡与性能

每种策略都在速度和内存利用率之间提供了不同的权衡。首次适应在分配时间方面通常最快,但可能导致长期内存使用不佳。最佳适应最初通常能更好地利用空间,但可能导致更多碎片。最差适应可能会为大型进程保留大内存块,但随着时间的推移通常会导致利用率低下。

每种策略的有效性还取决于系统中的特定工作负载和进程大小。在实践中,操作系统可能会结合策略或使用更复杂的内存管理技术来克服简单连续分配的局限性。

连续内存分配的优点和缺点

连续内存分配有各种优点和缺点。一些优点和缺点如下

优点

  1. 跟踪剩余内存块的数量很简单,这决定了还可以授予多少进程内存空间。
  2. 连续内存分配的读取性能很好,因为整个文件可以在一个任务中从磁盘读取。
  3. 连续分配设置简单,性能良好。

缺点

  1. 碎片不是问题,因为每个新文件都可以在前一个文件之后写入磁盘的末尾。
  2. 生成新文件时,必须知道其最终大小才能选择合适的孔洞大小。
  3. 当磁盘填满时,需要压缩或重用孔洞中的备用空间。

什么是非连续内存分配?

它允许进程根据其要求在内存中的不同位置获取多个内存块。非连续内存分配还减少了由内部外部碎片造成的内存浪费,因为它使用了由内部和外部碎片创建的内存孔洞。

使进程的物理地址空间非连续的两种方法是分页和分段。非连续内存分配将进程划分为块(页或段),这些块根据内存可用性分配到内存空间的不同区域。

非连续内存分配可以减少内存浪费,但它也增加了地址转换开销。由于进程部分存储在内存中的不同位置,内存执行速度会变慢,因为地址转换会消耗时间。

为了解决连续分配的局限性,现代操作系统采用了非连续内存分配。在这种方法中,进程的内存被分割并散布在物理内存空间中。操作系统在内存管理单元 (MMU) 的帮助下,跟踪进程的每个部分所在的位置,并确保进程能够像它们在逻辑内存中是连续的一样访问它们。

这种方法下的两个主要技术是分页和分段。在分页中,内存和进程都分别被划分为固定大小的单元,称为页和帧。页表用于将虚拟页映射到物理帧。这种技术几乎消除了外部碎片,并允许进程更有效地利用内存。但是,它可能导致内部碎片,即进程的最后一页可能没有被完全使用,导致一些空间浪费。

非连续内存分配的优点和缺点

非连续内存分配有各种优点和缺点。一些优点和缺点如下

优点

  1. 它具有减少内存浪费的优点,但由于地址转换而增加了开销。
  2. 它减慢了内存执行速度,因为地址转换会消耗时间。

缺点

  1. 这种内存分配的缺点是访问速度慢,因为您必须使用指针访问其他节点并遍历它们。

连续和非连续内存分配之间的主要区别

在这里,您将了解连续和非连续内存分配之间的各种主要区别。连续和非连续内存分配之间的一些主要区别如下

Contiguous and Non-Contiguous Memory Allocation in Operating System
  1. 连续内存分配仅为进程分配一个连续的内存块。相反,非连续分配将进程分解为许多块,并将它们存储在不同的内存地址区域中。
  2. 操作系统必须在连续内存分配中保留一个表,该表显示哪些分区是可用的并被进程使用。相反,在非连续内存分配中,为每个进程保留一个表,其中包含放置在内存空间中的每个进程块的基地址。
  3. 由于进程在连续内存分配中存储在连续内存空间中,因此在执行期间没有地址转换开销。相反,在非连续内存分配中,在进程执行期间存在地址转换开销,因为进程块分散在内存空间中。
  4. 操作系统可以更好地控制连续内存分配。另一方面,非连续内存分配对于操作系统来说很难管理。
  5. 在连续内存分配中,由于整个进程位于一个顺序块中,因此进程运行速度更快。相反,非连续内存分配中进程的执行速度变慢,因为进程位于内存中的多个位置。
  6. 连续内存分配包含两种内存分配:单分区和多分区。另一方面,非连续内存分配包含分页和分段。
  7. 连续内存分配中发生内部和外部碎片。相反,非连续内存分配会导致外部碎片。
  8. 在连续内存分配中,换入进程放置在最初分配的空间中。相反,在非连续内存分配中,换入进程可以组织在内存中的任何位置。

连续和非连续内存分配之间的逐一比较

在这里,您将了解连续和非连续内存分配之间的逐一比较。连续和非连续内存分配之间的一些逐一比较如下

连续内存分配非连续内存分配
它只为进程分配一个连续的内存块。它将进程分成多个块,每个块都分配到不同的内存地址空间。
与非连续内存分配相比,它的执行速度非常快。与连续内存分配相比,它的执行速度较慢。
由于进程存储在连续内存空间中,因此在连续内存分配中执行期间没有地址转换开销。由于进程块分散在内存空间中,因此在进程执行期间存在地址转换开销。
在大多数情况下,操作系统在连续内存分配中保留一个列出所有可用和占用分区的表。在非连续内存分配中,每个进程都必须保留一个主要包含内存获取的每个块的基地址的表。
操作系统可以更好地控制连续内存分配。非连续内存分配对于操作系统来说很难管理。
连续内存分配包含两种内存分配:单分区和多分区。它包含分页和分段。
在连续内存分配中,内存空间被划分为固定大小的分区,每个分区只分配给一个进程。它被分成几个块,然后根据可用的内存空间放置在内存的不同区域。
内存浪费无内存浪费
在连续内存分配中,换入进程放置在最初分配的空间中。在非连续内存分配中,换入进程可以组织在内存中的任何位置。
发生内部和外部碎片。非连续内存分配方法会导致外部碎片。

结论

连续内存分配开销最小,加快了进程执行速度,增加了内存浪费。另一方面,非连续内存分配会产生地址转换开销,降低进程性能,并增加内存消耗。因此,两种分配系统都有优点和缺点。


下一个主题小米操作系统