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

在将主内存分配给操作系统中的进程时,有两个主要部分。 在连续内存分配中,进程被分配主内存的顺序块给整个进程。 要获得有关连续内存分配的更多见解,请参阅此 关联. 在第二种方法中,进程被划分并加载到彼此不连续的主内存中,这称为非连续内存分配。

范围:

  1. 在本文中,我们将讨论连续内存分配以及如何使用各种重要技术来实现它。
    2.我们将了解为什麽连续内存分配会导致内存浪费。
  2. 我们将讨论分页和分段如何使用
    非连续内存分配。

连续内存分配:

当用户进程占用的内存部分与包含两个下一个进程的部分相邻且相邻时。连续内存分配有两种主要类型。我们将简要讨论这些。

固定大小分区方案是连续内存分配的第一种方法。在这种方法中,操作系统将整个内存划分为固定大小的分区。举个例子,系统有 500 KB 的主内存,假设操作系统被加载到 100 KB 的主内存中,那麽操作系统仍然有 400 KB 的主内存可供用户进程使用。

假设操作系统将 400 KB 的主内存划分为每个 10 KB 的固定大小,因此系统将在主内存中获得 40 个分区,可以放置用户进程。

假设操作系统有 3 个进程要加载到大小为 4 KB、9 KB 和 12 KB 的主内存中。 现在操作系统会为前两个进程分配连续的内存在两个连续的 10 KB 块中,但是在这些分区中,它会分别留下一些 6 KB 和 1 KB 的空间,这些空间不会被操作系统使用。 这种内存浪费被称为 内部碎片化。 无论如何,操作系统不会为 12 KB 的进程提供任何分区,但仍有 38 个 10 KB 的分区可供使用但无法使用,因此称为 外部碎片.

这种固定分区方案在 1900 年代初期使用,并且很容易实现,因为我们在执行任何进程之前预先计算了分区的大小,因此它也称为静态内存分配。

连续内存分配的第二种技术是可变大小分区方案。这种内存分配技术是建立在固定大小分区的一些缺点之上的。另一方面,在这种技术中,操作系统不会预先计算分区的大小,当某些进程来并请求一块内存时,操作系统会分配一个与所请求内存的确切大小相同的分区。

让我们考虑上面的例子,我们有 500 KB 的主内存,其中 100 KB 被操作系统占用,然後当 3 个进程的大小分别为 4 KB、9 KB 和 12 KB。在这种情况下,操作系统将分别动态分配大小为 4KB、9 KB 和 12 KB 的连续内存分区。这就是我们称之为动态内存分配技术的原因之一。
这将消除内部碎片的威胁,但仍然存在外部碎片。假设我们已经完全占用了主内存,没有额外的空间,然後突然超过 4 KB 的进程由於 I/O 操作而超出了主内存,那麽将会有 4 KB 的孔现在没有使用,假设进程带有 6 KB内存要求那麽操作系统没有任何分区选择,它将累积 6 KB 在这种情况下,这些 4 KB 分区可以被视为符合外部碎片的内存浪费。这几乎与连续内存分配有关。

非连续内存分配:
我们在连续内存分配技术中讨论了可变大小分区,它仍然有外部碎片的开销。为了减少这种开销,有两种主要的非连续内存分配技术。主要目的是减少在连续内存分配中发生的外部碎片。非连续内存分配技术比连续内存分配技术更难实现。为了实现在主存的不同分区中分配进程的目标,它引入了地址转换机制,CPU 生成逻辑地址,然後将其转换为物理地址以获取必要的数据。它比连续的内存分配消耗更多的时间。此外,它使用额外的内存来存储与地址转换算法相关的映射,这些映射在分页和分段中分别称为页表和段表。

在分页中,操作系统将主内存划分为一个固定大小的帧,这有点类似於固定大小的分区方案连续内存分配,同时操作系统将进程划分为与主内存中的帧大小相同的页面。之後,操作系统将这些页面加载到主内存中的非连续帧中。当 CPU 需要来自主存储器的某个页面时,它将生成一个逻辑地址,该地址将在页表的帮助下转换为物理地址,以将必要的页面提供给 CPU。在这种情况下,如果任何页面超出主存储器,那麽其他相同大小的页面将适合该帧,因为帧大小和页面大小相同,这将导致外部碎片最小化,但相反,它可以发生这种情况可以将进程划分为一些页面小於帧大小的页面,那麽在分页中可能会出现内部碎片。

为了解决非连续内存分配分段中分页的这一缺点,引入了分段。在分段中,操作系统将进程划分为可变大小的段,然後将这些段加载到主内存中,然後进入可变大小的非连续帧。它与分页具有相同的工作流程,CPU 将生成一个逻辑地址,然後将其映射到基於段表的物理地址。

在非连续内存分配中,不会像连续内存分配那样浪费主内存。另一方面,与连续内存分配相比,很难实现更多的执行时间。

概括:
1.在连续内存分配中,操作系统将连续的内存块分配给等待执行的进程。
2.固定大小分区和可变大小分区是连续内存分配中使用的两种主要内存分配技术
3. 在非连续内存分配中,操作系统将进程划分为多个部分,然後将其加载到彼此不连续的主内存分区中。
4. 分页和分段是实现非连续内存分配的主要内存分配技术。


作者简介:
Akash Pawar 是一名软件工程师,热衷於撰写技术博客,拥有数据结构和算法、操作系统方面的专业知识,并接触过大规模系统设计。


<<:  [笔记]修正Xampp的MySQL无法启动

>>:  ISO 27001 资讯安全管理系统 【解析】(十一)

Day 08 Azure cognitive service: object detection- 匡出照片中的喵

Azure cognitive service: Object Detection- 匡出照片中的喵...

24 - 建立结构化的 Log (2/4) - Elasticsearch Ingest Pipeline 资料 Index 前的转换好帮手 - 基本介绍

建立结构化的 Log 系列文章 (1/4) - Elastic Common Schema 结构化 ...

第 54 天 - 学习 PHP CLI

使用 apt install php7.4-cli 安装 安装 log: root@test:/ho...

WordPress Google Search Console 安装教学 让新文章马上列入搜寻名单

新建置的 WordPress 辛苦写了几篇文章,可是这时候跟本就不会被 Google 搜寻看到我的文...

第26天:this(1)

JavaScript的物件在本质上,像是特性的集合体,是由特性所组成的,而函式是一级值,所以可以将函...