1. 内存管理的目的和功能
引入目的:
为了更有效地支持多道程序的并发执行,从而提升系统的整体性能。
主要功能包括:
- 内存空间的分配与回收:根据进程的需求动态地分配内存,并在使用完毕后及时回收,以提高内存利用率。
- 存储保护与共享:确保各个作业在各自独立的内存区域中运行,避免相互干扰,同时支持多个进程对共享数据的安全访问。
- 地址转换:在多道程序环境中,程序中的逻辑地址与实际物理内存地址不一致。因此,内存管理需提供机制将逻辑地址转换为对应的物理地址。
- 内存扩充:通过虚拟存储或自动覆盖技术,从逻辑上扩展可用内存容量,突破物理内存大小的限制。
2. 程序的装入
2.1 绝对装入
当编译程序能够确定程序在内存中的具体存放位置时,会生成包含绝对地址的目标代码,即直接赋予程序实际的物理地址。
优点:执行效率高,无需额外的地址转换开销。
缺点:
- 受制于内存容量,可并发执行的进程数量受限;
- 编译阶段必须知晓当前空闲内存的位置,而在多道程序环境下这通常是不可知的。
因此,该方式仅适用于单道程序系统。
2.2 静态重定位
在程序被加载到内存的过程中完成地址重定位。所有指令和数据的虚拟地址在运行前就被一次性转换为物理地址,且此后不再变动。
优点:不需要依赖特殊的硬件支持(如重定位寄存器),实现简单。
缺点:
- 程序一旦装入就不能再移动;
- 要求整个程序占用连续的内存空间,灵活性较差。
2.3 动态重定位
将地址转换过程延迟至程序实际执行时才进行。这种方式依赖硬件支持——特别是重定位寄存器,用以实时计算物理地址,否则会影响执行效率。
优点:能够有效应对内存碎片问题。由于每个模块可以独立定位,不要求连续存储空间,只需各自的重定位信息即可灵活布局。
缺点:需要专门的硬件支持,相比静态重定位增加了系统复杂性。
3. 程序的链接
程序链接是将多个目标模块及其所需库函数整合为一个完整可执行程序的过程,常见方式如下:
- 静态链接:在程序运行前,将所有目标模块和库函数预先链接成一个完整的可执行文件,之后不再更改。
- 装入时链接:在程序装入内存的过程中,边加载边链接相关模块,提高了灵活性。
- 运行时链接:某些模块直到程序执行过程中真正需要时才进行链接。这种方式有利于程序的修改、更新以及模块的共享。
4. 内存空间的分配与回收
4.1 连续分配管理方式
此类方法要求为进程分配连续的内存区域,主要包括以下几种形式:
- 单一连续分配:整个内存划分为固定区域,仅允许一个用户程序使用,适用于单用户或单任务操作系统。
- 固定分区分配:内存被划分为若干个大小固定的分区,可以相等也可以不等,但分区大小在系统初始化后不变。
- 动态分区分配:根据程序的实际需求动态划分内存空间。
- 可变分区存储管理:按需分配,分区大小随进程大小而定。
- 分配策略算法:
- 首次适应:空闲分区按地址递增顺序链接,查找时从头开始,选择第一个满足大小要求的分区。
- 最佳适应:空闲分区按容量从小到大排序,优先选用能满足需求的最小分区,减少浪费。
- 最坏适应:空闲分区按容量从大到小排列,每次选择最大的可用分区,试图保留更多小块空闲区。
- 邻近适应:类似于首次适应,但从上一次查找结束的位置继续搜索,避免重复扫描低地址区域。
4.2 非连续分配管理方式
非连续分配的核心优势在于“非连续”三个字,它克服了连续分配方式中存在的外部碎片问题,提升了内存利用率。即使存在许多分散的小块空闲内存,也能被有效利用。
基本分页式存储管理:
将物理内存划分为多个大小相等的单元,称为“页框”(也称“页帧”、“内存块”或“物理块”),每个页框有唯一的编号——“页框号”,从0开始计数。
同时,也将进程的逻辑地址空间划分为同样大小的区域,称为“页”或“页面”,每页也有一个编号——“页号”,同样从0起始。
操作系统以页框为单位为进程分配内存。进程的每一个页面可以被放入任意空闲页框中,页面之间无需连续存放,也不必按照顺序排列,可以分布在内存的不同位置。



雷达卡


京公网安备 11010802022788号







