操作系统中的内存管理:连续分配、交换、碎片

什么是内存管理?

内存管理是控制和协调计算机内存的过程,为各种运行程序分配称为块的部分,以优化系统的整体性能。

这是操作系统最重要的功能,负责管理主内存。它有助于进程在主内存和执行磁盘之间来回移动。它帮助操作系统跟踪每个内存位置,无论它是否分配给某个进程或保持空闲。

为什么要使用内存管理?

以下是使用内存管理的原因

  • 它允许您检查需要为决定哪个处理器何时获得内存的进程分配多少内存。
  • 跟踪库存何时被释放或取消分配。根据它将更新状态。
  • 它为应用程序例程分配空间。
  • 它还确保这些应用程序不会相互干扰。
  • 有助于保护不同进程免受彼此干扰
  • 它将程序放入内存中,以便内存得到充分利用。

内存管理技术

以下是一些最关键的内存管理技术

单连续分配

这是最简单的内存管理技术。在此方法中,除了一小部分保留给操作系统外,计算机的所有内存都可用于一个应用程序。例如,MS-DOS 操作系统以这种方式分配内存。嵌入式系统也运行单个应用程序。

分区分配

它将主内存划分为各种内存分区,这些分区大多是连续的内存区域。每个分区存储特定任务或作业的所有信息。此方法包括在作业开始时为其分配分区,在作业结束时取消分配。

分页内存管理

此方法将计算机的主内存划分为称为页框的固定大小的单元。此硬件内存管理单元将页面映射到应按页面分配的页框。

分段内存管理

分段内存是唯一不为用户程序提供线性连续地址空间的内存管理方法。

分段需要硬件支持,以分段表的形式。它包含内存中部分的物理地址、大小以及其他数据,例如访问保护位和状态。

什么是交换?

交换是一种方法,其中进程应临时从主内存交换到后备存储。之后,它将被带回内存以继续执行。

后备存储是硬盘驱动器或某些其他二次存储设备,其大小应足够大,以便容纳所有用户所有内存映像的副本。它还能够直接访问这些内存映像。

Swapping

交换的好处

以下是交换的主要好处/优点

  • 它提供了更高程度的多道程序设计。
  • 允许动态重定位。例如,如果正在使用执行时地址绑定,则进程可以交换到不同的位置。否则,在编译和加载时绑定的情况下,应将进程移到相同的位置。
  • 它有助于更好地利用内存。
  • CPU 时间浪费最少,因此可以轻松应用于基于优先级的调度方法以提高其性能。

什么是内存分配?

内存分配是计算机程序被分配内存或空间的过程。

这里,主内存分为两种分区

  1. 低内存操作系统驻留在这种类型的内存中。
  2. 高内存– 用户进程存储在高内存中。

分区分配

内存被划分为不同的块或分区。每个进程根据需求进行分配。分区分配是避免内部碎片化的理想方法。

以下是各种分区分配方案

  • 首次适应:在此类型的适应中,分配分区,这是主内存开头第一个足够大的块。
  • 最佳适应:它将进程分配给在空闲分区中第一个最小的分区。
  • 最差适应:它将进程分配给主内存中第一个足够大的空闲分区。
  • 下次适应:它与首次适应非常相似,但此适应从最后一个分配点搜索第一个足够大的分区。

什么是分页?

分页是一种存储机制,允许操作系统以页面的形式从辅助存储检索进程到主内存。在分页方法中,主内存被划分为称为帧的小型固定大小的物理内存块。为了最大化主内存的利用率并避免外部碎片,帧的大小应与页面大小相同。 分页用于更快地访问数据,它是一个逻辑概念。

什么是碎片整理?

进程被存储和从内存中移除,这会创建太小而无法供其他进程使用的空闲内存空间。

一段时间后,那些进程无法分配到内存块,因为它们的大小很小,并且内存块总是保持未使用,这称为碎片整理。在动态内存分配系统中,当空闲块非常小时,就会发生这种问题,因此它无法满足任何请求。

有两种碎片整理方法

  1. 外部碎片
  2. 内部碎片
  • 通过重新排列内存内容,将所有空闲内存放在一个块中,可以减少外部碎片。
  • 可以通过分配足够容纳整个进程的最小分区来减少内部碎片。

什么是分段?

分段方法的工作方式与分页几乎相同。两者之间的唯一区别是段是可变长度的,而在分页方法中,页的大小总是固定的。

程序段包括程序的 main 函数、数据结构、实用函数等。操作系统为所有进程维护一个段映射表。它还包括一个空闲内存块列表,以及其大小、段号和在主内存或 虚拟内存中的内存位置。

什么是动态加载?

动态加载是程序的一个例程,直到程序调用它才会被加载。所有例程都应包含在磁盘上,采用可重定位加载格式。主程序将被加载到内存中并执行。动态加载还提供了更好的内存空间利用率。

什么是动态链接?

链接是一种方法,它帮助操作系统将代码和数据的各种模块收集和合并到一个可执行文件中。该文件可以加载到内存中并执行。操作系统可以将系统级库链接到程序中,在加载时合并库。在动态链接方法中,库在执行时链接,因此程序代码大小可以保持很小。

静态加载与动态加载的区别

静态加载 动态加载
当您想静态加载程序时,可以使用静态加载。然后在编译时,整个程序将被链接和编译,而无需任何外部模块或程序依赖。 在动态加载的程序中,将在执行时提供引用并进行加载。
加载时,整个程序将被加载到内存中并开始执行。 库的例程仅在程序需要时才加载到内存中。

静态链接与动态链接的区别

以下是静态链接与动态链接的主要区别

静态链接 动态链接
静态链接用于将程序所需的所有其他模块合并到单个可执行代码中。这有助于操作系统防止任何运行时依赖。 使用动态链接时,无需将实际模块或库与程序链接。而是使用编译和链接时提供的动态模块的引用。

摘要

  • 内存管理是控制和协调计算机内存的过程,为各种运行程序分配称为块的部分,以优化系统的整体性能。
  • 它允许您检查需要为决定哪个处理器何时获得内存的进程分配多少内存。
  • 在单连续分配中,除了一小部分保留给操作系统的计算机内存都可以用于一个应用程序
  • 分区分配方法将主内存划分为各种内存分区,这些分区大多是连续的内存区域
  • 分页内存管理方法将计算机的主内存划分为称为页框的固定大小的单元
  • 分段内存是唯一不为用户程序提供线性连续地址空间的内存管理方法。
  • 交换是一种方法,其中进程应临时从主内存交换到后备存储。之后,它将被带回内存以继续执行。
  • 内存分配是计算机程序被分配内存或空间的过程。
  • 分页是一种存储机制,允许操作系统以页面的形式从辅助存储检索进程到主内存。
  • 碎片整理是指磁盘中文件被分成散布在磁盘各处的文件块的状况。
  • 分段方法的工作方式与分页几乎相同。两者之间的唯一区别是段是可变长度的,而在分页方法中,页的大小总是固定的。
  • 动态加载是程序的一个例程,直到程序调用它才会被加载。
  • 链接是一种方法,它帮助操作系统将代码和数据的各种模块收集和合并到一个可执行文件中。