大多数计算和 存储 部署如今面临的情况是, 计算机 内存空间都受到了上限的限制。现代系统的资源可能并不像内存那样受到限制,但操作系统、应用程序和存储设备总是需要采用更多的内存。但内存空间并不是无限的,在某些时候将会完全耗尽,这会导致系统不稳定或数据丢失。
自从现代IT出现以来,内存空间耗尽的挑战已由多种功能进行处理,通常都归入内存管理的内容,以下对内存管理的内容进行概述。
什么是内存管理?
内存管理就是要确保有尽可能多的可用内存空间来执行新的程序、数据和进程。由于现代操作系统的多个部分使用内存,因此内存分配和内存管理可以采取不同的形式。
•操作系统—Windows和 Linux 等操作系统可以利用物理内存和硬盘交换空间来管理可用内存的内存池。
•编程语言—C语言要求开发人员直接管理内存利用率,而其他语言(如 Java 和 C# )则提供自动内存管理。
•应用程序—应用程序使用和管理内存,但通常受到基础语言和操作系统定义的内存管理功能的限制。
•存储内存管理—借助新的NVMe存储驱动器,操作系统可以从更快的存储驱动器中受益,以帮助扩展和实现更持久的内存管理形式。
为了有效处理,计算机的内存管理功能必须位于硬件和操作系统之间。
内存管理如何工作
内存管理是关于有限物理资源的分配和优化。例如,2GB RAM DIMM不能用作一大块空间。而是使用 存储器 分配技术将内存划分成可用的存储器高速缓存块。
操作系统或应用程序中的内存管理策略通常涉及了解内存中可用的物理地址空间,并执行内存分配以从内存地址空间正确放置、移动、删除进程。
内存地址的类型
操作系统中的静态和动态内存分配链接到不同类型的内存地址。从根本上说,有两种核心类型的内存地址:
•物理地址—是指系统内存中的存储位置,标识为一组数字。
•逻辑地址—有时也称为虚拟内存,逻辑地址是操作系统和应用程序访问执行代码的内容,作为物理地址空间的抽象。
内存管理单元(MMU)如何将虚拟地址转换为物理地址?
计算系统内的存储器管理单元(MMU)是将虚拟逻辑地址空间转换为物理地址的核心硬件组件。存储器管理单元(MMU)通常是物理硬件,有时也称为分页存储器管理单元(PMMU)。
存储器管理单元(MMU)将虚拟地址转换为物理地址的过程称为虚拟地址转换,并使用页面目录指针表(PDPT)将一种地址类型转换为另一种地址类型。
该过程直接与页表分配相关联,将一种地址类型匹配和管理到另一种地址类型。为了帮助加速虚拟地址转换,有一种称为转换后备缓冲区(TLB)的缓存机制,它也是物理地址转换过程的虚拟地址的一部分。
内存分配:静态加载与动态加载
应用程序和数据可以通过多种不同方式加载到内存中,两种核心方法是静态加载和动态加载。
•静态加载—代码在执行之前加载到内存中。用于结构化编程语言,其中包括C语言。
•动态加载—根据需要将代码加载到内存中。用于面向对象的编程语言,例如Java语言。
内存碎片
当在系统中分配内存时,并非所有可用内存总是以线性方式使用,这可能导致碎片化。
内存碎片有两种核心类型:内部碎片和外部碎片
•内部碎片—内存分配给进程或应用程序,未使用、未分配或碎片化的内存。
•外部碎片—当分配内存然后释放时,可能会有较小的内存剩余空间,留下不适合其他进程的内存漏洞或“碎片”。
分页
在逻辑地址空间内,虚拟内存使用分页进行划分,这意味着它被分为固定的内存单元,称为页面。页面可以具有不同的大小,具体取决于底层系统体系结构和操作系统。页面管理过程可能非常复杂。
•有关如何在Linux中处理分页的更多信息,需要查看完整的kernel.org文档。
•而对于Windows系统,微软公司提供了有关其分页过程的详细信息。
分段
系统的主存储器内的存储器分段是引用存储器单元内特定位的复杂过程。
系统内存中的每个段都有自己的地址,以便改进优化和内存分配。分段 寄存器 是现代系统处理内存分段的主要机制。
交换
交换是操作系统从存储设备中请求额外内存的过程。
交换如何工作是操作系统定义用作“交换空间”的存储区域,即存储空间,存储过程将被存储并在物理和虚拟内存空间耗尽、释放和回收时运行。交换空间与传统存储的使用是扩展可用内存的次优方法,因为它会产生与物理内存之间传输的开销。此外,传统存储设备以较慢的 接口 速度运行内存。
然而,现在正在重新考虑交换,以便通过更快的PCIe SSD硬盘来扩展内存,其提供高达16GB/s的接口连接速度。相比之下,SATA连接的SSD硬盘的最大连接速度为6.0GB/s。
为什么需要内存管理?
内存管理是所有现代计算系统的基本元素。随着虚拟化的持续使用和优化资源利用的需要,内存不断地被分配、删除、分段、使用和重新使用。使用内存管理技术,可以减少可能导致系统和应用程序不稳定和故障的内存管理错误。
优势
•最大限度地提高程序的内存可用性;
•允许重复使用和回收未主动使用的内存;
•可以通过交换帮助扩展可用的物理内存。
缺点
•可能导致内存资源碎片化;
•增加了系统操作的复杂性;
•引入潜在的性能延迟。
责任编辑:ct