第三章 内存管理
- 内存管理的功能:内存空间的分配和回收,地址转换,内存空间扩充,存储保护
- 程序的执行过程:编译,链接,装入
- 链接有三种方式:
- 静态链接(在程序运行之前)
- 装入时动态链接(边装入边链接)
- 运行时动态链接(执行目标模块时,才执行链接)
- 装入有三种方式:
- 绝对装入(只适单道程序环境)
- 可重定位装入(地址变换通常是在装入时候一次完成,又称静态重定位)
- 动态运行时装入(动态重定位,地址转换在真正执行时候)
- 内存保护两种方法:
- 在cpu设置上下限寄存器
- 通过重定位寄存器(或基址寄存器)和界地址寄存器(又称限长寄存器)实现保护
- 覆盖和交换技术是在多道程序环境下用来扩充内存的两种方法。
- 交换技术实在不同进程或者作业之间进行,而覆盖是用于同一个程序和进程。但是覆盖技术要求程序段之间的结构,使得程序段对用户和程序员不透明,使得主存不能放用户程序。现代操作系统是通过虚拟内存解决,覆盖技术成为历史。
-
内存空间的连续分配方式,是指为一个用户程序(作业)分配一个连续的内存空间。
-
按照内存空间划分方式的不同可将连续分配方式划分为以下四种方式
-
单一连续分配(将内存空间分为系统区和用户区。系统区放在内存低地址部分,且仅供OS使用。用户区是除系统区外的其他地内存空间,用户区给用户使用。)只适用于单用户、单任务环境。
- 固定分区分配(将内存空间分为若干个固定大小的分区,每个分区中只装入一道作业,允许有几道作业并发运行。)
与磁盘分区相区别:固定分区分配中的分区指的是对内存空间的分配,而磁盘分区指的是对磁盘空间的分配。
3. 动态分区分配(动态划分内存,不预先将内存划分,而是在进程装入内存时)
为了描述分区的使用情况,有两种数据结构可供选择:
- 空闲分区表:用于记录空闲分区的情况。每一个分区占用一个表项,表项中包含空闲分区的序号、分区起始地址、分区大小等。空闲分区表与分区使用表相似,本质区别是,一个分区使用表的表项对应的是一个固定分区,无论该固定分区是否被作业占用;而一个空闲分区表对应的是一个未被进程占用的空闲分区。
- 空闲分区链:一个空闲分区对应一个双向链表节点,每个链表节点包含指向前一个空闲分区和指针和指向后一个空闲分区的指针,还包含分区大小和状态位(是否已分配)。
-
基于顺序搜索的动态分区分配算法
-
- 首次适应算法(First Fit):空闲分区(链)按地址递增的次序排列
- 循环首次适应算法(Next Fit):从上次找到的空闲分区的下一个空闲分区开始查找,直到找到第一个能满足其大小要求的空闲分区
- 最佳适应算法(Best Fit):空闲分区表/链按容量大小递增的次序排列。
- 最坏适应算法(Worst Fit):空闲分区表/链按容量大小递减的次序排列
系统中的碎片
内存中无法被利用的存储空间称为碎片。
内部碎片:指分配给作业的存储空间中未被利用的部分,如固定分区中存在的碎片。
单一连续区存储管理、固定分区存储管理、分页式存储管理和请求页式存储管理都会出现内部碎片。
外部碎片:指系统中无法利用的小的空闲分区。如分区与分区之间存在的碎片。这些不连续的区间就是外部碎片。
内部碎片无法被整理,但作业完成后会得到释放。它们其实已经被分配出去了,只是没有被利用。
外部碎片才是造成内存系统性能下降的主要原因。外部碎片可以被整理后清除。可以通过紧凑技术克服外部碎片,同时也需要重定位寄存器的支持。
基本分页存储管理
基本分段存储管理
段页式存储
分页与分段的主要区别
分页和分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的.分段的地址空间是二维的.
段页式存储管理用分段方法分配和管理用户地址空间,用分页方法管理物理存储空间
存储管理的目的:方便用户,提高内存利用率
对主存的访问是以字节或字为单位,对主存的分配依据不同的存储管理方案而不同
快表称联表,TLB,关闭了快表,访问主存,要先访问页表得到物理地址,再访问内存。