本文已参与「新人创作礼」活动,一起开启掘金创作之路。
第三章 内存管理
前言
- 参考书籍《计算机操作系统》 汤小丹、《2022年 操作系统考研复习资料》 王道。(个人认为王道的书整体顺序安排更合理,更好用)
- B站王道计算机考研 操作系统视频课
- 原本是小张期末考试整理的王道笔记,后来复习过程中使用笔记可以快速的根据目录或者文字检索去查找某个概念、知识点。所以分享给大家,需要文本文件的可以留言评论。
- 思维导图和文字内容是手敲的,所以可能有一些错别字,评论我会修改。
- 如果只是为了期末考试可以看我的这篇操作系统期末考试总结_鬼才小张同学的博客-CSDN博客
3.1.1内存地基础知识
思维导图
一般作为选择题考察
本节内容
什么是内存?有何作用?
内存是用于存放数据的硬件,程序执行前==需要先放到内存中才能被CPU处理==。
补充知识:几个常用的数量单位
进程的运行原理—指令
逻辑地址vs物理地址
从写程序到程序运行
装入模块装入内存
装入的三种方式—绝对装入
装入的三种方式—静态重定位
装入的三种方式—动态重定位
链接的三种方式
- 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
- 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
- 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。
3.1.2内存管理的概念
思维导图
本节不是重点,主要形成大体框架
本节内容
操作系统要管理什么?
- 内存空间的分配和回收
- 内存空间的扩充
- 地址转换
- 储存保护
3.1.3覆盖与交换
思维导图
主要在选择题考察,理解两种技术的思想
本节内容
覆盖技术
eg:
交换技术
3.1.4连续分配管理方式
思维导图
本节内容
==连续分配==:指为用户进程分配的必须是一个==连续的内存空间。==
单一连续分配
固定分区分配
操作系统需要建立一个数据结构—==分区说明表==,来实现各分区的分配与回收。每个表项对应一个分区。
动态分区分配
==动态分区==又称为==可变分区分配==,这种分配方式==不会预先划分内存分区==,而是在进程装入内存时,==根据进程的大小动态地建立分区==,并使分区地大小正好适合进程地需要。因此系统分区的大小和数目是可变。
操作系统用什么样的数据结构记录内存的使用情况:空闲分区表、空闲分区链
当很多个空闲分区都能满足需求时,应选择哪个分区进行分配?
如何进行分区的分配与回收操作
首次适应算法,分配
]
最佳适应算法,分配
回收,两个相邻的空闲分区合并为一个
内部碎片和外部碎片的定义
动画讲解20:00-23:00
3.1.5动态分区分配算法
思维导图
本节内容
这节PPT动画效果更好
首次适应算法
==算法思想:==每次都从低地址开始查找,找到第一个能满足大小的空闲分区。
==如何实现:==空闲分区以地址递增的次序排列。每次分配内存顺序查找==空闲分区链==(或==空闲分区表==)找到大小能满足要求的第一个空闲分区。
最佳适应算法
==算法思想==:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当”大进程“到来时能有连续的大片空间,可以尽可能多的留下大片的空闲区,即,优先使用更小的空闲区。
==如何实现==:空闲分区==按容量递增次序链接==。每次分配内存时顺序查找==空闲分区链==(或==空闲分区表==),找到大小满足要求的第一个空闲分区。
最坏适应算法
==算法思想:==为了解决最佳适应算法的问题—即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲分区,这样分配后剩余的空闲分区就不会太小,更方便使用。
==如何实现==:空闲分区==按容量递减次序链接==。每次分配内存时按顺序查找==空闲分区链==(或==空闲分区表==),找到大小满足要求的第一个空闲分区。
邻近适应算法
==算法思想==:首次适应算法每次都从链头开始查找,这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次查找都从上一次查找结束的位置开始检索,就能解决上述问题。
==如何实现==:空闲分区以地址递增的顺序排列(可以排列成一个循环链表)。每次分配内存时==从上次查找结束的位置开始==查找==空闲分区链==(或==空闲分区表==),找到大小能满足要求的第一个空闲分区。
总结
]
3.1.6基本分页存储管理的基本概念
思维导图
本节内容
连续分配方式的缺点
==连续分配==:为用户进程分配的必须是一个连续的内存空间。
==非连续分配==:为用户进程分配的可以是一些==分散的内存空间==。
==这节主要讲基本分页存储管理==
==把”固定分区分配“改造为”非连续分配版本“==
分页存储管理的基本概念
如何实现地址的转换?使用动态重定位
eg:
为了方便计算页号、页面偏移量,==页面大小==一般设为2的整数幂。
逻辑地址结构
页表
为了能够知道进程的每个页面在内存中存放的位置,操作系统要为==每个进程建立一张页表==。
]
3.1.7基本地址变换机构
思维导图
既有选择题又有大题
本节内容
基本地址变换机构
eg:
]
扩展
3.1.8具有快表的地址变换机构
思维导图
本节内容
局部性原理
快表:最近使用过的页表会放入快表。
引入快表后,地址的变换过程
总结
3.1.9两级页表
思维导图
本节内容
单极页表存在的问题,问题一
两级页表的原理、地址结构
如何实现地址变换
单极页表存在的问题,问题二,使用置换算法
细节
3.1.10基本分段存储管理方式
思维导图
本节内容
分段
进程的地址空间:按照程序==自身的逻辑==关系==划分为若干个段==,每个段都有一个段名(在低级语言中,程序员使用段名来编程),==每段从0开始编址==。
段表
地址变换
分段、分页管理的对比
3.1.11段页式管理方式
思维导图
本节内容
分页、分段的优缺点
段页式管理
段页式管理的逻辑地址结构
**段表和页表:**一个进程对应一个段表,但一个进程可能对应多个页表
3.2.1虚拟内存的基本概念
思维导图
本节内容
传统存储管理方式的特征、缺点
局部性原理
虚拟内存的定义和特征
如何实现虚拟内存技术
3.2.2请求分页管理方式
思维导图
多理解
本节内容
前言
页表机制
缺页中断机构
动画4:40—7:00
[video(video-d5UYNymg-1642320340863)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]
==缺页中断==是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断
地址变换机构
3.2.3页面置换算法
思维导图
本节内容
最佳置换算法
==最佳置换算法==可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面,操作系统无法提前预判页面的访问序列。因此,==最佳置换算法是无法实现的==。
先进先出置换算法
最近最久未使用置换算法
时钟置换算法
改进型的时钟置换算法
总结
3.2.4页面分配策略
思维导图
本节内容
页面分配、置换策略
何时调入页面
从何处调入页面
抖动(颠簸)现象
工作集