第7章 存储器管理
存储器管理的主要目标是为用户提供方便、安全和充分大的存储器。
存储器即主存、内存,分为两大部分:
系统区:供操作系统使用
用户区:划分为一个或多个区域,供用户进程使用。
存储器管理的功能
存储空间的分配和回收:
地址变换:将逻辑地址变换为物理地址
存储保护:防止因用户程序错误破坏系统或其他用户,防止程序之间的相互干扰
存储扩充:在逻辑上为用户提供一个比实际内存更大的存储空间
7.1 存储器管理的基本概念
逻辑地址:用户编程时所使用的地址。又称相对地址、虚地址。
地址空间:逻辑地址的集合。
物理地址:内存中的地址。又称绝对地址、实地址。
主存空间:物理地址的集合。
地址变换
地址变换:将逻辑地址转换为物理地址。又称地址映射、重定位。
地址变换分为两类:
静态地址变换
动态地址变换
静态地址变换
静态地址变换:又称静态地址重定位,地址变换在程序装入时一次完成,以后不再改变。
特点:不需硬件支持,但程序运行时不能在内存移动,程序需要连续存储空间,难以共享。
静态地址变换示意图
动态地址变换
动态地址变换:又称动态重定位,在程序执行过程中,每次访问内存之前将要访问程序地址转换成内存地址。
特点:需要硬件支持,不需连续空间,可以实现虚拟存储。
动态地址变换示意图
7.2 分区存储管理
分区存储管理是多道程序系统中采用的一种最简单的方法。它把系统的内存划分为若干大小不等的区域,操作系统占一个区域,其他区域由并发进程共享,每个进程占一个区域。
分区存储管理分为:
固定分区
动态分区
1. 固定分区存储管理
固定分区存储管理方法将内存空间划分为若干个固定大小的分区,每个分区中可以装入一道程序。分区的位置及大小在运行期间不能改变。
为了便于管理内存,系统需要建立一张分区使用表,其中记录系统中的分区数目、分区大小、分区起始地址及状态。
分区使用表例
固定分区的内存分配
分区分配:当有用户程序要装入时,由内存分配程序检索分区使用表,从中找出一个能满足要求的空闲分区分配给该程序,然后修改分区说明表中相应表项的状态;若找不到大小足够的分区,则拒绝分配内存。
分区回收:当程序执行完毕不再需要内存资源时,释放程序占用的分区,管理程序只需将对应分区的状态置为未分配即可。
特点:最早的多道程序存储管理方式,不能充分利用内存,存在内存碎片。
2. 动态分区存储管理
动态分区存储管理又称为可变分区存储管理,这种存储管理方法的实现思想是根据作业大小动态地建立分区,并使分区的大小正好适应作业的需要。因此系统中分区的大小是可变的,分区的数目也是可变的。
动态分区中的数据结构
在动态分区中常用的数据结构有:
空闲分区表。用一个空闲分区表来登记系统中的空闲分区。其表项类似于固定分区。
空闲分区链。将内存中的空闲分区以链表方式链接起来,构成空闲分区链。
空闲分区表示意图
空闲分区链示意图
分区分配算法