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

news2024/10/2 6:28:30

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380432.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

装修的正确顺序是什么?

装修的正确顺序可以概括为以下几个步骤:1.设计阶段:根据你的需求和预算,设计师会提供多个方案供你选择,确定最终的设计方案。2.拆除阶段:清除室内所有旧的装修材料,包括地板、瓷砖、灯具、门窗等&#xff0…

Windows Server 2016搭建文件服务器

1:进入系统在服务器管理器仪表盘中添加角色和功能。 2:下一步。 3:继续下一步。 4:下一步。 5:勾选Web服务器(IIS) 6:添加功能。 7:下一步。 8:下一步。 9:下一步。 10&a…

视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记

本讲目标 ●理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。 ●学握Eigen库的矩阵、几何模块使用方法。 旋转矩阵、变换矩阵 向量外积 向量外积(又称叉积或向量积)是一种重要的向量运算,它表示两个向量所形成的平行…

2023你还不会稳定性测试?这篇文章彻底讲透了

稳定性对产品的重要性不言而喻。 而作为质量保障,在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力,7*24小时长时间运行,关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势,以及各种资源是…

浅浅谈一谈B树和B+树

目录: 🚀1.B树 🚀2.B树 索引背后的数据结构是啥呢,是B树,是为了数据库索引设计的,我们可以先了解B树,再说B树 1.什么是B树 B树也叫B-树,这里的-不读减,是一个符号 我们已经学过了二叉搜素树,B树其实就是N叉搜素树,二叉搜索树只能在每一个结点放一个…

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被…

C++---最长上升子序列模型---合唱队形(每日一道算法2023.3.1)

注意事项: 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 和 “最长上升子序列模型—登山” 的扩展题,所以dp思路这里就不再赘述。 题目: N位同学站成一排,音乐老师要请其中的 (…

【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象

构造函数(初始化列表)前提构造函数体赋值初始化列表explicit关键字static成员概念特性(重要)有元友元函数友元类内部类匿名对象构造函数(初始化列表) 前提 前面 六个默认成员对象中我们已经学过什么是构造…

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

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

【博学谷学习记录】超强总结,用心分享丨人工智能 深度学习 神经网络基础知识点总结

目录神经网络激活函数引入激活函数原因:sigmoid激活函数tanh 激活函数ReLU 激活函数(最常用)SoftMax如何选择反向传播参数初始化方法优化方法正则化批量归一层网络模型调优的思路神经网络 简单的神经网络包括三层:输入层&#xf…

CentOS8基础篇10:网络环境配置

管理员为了能够更好的管理和维护网络,需要配置服务器的网络环境,再将服务器部署到网络环境中。为此他需要完成以下工作: 设置临时主机名为Server。 设置网卡信息:IP地址为192.168.137.5,子网掩码是255.255.255.0&#…

Docker 安装GitLab学习笔记

1.环境准备 1.1安装虚拟机 采用Vitualbox7.0安装ubuntu-22.04.1-live-server-amd64 虚拟机网络连接方式:桥接网卡 固定局域网ip:192.168.10.102 1.2.安装Docker 参考:https://www.runoob.com/docker/ubuntu-docker-install.html 采用手动…

Android Button修改背景颜色及实现Button水波纹效果

Android Button修改背景颜色及实现Button水波纹效果,效果如下: 以下基于API33(Android13.0),向下兼容至API24(Android7.0)。 1.修改Button背景 我们可以发现在布局xml文件中直接修改backgroun…

(Trie Tree)字典树

(Trie Tree)字典树 场景:在n个字符串中查找某个字符串。 暴力匹配,时间复杂度为O(nm),m为字符串平均长度,效率过低。 字典查找单词"fly",首先查找’f’,然后…

LeetCode算法复杂度分析(时间复杂度空间复杂度)

文章目录前言时间复杂度1.概述2.大O记法3.常见类型空间复杂度1.概述2.常见类型典型算法的复杂度分析1.递归算法2.哈希表前言 我们知道,研究算法的最终目的就是如何花更少的时间,如何占用更少的内存去完成相同的需求。 时间复杂度 1.概述 我们要计算算…

分享一篇由C语言实现《数据结构》无头无循环单链表

三月,你好,各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作(增,删,查,改,销毁,遍历)1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…

python如何快速采集美~女视频?无反爬

人生苦短 我用python~ 这次康康能给大家整点好看的不~ 环境使用: Python 3.8 Pycharm mou歌浏览器 mou歌驱动 —> 驱动版本要和浏览器版本最相近 <大版本一样, 小版本最相近> 模块使用: requests >>> pip install requests selenium >>> pip …

暑期实习准备——Verilog手撕代码(持续更新中。。。

暑期实习准备——手撕代码牛客刷题笔记Verilog快速入门VL4 移位运算与乘法VL5 位拆分与运算VL6 多功能数据处理器VL8 使用generate…for语句简化代码VL9 使用子模块实现三输入数的大小比较VL11 4位数值比较器电路VL12 4bit超前进位加法器电路VL13 优先编码器电路①Verilog进阶挑…

Scala-模式匹配

基本语法 模式守卫 匹配类型 匹配对象 Scala 中的模式匹配类似于 Java 中的 switch 语法 基本语法 模式匹配语法中&#xff0c;采用 match 关键字声明&#xff0c;每个分支采用 case 关键字进行声明&#xff0c;当需 要匹配时&#xff0c;会从第一个 case 分支开始&#…

C++学习笔记-内存空间

考虑这样一种情况&#xff0c;当我们使用相同的名称&#xff0c;叫Zara的两个人在同一个班级。我们需要明确区分它们将不得不使用一些额外的信息&#xff0c;如他们的名字&#xff0c;如他们生活在不同的区域或母亲或父亲的名字等等。 同样的情况也出现在C应用程序中。例如&am…