王道考研 操作系统 第三章 内存管理

347 阅读8分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

第三章 内存管理

前言

  • 参考书籍《计算机操作系统》 汤小丹、《2022年 操作系统考研复习资料》 王道。(个人认为王道的书整体顺序安排更合理,更好用)
  • B站王道计算机考研 操作系统视频课
  • 原本是小张期末考试整理的王道笔记,后来复习过程中使用笔记可以快速的根据目录或者文字检索去查找某个概念、知识点。所以分享给大家,需要文本文件的可以留言评论。
  • 思维导图和文字内容是手敲的,所以可能有一些错别字,评论我会修改。
  • 如果只是为了期末考试可以看我的这篇操作系统期末考试总结_鬼才小张同学的博客-CSDN博客

3.1.1内存地基础知识

思维导图

一般作为选择题考察

本节内容

什么是内存?有何作用?

内存是用于存放数据的硬件,程序执行前==需要先放到内存中才能被CPU处理==。

image-20220104152342391

补充知识:几个常用的数量单位

image-20220104152659183

进程的运行原理—指令

在这里插入图片描述

逻辑地址vs物理地址

在这里插入图片描述

从写程序到程序运行

在这里插入图片描述

装入模块装入内存

image-20220104154118186

装入的三种方式—绝对装入

image-20220104154332087

装入的三种方式—静态重定位

image-20220104154608474

装入的三种方式—动态重定位

image-20220104154943743

image-20220104154917289

链接的三种方式

  1. 静态链接:在程序运行之前,先将各目标模块及它们所需的库函数连接成一个完整的可执行文件(装入模块),之后不再拆开。
  2. 装入时动态链接:将各目标模块装入内存时,边装入边链接的链接方式。
  3. 运行时动态链接:在程序执行中需要该目标模块时,才对它进行链接。其优点是便于修改和更新,便于实现对目标模块的共享。

在这里插入图片描述

3.1.2内存管理的概念

思维导图

本节不是重点,主要形成大体框架

image-20220104170259984

本节内容

操作系统要管理什么?

  1. 内存空间的分配和回收

在这里插入图片描述

  1. 内存空间的扩充

在这里插入图片描述

  1. 地址转换

image-20220104165605453

  1. 储存保护

在这里插入图片描述

在这里插入图片描述

3.1.3覆盖与交换

思维导图

主要在选择题考察,理解两种技术的思想

在这里插入图片描述

本节内容

覆盖技术

在这里插入图片描述

eg:

在这里插入图片描述

交换技术

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

3.1.4连续分配管理方式

思维导图

image-20220104211601226

本节内容

==连续分配==:指为用户进程分配的必须是一个==连续的内存空间。==

单一连续分配

在这里插入图片描述

固定分区分配

在这里插入图片描述

操作系统需要建立一个数据结构—==分区说明表==,来实现各分区的分配与回收。每个表项对应一个分区。

在这里插入图片描述

动态分区分配

==动态分区==又称为==可变分区分配==,这种分配方式==不会预先划分内存分区==,而是在进程装入内存时,==根据进程的大小动态地建立分区==,并使分区地大小正好适合进程地需要。因此系统分区的大小和数目是可变。

操作系统用什么样的数据结构记录内存的使用情况:空闲分区表、空闲分区链 img-qyQIc2Dl-1642319123736

当很多个空闲分区都能满足需求时,应选择哪个分区进行分配? img-lZCpOPmp-1642319123737

如何进行分区的分配与回收操作

首次适应算法,分配

img-JTLk6b4R-1642319123738]

最佳适应算法,分配 img-bJ9tehKs-1642319123739

回收,两个相邻的空闲分区合并为一个

img-xBHLWKod-1642319123740 img-rot7n7lR-1642319123740 在这里插入图片描述

img-FGTLInXR-1642319123742

内部碎片和外部碎片的定义

动画讲解20:00-23:00 img-isELr9Cc-1642319123742

3.1.5动态分区分配算法

思维导图

img-fT5CyjTi-1642319123743

本节内容

这节PPT动画效果更好

首次适应算法

==算法思想:==每次都从低地址开始查找,找到第一个能满足大小的空闲分区。

==如何实现:==空闲分区以地址递增的次序排列。每次分配内存顺序查找==空闲分区链==(或==空闲分区表==)找到大小能满足要求的第一个空闲分区。

img-ub3gNx7h-1642319123743

最佳适应算法

==算法思想==:由于动态分区分配是一种连续分配方式,为各进程分配的空间必须是连续的一整片区域。因此为了保证当”大进程“到来时能有连续的大片空间,可以尽可能多的留下大片的空闲区,即,优先使用更小的空闲区。

==如何实现==:空闲分区==按容量递增次序链接==。每次分配内存时顺序查找==空闲分区链==(或==空闲分区表==),找到大小满足要求的第一个空闲分区。

img-5Rhjum4Y-1642319123744

最坏适应算法

==算法思想:==为了解决最佳适应算法的问题—即留下太多难以利用的小碎片,可以在每次分配时优先使用最大的连续空闲分区,这样分配后剩余的空闲分区就不会太小,更方便使用。

==如何实现==:空闲分区==按容量递减次序链接==。每次分配内存时按顺序查找==空闲分区链==(或==空闲分区表==),找到大小满足要求的第一个空闲分区。 img-0xEOe8us-1642319123744

邻近适应算法

==算法思想==:首次适应算法每次都从链头开始查找,这可能会导致低地址部分出现很多小的空闲分区,而每次分配查找时,都要经过这些分区,因此也增加了查找的开销。如果每次查找都从上一次查找结束的位置开始检索,就能解决上述问题。

==如何实现==:空闲分区以地址递增的顺序排列(可以排列成一个循环链表)。每次分配内存时==从上次查找结束的位置开始==查找==空闲分区链==(或==空闲分区表==),找到大小能满足要求的第一个空闲分区。

img-48AFUTVx-1642319123745

总结 img-I7Vq0Qib-1642319123745]

3.1.6基本分页存储管理的基本概念

思维导图

在这里插入图片描述

本节内容

连续分配方式的缺点 img-Pm8OfvPZ-1642319123745

==连续分配==:为用户进程分配的必须是一个连续的内存空间。 ==非连续分配==:为用户进程分配的可以是一些==分散的内存空间==。 ==这节主要讲基本分页存储管理== 在这里插入图片描述

==把”固定分区分配“改造为”非连续分配版本“== img-0jr0BgfD-1642319123746

分页存储管理的基本概念

img-PD5qPsOf-1642319123746

如何实现地址的转换?使用动态重定位 img-Oe8rd3j9-1642319123747

img-etUjQexS-1642319123747

eg:

在这里插入图片描述

为了方便计算页号、页面偏移量,==页面大小==一般设为2的整数幂。

img-fyWEsTTh-1642319123748 img-Ac7YfegJ-1642319123748

逻辑地址结构

img-TthJcMqz-1642319123748

页表

为了能够知道进程的每个页面在内存中存放的位置,操作系统要为==每个进程建立一张页表==。

img-dk56eezG-1642319123749

img-hfJqIMlP-1642319123749]

3.1.7基本地址变换机构

思维导图

既有选择题又有大题

在这里插入图片描述

本节内容

基本地址变换机构

img-pALHXVFW-1642319123750

img-mnd88zEZ-1642319123750

eg:

img-639j19Wv-1642319123751]

扩展

img-UH39xfZL-1642319123751

3.1.8具有快表的地址变换机构

思维导图

img-NFoS0iFn-1642319123752

本节内容

局部性原理 img-foMj1VSy-1642319123752 快表:最近使用过的页表会放入快表。 在这里插入图片描述

引入快表后,地址的变换过程img-fCGFFoZB-1642319123753

总结 img-xTS6y1vD-1642319123753

3.1.9两级页表

思维导图

img-fGP2rM13-1642319123755

本节内容

单极页表存在的问题,问题一

img-JQzP8IiJ-1642319123755

img-AullvRY8-1642319123756

两级页表的原理、地址结构

img-pWT0sXHS-1642319123757 img-anYlvwmH-1642319123758

如何实现地址变换

image-20220105162804576

单极页表存在的问题,问题二,使用置换算法

image-20220105162934609

细节

image-20220105163804385

3.1.10基本分段存储管理方式

思维导图

image-20220105173111145

本节内容

分段

进程的地址空间:按照程序==自身的逻辑==关系==划分为若干个段==,每个段都有一个段名(在低级语言中,程序员使用段名来编程),==每段从0开始编址==。

img-DmdojGbL-1642320064283

img-tMmKWt1U-1642320064284

段表

image-20220105170449849

地址变换

img-SuKp4xl2-1642320064286

img-U967LzO0-1642320064287

分段、分页管理的对比

img-BXGtGQmT-1642320064288

img-dD2xzCOW-1642320064290

image-20220105172317423

image-20220105172420458

3.1.11段页式管理方式

思维导图

在这里插入图片描述

本节内容

分页、分段的优缺点

image-20220105173844164

段页式管理

img-b9VR9M8h-1642320064293

段页式管理的逻辑地址结构

image-20220105174153408

**段表和页表:**一个进程对应一个段表,但一个进程可能对应多个页表

image-20220105174724077

img-dgDwtGx0-1642320064295

3.2.1虚拟内存的基本概念

思维导图

在这里插入图片描述

本节内容

传统存储管理方式的特征、缺点

img-Mmec5qJK-1642320095853

局部性原理

image-20220105204846125

虚拟内存的定义和特征

img-BHkRcC0f-1642320095855

如何实现虚拟内存技术

img-yulmw6Ts-1642320095858

3.2.2请求分页管理方式

思维导图

多理解

image-20220105231922751

本节内容

前言 在这里插入图片描述

页表机制

image-20220105225305306

缺页中断机构

image-20220105225826780

动画4:40—7:00

[video(video-d5UYNymg-1642320340863)(type-bilibili)(url-player.bilibili.com/player.html… 操作系统)]

==缺页中断==是因为当前执行的指令想要访问的目标页面未调入内存而产生的,因此属于内中断

image-20220105230031423

地址变换机构

image-20220105230155994

img-aveAKuIm-1642320095863

img-5kWtxYbU-1642320095863

3.2.3页面置换算法

思维导图

img-VEAyRca6-1642320095864

本节内容

最佳置换算法

img-yhZfsy1r-1642320095864

==最佳置换算法==可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面,操作系统无法提前预判页面的访问序列。因此,==最佳置换算法是无法实现的==。

先进先出置换算法

image-20220105233313217

image-20220105233349424

最近最久未使用置换算法

img-a09QWiRW-1642320095866

时钟置换算法

image-20220105233625784

改进型的时钟置换算法

img-K299ULvU-1642320095867

总结

image-20220106000031805

3.2.4页面分配策略

思维导图

image-20220106131930024

本节内容

页面分配、置换策略

image-20220106125808157

image-20220106130052241

何时调入页面

img-IvaWSWLc-1642320095871

从何处调入页面

image-20220106130548948

抖动(颠簸)现象

img-QqYvsOOt-1642320095891

工作集

image-20220106130828588