说明:本文为个人学习笔记,内容参考王道《操作系统》网课与配套讲义,按个人理解整理总结,仅用于学习交流,如有疏漏欢迎指正。
内存空间的扩充 覆盖 为了解决程序大小超过物理内存总和的问题, 引入了覆盖技术
思想 将程序分为多个段(多个模块) 常用的段常驻内存, 不常用的段在需要时调入内存 内存中分为一个"固定区", 和若干个"覆盖区" 区域类型 存放内容 调度规则 固定区 程序中需要常驻的核心段 调入后永久驻留,仅在程序运行结束时才调出 覆盖区 不常用、非核心的功能段 按需动态调度:用时调入,不用时调出,可被其他段覆盖 例子 注: 在计算机里,“透明”= 用户完全不用管,系统自动帮你做好。反过来,“不透明”= 用户必须手动操心、手动配置,系统不会自动帮你做。
为什么这叫 “不透明”? 现代虚拟内存(分页 / 分段):程序员完全不用管内存,写代码时默认 “内存无限大”,系统自动帮你换入换出,这就是透明。 覆盖技术:程序员必须深度参与内存管理,从拆分段、设计覆盖区、声明结构,到保证调用逻辑,全要手动搞定,系统只负责执行你写的规则,不会帮你做任何决策。 交换 思想 内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)
在进程因为内存紧张被调出的时候, 进程的PCB需要留在内存(进入挂起队列), 即常驻内存, 这是因为在PCB中可以记录进程被调出到外存的具体位置
暂时换出外存等待的进程状态为挂起状态
问题 1) 应该在外存的什么位置保存被换出的进程? 在支持对换功能的操作系统中,磁盘空间会被划分为文件区和对换区两个独立部分,二者的管理逻辑完全围绕各自的核心目标设计。 文件区主要用于存放各类持久化的用户文件与程序数据,核心追求是存储空间的利用率,因此采用离散分配的方式来减少空间浪费、提升存储效率 而对换区仅占用磁盘的一小部分空间,专门用于临时存放被换出内存的进程数据,由于对换的 I/O 速度直接影响系统的整体运行效率,所以对换区的管理以换入换出速度为核心目标,通常采用连续分配的方式来减少磁盘寻道时间、提升读写效率,最终实现对换区的 I/O 速度远快于文件区,保障进程调度的高效性。 2) 什么时候应该交换 交换通常发生在许多进程运行且内存吃紧时进行, 而系统负荷降低就暂停
3) 应该换出哪些进程 可优先换出阻塞进程 换出优先级低的进程 为了防止优先级低的进程在被调入内存后很快又被换出, 有的系统还会考虑进程在内存的驻留时间(PCB常驻内存, 并不会被换出外存) 虚拟存储技术 传统存储管理方式的特征和缺点 一次性: 作业必须一次性全部装入内存后才能开始运行, 这会造成两个问题 : 作业很大时, 不能全部装入内存, 导致大作业无法运行 当大量作业要求运行时, 由于内存无法容纳所有作业, 因此只有少量作业能运行, 导致多道程序并发度下降 驻留性: 一旦有作业被装入内存, 就会一直驻留在内存中, 直至作业运行结束. 事实上, 在一个时间段内, 只需要访问作业的一小部分数据即可正常运行, 这就会到时了内存中驻留大量的, 暂时用不到的数据, 造成内存资源浪费 虚拟内存的定义和特征 定义 程序装入时,仅将很快会用到的部分装入内存,暂时用不到的部分留在外存,程序即可开始执行。 程序执行中,若访问的信息不在内存,由操作系统将所需信息从外存调入内存,再继续执行。 若内存空间不足,由操作系统将内存中暂时用不到的信息换出到外存。 在操作系统管理下,用户看来有一个比实际内存大得多的内存,这就是虚拟内存。 特征 多次性:无需在作业运行时一次性全部装入内存,允许被分成多次调入内存。 对换性:在作业运行时无需一直常驻内存,允许在作业运行过程中,将作业换入、换出。 虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量远大于实际的容量。 如何实现虚拟内存技术 虚拟内存技术,允许一个作业分多次调入内存。如果采用连续分配方式,会不方便实现。因此,虚拟内存的实现需要建立在离散分配的内存管理方式基础上。
...