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

news2024/9/29 3:19:58

目录

三、第三章——内存管理

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,操作系统是专业滴!)

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

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/906545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[b01lers2020]Life on Mars1

打开靶场 直接bp抓包 多次点击左侧超链接 发现/query?search这个参数一直在发生改变 可以发现它返回了json格式的数据,猜测是sql注入 放进hackbar进行操作 orderby进行判断 http://6f5976a0-0364-4c05-a7f5-6f0c863e7e41.node4.buuoj.cn:81/query?searchamazonis…

铜矿人员定位安全方案

针对铜矿中的人员定位安全需求,可以采用以下方案: 1.实时人员定位系统:建立一个实时人员定位系统,通过在矿工的工作服或安全帽上安装UWB或RFID定位设备,以及相应的接收器和基站,实时跟踪和定位矿工的位置。…

苍穹外卖 day2 反向代理和负载均衡

一 前端发送的请求,是如何请求到后端服务 前端请求地址:http://localhost/api/employee/login 路径并不匹配 后端接口地址:http://localhost:8080/admin/employee/login 二 查找前端接口 在这个页面上点击f12 后转到networ验证&#xff0…

高并发内存池(PageCache)[3]

原理 PageCache 共128页 static const size_t NPAGES 128;centralcache向pagecache申请2page时,首先向下扫描,有大的会切分出来,然后再挂在对应桶当中 centralcache从pagecache获取span 计算一次获取几页 static const size_t PAGE_SH…

Servlet+Jsp+JDBC实现房屋租赁管理系统(源码+数据库+论文+系统详细配置指导+ppt)

一、项目简介 本项目是一套基于ServletJsp房屋租赁管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,…

如何最简单、通俗地理解什么是机器学习?

那就究竟什么是学习呢?诺贝尔经济学奖和图灵奖双料得主、卡耐基梅隆大学的赫伯特 西蒙 (Herbert Simon) 教授是这样定义的:“学习是系统通过经验提升性能的过程”。可以看到,学习是一个过程,并且这里有3个关键词,即经验、提升和…

【万能模型训练方法】你没看错,就这么简单

1. 只支持DF结构(Liaef结构特殊,不支持true face机制) 2. dst丢各种人脸数据进去,越杂越好,src保持单人数据 3. 训练时把true face参数打开,推荐0.01 你可以在别的DF预训练模型上,按上述方法练。然后就挂机练&#xff…

GaussDB之应用无损透明(ALT)

1. 背景 GaussDB作为一款企业级分布式数据库,提供了“同城跨AZ双活、两地三中心、双集群强一致”等极致的高可用容灾能力。当某个数据库节点由于故障无法对外提供服务时,为了继续保证数据库服务的可用性,JDBC驱动会将业务后续的数据库连接请…

Python入门--变量和数据类型

什么是变量? 在编程中,变量是指内存中的一段存储空间,用于存储数据。使用变量可以方便地存储数据并在程序中进行操作。 如何定义变量? 在Python中,可以使用“”符号来定义变量,例如: a 1 b …

python刷小红书流量(小眼睛笔记访问量),metrics_report接口,原理及代码,以及x-s签名验证2023-08-21

一、什么是小眼睛笔记访问量 如下图所示,为笔记访问量。 二、小眼睛笔记访问量接口 1、url https://edith.xiaohongshu.com/api/sns/web/v1/note/metrics_report 2、payload data{"note_id": note_id,"note_type": note_type,"report_t…

Linux解决RocketMQ中NameServer启动问题

启动步骤可以查看官网,https://github.com/apache/rocketmq 一下说明遇到的问题。 1:ROCKETMQ_HOME问题 根据官网提示进入mq/bin目录下,可以使用./mqnamesrv进行NameServer启动,但是会遇到第一个问题,首次下载Rocket…

变量与条件语句

目录 1、何为变量 变量的基础知识 1.1、取名字 1.2、弱引用和强引用 1.3、read -p 1.4、变量的作用范围 1.5、运算(整数) 1.6、环境变量 1.7、位置变量 1.8、预设变量 2、条件语句 2.1、测试 2.1.1、比较整数数值 2.1.2、字符串比较 2.1.…

“智能监测”进泵房,管理开了“千里眼”

生活水泵房和消防水泵房作为楼宇中的主要基础设施之一,传统的生活水泵房和消防水泵房操作繁琐,需要人工控制,耗费大量成本。泵房的监测和维护工作困难,存在隐患无法及时发现和解决。此外,泵房的设备老化和能效低下&…

积跬步至千里 || 矩阵可视化

矩阵可视化 矩阵可以很方面地展示事物两两之间的关系,这种关系可以通过矩阵可视化的方式进行简单监控。 定义一个通用类 from matplotlib import pyplot as plt import seaborn as sns import numpy as np import pandas as pdclass matrix_monitor():def __init…

[C++ 网络协议编程] 域名及网络地址

1. DNS服务器 DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。 我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地…

图论基础和表示(Java 实例代码)

目录 图论基础和表示 一、概念及其介绍 二、适用说明 三、图的表达形式 Java 实例代码 src/runoob/graph/DenseGraph.java 文件代码: src/runoob/graph/SparseGraph.java 文件代码: 图论基础和表示 一、概念及其介绍 图论(Graph Theory)是离散数…

之前windows安装mysql时没有指定配置文件,现需修改默认端口号

一、之前windows安装mysql 在官网下载指定版本的mysql https://downloads.mysql.com/archives/community/ 我下载的绿色版的mysql解压到了D:\mysql-5.7.29-winx64 在系统变量中新建MYSQL_HOME它的值为D:\mysql-5.7.29-winx64 在系统变量中找到Path然后编辑添加%MYSQL_HOME%\…

开学有哪些好用电容笔值得买?ipad触控笔推荐平价

因为有了Apple Pencil,使得iPad就成了一款便携的生产力配件,其优势在于,电容笔搭配上iPad可以让专业的绘画师在iPad上作画,而且还能画出各种粗细不一的线条,对于有书写需求的学生党来讲,还是很有帮助的。但本人不敢想像…

多线程+隧道代理:提升爬虫速度

在进行大规模数据爬取时,爬虫速度往往是一个关键问题。本文将介绍一个提升爬虫速度的秘密武器:多线程隧道代理。通过合理地利用多线程技术和使用隧道代理,我们可以显著提高爬虫的效率和稳定性。本文将为你提供详细的解决方案和实际操作价值&a…

【1-3章】Spark编程基础(Python版)

课程资源:(林子雨)Spark编程基础(Python版)_哔哩哔哩_bilibili 第1章 大数据技术概述(8节) 第三次信息化浪潮:以物联网、云计算、大数据为标志 (一)大数据 大数据时代到来的原因…