内存的基础知识

image-20221117105044716

什么是内存?有何作用?

image_d168758b.png

存储单元

  • 关于存储单元有关内容在我写的组成原理笔记中有提到:[存储单元][Link 7]
    image_91cacf88.png

几个常用数量单位&内存地址

image_d3d2651f.png

进程运行的基本原理

指令的工作原理—操作码+若干参数(可能包含地址参数)

  • 从X=X+1大致看一下指令的执行过程
    image_94570427.png
    image_c7cdfe84.png
    image_46cd5541.png
    image_ba8e8b22.png

逻辑地址&物理地址

image_304a6b0c.png

从写程序到程序运行—编译、链接、装入

image_59632d2f.png

装入模块装入内存

不修改装入模块中的指令地址就直接装入内存的话:
image_346a05b3.png
image_814ef28f.png

装入的三种方式

绝对装入

image_d065311d.png

静态重定位

image_ddeef158.png

动态重定位

image_43bc81d8.png
image_ed478d65.png
image_09e804ed.png

链接的三种方式

静态链接

image_65f54cc0.png

装入时动态链接

image_11362ca8.png

运行时动态链接

image_514aca2b.png

内存管理的概念

image_7626b1db.png

内存空间的分配与回收

image_3d34c270.png

内存空间的扩展(实现虚拟性)

image_dadcfb2a.png

地址转换

image_ac2b1a0e.png

三种装入方式

image_4d257a82.png

内存保护

image_c0db5742.png

两种方式

image_6a8bd721.png
image_69d0b3ef.png

覆盖与交换技术

image_92942818.png
image_9cf5e39a.png

覆盖技术

image_34ae94d3.png
image_1255d187.png

交换技术

image_19373b75.png

  • 回忆复习一下进程调度
    image_b811ebf3.png
    image_dd65ddba.png

内存的分配与回收

image_db33e8c5.png
image_2e27c118.png

单一连续分配

image_a4dec170.png

固定分区分配

image_c8a764f0.png

分区说明表

image_9fe9a508.png

动态分区分配(可变分区分配)

image_5b416476.png
image_334eef43.png
image_c6610682.png
image_1aac2528.png

记录内存使用的数据结构

image_4d7d877c.png

动态分配算法

image_caeb48c1.png

分区的分配和回收操作

如何分配?
image_26e56778.png
image_c51d9900.png
image_23e23471.png
如何回收?
image_a60e8a7f.png
image_d5597603.png
image_5cdb1db9.png
image_c8a27166.png

内部碎片与外部碎片

image_c9d97957.png
image_b42a594c.png

动态分区分配算法

image_0c800138.png

首次适应算法

image_14b94f5b.png
image_2634d983.png
image_370f543d.png

最佳适应算法

image_7fc21055.png
image_d90bf9b4.png
image_3e637618.png

最坏(大)适应算法

image_7f1efde6.png
image_7fe141f1.png
image_1e061d2d.png
image_8986ac1c.png

临近适应算法

image_48cbaf7d.png
image_2252be5e.png
image_8a0b8c0b.png
image_63d27ee1.png
image_94fb70d1.png

四种算法归纳比较

image_777d13e8.png

分页存储

image_22d95bc0.png

image_6e36877f.png

为什么学习分页存储?

image_3289309c.png

基本分页存储管理的思想

image_518dece2.png

分页存储管理的重要概念

image_52b53452.png

如何实现地址的转换

image_bc7c858a.png
image_13da92f4.png

image_d13e58b1.png

如何计算页号和页偏移量

image_1d85cbce.png
为什么页面大小一般设为2的整数次幂?
image_438e1081.png
image_a075c1e9.png

分页存储的逻辑结构

image_0023257a.png

如何知道页面在内存中的起始地址?

  • 这里引入一个新的概念:页表
    image_acef4b80.png
    image_ca89847c.png

分页存储的地址变换机构

image_4e81b6f1.png

image_8012727b.png

页表寄存器

image_afca7334.png

地址变换过程

image_1af6e9fb.png

image_7b1add35.png
image_c63ad6ea.png
一道例题加深印象:
image_c5d75cad.png

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

image_e9df45b5.png

快表的地址变换机构

image_5019d8f8.png

局部性原理引入快表机制

image_2429a47c.png

快表(TLB)

image_6112fc81.png

image_3904bd71.png
引入快表后,地址变换的过程的文字描述:
image_25003847.png

基本地址变换与快表地址变换的比较

image_f341e4fc.png

二级页表

image_141beb2b.png

为什么引入二级页表?

因为单级页表存在一些问题,所以引入二级页表和多级页表,有两个问题:

image_f9649de5.png
image_bfcde306.png
上面提到了这两个问题,那么总结一下,并提出解决思想,引入二级页表的概念。
image_2539bd02.png

二级页表的原理和地址结构

  • 对页表再次分组
    image_5e9b5783.png
  • 二级页表的地址结构及对应关系
    image_031c83e8.png

二级页表的地址变换

image_2ff56818.png
上面的部分我们解决了问题一,接下来是问题二,这里简单叙述一下,后面的文章会继续深入剖析。
image_41de1ed9.png

几个小细节

image_7495205b.png

基本分段存储管理

image_0da4fb95.png

image_be167d87.png

什么是分段?

image_6c1963b5.png

分段的逻辑地址结构

image_3c927630.png

段表

image_c1d6bb76.png

地址变换

image_59948b38.png

image_e53a1bbc.png

分段、分页管理的对比

image_836df070.png
image_f24f92ea.png

分段实现信息共享共享

image_6ce23908.png

分页不方便实现信息共享和保护

image_2c92b5c6.png

段页式存储管理

image_919ff2eb.png
image_90289c02.png

分页、分段的优缺点分析

image_68419e65.png
image_82b2bae7.png

段页式管理的概念

image_d5247f45.png

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

image_f3a6915b.png

段页式存储的段表、页表

image_4341dc8d.png

段页式管理的地址转换过程

image_6520be34.png

虚拟内存的基本概念

image_6c7706a3.png
image_5d832192.png
image_52d5f86d.png

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

image_eb114ae6.png

局部性原理

image_3b676dd2.png

虚拟内存的定义和特征

image_80d07a76.png
image_3a2c52b7.png

如何实现虚拟内存技术

image_e73e806c.png

请求分页管理方式

image_a1b982d7.png

请求分页的基本概念

image_ea43a9a1.png

页表机制—请求页表与基本页表的区别

image_72bd33c9.png

缺页中断机构

image_c89c0dfe.png

image_9df0665b.png
image_39b4818d.png
image_ab75f849.png
image_1b211cef.png

地址变换机构

image_1873ea8e.png
image_aa175066.png
image_4eac165b.png
image_c7749c33.png

页面置换算法

image_62a1c7fe.png
image_2828eb6c.png

最佳置换算法—OPT

image_8a50259c.png
image_c115b670.png
image_2bf23b98.png

先进先出置换算法—FIFO

image_9024bb04.png
image_5153dcbc.png

最近最久未使用置换算法—LRU

image_ed797ef1.png

image_de17e607.png
image_0c5300e6.png

时钟置换算法—CLOCK

image_4ee14b22.png
image_a2d95cc4.png
image_ac2da07c.png

改造型时钟置换算法

只需一轮:
image_f3bc449a.png
需要两轮:image_357fb129.png
需要三轮:image_d6d6e8d1.png
image_a8b95cbb.png
需要四轮:
image_90f69fd7.png
image_2026a51e.png
image_65e2fe4f.png
image_72804f81.png

页面分配策略

image_070fa684.png

image_b3f97bbf.png

驻留集

image_84c8b0aa.png

页面分配、置换策略

image_eae8f005.png

image_c415aecb.png
image_e94152a0.png

何时调入页面?

image_a08cd803.png

从何处调页?

image_670f7ee9.png
image_dbf05d0d.png
image_c3fde445.png

抖动(颠簸)现象

image_554fbeee.png

工作集

image_fb06445e.png