1. 内存管理方法
内存管理主要包括内存分配和回收、内存扩充、内存共享和保护、内存的扩充、地址变换(静态地址重定位和动态地址重定位)等功能。
静态地址重定位:在虚拟空间程序执行之前由装配程序完成地址映射。
动态地址重定位:在程序运行过程中要访问数据时再进行地址变换(即在逐条指令执行时完成地址映射)。
2. 连续分配存储管理方式
连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。
2.1 单一连续存储管理
在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可使用用户区全部空间。其特点是,最简单,适用于单用户、单任务的操作系统。这种方式的最大优点就是易于管理。但也存在着一些问题和不足之处,例如对要求内存空间少的程序,造成内存浪费;程序全部装入,使得很少使用的程序部分也占用—定数量的内存。
2.2 分区式存储管理
为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发,但难以进行内存分区的共享。
2.2.1 固定分区
固定式分区的特点是把内存划分为若干个固定大小的连续分区。分区大小可以相等:这种作法只适合于多个相同程序的并发执行 ( 处理多个类型相同的对象 ) 。分区大小也可以不等:有多个小分区、适量的中等分区以及少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。
优点:易于实现,开销小。
缺点主要有两个:内碎片造成浪费;分区总数固定,限制了并发执行的程序数目。
2.2.2 动态分区
内存不是预先划分好的,而是当作业装入时,根据作业的需求和内存空间的使用情况来决定是否分配。
没有内碎片,缺点:有外碎片
几种常用的分区分配算法:
最先适配法 (first-fit) 下次适配法 (next fit) 最佳适配法 (best-fit) 最坏适配法 (worst- fit)
3. 覆盖和交换技术
3.1 覆盖技术
引入覆盖 (overlay) 技术的目标是在较小的可用内存中运行较大的程序。常用于多道程序系统之中,与分区式存储管理配合使用。
覆盖技术的原理:一个程序的几个代码段或数据段,按照时间先后来占用公共的内存空间。将程序必要部分(常用功能)的代码和数据常驻内存;可选部分(不常用功能)平时存放在外存(覆盖文件) 中,在需要时才装入内存。不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖。
覆盖技术的缺点是编程时必须划分程序模块和确定程序模块之间的覆盖关系,增加编程复杂度;从外存装入覆盖文件,以时间延长换取空间节省。
3.2 交换技术
交换(swapping)技术在多个程序并发执行时,可以将暂时不能执行的程序(进程)送到外存中,从而获得空闲内存空间来装入新程序(进程),或读人保存在外存中而处于就绪状态的程序。交换单位为整个进程的地址空间。交换技术常用于多道程序系统或小型分时系统中,因为这些系统大多采用分区存储管理方式。
原理:暂停执行内存中的进程,将整个进程的地址空间保存到外存的交换区中(换出 swap out ),而将外存中由阻塞变为就绪的进程的地址空间读入到内存中,并将该进程送到就绪队列(换入 swap in )。
交换技术优点之一是增加并发运行的程序数目,并给用户提供适当的响应时间;与覆盖技术相比,交换技术另一个显著的优点是不影响程序结构。交换技术本身也存在着不足,例如:对换人和换出的控制增加处理器开销;程序整个地址空间都进行对换,没有考虑执行过程中地址访问的统计特性。
3.3 覆盖与交换比较
1)与覆盖技术相比,交换不要求程序员给出程序段之间的覆盖结构。
2)交换主要是在进程与作业之间进行,而覆盖则主要在同一作业或进程内进行。另外覆盖只能覆盖那些与覆盖程序段无关的程序段。
4. 页式和段式存储管理
在前面的几种存储管理方法中,为进程分配的空间是连续的,使用的地址都是物理地址。如果允许将一个进程分散到许多不连续的空间,就可以避免内存紧缩,减少碎片。基于这一思想,通过引入进程的逻辑地址,把进程地址空间与实际存储空间分离,增加存储管理的灵活性。地址空间和存储空间两个基本概念的定义如下:
地址空间:将源程序经过编译后得到的目标程序,存在于它所限定的地址范围内,这个范围称为地址空间。地址空间是逻辑地址的集合。
存储空间:指主存中一系列存储信息的物理单元的集合,这些单元的编号称为物理地址存储空间是物理地址的集合。
4.1 页式存储管理
基本原理
将程序的逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(page frame) 。程序加载时,分配其所需的所有页,这些页框不必连续,从而实现了离散分配。该方法需要 CPU 的硬件支持,来实现逻辑地址和物理地址之间的映射。
页式管理方式的优点是:
1)没有外碎片
2)一个程序不必连续存放。
3)便于改变程序占用空间的大小
缺点是:要求程序全部装入内存,没有足够的内存,程序就不能执行。
4.2 段式存储管理
基本原理
在段式存储管理中,将程序的地址空间划分为若干个段(segment),程序加载时,分配时以段为单位,这些段不必连续,物理内存的管理采用动态分区。在段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以不连续地存放在内存的不同分区中。程序加载时,操作系统为所有段分配其所需内存。
总的来说,段式存储管理的优点是:没有内碎片,外碎片可以通过内存紧缩来消除;便于实现内存共享。缺点与页式存储管理的缺点相同,进程必须全部装入内存。
4.3. 页式和段式管理的区别
页式和段式系统有许多相似之处。比如,两者都采用离散分配方式,且都通过地址映射机构来实现地址变换。但概念上两者也有很多区别,主要表现在:
1) 需求:是信息的物理单位,分页是为了实现离散分配方式,以减少内存的碎片,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
2) 大小:页大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。
3) 逻辑地址表示:页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
4) 比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。
5. 虚拟存储
基本原理
在程序装入时,不必将其全部读入到内存,而只需将当前需要执行的部分页或段读入到内存,就可让程序开始执行。
在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则由处理器通知操作系统将相应的页或段调入到内存,然后继续执行程序。
另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。只需程序所需的一部分在内存就可执行。
引入虚拟存储技术的好处
- 大程序:可在较小的可用内存中执行较大的用户程序。
- 大的用户空间:提供给用户可用的虚拟内存空间通常大于物理内存 (real memory) 。
- 并发:可在内存中容纳更多程序并发执行。
- 易于开发:与覆盖技术比较,不必影响编程时的程序结构。