王道学习
考纲内容
(一)内存管理基础
内存管理概念:逻辑地址与物理地址空间,地址变换,内存共享,内存保护,内存分配与回收
连续分配管理方式;页式管理;段式管理;段页式管理
(二)虚拟内存管理
虚拟内存基本概念;请求页式管理;页框分配;页置换算法
内存映射文件(Memory-Mapped Files);虚拟存储器性能的影响因素及改进方式
复习提示
内存管理和进程管理是操作系统的核心内容,需要重点复习。本章围绕分页机制展开,通过分页管理方式在物理内存大小的基础上提高内存的利用率,再进一步引入请求分页管理方式,实现虚拟内存,使内存脱离物理大小的限制,从而提高处理器的利用率。
3.1 内存管理概念
3.1.1 内存管理的基本原理和要求
内存管理的主要功能有:
- 内存空间的分配与回收。由操作系统负责空间的分配和管理,记录内存的空闲空间、内存的分配情况,并回收已结束进程所占用的内存空间。
- 地址转换。由于程序的逻辑地址与内存中的物理地址不可能一致,因此存储管理必须提供地址变换功能,将逻辑地址转换成相应的物理地址。
- 内存空间的扩充。利用虚拟存储技术从逻辑上扩充内存。
- 内存共享。指允许多个进程范文内存的 同一部分。例如,多个合作进程可能需要访问同一块数据,因此必须支持对内存共享区域进行受控访问。
- 存储保护。保证各个进程在各自的存储空间内运行,互不干扰。
在进行具体的内存管理之前,需要了解进程运行的基本原理和要求。
1、程序的链接与装入
当将一个装入模块装入内存时,有以下三种装入方式。
2、逻辑地址与物理地址
3、进程的内存映像
4、内存保护
确保每个进程都有一个单独的内存空间。内存分配前,需要保护操作系统不受用户进程的影响,同时保护用户进程不受其他用户进程的影响。内存保护可采取两种方法:
5、内存共享
6、内存分配与回收
3.1.2 连续分配管理方式
3.1.3 基本分页存储管理
基本分页管理介绍
固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。我们希望内存的使用能尽量避免碎片的产生,这就引入了分页的思想:将内存空间分为若干固定大小(如4KB)的分区,称为页框、页帧或物理块。进程的逻辑地址空间也分为与块大小相等的若干区域,称为页或页面。操作系统以叶框为单位为各个进程分配内存空间。
从形式上看,分页的方法像是分区相等的固定分区技术,分页管理不产生外部 。但它又有本质的不同点:块的大小相对分区要小很多,而且进程也按照块进程划分,进程运行时按块申请主存可用空间并执行。这样,进程只会在为最后一个不完整的块申请一个主存块空间时,才产生主存碎片,所以尽管会产生内部碎片,但这种碎片相对于进程来说也是很小的,每个进程平均只产生半个块大小的内部碎片(也称页内碎片)。
基本地址变换机构
具有快表的地址变换机构
两级页表
3.1.4 基本分段存储管理
分页管理方式是从计算机的角度考虑设计的,目的是提高内存的利用率,提升计算机的性能。分页通过硬件机制实现,对用户来说是完全透明的。分段管理方式的提出则考虑了用户和程序员,一满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
基本分段存储介绍
分页和分段的对比
段的共享和保护
3.1.5 段页式存储管理
分页存储管理能有效地提高内存利用率,而分段存储管理能反映程序的逻辑结构并有利于端的共享和保护。将这两种存储管理方法结合起来,便形成了段页式存储管理方式。
3.1.6 本节小结
3.1.7 本节试题精选
3.2 虚拟内存管理
3.2.1 虚拟内存的基本概念
1、传统存储管理方式的特征
3.1节讨论的各种内存管理策略都是为了同时将多个进程保存在内存中,以便允许进行多道程序设计。它们都具有以下两个共同的特征:
1)一次性。作业必须一次性全部装入内存后,才能开始运行。这会导致两个问题:①当作业很大而不能全部被装入内存时,将是作业无法运行;②当大量作业要求运行时,由于内存不足以容纳所有作业,只能使少数作业先运行,导致多道程序并发度的下降。
2)驻留性。作业被装入内存后,就一直驻留在内存中,其任何部分都不能被换出,直至作业运行结束。运行中的进程会因等待I/O而被堵塞,可能处于长期等待状态。
由以上分析可知,许多在程序运行中不用或暂时不用的程序(数据)占据了大量的内存空间,而一些需要运行的作业又无法装入运行,显然浪费了宝贵的内存资源。
2、局部性原理
要真正理解虚拟内存技术的思想,首先必须了解著名的局部性原理。从广义上讲,快表、页高速缓存及虚拟内存技术都属于高速缓冲技术,这个技术所依赖的原理就是局部性原理。局部性原理既适用于程序结构,又适用于数据结构。局部性原理表现在以下两个方面:
1)时间局部性。程序中的某条指令一旦执行,不久后该指令可能再次执行;某数据被访问后,不久后该数据可能再次被访问。产生的原因是程序中存在着大量的循环操作。
2)空间局部性。一旦程序访问了某个存储单元,在不久后,其附近的存储单元也将被访问,即程序在一段时间内所访问的地址,可能集中在一定的范围之内,因为指令通常是顺序存放、顺序执行的,数据也一般是以向量、数组、表等形式簇聚存储的。
时间局部性通过将近来使用的指令和数据保存到高速缓存中,并使用高速缓存的层次结构实现。空间局部性通常使用较大的高速缓存,并将预取机制集成到高速缓存控制逻辑中实现。虚拟内存技术实际上建立了“内存-外存”的两级存储器结构,利用局部性原理实现高速缓存。
3、虚拟存储器的定义和特征
基于局部性原理,在程序装入时,仅需将程序当前运行要用到的少数页面(或段)装入内存,而将其余部分暂留在外存,便可启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序,这个过程就是请求调页(或请求调段)功能。当内存空间不够时,由操作系统负责将内存中暂时用不到的信息换出外存,从而腾出空间存放将要调入内存的信息,这个过程就是页面置换(或段置换)功能。这样,系统好像为用户提供了一个比实际内存容量大得多的存储器,称为虚拟存储器。
之所以将其称为虚拟存储器,是因为这种存储器实际上并不存在,只是由于系统提供了部分装入、请求调入和置换功能后(均对用户透明),给用户的感觉是好像存在一个比实际物理内存大得多的存储器。但容量大只是一种错觉,是虚的。虚拟存储器有以下三个主要特征:
1)多次性。无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存,即只需将当前要运行的那部分程序和数据装入内存即可开始运行。以后每当运行到尚未调入的那部分程序或数据时,再将它们调入。多次性是虚拟存储器最重要的特征。
2)对换性。在作业运行时无需一直常驻内存,而是允许在作业运行过程中,将那些暂不使用的程序和数据从内存调至外存的对换区(换出),待以后需要时再将它们从外存调至内存(换进)。正是由于对换性,才使得虚拟存储器得以正常运行。
3)虚拟性。从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际容量。这是虚拟存储器所表现出的最重要特征,也是实现虚拟存储器的最重要目标。
4、虚拟内存技术的实现
虚拟内存技术允许将一个作业分多次调入内存。采用连续分配方式时,会使相当一部分内存都处于暂时或“永久”的空闲状态,造成内存资源的严重浪费,而且也无法从逻辑上扩大内存容量。因此虚拟内存的实现需要建立在离散分配的内存管理方式的基础上。