本文是对王道计算机408操作系统+王道2025操作系统考研复习指导部分的提炼总结,个人心得,包含视频内容和课后习题的提炼.
本人是26届408考生,本文属于考研复习的笔记,会持续更新~
建议搭配视频和指导书食用~ ~ 视频课请看王道计算机考研408操作系统
本文是操作系统第三章 第一节内容
总目录2026考研408 操作系统
第一节: 内存管理概念
3.1 内存管理概念
3.1.1 内存管理的基本原理和要求
- 内存管理的概念
- 内存可以存放数据,程序执行前需要先放入内存中才能被
CPU
处理 - 在多道程序环境下如何管理多个程序的数据。内存用于临时存储数据和程序,以便CPU能够快速处理。
- 在多道程序环境下,多个程序需要同时在内存中运行,这就涉及到如何区分和管理这些程序的数据。
- 内存的存储单元地址
- 内存从0开始,每一个地址对应一个存储单元
- 如果计算机按字节编址,那么每个存储单元的地址就是一个字节,即
1B
,8个二进制位
- 如果是按字编址,那么每个存储单元的地址就是一个字,存储单元大小得看字长为多少的计算机
- 如果是一个字长为
16位
的计算机,那么一个存储单元就是16位
,即2B
- 如果是一个字长为
- 补充知识
- 计算机的单位换算
- 位(
Bit
):最小的数据单位,表示一个二进制数位,可以是0
或1
。 - 字节(
Byte
):基本的存储单位,通常用于表示一个字符。- 1 Byte = 8 Bits
- 1 KB = 2^10 Bytes
- 1 MB = 1,024 KB = 2^20 Bytes
- 1 GB = 1,024 MB = 2^30 Bytes
- 位(
- 计算机的单位换算
- 内存可以存放数据,程序执行前需要先放入内存中才能被
- 内存管理的主要功能
- 内存空间的分配和回收
- 为正在运行的程序分配内存空间。这包括为程序代码、数据和堆栈分配内存。
- 当程序结束或不再需要某些内存时,操作系统负责回收这些内存,以便它们可以被其他程序使用。
- 地址转换
- 内存管理单元(
MMU
)负责将逻辑地址转换为物理地址。逻辑地址是程序生成的地址,物理地址是内存中的实际地址。
- 内存管理单元(
- 内存空间的扩充
- 利用虚拟存储技术,操作系统可以将磁盘空间用作内存扩展,以便在内存不足时继续运行程序。
- 内存共享
- 允许多个程序共享内存中的数据,以便它们可以相互通信。
- 存储保护
- 保证各个进程之间的内存空间不会相互干扰,以及保护操作系统的内存空间不受用户程序的影响。
- 内存保护的两种方法
- 在
CPU
中设置上,下限寄存器,进程如果要访问地址要先检查是否越界 - 采用重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器),重定位寄存器存放进程起始地址,界地址寄存器存放进程最大逻辑地址
- 在
- 内存空间的分配和回收
程序的链接与装入
- 创建进程首先要将程序和数据装入内存,将用户源程序变为可用在内存中执行的程序,需要以下步骤
- 编译
- 由编译程序将用户源程序编译成若干目标模块
- 链接
- 由链接程序将若干目标模块以及他们所需的库函数链接在一起,成一个完整的装入模块
- 装入
- 由装入程序将装入模块装入内存,并为其分配内存空间
- 编译
- 当一个装入模块装入内存时,有三种装入方式
- 绝对装入
- 在绝对装入方式中,程序在编译时就确定了其在内存中的绝对位置,编译器会生成包含绝对地址的目标代码。
- 装入程序按照这些绝对地址将程序和数据装入内存。
- 特点
- 它适用于单道程序环境,灵活性很低
- 可重定位装入(静态重定位)
- 它允许程序在编译时使用相对地址,而在装入内存时根据内存的当前情况,将程序装入到内存的适当位置。
- 通常起始地址从0开始。当程序被装入内存时,所有逻辑地址都需要根据程序在内存中的实际起始地址进行调整,这个过程称为重定位。重定位确保了程序中的指令和数据引用在内存中的正确位置。
- 特点
- 适用于多道程序环境,灵活性高
- 作业装入内存时,必须分配其所需的全部内存空间,如果没有足够内存就不装入
- 作业一旦进入内存后,在运行期间不能移动,也不能再申请空间
- 动态运行时装入(动态重定位)
- 动态重定位是一种在程序执行过程中进行地址重定位的技术
- 它允许程序在装入内存时不进行任何修改(不把逻辑地址转为实际地址)
- 而是在程序要真正执行的时候,通过硬件支持的地址变换动态地将相对地址转换为绝对地址。
- 这种技术需要硬件的支持,如重定位寄存器,来实现地址的动态转换。
- 特点
- 可以将程序分配到不连续的存储区内
- 在程序允许前只需要装入他的部分代码即可投入允许
- 在允许期间根据需要动态申请分配内存
- 便于程序段的共享,可以向用户提供一个比存储空间大的多的地址空间
- 绝对装入
- 链接的三种方式
- 静态链接
- 在程序运行之前,将各个模块以及库函数链接在一起,形成一个完整的装入模块,之后不再拆开
- 装入时动态链接
- 在装入内存的时候,边装入边链接,形成一个完整的装入模块
- 运行时动态链接
- 在程序运行的时候,只有需要用到该模块的时候才链接,优点是便于修改和更新,便于实现目标模块的共享
- 静态链接
内存空间的扩充
- 覆盖技术
- 早期计算机内存很小,引入覆盖技术来解决程序大小超过内存大小的问题
- 核心思想:将程序分为多个段(多个模块),常用的段(模块)常驻内存使用,不常用的段(模块)在需要的时候再装入内存
- 内存分为一个固定区和一个覆盖区,固定区存放常驻内存的段,并且调入之后不再调出(除非运行结束),覆盖区存放不常驻内存的段
- 缺点
- 必须由程序员来声明覆盖结构,对用户不透明,增加变成负担
- 交换技术
- 在内存紧缺的时候,系统将内存中某些进程暂时换出到外存上,把外存具备运行条件的进程换入内存