操作系统-笔记-第三章-内存管理

🌸章节汇总 

一、第一章——操作系统的概念

二、第二章——【进程】

二、第二章——【线程】​编辑

二、第二章——【进程调度】

二、第二章——【进程同步与互斥】

二、第二章——【锁】

三、第三章——内存管理

四、第四章——文件管理

五、第五章——输入输出管理

​​​​​​​🚀 学习心得

目录

三、第三章——内存管理

1、内存的基础知识

(1.1)程序装入(三种)——绝对装入

(1.2)程序装入(三种)——可重定位装入

(1.3)程序装入(三种)——动态重定位

(2)程序——exe的由来

(3)程序——链接方法

(4)总结

2、内存管理的概念

(1)内存空间的分配和回收

(2)内存空间的拓展(比如:虚拟内存等)

(3)地址转换(逻辑地址-物理地址)

(4)内存保护

3、内存——覆盖与交换

(1)覆盖技术(已经out了)

(2)交换技术

(3)交换技术——对应的问题

(4)总结(考选择题)

4、连续分配管理方式

(1)单一连续分配

(2)固定分区分配

(3)动态分区分配

(4)总结

5、动态分区分配——算法(详细讲解)

(1)首次适应算法(第一次)

(2)最佳适应算法(从小到大)

(3)最坏适应算法(从大到小)

(4)临近适应算法(从大到小)

(5)总结(优缺点)

6、基本分页存储——概念

(1)页框——物理块——内存块——物理页面

(2)逻辑地址-结构【页号+页内偏移量】

(3)总结——概念

(4)重点——地址变换过程(五步)

(5)重点——例题

(6)重点——页表(如何存储在内存中)

(7)总结——地址变换

7、快表(TLB)

(1)查询过程——1(先快表,再慢表,最后内存)

(2)查询过程——2(同时查找-快表-慢表)

(3)局部性原理

(4)总结 (TLB和高速缓存有区别!!!)

8、两级页表(开始套娃啦)

(1)从一级—二级—偏移量(转到物理地址)

(2)单级页表

(3)细节重点

(4)总结

9、段页式管理方式

(1)段表

(2)查询段表——顺序

(3)分段 & 分页 【对比】

(4)总结

10、虚拟内存

(1)传统存储管理方式——特征、缺点

(2)虚拟内存——定义、特征

(3)如何实现——虚拟内存

(4)总结

11、请求页面——管理方式

(1)缺页中断(内中断)

(2)地址变换

(3)总结

12、页面置换算法

(1)最佳置换算法(无法实现)

(2)先进先出算法(绝对公平——Belady异常)

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

(4)时钟页面置换算法(CLOCK & NRU)

(5)时钟页面置换算法——改进型

(6)总结(要会手推——页面替换)

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

(1)工作集模型(清华教程)

 (2)驻留集——分配策略【王道】

(3)何时调入页面(亡羊补牢 or 未雨绸缪)

(4)在哪里调入?(经典加一层)

(5)抖动现象

(6)工作集(拓展-考试貌似不考~)

(7)总结

13、内存映射文件

(1)方便程序员——访问文件数据

(2)共享数据——同时访问一个文件

(3)总结(关于磁盘的IO,操作系统是专业滴!)


三、第三章——内存管理

1、内存的基础知识

相关知识点

逻辑地址——相对地址

物理地址——绝对地址

(1.1)程序装入(三种)——绝对装入

灵活性差,已经被淘汰了~

(1.2)程序装入(三种)——可重定位装入

在装入时——会转换好地址~(写死了物理地址,不能移动咯!)

(1.3)程序装入(三种)——动态重定位

现在使用方法——可以动态修改,灵活移动,动态申请空间…

(2)程序——exe的由来

1.    编写源代码:首先,您需要使用文本编辑器编写C语言源代码文件,通常以.c为扩展名。

2.    编译源代码:接下来,您需要使用C编译器将源代码编译为机器可以执行的目标代码。这个过程称为编译。编译器会对源代码进行词法分析、语法分析和语义分析,并生成相应的目标代码文件(通常以.obj为扩展名)。

3.  链接目标代码:在生成目标代码后,您需要使用链接器将目标代码与所需的库文件进行链接,以创建最终的可执行文件。链接器会解决函数和变量引用之间的依赖关系,并将目标代码转换为可执行文件的格式。最终生成的可执行文件通常以.exe(对于Windows系统)或无扩展名(对于Linux系统)为扩展名。

4.    运行可执行文件:一旦可执行文件生成成功,您可以直接执行它。

(3)程序——链接方法

(4)总结

2、内存管理的概念

(1)内存空间的分配和回收

如何分配?如何回收?还有哪些空闲?这么多位置,应该分配哪一块?

(2)内存空间的拓展(比如:虚拟内存等)

内存不够用,如何临时拓展?

(3)地址转换(逻辑地址-物理地址)

地址转换功能

(4)内存保护

如何让各进程之间,拥有自己的地皮,互不影响!

3、内存——覆盖与交换

(1)覆盖技术(已经out了)

程序员来完成——编程麻烦(out)

(2)交换技术

把暂时不需要的进程——拿到外存

(3)交换技术——对应的问题

(4)总结(考选择题)

4、连续分配管理方式

(1)单一连续分配

无外部碎片——但:有内部碎片【内存利用率低】

(2)固定分区分配

把用户空间——划分多个分区~

无外部碎片——但又内部碎片,内存利用率低

 

(3)动态分区分配

没有内部碎片,但有外部碎片!

(不过可以通过【拼凑】等方式,来解决【外部碎片】)

(4)总结

5、动态分区分配——算法(详细讲解)

(1)首次适应算法(第一次)

从头到尾,按顺序扫描!

找到第一个满足的空间,就放进去~

(2)最佳适应算法(从小到大)

这个是强迫症!——必须安排连续的空间(产生难以利用的小碎片)

额外创建一个——空闲分区链表——用来记录空闲空间的大小(从小到大排序!)

每次安排完后,都需要【维护该表】(数据更新,重新排序)

(3)最坏适应算法(从大到小)

和最佳相反——空间排序【从大到小】

缺点——如果来个了“大进程”——可能没有足够大的连续空间给他!

(4)临近适应算法(从大到小)

从小到大的【循环链表】

开销小【空间换时间】——但是——大分区容易被用完~

(5)总结(优缺点)

6、基本分页存储——概念

(1)页框——物理块——内存块——物理页面

Page Frame —— 页框(标准点)

物理块号——页帧号——内存块号

页表——存储【逻辑地址】与【物理地址】的映射关系

如何计算——页表的大小(根据内存大小推算)【具体步骤——看左下角】

页号不占空间!!!——数组索引【这个页表——类似于一维数组~】

为了计算机计算——页面大小用2的【整数幂】

在计算机网络那里类似,计算也是这样,要方便得多~

(2)逻辑地址-结构【页号+页内偏移量】

(3)总结——概念

(4)重点——地址变换过程(五步)

文字说明版本——五步骤

(5)重点——例题

如何将【逻辑地址】——转为【物理地址】

(6)重点——页表(如何存储在内存中)

计算机组成原理——也有讲哟~~~

页表——存放在内存当中——也称为(慢表)

计算页表项——占多少位(最好是2的次方!)实际应用中——方便计算!

(7)总结——地址变换

7、快表(TLB)

查询快表——不需要访存(快表是高速缓存)

(1)查询过程——1(先快表,再慢表,最后内存)

(2)查询过程——2(同时查找-快表-慢表)

(3)局部性原理

(4)总结 (TLB和高速缓存有区别!!!)

普通的Cache会存放各种数据

但是——TLB——只存放页表项的副本!!!

8、两级页表(开始套娃啦)

记住——加一层的解决方式——可以多次套娃!!!(可以不止两层哟~)

(1)从一级—二级—偏移量(转到物理地址)

(2)单级页表

(3)细节重点

条件:40位逻辑地址——知道物理块的大小(4KB)——页表的每一项的大小(4B)

①地址偏移量需要多少位?

总共40位,一个物理块有4KB,(2^12位)——采用2进制表示偏移量:需12位

②还是剩下多少位——用来表示各级页表?40-12 = 28

③怎么分各级页表?随便分?(题目限制:各级页表的大小不能超过一个内存块!

④那么请问一个物理块可以容纳多少页表项?——2^12 / 4 = 2^10

每一级页表的大小不能超过物理块的大小!——那么只能按照内存块最大位数来分咯~

28 分为 10 – 10 – 8 (3级,一级:2^10,二级:2^10,三级:2^8)

当然,可以再分多级也可以啦~(只不过会有更多碎片!)

比如: 28分为 ——7,7,7,7(4级,每级2^7这么大)

详细结题——如下图:

(4)总结

9、段页式管理方式

(1)段表

段号——也可以隐含【类似数组的索引,是隐含的~】

(2)查询段表——顺序

分段中——每个长度不一样!!!

一定要越界检查!!!(段号是否越界?段内地址是否合法?)

(3)分段 & 分页 【对比】

分页——用户不可见——提高利用率——地址空间【一维——映射的物理地址】

分段——用户可见——满足用户需求——地址空间【二维——段名+段内地址】

分页——长度固定——更容易共享&保护

分段——长度不固定——

(4)总结

段表和页表——都存储在内存中——可以成为慢表

他们都可以再往上封装一层——即为:【快表】——加快CPU的查询效率!!!

(注意:这些术语只是方便我们理解,是前人们的智慧结晶~不要被这些术语锁死!)

快表为什么叫快表?因为他快!他在Cache里面,造价高…等等原因!

10、虚拟内存

(1)传统存储管理方式——特征、缺点

一次性——全部放入内存(太大了,可不行!)

驻留性——暂时用不上的(留着内存中,消耗了资源)

(2)虚拟内存——定义、特征

多次性、对换性、虚拟性

(3)如何实现——虚拟内存

【内存的页面】的【换入换出】(怎么实现)?

(4)总结

虚拟内存——是高速缓存技术的拓展!

既然你内存查询,都分了多个级别(Cache里面有三级)(内存里面就再分个级别吧~)

注意:计算机组成原理——在Cache章节,说明Cache的换入和换出!

为什么计算机组成原理那里只介绍了Cache的替换算法呢?

因为,【Cache替换的实现是由【硬件】完成的!

在这里,【内存】由操作系统来管理,自然需要操作系统(系统软件)来实现啊!

虚拟内存是计算机系统中的一种技术,用于将磁盘空间作为辅助内存来扩展主存(RAM)的容量。

它允许操作系统将部分数据移动到磁盘上,并在需要时将其还原回主存。

虚拟内存的设计目的是提供比物理内存更大的地址空间,以及更灵活的内存管理。

虚拟内存与高速缓存是不同的概念。

高速缓存是一种位于处理器和主存之间的存储器层次结构,用于加快对常用数据的访问速度。

而虚拟内存是一种通过存储器映射技术实现的内存扩展机制,用于增加可用的地址空间。

关于计算机组成原理中只介绍了Cache的替换算法而没有涉及虚拟内存的解释,可能是因为计算机组成原理的重点是硬件层面的设计和实现。

因此,在讲解Cache时主要侧重于硬件层面的实现细节,如替换算法、缓存一致性、写策略等。

而虚拟内存的管理是由操作系统来完成的,属于系统软件的范畴,因此在计算机组成原理这门课程中可能没有过多介绍。

需要注意的是,虚拟内存和Cache是不同层次的存储器技术,各自有不同的设计原理和实现方法。虚拟内存的管理涉及到操作系统的内存管理模块,而Cache的管理则由硬件电路来完成。

11、请求页面——管理方式

(1)缺页中断(内中断)

没有需要的页——产生中断

如果有空闲块——直接占用(没有的话,使用页面置换算法~)

(2)地址变换

(3)总结

12、页面置换算法

(1)最佳置换算法(无法实现)

这个是——理想算法(实际应用中,无法实现)

因为——他需要提前知道后面需要访问的页面是什么!(很显然,不能做到)

(2)先进先出算法(绝对公平——Belady异常)

性能差——注意——Belady异常!(随着访问次数增多,缺页次数反而减少!)

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

适用于局部性好的(性能好)——需要硬件支持,开销大

(4)时钟页面置换算法(CLOCK & NRU)

扫描的过程——像一个时钟——不断计数(访问位为:0 / 1)

最近未用算法

最坏情况——扫两轮(一圈多一点)

(5)时钟页面置换算法——改进型

会筛选4轮!(最坏情况下,要转3圈多一点)

1、未访问、未修改

2、未访问、已修改

3、已访问、未修改

4、已访问、已修改

(注意:访问的权利大!排在最后!)

(6)总结(要会手推——页面替换)

PS:并不止这些算法,还有其他替换算法哟~

比如——随机替换算法(和猴子排序类似的有趣,哈哈哈~)

最不常用算法(LFU)——考虑的是访问次数 or 频率

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

(1)工作集模型(清华教程)

工作集——内存的区间(大小)——我觉得成为【工作间还挺好~】

【你活动的空间太大了,不太好】

【你活动的空间太小了,也不太好~】

当你经常卡壳(说明你活动空间小,需要增多活动空间)

当你不卡壳(说明你活得很滋润,浪费了一些空间,需要给你减少空间!)

资本家看了都流泪(┭┮﹏┭┮)~

 

 

 

 

 (2)驻留集——分配策略【王道】

1、开始给你分配固定的大小工作空间

2、动态给你调整(调整又分为内部调整、外部调整)

内部调整(局部)——把你进程内部的物理块变为工作区间

外部调整(全局)——把外部空间(空闲)物理块给你

(3)何时调入页面(亡羊补牢 or 未雨绸缪)

先调入?还是缺了再调入?(具体场景,具体分析~)

(4)在哪里调入?(经典加一层)

在外存中,再套一层(对换区)

方便页面置换(换出来的页面就放到“对换区”)

(5)抖动现象

物理块不够时,频繁访问页面——导致(频繁出现“缺页中断”)

(6)工作集(拓展-考试貌似不考~)

工作集 ≠ 驻留集

驻留集——给定的工作空间

工作集——在工作空间里(加了一个窗口,也就是时间间隔)

因此——驻留集 > 工作集

(7)总结

13、内存映射文件

(1)方便程序员——访问文件数据

传统方式——程序员手动写read、write方法,很麻烦

优化方式——操作系统为我们完成对外存的读和写(相当于操作系统封装了一层~)

我们就可以像——操作C语言那样,完成指定的读入和写入啦~

(2)共享数据——同时访问一个文件

参考Windows上的.txt文件(并不是互斥的哟~)

  1. 我可以用【记事本】打开~
  2. 我还可以用【VsCode】打开~

(3)总结(关于磁盘的IO,操作系统是专业滴!)

什么时候读,什么时候写(可以让操作系统来完成~)这方面的性能可以让操作系统来优化

程序员就可以放开手脚做其他的事情啦~

(当然,对应强迫症的工程师,可以自己来控制和考虑啦~)

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pan_peter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值