当前位置: 首页 > news >正文

王道操作系统课代表 - 考研计算机 第三章 内存管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!!
关于对 “内存管理” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全部要点本人来来回回过了三遍视频),其中还陆陆续续补充了许多内容,所以读者可以相信本篇博客对于考研操作系统 “内存管理” 章节知识点的正确性与全面性;但如果还有自主命题的学校,还需额外读者自行再观看对应学校的自主命题材料

食用说明书:
第一遍学习王道课程时,我的笔记只有标题和截图,后来复习发现看只看图片,并不能很快的了解截图中要重点表达的知识点。
在第二遍复习中,我给每一张截图中 标记了重点,以及 每张图片上方总结了该图片 对应的知识点 以及自己的 思考
最后第三遍,查漏补缺。
所以 ,我把目录放在博客的前面,就是希望读者可以结合目录结构去更好的学习知识点,之后冲刺复习阶段脑海里可以浮现出该知识结构,做到对每一个知识点熟稔于心!
请读者放心!目录展示的知识点结构是十分合理的,可以放心使用该结构去记忆学习!
注意(⊙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 = 1K
  • 220 = 1M
  • 230 = 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. 改进型的时钟置换算法

​ 改进思想:当页面未被修改过,可以直接抛弃,无需写回外存;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3v5cVxVr-1677664822065)(《操作系统》第3章 内存管理.assets/image-20220922202300293.png)]

在这里插入图片描述

小结

在这里插入图片描述


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种页面置换算法,要把它们与处理机调度算法区分开;

​ 当然,这些调度算法之间也是有联系的,它们都有一个共同点,即通过一定的准则决定资源的分配对象;

​ 在处理机调度算法中这些准则比较多,有优先级、响应比、时间片等,而在页面调度算法中就比较简单,即是否被用到过或近段时间内是否经常使用;

​ 在操作系统中,几乎每类资源都会有相关的调度算法,读者通过将这些调度算法作为线索,可把整个操作系统的课程连成一个整体。

相关文章:

王道操作系统课代表 - 考研计算机 第三章 内存管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “内存管理” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全部…...

Cypher中的聚合

深解Cypher中的聚合 值或计数的聚合要么从查询返回,要么用作多步查询下一部分的输入。查看数据模型 CALL db.schema.visualization() 查看图中节点的属性类型 CALL db.schema.notetypeproperties() 查看图中关系的属性类型 CALL db.schema.reltypeproperties() C…...

图注意网络GAT理解及Pytorch代码实现【PyGAT代码详细注释】

文章目录GAT代码实现【PyGAT】GraphAttentionLayer【一个图注意力层实现】用上面实现的单层网络测试加入Multi-head机制的GAT对数据集Cora的处理csr_matrix()处理稀疏矩阵encode_onehot()对label编号build graph邻接矩阵构造GAT的推广GAT 题:Graph Attention Netwo…...

项目成本管理中的常见误区及解决方案

做过项目的人都明白,项目实施时间一般很长,在实施期间总有很多项目结果不尽人意的问题。要使一个项目取得成功,就要结合很多因素一起才能作用,其中做好项目成本的管理就是最重要的步骤之一,下面列出了常见的项目成本管…...

墨天轮2022年度数据库获奖名单

2022年,国家相继从高位部署、省级试点布局、地市重点深入三个维度,颁布了多项中国数据库行业发展的利好政策。但是我们也能清晰地看到,中国数据库行业发展之路道阻且长,而道路上的“拦路虎”之一则是生态。中国数据库的发展需要多…...

仓储调度|库存管理系统

技术:Java、JSP等摘要:随着电子商务技术和网络技术的快速发展,现代物流技术也在不断进步。物流技术是指与物流要素活动有关的所有专业技术的总称,包括各种操作方法、管理技能等,物流业采用某些现代信息技术方面的成功经…...

Canvas入门-01

导读: 读完全文需要2min。通过这篇文章,你可以了解到以下内容: Canvas标签基本属性如何使用Canvas画矩形、圆形、线条、曲线、笑脸😊 如果你曾经了解过Canvas,可以对照目录回忆一下能否回答上来 毕竟带着问题学习最有效…...

运算符优先级

醋坛酸味罐&#xff0c;位落跳福豆 醋&#xff1a;初等运算符&#xff1a; () [] -> . 坛&#xff1a;单目运算符&#xff1a; - ~ – * & ! sizeof 右结合 酸&#xff1a;算术运算符&#xff1a; - * / % 味&#xff1a;位移运算符&#xff1a;>> << …...

微信小程序使用scss编译wxss文件的配置步骤

文章目录1、在 vscode 中搜索 easysass 插件并安装2、在微信开发工具中导入安装的easysass插件3、修改 spook.easysass-0.0.6/package.json 文件中的配置4、重启开发者工具&#xff0c;就可用使用了微信小程序开发者工具集成了 vscode 编辑器&#xff0c;可以使用 vscode 中众多…...

一步一步教你如何使用 Visual Studio Code 编译一段 C# 代码

以下是一步一步教你如何使用 Visual Studio Code 编写使用 C# 语言输出当前日期和时间的代码&#xff1a; 1、下载并安装 .NET SDK。您可以从 Microsoft 官网下载并安装它。 2、打开 Visual Studio Code&#xff0c;并安装 C# 扩展。您可以在 Visual Studio Code 中通过扩展菜…...

vue-cli中的环境变量注意点

在客户端侧代码中使用环境变量只有以 VUE_APP_ 开头的变量会被 webpack.DefinePlugin 静态嵌入到客户端侧的包中。你可以在应用的代码中这样访问它们&#xff1a;console.log(process.env.VUE_APP_SECRET)在构建过程中&#xff0c;process.env.VUE_APP_SECRET 将会被相应的值所…...

2.3数据类型

文章目录1. 命名规则2.字符3.数字4.日期5.图片1. 命名规则 字段名必须以字母开头&#xff0c;尽量不要使用拼音长度不能超过30个字符&#xff08;不同数据库&#xff0c;不同版本会有不同&#xff09;不能使用SQL的保留字&#xff0c;如where,order,group只能使用如下字符a-z、…...

Kafka基本概念

什么是Kafka Kafka是一个消息系统。它可以集中收集生产者的消息&#xff0c;并由消费者按需获取。在Kafka中&#xff0c;也将消息称为日志(log)。 一个系统&#xff0c;若仅有一类或者少量的消息&#xff0c;可直接进行发送和接收。 随着业务量日益复杂&#xff0c;消息的种类…...

使用QueryBuilders、NativeSearchQuery实现复杂查询

使用QueryBuilders、NativeSearchQuery实现复杂查询 本文继续前面文章《ElasticSearch系列&#xff08;二&#xff09;springboot中集成使用ElasticSearch的Demo》&#xff0c;在前文中&#xff0c;我们介绍了使用springdata做一些简单查询&#xff0c;但是要实现一些高级的组…...

taobao.open.account.update( Open Account数据更新 )

&#xffe5;开放平台免费API不需用户授权 Open Account数据更新 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 响应参数 点击获取key和secret 请求示例 TaobaoClient client new DefaultTaobaoClient(url, appkey, sec…...

PT100铂电阻温度传感器

PT100温度传感器又叫做铂热电阻。     热电阻是中低温区&#xfe61;常用的一种温度检测器。它的主要特点是测量精度高&#xff0c;性能稳定。其中铂热电阻的测量精确度是&#xfe61;高的&#xff0c;它不仅广泛应用于工业测温&#xff0c;而且被制成标准的基准仪。金属热…...

蓝桥杯-本质上升序列

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 小蓝特别喜欢单调递增的事物 在一个字符串中如果取出若干个字符&#xff0c;按照在原来字符串中的顺序排列在一起&#xff0c;组成的新的字符串如果是单调递增的&#xf…...

synchronized锁重入验证

文章目录synchronized锁重入验证1. 可重入锁2. synchronized锁重入2.1 本类同步方法内部调用本类其它同步方法2.2 子类同步方法内部调用父类的同步方法2.3 A类的同步方法内部调用B类的同步方法3. synchronized修饰方法写法synchronized锁重入验证 1. 可重入锁 可重入锁&#…...

超简单的计数排序!!

假设给定混乱数据为&#xff1a;3&#xff0c;0&#xff0c;1&#xff0c;3&#xff0c;6&#xff0c;5&#xff0c;4&#xff0c;2&#xff0c;1&#xff0c;9。 下面我们将通过使用计数排序的思想来完成对上面数据的排序。(先不谈负数) 计数排序 该排序的思路和它的名字一样…...

发现新大陆——原来软件开发根本不需要会编码(看我10分钟应用上线)

目录 一、前言 二、官网基础功能及搭建 三、体验过程 01、连接数据源 02、设计表单 03、流程设计 04、图表呈现 05、组织架构设置 五、效率评价 六、小结 一、前言 众所周知&#xff0c;每家公司在发展过程中都需要构建大量的内部系统&#xff0c; 如运营使用的用户…...

【Leedcode】栈和队列必备的面试题(第二期)

【Leedcode】栈和队列必备的面试题&#xff08;第二期&#xff09; 文章目录【Leedcode】栈和队列必备的面试题&#xff08;第二期&#xff09;一、题目&#xff08;用两个队列实现栈&#xff09;二、思路图解1.定义两个队列2.初始化两个队列3.往两个队列中放入数据4.两个队列出…...

Elasticsearch实战之(商品搜索API实现)

Elasticsearch实战之&#xff08;商品搜索API实现&#xff09; 1、案例介绍 某医药电商H5商城基于Elasticsearch实现商品搜索 2、案例分析 2.1、数据来源 商品库 - 平台运营维护商品库 - 供应商维护 2.2、数据同步 2.2.1、同步双写 写入 MySQL&#xff0c;直接也同步往…...

剑指 Offer 14-剪绳子

摘要 ​​​​​​剑指 Offer 14- I. 剪绳子 剑指 Offer 14- II. 剪绳子 II 343. 整数拆分 一、动态规划解析 这道题给定一个大于1的正整数n&#xff0c;要求将n 拆分成至少两个正整数的和&#xff0c;并使这些正整数的乘积最大化&#xff0c;返回最大乘积。令x是拆分出的第…...

泰克示波器|MSO64示波器的应用

泰克新一代示波器MSO64为实例来讲解时频域信号分析技术。MSO64采用全新TEK049平台&#xff0c;不仅实现了4通道同时打开时25GS/s的高采样率&#xff0c;而且实现了12-bit高垂直分辨率。同时&#xff0c;由于采用了新型低噪声前端放大ASIC—TEK061&#xff0c;大大降低了噪声水平…...

1.4 黑群晖安装:SataPortMap和DiskIdxMap两种获取方式

tinycore及安装工具下载&#xff1a;工具&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1CMLl6waOuW-Ys2gKZx7Jgg?pwdchct提取码&#xff1a;chcttinycore&#xff1a;链接&#xff1a;https://pan.baidu.com/s/19lchzLj-WDXPQu2cEcskBg?pwddcw2 提取码&#xff1a;d…...

JVM虚拟机概述(2)

3.JVM 运行时数据区 3.1.1 程序计数器&#xff08;Program Counter Register&#xff09; 是一块很小的内存空间,用来记录每个线程运行的指令位置&#xff0c;是线程私有的,每个线程都拥有一个程序计数器&#xff0c;生命周期与线程一致&#xff0c;是运行时数据区中唯一一个不…...

Intel CSME 简述

SME 算是 Intel X86 PC 上最神秘的部分了,本文根据 us-19-Hasarfaty-Behind-The-Scenes-Of-Intel-Security-And-Manageability-Engine 一文写成。讲述内容无法证伪,各位随便听听即可,了解这些能够帮助BIOS 工程师更好的理解一些操作的实现。文章基于 Intel 第八代第九代CPU(…...

复位理论基础

先收集资料&#xff0c;了解当前常用的基础理论和实现方式 复位 初始化微控制器内部电路 将所有寄存器恢复成默认值确认MCU的工作模式禁止全局中断关闭外设将IO设置为高阻输入状态等待时钟趋于稳定从固定地址取得复位向量并开始执行 造成复位的原因 有多种引起复位的因素&…...

Python基础知识——列表

列表 列表是可以存放任何数据&#xff0c;包括整型&#xff0c;浮点型&#xff0c;字符串&#xff0c;布尔型等等&#xff0c;是常用的数据类型之一。 1.列表的创建 列表也是一个可迭代对象 1. 普通形式l [1,2,3,4,5] ---整型列表l ["a","b","c&…...

如何使用工时表管理项目和非项目的资源?

对新机会做出反应的能力是企业竞争优势的关键。项目不断涌现&#xff0c;企业需要了解具体的可用性以及是否有资源来接受新事物。更进一步来说&#xff0c;企业需要知道员工将时间花在哪里。 使用 8Manage工时表解决方案&#xff0c;你将始终拥有做出正确业务决策所需的全面知…...

wordpress建站模板/宁波专业seo服务

在.NET环境中&#xff0c;非托管系统资源由开发人员来负责释放&#xff0c;且非托管系统资源必须显式的使用IDisposable接口的Dispose()来释放(详见&#xff1a;了解.NET内存管理机制)。所有封装或使用了非托管资源的类型都实现了IDisposable接口。同时这些类也在终结器中调用D…...

专业网站建设搭建/广州市口碑seo推广

打印机用久了难免会出现故障&#xff0c;在打印过程中可能会遇到各种各样的迷惑行为&#xff0c;比如&#xff1a;打印乱码、条纹、黑点、阴影等。今天小编就来给大家说说激光打印机的迷惑行为&#xff1a;打印一半如何解决。原图打印一半01检查打印机 检查打印机查看是否是打印…...

手机做印章网站/上海网站制作推广

public class EqualTest {public static void main(String[] args) {//对于基本类型的变量。""和"equal"的区别int t157;int t267;int t3124;int t4124;//“”对于基本数据类型&#xff0c;判断两个变量的值是否相等。Boolean result1(t1t2);Boolean resul…...

新闻网站哪个做的好/学网络与新媒体后悔死了

vim编辑模式下 没有ctrla 的 全选方式 然后del 切换到 命令模式 :%d 既可...

视频弹幕网站建设/百度平台客服

给大家炒个冷饭&#xff0c;是我在2003年写的一点心得。不过现在来看还是有启发意义的&#xff0c;虽然笔法有些稚嫩 实施分为这几个阶段&#xff1a;1字典准备&#xff0c;系统参数配置2客户化3使用培训4做报表做运行监控5升级更新版本这几部分都挺费时间。为什么&#xff1f…...

药厂网站建设/百度推广优化怎么做

更新&#xff1a;本文现已过时。 请参阅更新的版本&#xff0c; 如何使用HTML5全屏API&#xff08;再次&#xff09; 。 Flash提供全屏模式已经有很多年了&#xff0c;但是直到现在&#xff0c;浏览器供应商都拒绝使用该功能。 主要原因&#xff1a;安全性。 如果您可以强制应用…...