【王道操作系统】第三章 内存管理

3.1 内存管理概念

3.1.1 内存的基础知识

  • 内存

    image-20220511205412805
  • 补充:几个常用的数量单位

    image-20220511205530946
  • 指令的工作原理

    image-20220511210415862

    从 #0 开始存放的:

    image-20220511210623857

    不是从 #0 开始存放的:

    image-20220511210812657
  • 装入的三种方式

    1、绝对装入:

    image-20220511211123471

    2、可重定位装入(静态重定位)

    image-20220511211253090

    3、动态运行时装入(动态重定位)

    image-20220511211448592
    image-20220511212626379
  • 从写程序到程序运行

    image-20220511211628787
  • 链接的三种方式

    1、静态链接:

    image-20220511211809236

    2、装入时动态链接:

    image-20220511211904446

    3、运行时动态链接:

    image-20220511211925677

知识回顾与重要考点:

image-20220511212043525

考试频率较低,主要为后续内容做基础

 

3.1.2 内存管理的概念

  • 操作系统对内存进行管理:

    1、内存的空间分配与回收

    image-20220511212318391

    2、内存空间的扩展

    image-20220511212446593

    3、地址转换

    image-20220511212655956

    4、内存保护

    image-20220511213215697

    (1)在CPU中 设置一对上、下限寄存器

    image-20220511212930216

    (2)采用 重定位寄存器(又称 基址寄存器)和 界址寄存器(又称 限长寄存器)进行越界检查

    image-20220511213159812

知识回顾与重要考点:

image-20220511213257344

 

3.1.3 覆盖与交换(大纲已删)

  • 覆盖技术

    image-20220511215041590

    具体例子:

    image-20220511215242798
  • 交换技术

    image-20220511215439094
    image-20220511215514889
    image-20220511215741456
image-20220511215823434

 

3.1.4 连续分配管理方式

image-20220512191543243

单一连续分配

image-20220512191744029

固定分区分配

image-20220512192200903

怎么记录分区的空闲和分配情况?

image-20220512192351587

动态分区分配

image-20220512192541221
image-20220512194059891

第一个问题:

image-20220512192723440

第二个问题:

image-20220512192855170
下一小节介绍

第三个问题:

  • 分配
image-20220512193027205
分配给它大的分区
image-20220512193137306
分配给与它相等大小的分区
  • 回收

对于 进程2(4MB) 进行回收

image-20220512193349027
两个相邻的空闲分区合并为一个

对于 进程3(18MB) 进行回收

image-20220512193547613
两个相邻的空闲分区合并为一个

对于 进程4(4MB) 进行回收

image-20220512193655212

对于 进程2(14MB) 进行回收

image-20220512194059891

 

image-20220512194255381

 

3.1.5 动态分区分配算法

image-20220512194437514

首次适应算法(First Fit)

image-20220512195328228

例:

有一个进程5(15MB)需要分配

image-20220512195422470

又有一个进程6(8MB)

image-20220512195540439

最佳适应算法(Best Fit)

image-20220512195643709

例:

一个新进程(9MB)需要分配,按照算法分配给分区2,修改分区大小为1,再 根据分区大小进行排序

image-20220512195816327

缺点:每次都选最小的分区进行分配,会留下越来越多的、很小的、难以利用的内存块。因此这种方法会产生很多的外部碎片

最坏适应算法(Worst Fit)

image-20220512200031907

例:

假如有一个进程(3MB),分配第一个分区,第一个分区大小变为17;

还有一个进程(9MB),分配第一个分区,第一个分区大小变为8,需要重新排序:

image-20220512200252025

缺点:每次都选最大的分区进行分配,虽然可以让分配后留下的空闲区更大,更可用,但是这种方式会导致较大的连续空闲区被迅速用完。如果之后有“大进程”到达,就没有内存分区可用了。

邻近适应算法(Next Fit)

image-20220512200515676

例:

有一个进程(5MB),分配第二个分区,将分区2的大小由6改为1,不用进行重新排序;

还有一个进程(5MB),从第二个分区开始接着进行查找,分配第三个分区,分区3改为5

image-20220512202317938

知识回顾

image-20220512202335786

 

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

image-20220512202555869
  • 什么叫分页存储
image-20220512203932616
image-20220512203759146

将进程划分的页面分配到页框中:

image-20220512204227279
  • 重要的数据结构

问题:

image-20220512204725976

1、问题一:每个页表项占多少字节?

⭕ 块号:

image-20220512205716253

⭕ 页号:

image-20220512205906404

因此:

image-20220512205959273

2、问题二:如何实现地址的转换?

连续存放时:

image-20220512210122117

分页后:

image-20220512210252057

(1) 子问题:如何确定一个逻辑地址对应的页号、页内偏移量?

image-20220512211106904

(2) 子问题:为何页面大小要取2的整数幂?

image-20220512211439986
image-20220512211905636

总结:

image-20220512212027336
  • 逻辑地址结构
image-20220512212214111

知识回顾与重要考点:

image-20220512212312270

 

3.1.7 基本地址变换机构

image-20220513155148092
image-20220513155307794

如果页号P>页面长度M,说明此时的页号P是非法的,需要抛出一个越界中断(内中断)

若合法,利用页号P和页表始址F进行计算,找到该页号对应的页表项(知道页号、页表始址、每个页表项长度,即可算出页号所对应的页表项所存放的位置)

由内存块号、页内偏移量,最终可得到物理地址

image-20220513162358501

即:

image-20220513162557205

例:

image-20220513163022583

对页表项大小的进一步探讨

image-20220513163626691

image-20220513163920183

知识回顾与重要考点

image-20220513164100542

一维指:要让CPU根据逻辑地址找到物理地址,只需用告诉CPU一个信息,即逻辑地址的值,不需要告诉其他信息。

 

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

image-20220513165828933
  • 什么是快表(TLB)
image-20220513170141795

能否把整个页表放在TLB中?

image-20220513170317247
image-20220513170404720
  • 引入快表后,地址的变换过程
image-20220513170448275
括号( )内前面是页号,后面是偏移量
image-20220513170831979
当进程上处理机运行时,系统会清空快表内的内容
image-20220513171122324

例:

image-20220513171311207
  • 局部性原理
image-20220513171504562

知识回顾与重要考点

image-20220513171535963

3.1.9 两级页表

image-20220513184716968
  • 单级页表存在的问题
image-20220513185829930 image-20220513185906654
  • 如何解决单级页表的问题(问题一)?
image-20220513190123145

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

image-20220513190340914 image-20220513190513898

如何实现地址变换

image-20220513191154257
  • 如何解决单级页表的问题(问题二)?
image-20220513191326664
  • 几个细节
image-20220513191531547
n级页表的 访存次数 是 n + 1 次

知识回顾与重要考点

image-20220513191727448

 

3.1.10 基本分段存储管理

image-20220513191855749
  • 分段:
image-20220513192039599 image-20220513192238798
按字节编址:1个地址对应的是1个字节的大小
  • 段表
image-20220513192500196
  • 地址变换
image-20220513192540296 image-20220513192726293 image-20220513193141118

在分段管理中要对段内地址W(即段内偏移量)进行一个检查(即第④步)

  • 分段、分页管理的对比
image-20220513193532641 image-20220513193650405 image-20220513193844253 image-20220513193926855

知识回顾与重要考点

image-20220513194026986

 

3.1.11段页式管理方式

image-20220515195138050
  • 分页、分段的优缺点
image-20220515195903821

分段管理中产生的外部碎片也可以用“紧凑”来解决,只是需要付出较大的时间代价。

  • 分段 + 分页 = 段页式管理
image-20220515200040701
  • 段页式管理的逻辑地址结构

    image-20220515200221052
  • 段表、页表

image-20220515201122556
一个进程只会对应一个段表,但是一个进程可能对应多个页表
image-20220515201436754 image-20220515201555429

 

3.2 虚拟内存管理

3.2.1 虚拟内存的基本概念

image-20220515201737336
  • 传统存储管理方式的特征、缺点
image-20220515201937541

虚拟存储技术的提出是基于局部性原理的。

  • 局部性原理
image-20220515202250601
  • 虚拟内存的定义和特征
image-20220515202603928
  • 如何实现虚拟内存技术
image-20220515202829364 image-20220515202956542

 

3.2.2 请求分页管理方式

image-20220515203144114
  • 页表机制
image-20220515203335314
  • 缺页中断机构
image-20220515203723988
要访问的页面不在内存(即访问字段为0)

如果内存中有空闲块:

image-20220515203820302

如果内存中没有空闲块:

​ 若页面置换算法选择了2号页面淘汰

image-20220515203959073 image-20220515204318089

​ 2号页面写回外存后,占有的c号块就可以空出来,让给0号页面使用,于是把0号页面调入内存的c号块,更改相应数据

image-20220515204252507

缺页中断:

image-20220515204515255
  • 地址变换机构
image-20220515204626291 image-20220515204841825

image-20220515205030949

image-20220515205226430

知识回顾与重要考点

image-20220515205409367

 

3.2.3 页面置换算法

image-20220519230508756

最佳置换算法(OPT)

image-20220519230740003

例:

image-20220519230852924 image-20220519231003358 image-20220519231057509

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

 

先进先出置换算法(FIFO)

image-20220519231310529

例:

image-20220519231401730

image-20220519231427299

分配三个内存块时,缺页次数:9次

题目改为分配了四个内存块:

image-20220519231710711
因为先进入的进程有可能在后面会经常用到

 

最近最久未使用置换算法(LRU)

image-20220520000302705

例:

image-20220520000514259 image-20220520000543347 image-20220520000602616

 

时钟置换算法(CLOCK)

image-20220520000658116

1、简单的CLOCK算法

image-20220520000822733

例:

image-20220520000906283 image-20220520000918971

第一轮扫描后:

image-20220520000958951

第二轮扫描时,1号页面为0,所以会淘汰1号页面,变为:

image-20220520001208617

接下来依次访问3、4号页面,依次将3、4号页置为1:

image-20220520001319946

接着需要访问7号页面,由于7号页面不在内存中,需要淘汰一个页面,将7号页面放入内存中。从扫描到的位置依次开始扫描,找到第一个为0的页面,并且扫描过的页面置为0。

即3、4号页面由1变为0,找到第一个为0的页面——2号页面:

image-20220520001617039

将2号页面淘汰:

image-20220520001644122

2、改进型的时钟置换算法

image-20220520002656829

例:

  • 第一种情况
image-20220520001939716

第一轮扫描就找到了:

image-20220520002022166
  • 第二种情况:

第一轮扫描:不做修改,找不到(0,0)

第二轮扫描:

image-20220520002156772
  • 第三种情况
image-20220520002230121

第一轮扫描:不做修改,找不到(0,0)

第二轮扫描:找不到(0,1),将扫描过的帧访问位设为0

image-20220520002350658

第三轮扫描:

image-20220520002417115
  • 第四种情况
image-20220520002504224

第一轮扫描:找不到(0,0),不做修改

第二轮扫描:找不到(0,1),将扫描过的帧访问位设为0

image-20220520002527005

第三轮扫描:找不到(0,0),不做修改

第四轮扫描:

image-20220520002607302

知识回顾与重要考点

image-20220520002725374

 

3.2.4 页面分配策略、抖动、工作集

image-20220520154626768
  • 页面分配、置换策略
image-20220520155455388 image-20220520160057021

系统会锁定一些页面,这些页面中的内容不能置换出外存(如:重要的内核数据可以设为“锁定”)

 

  • 何时调入页面
image-20220520160333335

 

  • 从何处调入页面

1、

image-20220520161453623 image-20220520161533502

2、

image-20220520161555563 image-20220520161652359

3、

image-20220520161712933 image-20220520161746928

 

  • 抖动(颠簸)现象
image-20220520161926263

 

  • 工作集
image-20220520162008509

例:

image-20220520162116277

 

知识回顾与重要考点

image-20220520162251131

一般作为选择题考查,有时可能作为大题条件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值