做财经类新闻的网站,一般网站有哪些模块,wordpress 返回顶部插件,小米手机网站建设总结本篇博客是考研期间学习王道课程 传送门 的笔记#xff0c;以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助#xff01;#xff01;#xff01; 关于对 “内存管理” 章节知识点总结的十分全面#xff0c;涵括了《操作系统》课程里的全部… 本篇博客是考研期间学习王道课程 传送门 的笔记以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助 关于对 “内存管理” 章节知识点总结的十分全面涵括了《操作系统》课程里的全部要点本人来来回回过了三遍视频其中还陆陆续续补充了许多内容所以读者可以相信本篇博客对于考研操作系统 “内存管理” 章节知识点的正确性与全面性但如果还有自主命题的学校还需额外读者自行再观看对应学校的自主命题材料。 食用说明书 第一遍学习王道课程时我的笔记只有标题和截图后来复习发现看只看图片并不能很快的了解截图中要重点表达的知识点。 在第二遍复习中我给每一张截图中 标记了重点以及 每张图片上方总结了该图片 对应的知识点 以及自己的 思考 。 最后第三遍查漏补缺。 所以 我把目录放在博客的前面就是希望读者可以结合目录结构去更好的学习知识点之后冲刺复习阶段脑海里可以浮现出该知识结构做到对每一个知识点熟稔于心 请读者放心目录展示的知识点结构是十分合理的可以放心使用该结构去记忆学习 注意(⊙o⊙)每张图片上面的文字都是该图对应的知识点总结方便读者更快理解图片内容。 《操作系统》第3章 内存管理 【考纲内容】 王道 P177 ~ 248 (一) 内存管理基础 网课耗时3.5 h 内存管理概念逻辑地址与物理地址空间地址交换内存共享内存保护内存分配与回收连续分配管理方式页式管理段式管理段页式管理 (二) 虚拟内存管理 网课耗时1.5 h 虚拟内存基本概念请求页式管理页框分配页置换算法内存映射文件虚拟存储器性能的影响因素及改进方式 【复习提示】 内存管理 和 进程管理 是操作系统的 核心 本章围绕 分页机制 展开 通过 分页管理方式 在物理内存大小的基础上提高内存的利用率 再进一步引入 请求分页管理方式 实现虚拟内存使内存脱离物理大小的限制从而提高处理器的利用率 3.1 内存管理概念
3.1.1 内存的基础知识 1. 什么是内存 【补充】机械字 是硬件(物理)单元存储单元 是逻辑单元内存可以看成一个个存储单元组成 内存的一大作用是 缓和CPU与硬盘之间的速度矛盾 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sGaAYKkS-1677664821962)(《操作系统》第3章 内存管理.assets/image-20220812211447837.png)] 补充知识常用的数量单位 210 1K220 1M230 1G 2. 进程运行的基本原理 创建进程首先要将程序和数据装入内存 将 用户源程序 变为 可在内存中执行的程序通常需要以下几个步骤 编译由 编译程序 将 用户源代码 编译成 若干个模块机器指令链接由 链接程序 将 编译后形成的一组 目标模块 及 它们所需的 库函数 链接在一起形成一个完整的 装入模块装入由 装入程序 将 装入模块 装入内存运行 (1) 逻辑地址 与 物理地址 指令的工作原理是基于 地址 进行的而 每个地址对应一个数据的存储单元 编译后每个目标模块都从0号单元开始编址这称为该目标的 相对地址或逻辑地址 当链接程序将各个模块链接成一个完整的可执行目标程序时链接程序按顺序依次按各个模块的相对地址构成一个统一的从0号单元开始编址的 逻辑地址空间或虚拟地址空间 对于32位系统逻辑地址空间的范围为 0 ~ 232 - 1 不同进程可以有相同的逻辑地址因为这些相同的逻辑地址可以映射到主存的不同位置 物理地址空间 是指内存中物理单元的集合它是 地址转换 的最终地址 进程在运行时执行指令和访问数据最后都要通过物理地址从主存中存取 当 装入程序 将可执行代码装入内存时必须通过地址转换将逻辑地址转为物理地址这个过程称为 地址重定位 有三种装入方式也就是三种重定位方式用来解决指令中的逻辑地址到物理地址的转换后面再补充 (2) 链接的三种方式 ① 静态链接 ② 装入时动态链接 ③ 运行时动态链接 (3) 装入的三种方式 ① 绝对装入 ② 可重定位装入静态重定位 ③ 动态运行时装入 小结 1、从逻辑方面认识 内存和内存结构 2、进程运行的基本原理指令工作原理 逻辑地址与物理地址 编译、链接、装入 3.1.2 内存管理的主要功能 王道课本在介绍 内存管理的主要功能有5个方面课程只介绍了4个少了 内存共享 本节只是让你初步认识 内存管理功能 的 基本概念 后续章节会展开介绍 1. 内存空间的分配与回收 具体负责如何分配 如何回收 哪些分配了哪些还空闲 2. 内存空间的扩充 3. 地址转换 逻辑地址 转换为 物理地址也就是 地址重定位 涉及到之前介绍的 三种装入方式 4. 存储保护 已经各个分配的内存空间互不影响也就是说 确保各进程不会为了内存 打架 内存保护的两种方法 方法一设置一对上、下限寄存器明确进程指令所能访问的 地址范围 内存保护的两种方法 方法二重定位寄存器 界地址寄存器。思想不变本质还是确定进程指令所能访问的 地址范围 小结 本节就是介绍 内存管理主要功能 的 基本概念 3.1.3 覆盖与交换 覆盖 与 交换 是在多道程序运行环境下用来 扩充内存 的两种方法 1. 覆盖技术 覆盖分段思想 一个固定区 若干个覆盖区 2. 交换技术 内存调度 就是通过 交换技术 实现的 文件区 - 离散分配方式 对换区 - 连续分配方式 小结 下图总结的很充分看下图复习即可 3.1.4 连续分配管理方式 连续分配方式为一个用户程序分配一个 连续的内存空间 1. 单一连续分配 2. 固定分区分配 内存分区每个分区装入一道作业 3. 动态分区分配 问题1操作系统要使用什么样的数据结构记录内存的使用情况 问题2当有很多空闲分区满足需求该选择哪一个分区呢 问题3如何进行分区的分配与回收 分配时可能遇到的情况 分配的空间有剩余分配的空间刚刚好 回收时可能遇到的情况 情况一 情况二 情况三 情况四 内部碎片 和 外部碎片 4. 动态分区分配算法 ① 首先适应算法First Fit 首次适应算法最简单但会使得内存的 低地址部分 出现很多小的空闲分区并且每次分配查找都要经过这些分区增加开销 ② 最佳适应算法 ③ 最坏适应算法 ④ 邻进适应算法 小结 1、单一连续分配 (单一分区分配) 2、固定分区分配 3、动态分区分配 - 动态分区分配算法 要理解好 分区 的意义就是一道作业对应一个分区 3.1.5 基本分页存储管理 ⭐ 固定分区会产生 内部碎片动态分区会产生 外部碎片这两种技术对内存的利用率都比较低 为了尽量避免碎片的产生就引入了 分页 的思想 1. 分页存储的基本概念 (1) 回顾地址空间 (2) 分页存储 ① 分页思想 把主存空间划分成大小相等且固定的块作为主存的基本单位 每个进程也以块为单位进行划分进程在执行时以块为单位逐个申请主存中的块空间 分页很像分区相等的固定分区技术所以 分页管理也不会产生外部碎片 区别块的大小相对于分区来说要小很多而且进程也按照块进行划分进程运行时按块申请主存可用空间并执行 进程只会在为最后一个不完整的的块申请一个主存块空间时产生主存碎片页内碎片 ② 页面和页面大小 进程中的块称为 页 或 页面内存中的块称为 页框 或 页帧外存直接称为 块 或 盘块注意和 存储单元 做区分 页 和 页框 是逻辑划分块 是物理划分 进程在执行时申请主存空间就是为 每个页面 分配主存中的 可用页框这就是 页 和 页框 的一一对应 ③ 页表 页表的作用实现从页号到物理块号的地址映射 注意很关键的一点进程分成n块页表对应n个页表项 关于 页表 的两个问题下面依次解答 【问题】 每个页表项占多少字节 页表项中的 页号 可以 隐含即 页号不占用存储空间 例如arr[1] 101用页表项的角度来看就是 1号页 对应的块号 是101 每个页表项占 3B存储整个页表至少需要 3 × (n 1) B n取决进程可分为多少页 【问题】 如何实现地址的转换 答起始位置 偏移量连续存放 分页存储逻辑地址A对应的物理地址 P号页面在内存中的 起始地址 页面偏移量W 下面是一些关于分页的计算问题 【问题】 如何确定一个逻辑地址对应的页号、页内偏移量 下图用32位的逻辑地址页面大小为 212B 前20位表示页号后12位表示页内偏移量 【问题】 为何页面大小要取2的整数幂 (4) 逻辑地址结构 逻辑地址 页号 页内偏移量 页内偏移量的位数K 表示 页的大小为 2K 页号的位数M 表示 共有 2M 个页面 小结 1、分页的基本概念 2、页表。进程大小 决定 页表项数量内存大小 决定 页表项长度 3、逻辑地址结构。进程大小 决定 页号 P内存块大小 决定 页内偏移量 W 4、如何借助页表实现地址转换 2. 基本地址变化机构 ⭐ 地址变换机构 是用于实现地址转换的 一组硬件机构 ① 根据逻辑地址求 页号 和 页内偏移量 ② 比较 页号P 和 页表长度M是否 页号越界M表示有M个页表项 ③ 根据 页表寄存器 的信息找到页表查询页号对应的 内存块号 ④ 计算出物理地址 E b × L W ⑤ 用得到的物理地址E访存 用文字再复习下上图地址变换的过程 我们计算是使用 b × L M 计算出物理地址 但如果把内存块号、页内偏移量用二进制拼接起来得到的物理地址是相同的 例题尝试计算一下 关于 页表项 的计算问题如下图所示 存储页表时若采用 3个字节 时页框会剩余1B的其它页表项被迫存储在下一个页框里 但进程页表通常是 连续存储 的 针对这个问题虽然 3字节 已经可以表示内存块号范围但为了不产生页内碎片所以采用 4字节 的页表项 注意进程页表是装在 连续的内存块中 小结 下图三部分总结的很好注意标红部分 3. 具有快表的地址变换机构 ① 什么是快表 快表不是内存是一种高速缓存但和狭义上的Cache还是有区别的 【问题】 能否把整个页表都放在TLB中 答太贵了所以应该选择合适的 页面置换算法 更实惠选择把 最有用的页表项 放进快表里 ② 引入快表后地址的变换过程 注意快表是一个硬件但进程切换时快表内容会被清空所以每次初始的时候快表里是空的 页表是根据进程存在的而快表是独立于进程的 ③ 局部性原理 小结 4. 两级页表 (1). 单级页表存在的问题 如何解决 单级页表存在的第一个问题 下图的情况需要专门给进程分配 1024个连续的页框 来存放它的页表 不仅需要占用较大的连续空间而且也丧失了 离散分配 的优点 单级页表存在的第二个问题根据局部性原理没必要把整个页表常驻内存因为进程只会访问部分页面 总结下单级页表需要解决的两个问题 这里先简单提一下 虚拟存储技术 给每个页表项增加一个 标志位用来记录是否在内存中 (2). 两级页表的原理、地址结构 (3). 如何实现地址变换 (4). 两级页表需要注意的几个细节 小结 下图总结的很好看下图即可 章节小结 1、分页存储的基本概念 2、地址变换机构 3、快表 4、两级页表 3.1.6 基本分段存储管理 ⭐ 1. 分段 按照程序 自身逻辑关系 划分为 若干个段每段从0开始编制 程序员用段名来编程编译程负责序会把段名转换为段号 2. 段表 段号也可以 隐含 段号 因为各段的长度不一所以段表里添加了记录段长的字段 3. 如何实现地址变换 4. 分段、分页管理的对比 小结 1、分段的基本概念 2、段表 3、地址变换 4、分段 vs. 分页 3.1.7 段页式管理 还没看视频等复习完分页、分段再来看 1. 分页、分段的优缺点分析 2. 分段 分页 段页式管理 进程按 逻辑分段各段按物理分页 3. 段表、页表 4. 如何实现地址变换 小结 1、分页、分段的优缺点 2、段页式存储的基本概念 3、页表、段表结构 4、地址变换 3.2 虚拟内存管理
3.2.1 虚拟内存的基本概念 虚拟内存是基于高速缓存技术提出的一种内存管理方案 1. 传统存储管理方式的特征、缺点 一次性驻留性 2. 局部性原理 传统存储管理就是想可以最大程度地压榨内存资源不管有没有用占住内存空间最重要 虚拟存储技术就是让最关键的哪个作业运行其它不是很关键的作业先不管就让人觉得内存好像很大 根据什么策略选择呢局部性原理 时间局部性空间局部性 3. 虚拟内存的定义和特征 虚拟内存的思想部分装入 请求调入 置换功能对用户透明– 虚拟大内存 虚拟内存的特征 多次性对换性虚拟性 4. 如何实现虚拟内存技术 【补充】虚拟内存的实现需要一定的硬件支持 一定容量的 内存 和 外存 页表机制或段表机制作为主要的数据结构中断机构当用户程序要访问的部分尚未调入内存时则会产生中断地址变换机构逻辑机构到物理地址的变换 虚拟内存的实现三种方式 请求分页存储管理请求分段存储管理请求段页式存储管理 小结 1、传统存储管理方式的特征、缺点; 2、局部性原理 3、虚拟内存的定义和特征 4、如何实现虚拟技术部分装入 请求调入 置换功能请求分页存储管理 3.2.2 请求分页管理方式 ⭐ 程序进内存时基本分页的一次性 与 请求分页的多次性 两者的不同导致后续程序运行过程中也有区别 由于多次性导致请求分页还需要 请求调页 和 页面置换 两者功能 1. 页表机制 基本分页页表 vs. 请求分页页表 2. 缺页中断机构 3. 地址变换机构 注意 请求分页 存储管理 与 基本分页 存储管理 的区别 如果在快表中找到某个页面对应的页表项那么这个页面一定是在内存中的 若这个页面被换出外存则快表中的相应表项也要删除否则可能访问错误的页面 重点留意王道 图 3-24 请求分页的地址变换过程 小结 1、页表机制 2、缺页中断机构 3、地址变换机构 3.2.3 页面置换算法 ⭐ 1. 最佳置换算法 OPT选择剩余价值最低的 OPT 算法只能是理想算法因为无法提前知道未来要被调用的页面 2. 先进先出置换算法 为进程分配 四个内存块时缺页不减反增 - Belady 异常 3. 最近最久未使用置换算法 LRU淘汰老页面 LRU 算法性能好但是需要专门硬件实现困难 4. 时钟置换算法 5. 改进型的时钟置换算法 改进思想当页面未被修改过可以直接抛弃无需写回外存 小结 3.2.4 页面分配策略、抖动、工作集 1. 驻留集 2. 页面分配、置换策略 固定分配局部置换可变分配全局置换可变分配局部置换 3. 调入页面的时机 4. 从何处调页 5. 抖动颠簸现象 6. 工作集 小结 下图总结的很好直接看下图小结 3.2.5 内存映射文件 1. 内存映射文件 本质就是操作系统向上层程序员提供的一个功能作用 方便程序员访问文件数据方便多个进程共享同一个文件 2. 传统的文件访问方式 3. 内存映射文件的原理和作用 ① 方便程序员访问文件数据 传统文件访问方式文件其实是离散地分布在磁盘里 采用内存映射文件方式会让你感觉要访问的文件是连续的存储 当我们要读入第2块数据时但此时还没有数据就会有一个缺页异常操作系统就会去把对应的数据调入内存 也就是说程序员再也不用考虑 read操作 了读入数据的过程由操作系统替我们完成 ② 方便多个进程共享同一个文件 小结 3.3 常见问题和易混淆知识点
分页管理方式和分段管理方式在很多地方是相似的比如在内存中都是不连续的、都有地址变换机构来进行地址映射等。
但两者也存在许多区别如下
分页分段目的分页仅是系统管理上的需要是为实现离散分配方式以提高内存的利用率。而不是用户的需要段是信息的逻辑单位它含有一组意义相对完整的信息。分段的目的是能更好地满足用户的需要长度页的大小固定且由系统决定由系统把逻辑地址划分为页号和页内地址两部分是由机器硬件实现的段的长度不固定决定于用户所编写的程序通常由编译程序在编译时根据信息的性质来划分地址空间分页的程序地址空间是一维的即单一的线性地址空间程序员利用一个记忆符即可表示一个地址分段的程序地址空间是二维的程序员在标识一个地址时既需给出段名又需给出段内地址碎片有内部碎片无外部碎片有外部碎片无内部碎片
1为什么要进行内存管理 在单道系统阶段一个系统在一个时间段内只执行一个程序内存的分配极其简单即仅分配给当前运行的进程 引入多道程序后进程之间共享的不仅仅是处理机还有主存储器。然而共享主存会形成一些特殊的挑战 若不对内存进行管理则容易导致内存数据的混乱以至于影响进程的并发执行 因此为了更好地支持多道程序并发执行必须进行内存管理 2页式管理中每个页表项大小的下限如何决定 页表项的作用是找到该页在内存中的位置 以32位逻辑地址空间、字节编址单位、一页4KB为例 地址空间内共含有 232 B / 4KB 1M 页需要 log21 M 20 位才能保证表示范围能容纳所有页面 又因为以字节作为编址单位即 页表项的大小 ≥ ⌈20 / 8⌉ 3B 当然也可选择更大的页表项大小让一个页面能够正好容下整数个页表项以方便存储 例如取成4B一页正好可以装下1K个页表项)或增加一些其他信息。 3多级页表解决了什么问题 又会带来什么问题 多级页表解决了当逻辑地址空间过大时页表的长度会大大增加的问题 而采用多级页表时一次访盘需要多次访问内存甚至磁盘会大大增加一次访存的时间 无论是段式管理、页式管理还是段页式管理读者都只需要掌握下面3个关键问题 ① 逻辑地址结构② 表项结构③ 寻址过程 搞清楚这三个问题就相当于搞清楚了上面几种存储管理方式。再次提醒读者区分逻辑地址结构和表项结构 1为什么要引入虚拟内存 上一节提到过多道程序并发执行不仅使进程之间共享了处理器而且同时共享了主存 然而随着对处理器需求的增长进程的执行速度会以某种合理平滑的方式慢下来 但是若同时运行的进程太多则需要很多的内存当一个程序没有内存空间可用时那么它甚至无法运行 所以在物理上扩展内存相对有限的条件下应尝试以一些其他可行的方式在逻辑上扩充内存。 2虚拟内存空间的大小由什么因素决定 虚存的容量要满足以下两个条件 ① 虚存的实际容量 ≤ 内存容量和外存容量之和这是硬件的硬性条件规定的若虚存的实际容量超过了这个容量则没有相应的空间来供虚存使用② 虚存的最大容量 ≤ 计算机的地址位数能容纳的最大容量 假设地址是 32 位的按字节编址一个地址代表 1B 存储空间则 虚存的最大容量 ≤ 4GB (232 B) 这是因为若虚存的最大容量超过 4GB则 32 位的地址将无法访问全部虚存也就是说 4GB 以后的空间被浪费了相当于没有一样没有任何意义 实际虚存的容量是取条件①和②的交集即两个条件都要满足仅满足一个条件是不行的。 3虚拟内存是怎么解决问题的 会带来什么问题 虚拟内存使用外存上的空间来扩充内存空间 通过一定的换入/换出使得整个系统在逻辑上能够使用一个远远超出其物理内存大小的内存容量 因为虚拟内存技术调换页面时需要访问外存会导致平均访存时间增加若使用了不合适的替换算法则会大大降低系统性能。 本节学习了4种页面置换算法要把它们与处理机调度算法区分开 当然这些调度算法之间也是有联系的它们都有一个共同点即通过一定的准则决定资源的分配对象 在处理机调度算法中这些准则比较多有优先级、响应比、时间片等而在页面调度算法中就比较简单即是否被用到过或近段时间内是否经常使用 在操作系统中几乎每类资源都会有相关的调度算法读者通过将这些调度算法作为线索可把整个操作系统的课程连成一个整体。