本文共 1035 字,大约阅读时间需要 3 分钟。
内存管理是操作系统中至关重要的核心机制之一。其主要目标是提升内存的利用率,这涉及到为进程分配内存空间的方式。
在深入探讨内存分配方法之前,让我们首先思考以下问题:进程在执行之前是如何存储在内存中的?这一问题的理解将帮助我们更好地理解内存分配的原理。
在早期的操作系统中,内存只能存放一个进程,称为单一连续存储。随着多道批处理系统的发展,内存能够存放多个进程。此时,便出现了连续分区分配。进程连续地存储在内存中会产生两种碎片:内部碎片和外部碎片。随着操作系统的不断进步,连续分区分配已无法满足内存利用率的提高需求。
固定分区分配是连续分区分配的一种方式,系统预先定义了内存区间的大小。分区可以是大小相等或不等的。然而,固定分区分配的一个显著缺点是容易产生空闲空间,从而影响内存利用率。此外,固定分区还存在用户进程只能存储一个固定大小的过程的问题。
为了克服固定分区分配的局限性,动态分区分配逐渐成为主流。动态分区分配的关键在于根据进程的需求动态地分割内存空间。
动态分区分配的特点是系统初始只有一个大量空闲区。当进程请求内存时,系统根据进程所需的空间大小划分出一片空闲区并分配给该进程。动态分区分配能有效减少外部碎片问题,但也会产生内外部碎片。
为了进一步提升内存利用率,行业逐渐采用离散分配的思想。离散分配
将内存空间分割成更小的单位,一根析离散分配在现代操作系统中的表现形式是分页存储管理。将进程划分为与内存块大小相当的页面,如上图所示,进程按照逻辑地址划分为多个小进程,并将这些小进程非连续地存放到内存中。
在分页存储管理中,需要将进程划分为与内存物理帧(页框)大小相当的页样。在进程存储的单元中,关键是要将逻辑地址转换为物理地址。地址转换的逻辑如下:
步骤:1:根据页大小算出页框的起始地址2:加上该指令在该页的页内偏移量3:两者相加即可得出物理地址
为了支持分页存储管理,系统引入了页表,将虚拟地址映射到物理地址。
作为分页存储管理的延伸,合理地结合分段存储管理,一方面确保进程能够按照程序员逻辑分布在内存中,另一方面让内核能够高效地管理内存资源。所有内核通过段表来完成逻辑地址到物理地址的映射。
至此,关于内存分配的相关知识已经完示。在撰写本文期间,逐步梳理了从连续分配到分页存储管理的内存分配过程,也提到了动态分区分配和固定分区分配。如有不当之处,还请多方指出与我交流详细讨论。
转载地址:http://ryfqz.baihongyu.com/