Lecture 19: Memory Management 6

STM32F103标准库开发:Keil5新建STM32工程 新建STM32工程 步骤一:创建工程模板文件 新建一个文件夹 template 在文件夹template里面新建五个文件 (1)CMSIS: 存放内核驱动程序和启动引导文件 (2)FWLIB:存放库函数文件 (3)Project:存放工程文件 (4)System:存放自己写的驱动程序 (5)User:存放用户程序(主函数) 步骤二:导入stm... 阅读详情

本章小结:

在使用虚拟内存时,需要做出几个关键决策:

  • 何时将页面加载到内存中
  • 哪些页面会被从内存中移除 ⇒ 页面替换算法
  • 为一个进程分配多少页面,以及这些页面是局部的还是全局的
  • 何时将页面从内存中移除 ⇒ 分页守护进程

虚拟内存中可能出现哪些问题 ⇒ 超负荷(thrashing)

页面替换

概念

当新页面被加载且所有页面都被占用时,操作系统必须选择一个页面进行删除。
这一选择是由页面替换算法做出的,并会考虑以下因素:

  • 该页面最后一次被使用的时间/预计下次再次使用的时间
  • 该页面是否已被修改(只有被修改的页面需要进行写入操作)
  • 必须明智地做出替换选择(即非随机选择),以节省时间/避免出现混乱状态。

算法

  1. 最优(Optimal)页面替换
  2. 先进先出(FIFO)页面替换:①第二次机会替换 ②时钟替换
  3. 不最近使用(Not recently used,NRU)
  4. 最近最少使用(Least recently used,LRU)

最优页面替换

在理想/最优的世界里

  • 每一页都会被标注出将要执行的指令数量或再次被使用之前的时长
  • 那些长时间内都不会被引用的页面才是最应该被移除的页面

这种最优策略无法实际应用

  • 它可以用于执行后的分析——即最小的页面故障次数会是多少
  • 它为页面故障次数提供了一个下限(用于与其他算法进行比较)

先进先出(FIFO)页面替换

FIFO 会维护一个链表,并且新页面会添加到链表的末尾。
当发生页面错误时,链表头部的最旧页面会被淘汰。
FIFO 的优点和缺点包括:

  • 它易于理解/实现
  • 其性能不佳 ⇒ 无论是使用频繁的页面还是使用较少的页面,被淘汰的可能性都相同

模拟:

假设我们有一个包含八个逻辑页面和四个物理帧(physical frames,PFs)的系统。
考虑以下页面引用顺序:
0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1 1 1 7 2 3 1 4
所产生的页面错误次数为 13 次。

……

第二次机会替换(Second Chance FIFO)

二次替换先进先出策略:

  • 如果列表前端的页面未被引用,则将其淘汰。
  • 如果设置了引用位,则将该页面置于列表末尾,并重置其引用位。

二次替换先进先出策略比先进先出策略效果更好,但实现起来成本较高(因为列表会不断变化),而且如果所有页面最初都被引用过,它可能会退化为先进先出策略。

第二次机会算法
时钟替换

二次机会先入先出算法可以通过维护一个循环列表来得到改进:

  • 一个指针指向“已访问”的最后一页
  • 该算法被称为(单手)时钟算法
  • 对于长列表来说,其运行速度较慢

维护列表所花费的时间减少了

时钟替换算法

不最近使用(Not recently used,NRU)

被引用和修改的位会保存在页表中:初始时,被引用的位会被设为 0,并会定期重置(例如,系统时钟中断或在搜索列表时进行重置)。
存在四种不同的页面“类型”:

  • 类 0:未被引用且未被修改
  • 类 1:未被引用且被修改
  • 类 2:被引用但未被修改
  • 类 3:被引用且被修改

每当发生页面错误时,都会检查页面表条目。
可以这样实现:

  1. 从类 0 中找到一个要删除的页面
  2. 如果步骤 1 失败,则再次扫描以查找类 1 的页面,并将访问过的每个页面的引用位设置为 0
  3. 如果步骤 2 失败,则从步骤 1 重新开始(类 2 和 3 的元素现在已变为类 0 或 1)

NRU 算法具有良好的性能,并且易于理解和实现。

最近最少使用(Least recently used,LRU)

最近最少使用算法会淘汰未被使用时间最长的页面。

  • 操作系统会记录页面的最后使用时间。
  • 每个页面表条目都包含一个计数器字段。
  • 这种实现方式成本较高,因为它需要一个按使用顺序排列的页面列表。

该算法可以通过硬件实现,使用一个在每条指令后递增的计数器。

假设我们有一个包含八个逻辑页面和四个物理帧(physical frames,PFs)的系统。
考虑以下页面引用顺序:
0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1 1 1 7 2 3 1 4
所产生的页面错误次数为 12 次。

……

总结

最佳页面替换:最佳但不实用
FIFO 页面替换:性能较差但易于实施

  • 第二次机会更换:性能提高但执行不佳
  • 时钟替换:改进了实现,但仍然可能很慢

最近未使用(NRU):易于理解,效率适中(接近LRU)
最近最少使用 (LRU):接近最佳,但更难实现

常驻集

常驻集的大小

应为单个进程分配多少页:

  • 小型常驻集可以在内存中存储更多进程 ⇒ 提高 CPU 利用率
  • 小型常驻集可能会导致更多的页面错误
  • 大型常驻集可能不再降低页面错误率(收益递减)

常驻集的大小和系统利用率之间存在权衡

常驻集大小可以是固定的或可变的(即在运行时调整)
对于可变大小的常驻集,替换策略可以是:

  • 局部:替换同一进程的页面
  • 全局:可以从不同的进程中取出页面

使用局部作用域时,需要仔细评估其大小(通常基于工作集或页面错误频率)

局部页面替换与全局页面替换。(a) 原始配置,右边的数字代表加载时间 (b)
局部 (c) 全局

局部页面替换vs.全局页面替换

全局替换策略可以从整个集合中选择帧,即可以从其他进程“获取”它们

  • 帧动态分配给进程
  • 进程无法控制自己的页面错误频率,即一个进程的PFF受到其他进程的影响

局部替换策略只能选择分配给当前进程的帧

  • 每个进程都有固定的内存比例
  • 局部“最旧的页面”不一定是全局的“最旧页面”

Windows 使用带有局部替换的变量方法
前面介绍的页面替换算法可以使用这两种策略。

工作集

常驻集包括内存中的进程页集
工作集 W(t,k) 包括流程的最后 k(= 工作集窗口)虚拟时间单位中的集合引用页
k 可以定义为“内存引用”或“实际处理时间”

  • 最近使用的页面集
  • 在预先指定的时间间隔内使用的页面集

工作集大小可用作应分配给流程的数框的指南

例子:按顺序考虑以下页面引用

如果 k = 3:

  • 在 t1 时,W(t1,3) = {4,5,6}
  • 在 t2 时,W(t1,3) = {4,7}

如果 k = 5:

  • 在 t1 时,W(t1,5) = {2,3,4,5,6}
  • 在 t2 时,W(t1,5) = {2,4,7}

工作集是时间 t 的函数:

  • 进程在位置之间移动,因此,工作集中包含的页面随时间变化
  • 稳定的间隔与快速变化的间隔交替出现

|W(t,k)|则在时间上可变。具体说来:1 ≤ |W(t,k)|≤ min(k,N) 
其中 N 是进程的总页数。

为 k 选择正确的值至关重要:

  • 太小:不准确,页面丢失
  • 太大:存在太多未使用的页面
  • 无穷大:进程的所有页面都在工作集中

工作集可用于指导常驻集的大小

  • 监视工作集
  • 从驻留集中删除不在工作集中的页面

工作集的维护成本很高⇒页面错误频率 (page fault frequency,PFF) 可以用作近似值

  • 如果 PFF 增加 ->我们需要增加 k
  • 如果 PFF 非常降低 ->我们可以尝试减少 k

分页守护程序(paging daemon):预清理(⇔需求清理)

主动保留一些空闲页面以备将来的页面错误使用会更有效

  • 如果没有,我们可能必须找到一个要驱逐的页面,并在发生页面错误时首先将其写入驱动器(如果已修改)

许多系统都有一个称为分页守护程序的后台进程

  • 此过程定期运行
  • 它检查帧的状态,如果空闲帧太少,它会选择要逐出的页面(使用页面替换算法)

分页守护进程可以与缓冲(空闲和修改列表)结合使用,⇒写入修改后的页面,但尽可能将它们保留在主内存中

颠簸(Thrashing)

定义抖动

假设所有可用页面都在使用中,并且需要加载新页面:即将被逐出的页面必须在不久之后重新加载,即它仍然处于活动状态
当碎片被更换并立即再次加载时,就会发生抖动(颠簸)

恶性循环?

CPU 利用率太低 ⇒调度程序会提高多编程程度 ⇒ 帧被分配给新流程并从现有流程中删除 ⇒ I/O 请求因页面错误而排队
CPU 利用率进一步下降 ⇒ 调度器提高了多编程程度

原因/解决方案

抖动的原因包括:

  • 多编程程度过高,即总需求(即所有工作集大小的总和)超过供应(即可用帧)
  • 单个进程分配的页数太少

这可以通过例如使用良好的页面替换策略、降低多编程程度(中期调度程序)或添加更多内存来防止
页面错误频率可用于检测系统是否正在抖动

理解

FIFO vs. 最佳页面替换算法

将 FIFO/LRU 与最佳页面替换算法进行比较。该进程启动时内存中没有任何页面。
最佳方法产生的最小页面错误数是多少?

步骤 1:统一前提

  • 进程最初 内存中没有任何页(冷启动)。

  • 页面访问串:

    0 2 1 3 5 4 6 3 7 4 7 3 3 5 5 3 1 1 1 7 2 3 1 4

    (共 24 次访问)。

步骤 2:计算最优(OPT,Belady 最小页故障)

OPT 每次都把 下次使用最远(或永不使用) 的页面换出;
帧数未知,但图里给出了 4 个 PF 槽(图中 PF1 … PF4),说明 物理帧 = 4。

按 4 帧模拟 OPT:

访问帧0帧1帧2帧3页故障?淘汰页
00–––✔–
202––✔–
1021–✔–
30213✔–
50215✔3(3 下一次在第 7,最远)
40214✔1(1 下一次在第 17)
60264✔2(2 下一次在第 21)
30263✖–
70763✔4(4 不再使用)
40764✔0(0 不再使用)
7–764✖–
3–763✖–
3–763✖–
55763✔6(6 不再使用)
557–3✖–
357–3✖–
15713✔7(7 下一次在第 20)
1––13✖–
1––13✖–
7–713✖–
22713✔5(5 不再使用)
32713✖–
12713✖–
42714✔3(3 不再使用)

统计页故障:共 14 次。


结论

在 4 个物理帧 的前提下,最优(OPT)算法的最小页故障数为 14。

YOLOv12涨点改进 | 全网首发,Conv改进篇 | CVPR 2025 | YOLOv12引入FDConv频率动态卷积,含A2C2f_FDConv二次创新模块,能够捕捉更加丰富和复杂的特征信息 本文提出了一种改进YOLOv12目标检测模型的方法——频率动态卷积(FDConv)。FDConv通过增强卷积核的频率响应多样性,使模型能够更好地处理不同频率信息,从而提高检测精度。该方法包含三个关键组件:傅里叶离散权重(FDW)实现频率分组,核空间调制(KSM)动态调整频率响应,以及频率带调制(FBM)进行频域调节。实验结果表明,FDConv能以较少的参数增长(仅增加3.6M)显著提升模型性能,在目标检测、实例分割等任务中优于传统动态卷积方法。该方法可灵活集成到ResNet、ConvNeXt等多种架构中。 阅读详情

相关推荐

架构设计之架构治理

架构治理的本质是“用规则约束复杂性,用流程保障落地,用数据驱动优化”先定目标:明确量化的治理目标,避免盲目行动;立标准:建立覆盖分层、选型、接口、拆分的统一规范,奠定治理基础;强评审:通过架构评审把控设计环节,提前规避风险;全流程:将治理规则贯穿设计、开发、测试、部署、运维全生命周期;重保障:通过组织、流程、工具确保治理落地,而非“纸上谈兵”;持续迭代:随业务与技术演进优化治理规则,避免“一劳永逸”。

xiaolyuh的专栏 810

周同学文章汇总

博主文章汇总

周同学的博客 1万+

详述字符集与汉字编码

字符集与字符编码是文本处理的基础概念。字符集定义字符集合(如ASCII、GB2312、Unicode),字符编码则规定字符如何存储为二进制数据。汉字编码经历了从区域化(GB2312、GBK、BIG5)到全球化(Unicode)的演进,Unicode通过UTF-8、UTF-16等编码方案实现跨语言兼容。UTF-8因兼容ASCII、节省空间且无乱码风险,成为中文互联网的主流编码。正确处理编码问题需统一标准、明确声明格式,并注意生僻字的特殊处理。

零零发不爱ai的博客 805

编译器 | 从工业实现到极简设计 —— 编译器的多元形态与实践

……

u013669912的博客 888

基于BS21的星闪模块设计电路SLE/BLE

基于BS21的星闪模块设计电路SLE/BLE HI2821

2503_91889531的博客 2738

Cisco Packet Tracer实战:三层交换机链路聚合配置全流程(附常见错误排查)

本文详细解析了在Cisco Packet Tracer环境中配置三层交换机链路聚合的全流程,包括基础网络设置、LACP协议配置、路由协议集成及高级优化技巧。通过实战案例和常见错误排查指南,帮助网络工程师和CCNA备考学员掌握这一提升带宽利用率和实现链路冗余的核心技术。

grafana6viz的博客 228

鸿蒙操作系统实现应用接续跨设备流转实战

应用接续的落地成本很低:一个配置、一个onContinue回调、一处 launchReason 判断,合计不足百行代码,就能让任务在手机、平板、鸿蒙电脑之间无缝续接。随着互助通信共享等组网能力在更多机型下放,这条能力的实用价值会持续放大,建议交互密集型应用尽早接入。

NJPJI_Yang的博客 357

配置思科交换机冗余链路汇聚

本文对交换机端口汇聚配置进行说明

istrangeboy&begin zero的博客 6684

【Linux】APT 本地 deb 安装与 `-f` 参数总结笔记

apt install ./xx.deb 可自动解析并安装依赖,无需 -f;-f 仅用于修复已损坏的依赖状态,非首次安装时必需。apt install -f 可单独运行,修复 broken dependencies。两者职责不同:前者是安装与依赖解决,后者是故障修复。完全离线时需提前准备依赖包或本地源。

hknaruto的专栏 211

3、神经网络在汽车中的应用

本文探讨了神经网络在现代汽车中的多种应用,包括防抱死制动系统(ABS)、燃油喷射系统、自动驾驶辅助系统以及发动机故障诊断。通过详细分析这些系统的具体工作流程和神经网络的集成方式,展示了神经网络如何提升车辆的安全性、效率与智能化水平。

moss5的博客 233

置顶必读(2) |《YOLOv8实战:从入门到深度优化》总目录导航 & 学习路线指南(持续更新中)

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 28万+

【Linux网络】TCP 服务器并发处理多客户端:从 fork 分发到双重 fork 彻底消灭僵尸进程

拆解 TCP 服务器并发演进链:fork 分发连接、SIGCHLD 循环回收僵尸、双重 fork 交孙进程给 init 收养,并给出模型选型与线上排错对照。

2301_78967866的博客 422

Agent Harness Engineering: AI Agent 执行管控与安全沙箱 原理与最佳实践

我们正站在计算范式转移的历史节点上。2024-2026 年间,AI 系统从被动的内容生成器(Generative AI)演变为主动的行动执行者(Agentic AI)。这一转变的根本特征是:根据 2026 年初的行业数据:然而,能力的提升伴随着风险的指数级增长。2024-2026 年间发生的多起标志性安全事件揭示了 Agent 系统的脆弱性:案例 1:Slack AI 数据外泄事件(2024 年 8 月)案例 2:制造业供应链攻击(2026 年 Q3)案例 3:Arup 深度诈骗案(2026 年 9 月)这

AI天才研究院 1669

Linux rm 误删文件恢复实操教程

Linux使用rm删除文件时,并不会直接抹除磁盘上的数据,只是移除文件索引,让系统不再识别这块空间。只要没有写入新数据,原有扇区内容就会保留。新文件写入才有可能覆盖这些区域,一旦覆盖就很难找回。恢复的本质就是扫描磁盘,找到这些还存在、但索引丢失的数据条目,再把它们导出保存到其他分区。越早停止写入,恢复成功的概率越高。

海天数据恢复-winhex数据恢复教程 229

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Linux sudo

如果输出 → 无 sudo 权限 如果输出 → 拥有全部 sudo 权限 辅助验证命令 ⚠️ 注意:在 wheel 组 ≠ 一定能 sudo,必须 开启 Ubuntu/Debian: ✅ 重要:修改组之后,用户要重新登录才生效! 或者执行 临时生效 看到这行(没有 #注释)才生效: 方式 2:visudo 直接单独给用户授权(精细化权限) 找到 ,下面添加一行: 自带语法校验,写错会告警,不要直接 vim 改 ,写错直接 sudo 炸掉! 想免密 su

fengliyang_的博客 178

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【HarmonyOS 7 语音 AI 开放能力深度实战】 05 文本转语音实战,文字播报与合成状态控制

会议笔记已经整理成文字,用户离开屏幕以后,可能仍然希望听一遍已经确认的事项。应用可以提供一个播报按钮,把当前内容交给语音合成服务。但是,按钮点击成功与整段内容播放结束之间,还隔着引擎初始化、音色选择、合成和音频输出。页面如果在第一个完成回调出现时就恢复空闲,用户可能再次启动播报,让新的内容与尚未结束的声音互相影响。文本转语音服务负责把文字转换为声音,应用仍然需要选择音色、提交请求并管理页面状态。对于直接播报,合成引擎可以负责播放,页面不必另建播放器;但页面仍需要根据播放事件判断什么时候可以开始下一次操作。

Code Metaverse 182

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

ARM64-GNU汇编器

o伪指令分配大小例子伪指令分配大小例子.byte1 字节.byte 0x412 字节.word / .long 4 字节8 字节.ascii字符串(不加 \0)字符串(自动加 \0).byte:把 8位数当成数据插入汇编代码中。.hword和 .short:把16 位数当成数据插入汇编代码中。.long和 .int:这两个伪指令的作用相同,都把 32位数当成数据插入汇编代码中。.word:把 32位数当成数据插入汇编代码中。

weixin_43903002的博客 193

第一章 Shell 概述

本文介绍了Shell编程的基础知识,包括Shell的起源与发展、常见Shell类型及查看方式,阐述了Shell作为命令解释器连接用户与操作系统内核的作用。强调其作为解释型脚本语言的优势,适用于系统管理自动化任务。内容涵盖Shell脚本基本结构、注释规范、编写风格、执行方法及常用命令(如echo、printf、history、管道等),并讲解了命令执行顺序、退出状态码等核心概念,为初学者提供系统学习路径。

sbjdhjd的博客 281

Linux基本使用和程序部署

Linux是一个操作系统,和Windows是并列的关系。

LYYstudying的博客 85

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 268

鸿蒙沉浸光感开发适配

设备材质档位:EXQUISITE(精致,全光效,高性能设备)、GENTLE(均衡,默认)、SMOOTH(轻量,仅基础效果,低算力设备)、ADAPTIVE(自适应,系统自动识别算力选档,业务首选);用户系统设置三档(强/均衡默认/弱):本质是对透明度、反色率、折射强度的精细调控。用户的三档偏好由系统底层自动映射到渲染参数,应用只需一次定义材质,界面就会随用户设置平滑过渡,完全不需要针对三档分别写适配。

qq_63223749的博客 415

Windows 10/11 彻底禁用更新防止反弹完全指南:设置、服务、任务计划与批处理实战

Windows 10已于2025年10月14日终止支持,本文以22H2版本为例,系统性介绍通过设置、组策略、注册表、服务禁用及任务计划管理等多层手段彻底关闭自动更新。操作需管理员权限,可有效避免强制重启、节省资源并阻止Win11推送,但需手动处理安全补丁。文末提供完整批处理脚本与调试检查方法,实现一键禁用与验证。

seahahacsdn的博客 232

Linux篇(五)

本文系统梳理了Linux常用终端快捷键、软件包管理(yum/apt)、服务管理(systemctl)、软链接(ln)、时间与IP配置、域名解析、固定IP设置及网络命令(ping/wget/curl),涵盖日常运维核心操作,助力高效管理Linux环境。

wykyzdq的博客 193

Linux网络编程:TCP多线程远程命令执行与线程池改造

前面已经实现了 TCP Echo Server,并且通过多进程和多线程解决了多个客户端连接的问题。不过目前服务器的业务还是比较简单,客户端发送什么,服务器就返回什么。这次在原来的多线程服务器上继续做一些改动,实现一个简单的远程命令执行功能。这次主要学习了两个内容。第一个是多线程远程命令执行。通过 Command 类封装命令的接收、检查、执行和结果返回,并使用 set 对允许执行的命令进行限制。第二个是线程池版本的 TCP Echo Server。通过和std::bind。

2501_93388101的博客 361

Linux的渲染与显示系统链路

Linux渲染与显示链路核心为DRM/KMS + EGL直连模式,绕过传统X11/Wayland中间层,实现低延迟、高效率的直接帧提交。相比X11的粗粒度权限控制与Wayland的合成开销,该方案链路短、资源消耗低,但仅支持单进程独占显示,缺乏窗口管理与系统级兜底。EGL作为跨平台桥梁,连接OpenGL ES与原生显示系统,通过Display、Surface、Context三要素构建渲染环境。内核层DRM管理GPU资源,KMS配置显示模式,用户态GDM负责登录会话,共同构成从硬件到应用的完整图形栈。

微小的鱼的博客 388

windows服务主进程已停止工作怎么解决?我把服务控制器的报错码和启动链路拆开跑了一遍

windows服务主进程已停止工作怎么解决,先把 SCM 的报错码读明白:服务起不来,先抓报错码再动手——1060名字错、1058被禁用、1056已运行、1053超时、1067起来又死、1069账户、1075依赖、25路径权限。读配置用sc qc、看状态用sc query、列服务用,这三件套能定位大部分启动失败。把服务放到云上,阿里云 ECS、腾讯云 CVM、华为云 ECS 都给你一台能用sc管理的机器,排障逻辑不变。我在这台 Windows 10 上把106010581056和sc qc。

2601_97101189的博客 265
上一篇: Lecture 18: Memory Management 5
下一篇: Lecture 20: File Systems 1
Dead_Simba
博客等级 码龄2年 172粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值