【操作系统OS】学习笔记第三章 内存管理【哈工大李治军老师】更新中...

news2024/11/19 15:24:51

基于本人观看学习 哈工大李治军老师主讲的操作系统课程 所做的笔记,仅进行交流分享。

特此鸣谢李治军老师,操作系统的神作!

如果本篇笔记帮助到了你,还请点赞 关注 支持一下 ♡>𖥦<)!!

主页专栏有更多,如有疑问欢迎大家指正讨论,共同进步!

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ


内存管理 目录

  • 第三章 内存管理
  • 课程链接:
  • 一、内存使用与分段
    • 1.重定位
    • 进程交换
    • 2.分段
  • 二、内存分区与分页
    • 1.内存如何分区?
    • 2.分页
  • 三、多级页表与快表
    • 1.多级页表
    • 更新中....后面的下次再写....(●'◡'●)


第三章 内存管理

更多操作系统笔记:【哈工大李治军老师】操作系统

课程链接:

b站: 【哈工大】操作系统 李治军(全32讲)

大学MOOC:大学慕课—操作系统—主讲:哈工大李治军


一、内存使用与分段

程序进入内存,main函数的40地址必须放在物理内存地址

call40要求main放在真实的物理地址:40,程序从0地址开始,让PC等于0开始取指执行

image-20230505104255246

如果另一个程序要运行,也从0地址开始,就会和上面的程序冲突

因此程序应该放在内存中空闲的单元

image-20230505104448778

此时40(逻辑地址)需要修改到1040(物理地址)处,否则内存无法使用

1.重定位

重定位:修改程序中的地址(相对地址)

image-20230505104654262

什么时候进行重定位?

编译时

编译时内存重定位是程序代码在编译为目标代码的过程中,跳转地址被绑定到一个固定的地址上。因此,生成的目标文件可以直接载入内存中执行,不需要进行额外的重定位。

编译时内存重定位适合静态编译的程序 编译时重定位的程序只能放在内存固定位置

载入时

载入时内存重定位是程序在载入内存后,操作系统会将程序的可执行代码、全局变量、动态链接库等资源加载到内存中,并进行地址的映射和调整。在编译期间无需考虑代码的实际内存布局,程序非常灵活

载入时内存重定位适合动态链接的程序,载入时重定位的程序一旦载入内存就不能动了

进程交换

当物理内存不足以满足当前所有正在运行的进程的需求时,操作系统就会将一些运行态进程暂停并将其内存交换到磁盘上,释放出一部分空间来容纳新的进程

image-20230505105529520

重定位最合适的时机:运行时重定位

无论程序放在哪里,在程序运行时,都可以根据逻辑地址40通过地址翻译算出物理地址。

image-20230505105851331

base放在PCB中,执行指令时第一步先从PCB中取出这个基地址

真实物理地址=基地址(起始地址)+偏移(逻辑地址)

进程切换时根据PCB切换一起切换这个基地址

image-20230505110722264

2.分段

程序由代码段组成:

image-20230505120450163

符合用户观点:用户可独立考虑每个段 (分治)

怎么定位具体指令(数据): <段号,段内偏移> 如mov [es:bx],ax

程序的各段分别放入内存:

image-20230505121115510

现在的PCB需要放每个段的基址

image-20230505121059867

GDT是操作系统的段表 每个进程有自己的LDT表

image-20230505121326914

二、内存分区与分页

程序分段->找空闲分区->通过映射表读写

1.内存如何分区?

固定分区 与 可变分区

image-20230505125751704

image-20230505125859303

image-20230505125921227

又一个段提出内存请求:reqSize=40K,怎么办?

目前的空闲分区:

image-20230505130010611

首先适配:选择第一个大小足够的空闲区域进行分配 (350,150)

首先适配简单快速,但会留下许多无法使用的小碎片

最佳适配:选择尺寸最小、且足够容纳当前申请内存的空闲区域进行分配 (200,50)

最佳适配可以避免产生过多的碎片,但需要搜索所有空闲区域,效率相对较低

最差适配:选择尺寸最大、且足够容纳当前申请内存的空闲区域进行分配 (350,150)

差适配可以减少碎片的数量,但占用大内存空间,浪费大量空间

image-20230505130529109

2.分页

内存分区会产生内存碎片 导致有内存使用不了

image-20230505130643040

将空闲分区合并,需要移动1个段(复制内容):内存紧缩 花费时间长

从连续到离散…

不用进行内存紧缩,内存浪费少

image-20230505130943036

页表重定位:

将所有指向旧物理地址的虚拟页面地址替换为对应的新物理页面地址,这样虚拟地址就能够正确映射到新的物理页面上

image-20230505131212638

三、多级页表与快表

分页如果过大会造成浪费,为了提高内存空间利用率,页应该小

但是页小了页表就大了

image-20230506162413853

大部分逻辑地址用不到,我们可以将他从页表中删除,只存放用到的页

image-20230506162444647

但是这种方法,会导致页表中的页号不连续

执行指令进入页表查找,额外访问内存,速度会慢

因此页表一定要连续(通过偏移直接查找),大页表占用内存,造成浪费

如何做到既连续,又要让页表占用内存少?

1.多级页表

用书的章目录和节目录来类比思考:先找章、再找节

多级页表,即页目录表(章)+页表 (节)

image-20230506163707415

2^10个目录项 * 4字节地址 =4K,总共需要16K远远小于4M

多级页表提高了空间效率,但在时间上又出现问题:每增加一级就要多访问一次内存

类比看书的书签,最近看到了哪里,使用快表来弥补:

image-20230506164434802

将最近访问的物理页放在快表中。

快表和多级页表组合在一起的结构保证了多级页表的连续,查找起来也比较快

image-20230506164736819

关键:增大快表 提高命中率

TLB有效的原因: 程序的地址访问具有局部性:

image-20230506164818849




更新中…后面的下次再写…(●’◡’●)

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

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

相关文章

RocketMQ的下载及安装以及历史和发展

目录 RocketMQ历史及发展RocketMQ的下载及安装下载安装windows下的安装下载配置环境变量启动注意事项 控制台插件环境要求下载启动控制台使用文档Linux下的安装环境要求启动注意事项控制台插件 RocketMQ源码安装与调试下载环境要求IntelliJ IDEA导入启动RocketMQ源码 RocketMQ历…

2023天猫运营数据分析:Q1防晒品类行业分析报告

随着防晒观念的普及&#xff0c;日常防晒已逐步成为很多人的习惯。加之今年消费市场日渐复苏&#xff0c;消费者的“报复性出游”也加速了防晒市场的发展。 市场对防晒品类在2023年的表现抱有更高的期待&#xff0c;防晒品类有望成为整个化妆品消费领域复苏较好的赛道。 根据鲸…

项目准备工作、笔试题目讲解

目录 讲一下冯诺依曼体系结构输入的处理 查bug基本步骤 我希望你重点可以讲一讲处理的这个过程&#xff0c;该如何处理呢&#xff1f; 介绍一下Maven Maven如何配置阿里云镜像&#xff1f; 介绍一下springboot 介绍一下mybatis 为什么有些人说mybatis不是很好&#xff1f…

五种网络IO模型:阻塞式IO 非阻塞式IO IO复用(IO multiplexing) 信号驱动式IO 异步IO

文章目录 五种网络IO模型举例说明阻塞式I/O模型非阻塞式I/OI/O多路复用信号驱动式I/O异步I/O比较结果总结同步 异步 阻塞 非阻塞阻塞/非阻塞&#xff1a;同步/异步&#xff1a; 举例子&#xff1a;小宇去新华书店买书场景&#xff1a; 五种网络IO模型 阻塞式IO 非阻塞式IO…

联通云正式启动“同舟计划”,点燃数字引擎赋能产业未来

科技云报道原创。 当数据成为重要生产要素&#xff0c;算力被视为数字时代的核心生产力&#xff0c;以此为基础的“算网融合”将激发数字经济新动能。 作为云计算国家队&#xff0c;联通云在不断寻求技术突破、深度扎根实体产业的过程中&#xff0c;开启了自我持续进化之路。…

微服务 - Kong Http Api 实现负载均衡、jwt认证、限流、黑白名单

建立/激活链接 使用Kong的第一步是激活链接&#xff0c;登录Kong管理后台&#xff0c;找到 Connections&#xff0c;把Kong的Api链接上,因为我本地的端口进行了映射&#xff0c;所以需要找到Docker的network 上的ip&#xff0c;进行绑定, ip 地址 172.19.0.3 docker network …

Java多线程基础-8:单例模式及其线程安全问题

单例模式是经典的设计模式之一。什么是设计模式&#xff1f;代码的设计模式类似于棋谱&#xff0c;棋谱就是一些下棋的固定套路&#xff0c;是前人总结出来的一些固定的打法。依照棋谱来下棋&#xff0c;不说能下得非常好&#xff0c;但至少是有迹可循&#xff0c;不会下得很糟…

JAVA9新特性

JAVA9新特性 概述 ​ 经过4次推迟&#xff0c;历经曲折的Java9最终在2017年9月21日发布。因为里面加入的模块化系统&#xff0c;在最初设想的时候并没有想过那么复杂&#xff0c;花费的时间超出预估时间。距离java8大约三年时间。 ​ Java 9提供了超过150项新功能特性&#x…

RSA加密的原理

一、RSA加密算法的原理 先上公式&#xff1a; 加密过程&#xff1a;其实就是明文的E次方对N取模公钥&#xff1a;&#xff08;E,N&#xff09;解密过程&#xff1a;密文的D次方对N取模私钥&#xff1a;&#xff08;D,N&#xff09;那么以上公式中的E、D、N分别代表什么&#x…

solidworks版本推荐

有不少人在入坑SolidWorks的时候&#xff0c;不知道下载哪一个版本&#xff0c;不清楚SolidWorks哪个版本更好用一些&#xff0c;其实选择适合自己的版本才是关键。那么该如何选择版本呢&#xff1f;不知道如何选择SOLIDWORKS版本的&#xff0c;可以参考以下3个方面。 一、SOL…

自动化测试工具的基本原理以及应用场景

自动化测试工具是现代软件开发流程中必不可少的组成部分&#xff0c;它可以通过编写脚本或使用图形用户界面工具自动化测试过程&#xff0c;提高测试的效率和准确性。本文将介绍自动化测试工具的基本原理以及应用场景。 自动化测试工具的基本原理 自动化测试工具通常采用的原理…

我与smardaten | 百天无码路,苦逼中带点小美好

大家好&#xff0c;我是云华&#xff08;化名&#xff09;&#xff0c;一个不太懂技术的无代码开发者&#xff0c;游走在无码世界的自由闲散人。现今是我从事无码开发的第四个月&#xff0c;已经从小白蜕变成了熟手。前两天&#xff0c;睿睿老师找到我&#xff0c;说最近计划办…

【wpf】枚举的绑定最易用法 和 全局静态绑定的应用

背景 有时我们做配置界面的时候&#xff0c;有很多配置项是枚举。通过我们会用一个Combobox实现&#xff0c;如果能直接用Combobox绑定枚举&#xff0c;那将会非常方便。这里绑定将涉及到两个方面&#xff0c;一个是数据源的绑定&#xff0c;还有就是当前选择项的绑定。最后我们…

每天一道算法练习题--Day23 第一章 --算法专题 --- ----------并查集

背景 相信大家都玩过下面的迷宫游戏。你的目标是从地图的某一个角落移动到地图的出口。规则很简单&#xff0c;仅仅你不能穿过墙。 实际上&#xff0c;这道题并不能够使用并查集来解决。 不过如果我将规则变成&#xff0c;“是否存在一条从入口到出口的路径”&#xff0c;那么…

DDR5内存彻底白菜价,国外大厂却整出了比着火更离谱的骚操作

今年的 PC 硬件市场&#xff0c;似乎出现了明显两极分化现象。 一边是 N、A 两家新显卡价格高高在上&#xff0c;摆明了不坑穷人。 另一边固态硬盘、内存条又在疯狂互卷不断杀价。 四五百元的 2TB SSD&#xff0c;二百元的 16G 内存条早已见怪不怪。 要说面世多年的 PCIe 3.0…

对比 LVS 负载均衡群集的 NAT 模式和 DR 模式,基于 CentOS 7 构建 LVS-DR 群集

1. 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 。 LVS&#xff08;Linux Virtual Server&#xff09;是一个开源的负载均衡软件&#xff0c;它支持多种负载均衡算法&#xff0c;包括 NAT 模式和 DR &#xff08;Direct Routing&#xff09;模式…

【数据分析之道-Matplotlib(二)】Matplotlib 绘图标记

文章目录 专栏导读1、前言2、标记&#xff08;Markers&#xff09;2.1关键词参数marker2.2标记参考&#xff08;Marker Reference&#xff09; 3、Format Strings fmt3.1fmt参数3.2线参考&#xff08;Line Reference&#xff09; 4、标记颜色(Marker Color)4.1关键字参数mec4.2…

《程序员面试金典(第6版)》面试题 16.14. 最佳直线(向量,C++)

题目描述 给定一个二维平面及平面上的 N 个点列表Points&#xff0c;其中第i个点的坐标为Points[i][Xi,Yi]。请找出一条直线&#xff0c;其通过的点的数目最多。 设穿过最多点的直线所穿过的全部点编号从小到大排序的列表为S&#xff0c;你仅需返回[S[0],S[1]]作为答案&#xf…

简述对象检测与图像分类与关键点检测区别

计算机视觉是人工智能的一个多元化领域&#xff0c;旨在检测和识别图像或视频的内容。大多数开始计算机视觉领域之旅的人的常见问题之一是&#xff1a;目标检测、图像分类和关键点检测之间有什么区别&#xff1f; 让我们先看看 什么是对象检测 对象检测是一种计算机视觉和图像…

gateway sentinel 流控规则持久化到 nacos

Sentinel改造 sentinel版本是1.8.6 直接看更新内容, 右侧更新后 GatewayApiController /*** Gateway api Controller for manage gateway api definitions.** author cdfive* since 1.7.0*/ RestController RequestMapping(value "/gateway/api") public class…