内存管理

编辑
本词条由“匿名用户” 建档。
内存管理是一种应用于计算机内存的资源管理形式。内存管理的基本要求是提供根据程序请求动态分配内存部分的方法,并在不再需要时将其释放以供重用。这对于任何在任何时候都可能正在进行多个进程的高级计算机系统至关重要。 已经设计了几种方法来提高内存管理的有效性。虚拟内存系统将进程使用的内存地址与实际物理地址分开,允许进程分离并使用分页或交换到二级存储将虚拟地址空间的大小增加到超出可用RAM量的范围。...

什么是内存管理

编辑

内存管理是一种应用于计算机内存的资源管理形式。内存管理的基本要求是提供根据程序请求动态分配内存部分的方法,并在不再需要时将其释放以供重用。这对于任何在任何时候都可能正在进行多个进程的高级计算机系统至关重要。

已经设计了几种方法来提高内存管理的有效性。虚拟内存系统将进程使用的内存地址与实际物理地址分开,允许进程分离并使用分页或交换到二级存储将虚拟地址空间的大小增加到超出可用RAM量的范围。虚拟内存管理器的质量可以对整体系性能产生广泛的影响。

在某些操作系统中,例如OS/360和后续操作系统,内存由操作系统管理。在其他操作系统中,例如类Unix操作系统,内存在应用程序级别进行管理。

地址空间内的内存管理通常分为手动内存管理或自动内存管理。

手动内存管理

编辑

完成分配请求的任务包括定位一块足够大的未使用内存。通过从称为堆或空闲存储的大型内存池中分配部分来满足内存请求。[注1]在任何给定时间,堆的某些部分正在使用中,而有些则是“空闲的”(未使用),因此可用于将来的分配。

有几个问题使实现复杂化,例如外部碎片,当分配的内存块之间存在许多小间隙时会出现这种情况,这使得它们无法用于分配请求。分配器的元数据也可以夸大(单独)小分配的大小。这通常由分块管理。内存管理系统必须跟踪未完成的分配以确保它们不会重叠并且不会“丢失”内存(即没有“内存泄漏”)。

具有虚拟内存的系统

编辑

虚拟内存是一种将内存组织与物理硬件分离的方法。应用程序通过虚拟地址对内存进行操作。应用程序每次尝试访问特定的虚拟内存地址都会导致虚拟内存地址被转换为实际的物理地址。通过这种方式,虚拟内存的添加实现了对内存系统和访问方法的精细控制。

在虚拟内存系统中,操作系统限制进程访问内存的方式。此功能称为内存保护,可用于禁止进程读取或写入未分配给它的内存,防止一个程序中的恶意或故障代码干扰另一个程序的操作。

即使分配给特定进程的内存通常是隔离的,进程有时也需要能够共享信息。共享内存是进程间通信最快的技术之一。

内存通常按访问速度分为主存储和二级存储。除其他操作外,内存管理系统还处理这两个内存级别之间的信息移动。

OS/360和后续版本中的内存管理

编辑

IBMSystem/360不支持虚拟内存。[注2]作业的内存隔离可以选择使用保护密钥来完成,为每个作业分配一个不同的密钥,0为主管或1-15。OS/360中的内存管理是一个主管功能。使用GETMAIN宏请求存储并使用宏释放存储FREEMAIN,这会导致调用主管(SVC)来执行操作。

内存管理

在OS/360中,详细信息因系统的生成方式而异,例如,对于PCP、MFT、MVT。

在OS/360MVT中,作业区域或共享系统队列区域(SQA)内的子分配基于子池,区域大小为2KB的倍数——受保护密钥保护的区域的大小。子池编号为0–255。在一个区域内,子池被分配作业的存储保护或主管的密钥,密钥0。子池0-127接收作业的密钥。最初只创建子池0,并且所有用户存储请求都从子池0中得到满足,除非在内存请求中指定了另一个。子池250-255由主管代表作业的内存请求创建。其中大多数被分配了键0,尽管有一些获得了工作的键。子池编号也与MFT相关,尽管细节要简单得多。MFT使用可由操作员重新定义的固定分区而不是动态区域,而PCP只有一个分区。

每个子池由标识子池内已分配和空闲内存块的控制块列表映射。通过找到足够大小的空闲区域或通过在子池中分配额外的块来分配内存,直到作业的区域大小。可以释放全部或部分分配的内存区域。

OS/VS1的细节与MFT和MVT的细节相似;OS/VS2的细节类似于MVT的细节,除了页面大小为4KiB。对于OS/VS1和OS/VS2,共享系统队列区域(SQA)是不可分页的。

在MVS中,地址空间包括一个额外的可分页共享区、公共存储区(CSA)和一个额外的私有区、系统工作区(SWA)。此外,存储密钥0-7都保留供特权代码使用。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/127537/

(6)
词条目录
  1. 什么是内存管理
  2. 手动内存管理
  3. 具有虚拟内存的系统
  4. OS/360和后续版本中的内存管理

轻触这里

关闭目录

目录