操作系统中的CMA

操作系统中的CMA

为软件应用程序分配空间被称为内存分配。内存是一个相当大的字节集合。毗连和非毗连的内存分配是内存分配的两种基本类型。CMA使任务能在一个内存区域内完成。相反,非CMA将程序分布在不同内存区的许多内存位置。

我们将在这篇文章中探讨更多关于CMA的问题,以及它的优点和缺点。

CMA是什么

操作系统的一种内存分配方法是CMA。然而,什么是内存分配?一个软件或进程需要内存空间才能运行。因此,一个进程必须被赋予与其需求相对应的特定数量的内存。内存分配是这个程序的术语。

CMA是这些内存分配策略中的一种。我们使用这种策略为每个进程分配连续的内存块,正如其名称所示。因此,每当一个进程要求进入主内存时,我们根据其大小从完全空的区域分配一个连续的区段给进程。

CMA的技术

根据提出内存请求的进程的需要,分配一个连续的内存块。

它是通过创建固定大小的内存段并为每个分区指定一个进程来执行的。因此,多程序的数量将被限制在基于内存的固定分区的数量上。

这种分配方式也会导致内部碎片化。考虑这样的情况:一个进程被赋予一个固定大小的内存块,这个内存块比所需的内存块大一点。内部碎片化是用来描述场景中块中剩余的内存空间的术语。一旦一个分区内的进程完成后,该分区就可以供另一个进程运行。

在可变分区方案中,操作系统保持一个表,列出哪些内存分区是空闲的,哪些是被进程使用的。毗连的内存分配减少了地址转换的开销,加速了进程的执行。

根据CMA技术,如果一个进程需要在内存中获得空间,我们必须给它一个连续的空块空间来驻留。有两种方法来分配。

  • 固定大小分区法
  • 灵活分区法

让我们深入研究一下这两种策略,以及它们的好处和缺点。

固定大小分区法

在这种CMA方法中,每个进程在主内存中被赋予一个固定大小的连续块。这意味着整个内存将被划分为固定大小的连续块,每次进程进入系统时,它将被赋予一个可用的块。因为每个进程收到的内存空间块的大小都是一样的,不管进程的大小如何。静态分区是这种方法的另一个名称。

操作系统中的CMA

上图中输入队列中的三个进程需要内存空间分配。内存有固定大小的块,因为我们使用的是固定大小的分区技术。除了4MB的进程外,第一个进程的大小为3MB,被赋予5MB的块。第二个进程的大小为1MB,也被赋予一个5MB的块。所以,进程有多大并不重要。同一个固定大小的内存块被分配给每个进程。

很明显,在这个系统下,内存被分割成的连续块的数量将由每个块所覆盖的空间量决定,而这又将决定有多少进程可以同时留在主内存中。

多重编程的程度是指可以在内存中同时运行的进程数量。因此,RAM中形成的块的数量决定了系统的多程序化程度。

优点

一个固定大小的分区系统有以下好处。

  • 这种策略很容易采用,因为每个块的大小都是一样的。现在所要做的就是将进程分配到已经划分好的固定内存块中。
  • 跟踪还有多少内存块可用是很简单的,这决定了还有多少进程可以被分配内存。
  • 这种方法可以用在需要多程序的系统中,因为可以同时在内存中维持众多进程。

缺点

虽然固定大小的分区策略有许多好处,但也有一些缺点。

  • 由于块的大小是固定的,我们将无法为一个大小超过块的进程分配空间。
  • 多重编程的数量是由块的大小决定的,在内存中能同时运行的进程数量与可用块的数量相同。
  • 如果块的大小超过进程的大小,我们必须将进程分配给这个块;尽管如此,这将在块中留下大量的自由空间。这个空闲区域可能被用来为另一个程序提供便利。

操作系统中的CMA

灵活的分区方法

在使用这种风格的CMA技术时,没有创建固定的块或内存分区。相反,根据它的需要,每个进程被赋予一个可变大小的块。这表明,如果有可用的空间,只要新的进程提出要求,就会将这部分的RAM分配给它。因此,每个块的大小是由使用它的进程的需求和规格决定的。

操作系统中的CMA

在上述的图表中,没有设定大小的分区。相反,第一个进程只得到3MB的RAM,因为它需要这么多。其余3个进程也同样只被赋予了它们所需要的空间量。

这种方法也被称为动态分区,因为块的大小是灵活的,随着新进程的启动而确定。

优点

可变大小的分区系统有以下好处。

  • 没有内部碎片,因为进程是根据它们的需要被赋予空间块的。因此,这种技术不会浪费RAM。
  • 内存中同时有多少进程以及它们占用多少空间将决定有多少进程可以同时运行。因此,它将根据情况的不同而变化,并且是动态的。
  • 即使是一个大的进程也可以得到空间,因为没有设定大小的块。

缺点

尽管可变大小分区方案有许多好处,但也有一些缺点。

  • 这种方法是动态的,因此实施可变大小的分区方案具有挑战性。
  • 维护进程和可用内存空间的记录是一个挑战。

CMA的技术 输入队列

到目前为止,我们已经研究了两种不同的CMA策略。但是,当一个新的进程需要在主内存中获得一个位置时,会发生什么?如何选择它要接收的块或段?

分配给进程的连续内存块导致主内存总是满的。然而,一个过程在结束后会留下一个空块,称为洞。一个新的程序有可能在这个区域实现。因此,主内存中存在着进程和空洞,每一个空洞都可能被分配给一个新进来的进程。

首字母匹配

这是一个相当直接的技术,我们从一开始就分配第一个洞,这个洞足够大,可以满足进程的需要。第一适合技术也可以被应用,这样我们就可以从之前寻找第一适合孔的地方继续前进。

最合适的

这种贪婪的方法分配了满足进程需求的最小的洞,其目标是尽量减少在静态分区情况下由于内部碎片造成的任何内存损失。因此,为了在不浪费内存的情况下为程序选择最大的匹配,我们必须首先根据孔的直径进行排序。

最差的适合

最佳匹配策略与此相反。一旦根据洞的大小进行排序,就会选择最大的洞来分配给进入的进程。这种分配背后的理论是,由于进程被赋予了一个相当大的洞,它将有大量的内部碎片残留下来。因此,将留下一个洞,可以容纳一些额外的进程。

CMA的优势和劣势

CMA有一系列的好处和坏处。下面是一些优点和缺点。

优点

  • 剩余的内存块的数量,影响到有多少进程可以得到内存空间,很容易被跟踪。
  • CMA具有良好的读取性能,因为整个文件可以在一个进程中从磁盘上读取。
  • 毗连分配运行良好,而且容易设置。

缺点

  • 分片不是问题,因为每个新文件都可以在前一个文件之后被写入磁盘的末端。
  • 为了在创建新文件时选择适当的洞的大小,它需要知道它的最终大小。
  • 一旦磁盘满了,孔中的额外空间将需要被压缩或使用。

结论

  • 当一个进程被带入主内存执行时,连续的内存分配将连续的内存块分配给该进程。
  • 有两种方法来分配连续的内存。
  • 通过固定大小的分区,每个进程都可以获得一个固定大小的连续的主内存块。
  • 可变大小的分区。根据每个进程的需要,分配空间。没有特定的固定大小的块存在。
  • 有三种方法可以给进入的进程一个洞。
  • 首先适合。将程序分配给第一个适当的洞。
  • 应该分配符合程序要求的最小的洞。
  • 最差的适合。给进入过程分配最大尺寸的孔。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程