第四章 存储器管理
存储器是计算机系统的重要组成部分之一。对存储器加以有效管理,不仅直接影响存储器的利用率,而且对系统性能有重大影响。存储器管理的主要对象是内存,对外存的管理在文件管理中。
4.1 程序的装入和链接
4.2 连续分配方式
4.3 基本分页存储管理方式
4.4 基本分段存储管理方式
以上为基本内存管理
4.5 虚拟存储器的基本概念
4.6 请求分页存储管理方式
4.7 页面置换算法
4.8 请求分段存储管理方式
以上为虚拟内存管理
在多道程序环境下,要使程序运行,必须为之先建立进程。创建进程的第一件事是将程序和数据装入内存。
将用户源程序变为可在内存中执行的程序的步骤:
- 1、编译:由编译程序将用户源代码编译成若干个目标模块
- 2、链接:由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接在一起,形成一个完整的装入模块
- 3、装入:由装入程序将装入模块装入内存
例:a.c–编译---->a.obj----链接---->a.exe-----装入内存—>执行
一、程序的装入
将一个程序装入内存时,有三种方式:
- 绝对装入方式
- 可重定位装入方式
- 动态运行时装入方式
1、绝对装入方式
- 在编译时,如果知道程序驻留在内存的什么位置,那么编译程序将产生绝对地址的目标代码。
- 装入模块装入内存后,程序中的逻辑地址与实际内存地址完全相同,不需对程序和数据的地址进行修改
- 程序中所使用的绝对地址,可在编译或汇编时给出,也可以由程序员赋予。
只适合于单道程序环境
2、可重定位装入方式
- 在多道程序环境下,目标模块的起始地址通常从0开始,程序中的其他地址都是相对于起始地址计算的。因此应采用可重定位装入方式,根据内存的当前情况,将装入模块装入到内存的适当位置。
注意:在采用可重定位装入方式将装入模块装入内存后,会使装入模块中的所有逻辑地址与实际装入内存的物理地址不同。
3、动态运行时装入方式
- 动态运行时的装入程序,在把装入模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行的时候才进行。
- 装入内存后的所有地址都仍是相对地址。
- 为使寄存器转换不影响指令的执行速度,应设置一个重定位寄存器。
动态重定位的实现
二、程序的链接
程序经过编译后得到一组目标模块,再利用链接程序将目标模块链接,形成装入模块。根据链接时间的不同,把链接分成三种:
- 1、静态链接:在程序运行前,将目标模块及所需的库函数链接成一个完整的装配模块,以后不再拆开。
- 2、装入时动态链接:指将用户源程序编译后所得的一组目标模块,在装入内存时,采用边装入边链接的链接方式
- 3、运行时动态链接:指对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行链接。