操作系统中的非连续内存分配2025年3月17日 | 阅读 7 分钟 内存分配是为计算机上的程序分配运行空间的进程。内存由大量的字节组成。内存分配的两种基本类型是连续分配和非连续分配。根据其需求,操作系统的非连续内存分配允许一个进程在内存中的不同位置获取多个内存块。用于使进程的物理地址空间非连续的方法是分页和分段。非连续内存分配将进程划分为块(或页或段),然后根据可用内存的数量将它们分配到不同的内存位置。 内存管理是操作系统管理主内存以及在进程活动期间在主内存和磁盘之间进行交换的能力。 无论进程是否正在使用某个特定的内存位置,内存管理都会跟踪每一个内存位置。它决定每个进程需要多少 RAM。它确定何时以及向哪些进程分配内存。它监视何时内存被释放或取消分配,并根据需要修改状态。 内存分配是操作系统将内存的一部分分配给系统的方法,然后这些内存用于存储变量、类和结构实例。 在本文中,我们将详细介绍非连续内存分配。 非连续内存分配:它是什么?根据其需求,它允许一个进程在内存的不同部分获取多个内存块。非连续内存分配还减少了由内部碎片和外部碎片引起的内存浪费,因为它利用了内部碎片和外部碎片留下的内存空隙。 防止进程物理地址空间连续的两种方法是分页和分段。非连续内存分配将操作分成块(页或段),然后根据可用内存的数量将它们分配到不同的内存位置。 尽管非连续内存分配可以节省内存浪费,但它也增加了地址转换相关的成本。由于地址转换需要时间,当进程片段存储在内存的不同位置时,内存执行会变慢。 在这种类型的内存分配中,进程可以根据需要获取内存中不同位置的多个内存块。与将所有可用空间分配在一个位置的连续内存分配不同,可用空闲空间被分散开来。 非连续内存分配的进行速度比连续内存分配慢。包括分段和分页。这种分配不会导致任何内存丢失。后续过程可以设置在任何地方。 例如,对于一个包含三个段(假设为 P1、P2、P3)的进程,RAM 中的连续内存块将按如下方式分配:块 1(-> P1),块 3(-> P2),块 5(-> P3)。 ![]()
操作系统使用分页作为一种存储技术,将进程从二级存储恢复到主内存中作为页。分页的主要思想是将每个过程分解成自己的页。主内存也将被分割成帧。 过程的一个页应该保存在内存帧中的一个。页面可以放置在内存中的任何位置,但目标始终是找到连续的帧或间隙。 除非需要将进程页加载到主内存中,否则它们将保留在二级存储中。 根据操作系统,帧大小会有所不同。每个帧的大小必须是统一的。由于分页中的帧映射到页面,因此页面大小必须与帧大小匹配。 ![]() 示例 创建页表作为寄存器集合是分页最简单的方法之一。页表存储在主内存中,因为寄存器容量有限而页表大小通常很大。 由于每个空闲帧都将被分配给需要的进程,因此该策略避免了外部碎片。但内部碎片仍然存在。
![]() 一个名为帧表的数据结构用于跟踪诸如哪些帧已分配或可用之类的信息。该表的每个条目都对应一个物理页帧。 ![]() 操作系统会为每个进程保留页表的副本,就像它为指令计数器和寄存器内容一样。此外,当操作系统手动将逻辑地址映射到物理地址时,会使用此副本将地址从逻辑转换为物理。 当一个进程需要分配给 CPU 时,CPU 调度程序使用此副本来指定硬件页表。
操作系统使用分段(一种内存管理技术)将内存分成可变大小的块。术语“段”指的是每个组件,而“进程”可以分配给每个段。 每个段的信息保存在一个名为段表的表中。段表包含在一个(或多个)段中。 段表关注的段信息是两个部分
为什么需要分段? 到目前为止,我们的主内存管理策略一直是分页。操作系统与分页的关系比用户更密切。即使一个进程可能有一些必须加载到同一页的特定关联函数块,它也会将所有进程分成页。 操作系统不关心用户对进程的看法。同一函数可能被分成多个页,这些页一次加载到内存中,或者不加载。因此,系统性能下降。 建议通过将进程分解成段来进行分段。每个段中存在类似类型的函数。例如,库函数在另一个段中,主函数在第一个段中。 ![]() 示例 下面是一个分段示例,其中有五个标记为 0 到 4 的段。这些部分将保存在物理内存中,如图所示。每个段在段表中都有一个唯一的条目,其中包含该段的长度和在物理内存中的起始条目地址(也称为基址)(表示为界限)。 ![]() 段 2 的长度为 400 字节,起始于点 4300。在这种情况下,对段 2 的第 53 个字节的引用因此映射到位置 4300(4300+53=4353)。对段 3 的第 85 个字节的引用由方程 3200(段 3 的基址)+852=4052 表示。 由于该段的长度为 1000 字节,因此对段 0 的第 1222 个字节的引用将触发 OS 陷阱。 分段与分页 纯分段不常使用,很少有操作系统支持。然而,通过结合分段和分页,可以增强这两种过程的优点。 在分段分页中,主内存被划分为可变大小的段,然后这些段被进一步划分为固定大小的页。
它指向正确的段号。 页:它指向段内的特定页。 页偏移量:此数字用于在帧内向上或向下移动页面。 段内的每个页表都包含关于每个页的各种信息。段表包含每个段的详细信息。每个段表条目链接到一个页表项,并且每个页表项映射到段内包含的页面之一。 ![]() 非连续内存分配的优点和缺点非连续内存分配具有许多优点和缺点。以下是一些优点和缺点: 优点
缺点 这种内存分配的缺点是,由于需要遍历和使用指针跳转到其他节点,访问速度很慢。 最常问的问题1. 什么是不可连续的内存分配? 非连续内存分配将进程划分为块(或页或段),然后根据可用内存的数量将它们分配到不同的内存位置。 2. 分段是连续的还是非连续的? 分段是操作系统分配非连续内存的机制。分段将进程分成模块,而不是将其分成固定大小的页。 3. 什么是连续内存分配? 当用户进程请求内存时,在连续内存分配内存管理技术下,会根据其需求将连续内存块的一部分分配给该进程。 结论本文涵盖了操作系统中的非连续内存分配。在这种类型的内存分配中,进程可以根据需要获取内存中不同位置的多个内存块。与将所有可用空间分配在一个位置的连续内存分配不同,可用空闲空间被分散开来。 下一主题Linux 操作系统类型 |
我们请求您订阅我们的新闻通讯以获取最新更新。