计算机的工作方式可以归结为两种基本能力,即存储程序和自动地执行程序,前者靠存储器实现,后者靠CPU实现。计算机的工作原理即不断地从内存 中取出一条条指令放在CPU中运行。在此过程中,操作系统需要对程序的文件在内存中的保存方式进行管理,主要方法如下:
1、单道程序存储管理
该方法是最简单的一种存储管理方法,也是其他更复杂的方法的基础。单道程序存储管理的基本思路是将整个程序划分为两部分,即系统区和用户区。某一个进程在启动时,操作系统将该进程的代码放入用户区,一直到该进程结束前,该程序始终独占用户区直到进程退出。然后操作系统在装入一个新的进程将其覆盖。
随着技术的发展,该方法已经显现出了巨大的问题。首先,系统一次仅能运行一个程序,不能实现多进程并行运行;其次,内存利用率不高;其三,没有内存保护机制,运行的进程可以无限制地访问任何地址;最后,进程的地址空间有限,最大不可能超过内存的大小。为了解决这些问题,出现了多种多道存储管理。
2、分区存储管理
分区存储管理是最简单的多道存储管理方案,其基本思路是首先将内存分为系统区和用户区,然后将用户区划分为若干个等大小或不等大小的分区,每个进程占据一个分区,这样可以实现内存中同时保留和运行多个进程,实现并发操作。
分区存储管理有两种实现方法:固定分区和可变分区。
- 固定分区:在初始时刻就将各个进程的分区划分好,在系统的运行中不做更改;系统在管理固定分区,需要创建一个内存分配表记录各个分区的分区号、地址、长度、当前状态和所装载的进程信息等。
- 可变分区:在系统运行时,每个进程的空间由系统动态创建;在程序装入内存时,系统根据需求和内存空间的情况来决定内存分配。管理可变分区需要维护一个分区链表来记录各个分区的情况;使用最先匹配法、下次匹配法、最佳匹配法和最坏匹配法进行内存区分配;内存回收时只需要修改分区链表即可。
3、页式存储管理和段式存储管理
固定分区系统一定会产生内存碎片的问题;可变分区系统的碎片问题可以通过内存紧缩解决,但是会消耗额外的系统资源。因此,后来提出了页式存储管理方案,其特点是打破一个进程内存空间的连续性,使之可以分散在若干个离散的内存块中。
也是存储管理系统将物理内存划分为多个大小固定的内存块,其大小通常为2^n个字节;同时也将进程的逻辑地址空间 划分为相同大小的内存块。这两种块的前者分别称为物理业或页框,后者称为逻辑页面或页面。应用程序被装入内存时,以页面为单位进行分配,最终将被分别装入n个不连续的物理页面中。
实现页式存储管理方案需要为每一个进程分别维护页表和物理页面表两个数据结构用于将逻辑地址同物理地址建立联系;内存的分配和回收也是修改这两个数据结构。
段式存储管理与页式存储相似,区别在于,段式存储的基本单元不再是一个固定大小的页,而是根据进程的逻辑单元而构成的段,每个段进行分布式存储。对于每个进程,操作系统维护一个段表,段表包含段号、分区起始地址、长度等信息。
4、内存不足情况下的处理
在多道程序下可能会出现内存不足的情况,针对以下三种状况:
- 程序太大,超过空闲内存的容量而无法一次性装入,那么采用覆盖技术,只装入当前需要的指令和数据,其他指令和数据保存于外存;
- 进程太多,综合超过了内存容量,使得新的进程无法运行,那么可以采用交换技术,将暂时不能执行的程序移出内存;
- 若试图在有限的内存中尽可能装入多的进程,且每个进程尽可能大,则采用虚拟存储技术。