# 4.1 内存管理概念 ## 一、内存管理的基本概念 ### 1.1 什么是内存管理 内存管理是操作系统对内存的分配、回收、保护和扩充的管理功能。 ### 1.2 内存管理的功能 1. **内存分配与回收**:为进程分配内存空间,进程结束后回收 2. **地址映射**:将逻辑地址转换为物理地址 3. **内存保护**:防止进程越界访问 4. **内存扩充**:利用虚拟存储技术扩充内存 --- ## 二、程序的装入与链接 ### 2.1 程序的处理步骤 ``` 源代码 → 编译 → 目标模块 → 链接 → 装入模块 → 装入 → 内存 ``` ### 2.2 链接方式 #### 静态链接 **定义**:在程序运行前,将所有目标模块和库函数链接成一个完整的装入模块。 **优点**: - 无需运行时链接 - 执行速度快 **缺点**: - 装入模块庞大 - 难以共享库函数 - 难以更新库函数 #### 装入时动态链接 **定义**:在装入内存时,边装入边链接。 **优点**: - 便于修改和更新 - 便于实现对目标模块的共享 #### 运行时动态链接 **定义**:在程序执行时,需要某个模块才进行链接。 **优点**: - 节省内存空间 - 加快装入速度 - 便于共享 ### 2.3 装入方式 #### 绝对装入 **定义**:编译时产生绝对地址的目标代码,装入时直接装入指定位置。 **特点**: - 地址在编译时确定 - 只适用于单道程序 #### 可重定位装入(静态重定位) **定义**:编译时产生相对地址的目标代码,装入时根据内存情况重定位。 **特点**: - 地址在装入时确定 - 需要重定位寄存器 - 装入后不能移动 #### 动态运行时装入(动态重定位) **定义**:编译时产生相对地址,执行时才进行地址转换。 **特点**: - 地址在执行时确定 - 需要地址转换机构(MMU) - 可以移动程序 - 支持虚拟存储 --- ## 三、逻辑地址与物理地址 ### 3.1 逻辑地址(虚拟地址) **定义**:程序中使用的地址,从0开始编址。 **特点**: - 程序员可见 - 相对地址 - 连续的地址空间 ### 3.2 物理地址 **定义**:内存单元的实际地址。 **特点**: - 硬件可见 - 绝对地址 - 可能不连续 ### 3.3 地址转换 **重定位**:将逻辑地址转换为物理地址的过程。 **静态重定位**:在装入时完成 **动态重定位**:在执行时完成 --- ## 四、内存保护 ### 4.1 内存保护的目的 - 防止进程越界访问 - 防止进程访问操作系统区域 - 防止进程间相互干扰 ### 4.2 内存保护的方法 #### 界限寄存器 **方法**: - 基址寄存器:存放程序的起始地址 - 限长寄存器:存放程序的长度 **检查**: - 逻辑地址 < 限长寄存器 - 物理地址 = 逻辑地址 + 基址寄存器 #### 页表保护 **方法**: - 页表项中设置保护位 - 检查访问权限(读/写/执行) --- ## 五、考研重点 1. **程序的处理步骤**:编译、链接、装入 2. **链接方式**:静态链接、装入时动态链接、运行时动态链接 3. **装入方式**:绝对装入、可重定位装入、动态运行时装入 4. **逻辑地址与物理地址**:概念和转换 5. **内存保护**:界限寄存器、页表保护 --- *下一节:4.2 连续分配管理方式*