操作系统 3.3-多级页表和快表
分页的问题
这张幻灯片讨论了操作系统中内存管理的一个核心问题:页大小与页表大小之间的权衡。
页(Page)是内存管理中的一个基本概念,指的是将虚拟内存分割成固定大小的块,以便于管理和访问。页的大小直接影响内存空间的利用率和页表的大小。
-
页小的优点:可以更精细地管理内存,减少内存浪费(例如,当一个进程只需要使用一小部分内存时,不需要分配一大块内存)。
-
页小的缺点:页表会变大,因为每个页都需要在页表中有一个条目。页表的大小直接影响内存管理和查找的效率
总结来说,为了提高内存空间利用率,页应该尽可能小,但这会导致页表变大,从而影响内存管理和查找的效率。操作系统设计者需要在这两者之间找到一个平衡点。
解决页表大的方案
只存到用到的页
在图中,原始页表包含4个页表项,但实际使用中第2个逻辑页没有使用,因此可以将对应的页表项删除。这样页表就从4个项减少到3个项,减少了内存占用。实际上大部分逻辑地址根本不会用到,所以可以采取这个措施。
原始页表: 页号 | 页框号 | 保护 | 有效0 | 5 | R | 11 | 1 | R/W | 12 | | | 03 | 6 | R | 1 优化后的页表: 页号 | 页框号 | 保护0 | 5 | R1 | 1 | R/W3 | 6 | R
通过这种方式,可以有效减少页表的大小,从而减少内存的占用,提高系统的效率。
这张幻灯片提出了一种优化页表占用内存的尝试:只存放实际用到的页。这种方法可以减少页表的大小,从而减少内存的占用。以下是幻灯片的主要内容和分析:
-
只存放用到的页:
-
只对实际使用的逻辑页创建页表项,这样可以减少页表的大小。
-
-
页号不连续的问题:
-
由于页号不连续,需要进行比较和查找,这会增加查找页表项的时间复杂度。
-
log(2^20)=20 表示在最坏情况下,可能需要进行20次查找操作。
-
-
32位地址空间和4K页面:
-
32位地址空间加上4K页面大小,理论上需要( 2^{20} )个页表项。
-
如果页号必须连续,会导致大页表占用大量内存,造成浪费。
-
-
既要连续又要让页表占用内存少:
-
需要找到一种方法,既能保持页表项的连续性,又能减少页表的内存占用。
-
幻灯片中提到了一种类比思考的方法,即用书的章目录和节目录来类比思考页表的组织方式。这种方法可以是:
单级页表
-
内存空间利用率:单级页表意味着每个虚拟页都有一个对应的页表项。在32位地址空间中,如果页的大小是4KB,那么理论上需要(2^{20})个页表项来映射整个地址空间。这会导致即使只使用了一小部分内存,页表也会占用大量空间。
-
页表的管理效率:单级页表虽然简单,但是当页表非常大时,查找特定页表项的效率会降低。此外,页表的存储也需要占用大量的内存空间,这在实际系统中可能是不可行的。
多级页表
为了解决单级页表的问题,操作系统引入了多级页表:
-
提高内存空间利用率:多级页表通过将页表本身分层次来减少必须常驻内存的页表项数量。例如,可以使用一个页目录来索引多个页表,每个页表再映射到具体的页框。这样,只有当前活跃的页表需要被加载到内存中,从而大大减少了内存的占用。
-
提高页表的管理效率:多级页表通过减少必须常驻内存的页表项数量,也减少了查找特定页表项所需的内存访问次数。这提高了页表的管理效率,尤其是在具有大量页表项的大型系统中。
多级页表
多级页表的工作原理
-
逻辑地址的分割:
-
逻辑地址被分割成多个部分,包括页目录号、页号和Offset(偏移量)。在这个例子中,逻辑地址被分为10位的页目录号、10位的页号和12位的Offset。
-
-
页目录表和页表:
-
页目录表(页目录)类似于书中的“章”,它包含了指向页表(页)的指针,页表则类似于“节”,它包含了具体的页框号和Offset,用于映射到物理地址。
-
-
页目录指针和页目录驻留内存:
-
页目录指针用于指向当前活动的页目录,页目录驻留内存表示页目录被加载到内存中。每个页目录项占用4字节。
-
-
物理地址的构建:
-
物理地址由物理页号和Offset组成。物理页号通过查找页目录和页表获得,Offset直接从逻辑地址中提取。
-
-
内存访问:
-
当需要访问一个内存地址时,首先使用页目录号在内存中查找对应的页目录项,然后使用页号在页表中查找对应的页框号,最后结合Offset计算出最终的物理地址。
-
多级页表的优势
-
减少内存占用:通过只加载当前需要的页表项,多级页表大大减少了必须常驻内存的页表项数量,从而减少了内存的占用。
-
提高查找效率:虽然多级页表增加了查找的层次,但由于每次查找只需要访问少量的页表项,因此在实际应用中,多级页表可以提高查找效率。
计算示例
-
假设有2^10个页目录项,每个页目录项占用4字节,则页目录表总共需要2^10×4字节 = 4KB。
-
如果每个页表也包含2^10个页表项,那么总共需要的内存为2^10×4×2^10字节 = 16KB,远小于单级页表所需的4MB。
快表
多级页表对时间效率的影响
-
增加访存次数:
-
相对于单级页表,多级页表虽然通过减少内存中页表项的数量提高了空间效率,但同时也增加了访问内存的次数。这是因为在多级页表结构中,需要先访问页目录,再访问页表,最后才能访问到实际的数据。
-
在64位系统中,逻辑地址空间更大,多级页表的层级可能更多,因此访问内存的次数可能会进一步增加。
-
-
TLB的作用:
-
TLB是一种高速缓存,用于存储最近或经常访问的页表项,以减少访问多级页表所需的内存访问次数。
-
TLB通过提供快速的页表项查找,减少了访问内存的时间,从而提高了系统的时间效率。
-
TLB的工作原理
-
TLB命中:
-
当CPU需要访问一个页面时,首先检查TLB中是否有对应的页表项(即TLB命中)。
-
如果TLB命中,CPU可以直接从TLB中获取物理地址,而无需访问多级页表,从而大大减少了内存访问次数。
-
-
TLB未命中:
-
如果TLB中没有对应的页表项(即TLB未命中),CPU需要访问多级页表来获取物理地址。
-
这个过程涉及到多次内存访问,包括访问页目录和页表,因此比TLB命中要慢得多。
-
-
TLB的相联性:
-
TLB通常采用相联存储结构,这意味着它可以快速地检查多个页表项,以确定是否有匹配的项。
-
这种结构使得TLB能够在很短的时间内完成查找,即使在TLB未命中的情况下,也能尽快地从多级页表中加载所需的页表项到TLB中。
-
TLB有效的原因
TLB的作用和效率
-
TLB命中时的高效率:
-
当TLB命中,即所需的页表项已经在TLB中时,内存访问的效率会很高。这是因为TLB是一种快速的缓存,可以直接提供物理地址,避免了访问主存中的页表。
-
-
TLB未命中时的效率降低:
-
当TLB未命中,即所需的页表项不在TLB中时,需要访问主存中的多级页表来获取物理地址,这会显著增加内存访问时间。
-
有效访问时间的计算
幻灯片中给出了有效访问时间的计算公式,该公式考虑了TLB命中率(HitR)和内存访问时间(MA):
有效访问时间=HitR×(TLB时间+MA)+(1−HitR)×(TLB时间+2×MA)
-
TLB时间:访问TLB所需的时间。
-
MA:访问主存所需的时间。
通过两个例子说明了不同命中率下的有效访问时间:
-
高命中率(98%):有效访问时间约为122ns。
-
低命中率(10%):有效访问时间约为210ns。
提高TLB命中率的重要性
-
实现近似访存1次:为了实现近似于直接访问内存一次的效率,TLB的命中率应该很高。
-
TLB大小与成本:虽然更大的TLB可以提高命中率,但TLB的成本也更高。因此,TLB的大小通常在64到1024条目之间。
TLB大小设置
局部性原理
-
空间局部性(Locality in Space):
-
空间局部性是指程序在执行过程中倾向于访问最近访问过的内存区域。换句话说,如果一个内存地址被访问,那么它附近的地址也很可能被访问。
-
这种局部性是由于程序中存在循环和顺序结构,导致程序在一段时间内集中访问特定的内存区域。
-
-
时间局部性:
-
时间局部性是指程序在执行过程中倾向于重复访问相同的内存地址。这种局部性是由于程序的循环结构,导致相同的内存地址在较短的时间内被多次访问。
-
TLB条目数的合理性
-
尽管系统中可能存在大量的页,但由于局部性原理,程序在任何给定时间点实际访问的页通常只占一小部分。
-
因此,一个相对较小的TLB(64到1024条目)就能有效地覆盖这些频繁访问的页,从而提高整体的内存访问效率。
相关文章:
操作系统 3.3-多级页表和快表
分页的问题 这张幻灯片讨论了操作系统中内存管理的一个核心问题:页大小与页表大小之间的权衡。 页(Page)是内存管理中的一个基本概念,指的是将虚拟内存分割成固定大小的块,以便于管理和访问。页的大小直接影响内存空间…...
Java常用工具算法-7--秘钥托管云服务2(阿里云 KMS)
阿里云的KMS(Key Management Service)也是一种托管式密钥管理服务,帮助用户安全地创建、控制和使用密钥,保护敏感数据。通过使用KSM,您可以专注于构建和优化应用程序,而不必担心密钥管理的复杂性。 1、主要…...
游戏引擎学习第218天
构建并运行,注意一下在调试系统关闭前人物的移动速度 现在我准备开始构建项目。如果我没记错的话,我们之前关闭了调试系统,主要是为了避免大家在运行过程中遇到问题。现在调试系统没有开启,一切运行得很顺利,看到那个…...
城电科技 | 光伏太阳花:碳减排路上的璀璨新光光伏智慧花
当谈及 “碳减排” 与 “碳中和”,你脑海中率先浮现的是什么?想必很多人都会想到太阳能发电。太阳能光伏,作为人类取之不尽、用之不竭的绿色清洁能源,具备充分的清洁性、高度的安全性以及相对的广泛性。正因如此,在探讨…...
AI领域再突破,永洪科技荣获“2025人工智能+创新案例”奖
在2025年的今天,人工智能已从技术概念全面渗透至产业核心。中国作为全球AI技术应用的前沿阵地,正通过“人工智能”行动加速推进技术与实体经济深度融合。 这一背景下,永洪科技凭借其“国内某头部ICT人力资源板块GenAI项目”荣获“2025全国企业…...
大模型day1 - 什么是GPT
什么是GPT 全称 Generative Pre-trained Transformer 是一种基于 Transformer 架构的大规模 预训练 语言模型,由OpenAI研发,但GPT仅仅只是借鉴了Transformer 中 Decoder 的部分,并且做了升级 Transformer 架构 Transformer架构 是一种用于…...
飞凌嵌入式T527核心板正式发布OpenHarmony4.1系统,实现从芯片架构到操作系统的全链路国产化
飞凌嵌入式FET527N-C核心板正式发布OpenHarmony4.1系统,实现了从芯片架构到操作系统的全链路国产化。该产品具备灵活可编程、高效能运算、低成本控制等多重优势,通过多核异构设计同步支持边缘智能计算与精准实时控制,能够满足智能制造、能源管…...
机动车号牌管理系统设计与实现(代码+数据库+LW)
摘 要 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对机动车号牌信息管理的提升&…...
测试模板1
本篇技术博文摘要 🌟 引言 📘 在这个变幻莫测、快速发展的技术时代,与时俱进是每个IT工程师的必修课。我是盛透侧视攻城狮,一名什么都会一丢丢的网络安全工程师,也是众多技术社区的活跃成员以及多家大厂官方认可人员&a…...
小试牛刀-抽奖程序
编写抽奖程序 需求:设计一个抽奖程序,点击抽奖按钮随机抽取一个名字作为中奖者 目标:了解项目结构,简单UI布局,属性方法、事件方法,程序运行及调试 界面原型 待抽奖: 点击抽奖按钮&#x…...
Foundry框架在FISCO BCOS区块链中的高级应用与实战技巧
引言:从入门到精通的进阶之路 在看过我发布的《FISCO BCOS区块链智能合约测试利器:Foundry框架从入门到实战》基础上,我们可以进一步深入探索Foundry框架在FISCO BCOS生态中的高级应用场景。Foundry作为一款强大的区块链开发工具集,其功能远不止于基础测试,它还能为FISCO…...
反转链表系列
206. 反转链表 - 力扣(LeetCode) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int …...
算力租赁:数字经济时代的 “电力革命”—— 从资源租赁到创新生态的范式重构
引言:当算力成为新 “石油”,租赁模式如何重塑商业未来? 在数字经济浪潮中,算力早已超越传统硬件范畴,成为驱动企业创新的核心生产要素。据 IDC 预测,全球数据总量将在 2025 年突破 175 ZB,而人…...
Go:基本数据
文章目录 整数浮点数复数布尔值字符串字符串字面量UnicodeUTF - 8字符串和字节 slice字符串和数字的相互转换 常量常量生成器 iota无类型常量 整数 分类 Go 的整数类型按大小分有 8 位、16 位、32 位、64 位 ,同时有符号整数包括int8、int16、int32、int64 &#…...
金融行业软件介绍
金融,本质为货币资金的融通,是经济活动中至关重要的领域。它围绕货币、信用、利率等核心要素运转,借助银行、证券机构、保险机构等众多主体,在货币市场与资本市场中实现资金的调配与流转,具有优化资源配置、分散风险及…...
Python的那些事第四十九篇:基于Python的智能客服系统设计与实现
基于Python的智能客服系统设计与实现 摘要 随着人工智能技术的飞速发展,智能客服系统逐渐成为企业提升客户服务质量和效率的关键工具。本文详细介绍了基于Python的智能客服系统的设计与实现方案,涵盖了系统架构、核心功能、技术选型及优化建议,旨在为企业构建高效、智能的客…...
vscode报错:unins000.exe 尝试在目标目录创建文件时发生一个错误
打开vscode,报错 这个错误提示表明在卸载或安装 Visual Studio Code 时,系统拒绝访问目标目录中的文件 unins000.exe。以下是解决此问题的有效方法: 检查文件权限 找到文件所在目录(如 D:\software\Microsoft VS Codeÿ…...
当气象水文遇见R语言——破解时空数据的“达芬奇密码“
在气象水文科学领域,数据从来不只是简单的数字阵列。台风路径的时空跳跃、流域径流的非线性涨落、气候要素的混沌演变,这些充满不确定性的自然现象转化为数据时,呈现出多维时空交织的复杂图景。研究人员常常要在TB级遥感数据中捕捉毫米级降水…...
LEARNING DYNAMICS OF LLM FINETUNING【论文阅读笔记】
LEARNING DYNAMICS OF LLM FINETUNING 一句话总结 作者将LLM的学习动力机制拆解成AKG三项,并分别观察了SFT和DPO训练过程中正梯度信号和负梯度信号的变化及其带来的影响,并得到以下结论: SFT通过梯度相似性间接提升无关…...
【射频仿真学习笔记】变压器参数的Mathematica计算以及ADS仿真建模
变压器模型理论分析 对于任意的无源电路或者等效电路,当画完原理图后,能否认为已经知道其中的两个节点?vin和vout之间的明确解析解 是否存在一个通用的算法,将这里的所有元素都变成了符号,使得这个算法本身就是一个函…...
改善 Maven 的依赖性
大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项: 还有另一个用例, mvn dependency:analyze 它可…...
循环神经网络 - LSTM 网络的各种变体
前面的博文中,我们了解和学习了长短期记忆网络,本文我们来学习LSTM 网络的各种变体。 目前主流的 LSTM 网络用三个门来动态地控制内部状态应该遗忘多少历史信息,输入多少新信息,以及输出多少信息.我们可以对门控机制进行改进并获…...
LangGraph 概述
LangGraph 介绍 LangGraph 是 LangChain 框架的扩展,专为创建基于大型语言模型(LLMs)的有状态、多角色应用而设计。它提供了一个灵活的架构,用于构建复杂的多步骤 LLM 应用,其中状态管理和流程控制至关重要。 为什么…...
Linux系统06---信号
目录 信号 1.1 进程间通信方式 1.2 信号的概念 1.3 查看信号 1.4 信号的产生 1.5 信号的处理 信号的 API 函数 2.1 函数名:kill() 2.2 函数名:raise() 2.3 函数名:alarm() 2.4 函数名:pause() 2.5…...
Java 程序调试与生产问题排查工具Arthas
好的,以下是修改后的博客内容,将公司信息替换为通用的占位符: 深入探索 Arthas:Java 程序调试与生产问题排查的利器 在 Java 开发中,调试和诊断问题往往是一个复杂且耗时的过程。Arthas(Alibaba Java Dia…...
PH热榜 | 2025-04-11
1. Voicenotes Pages 标语:如果出版的感觉像是在和朋友聊天呢? 介绍:Voicenotes Pages 是一个极其简单的发布创意和故事的方式。它就像是一个简易的博客或播客,但更容易上手。你只需录制内容,点击发布,就…...
从三围学校项目看:中建海龙智能建造的崛起与突破
在建筑行业迈向智能化、数字化的浪潮里,中建海龙科技有限公司(以下简称“中建海龙”)从中脱颖而出,成为推动智能建造发展的重要力量。凭借深厚的技术积累、创新的理念以及先进的实践,中建海龙正引领着建筑行业的变革&a…...
aviator 自定义表达式
引入依赖 如果你使用的是 Maven 项目,在 pom.xml 中添加以下依赖: <dependency><groupId>com.googlecode.aviator</groupId><artifactId>aviator</artifactId><version>5.3.2</version> </dependency>…...
电商中的购物车(redis的hash类型操作)
购物车样式 ①、创建service-cart模块 spring:profiles:active: devserver:port: 8513 spring:application:name: service-cartcloud:nacos:discovery:server-addr: localhost:8848data:redis:host: localhostport: 6379启动类 SpringBootApplication(excludeDataSourceAutoC…...
Ubuntu 系统错误日志常见问题
一、Ubuntu 系统日志文件位置 1. 核心系统日志 日志文件用途说明/var/log/syslog所有系统级别的日志(包括内核、服务等)/var/log/kern.log内核相关的详细日志(如硬件驱动问题)/var/log/auth.log用户认证日志(SSH登录、sudo权限等)/var/log/dpkg.log软件包安装/卸载日志/…...
《Uniapp-Vue 3-TS 实战开发》TypeScript 泛型详解
泛型(Generics)是 TypeScript 中非常重要的特性,它允许我们创建可重用的组件,这些组件可以支持多种类型,而不会丢失类型安全性。 一、泛型基础 1. 基本概念 泛型允许我们在定义函数、接口或类时不预先指定具体类型,而是在使用时再指定类型。 // 不使用泛型 function …...
mysql 删除表等待
今天有个表加字段,语句是先删除,后重新建,表没有数据 ,但是删除一个表的时候,语句drop table 提示超时 show processlist 后,等待类型是 Waiting for table metadata lock 取消重试几次后仍然是如此…...
如何深入理解protobuf
Protocol Buffers(protobuf)是一种轻便高效的结构化数据存储格式,用于数据序列化和反序列化,具有语言无关、平台无关、可扩展性强等特点,能有效提高数据存储和传输的效率。 一.协议的设计 我们在介绍protobuf之前我们…...
《分布式软总线牵手云服务,拓展应用新维度》
分布式软总线与云服务的融合,正掀起一场前所未有的变革,重塑着我们工作、生活和交互的方式。二者的结合,犹如天作之合,不仅打破了设备与数据之间的壁垒,更开启了一系列令人瞩目的全新应用场景。 分布式软总线…...
ReentrantLock 实现公平锁和非公平锁的原理!
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗! 🌟了解 ThreadLocal请看: ThreadLocal有趣讲解,小白也能听懂ÿ…...
算法训练之动态规划(四)——简单多状态问题
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
【JavaScript】错误处理与调试
个人主页:Guiat 归属专栏:HTML CSS JavaScript 文章目录 1. JavaScript 错误处理基础1.1 错误类型1.2 try...catch 语句 2. 错误抛出与自定义错误2.1 throw 语句2.2 自定义错误类型 3. 异步错误处理3.1 Promise 错误处理3.2 async/await 错误处理 4. 调试…...
MySQL 管理与配置:查看端口、修改密码与数据存储位置
1.MySQL查看端口号 show global variables like port; 2.MySQL修改密码 grant all privileges on *.* to root% identified by 你的mysql密码 with grant option;flush privileges; 3.查询 MySQL 数据库的数据存储目录 MySQL 的所有数据库文件、表数据、索引、日志文件等都存…...
(四十二)Dart 中的接口与抽象类
Dart 中的接口与抽象类 Dart 的接口特性 在 Dart 中,接口的实现方式与 Java 有所不同。Dart 没有专门的 interface 关键字来定义接口,而是通过普通类或抽象类来实现接口的功能。以下是 Dart 接口的主要特点: 普通类或抽象类都可以作为接口 …...
Java习题:合并两个有序数组
文章目录 前言一、题目描述二、方法2.1 方法一2.2 方法二 前言 虽然这个题目很简单,但是在使用java语言实现的过程中,存在多种方法这是很有意思的一道题,所以小编在这里写下它的各种方法加深javase语法的学习。 提示:以下是本篇文…...
spm12_fMRI 2*4混合方差分析 Flexible factorial 对比矩阵
实验设计:2*4被试内设计 分析模型:spm 二阶分析中的 Flexible factorial 问题:Flexible factorial交互作用对比矩阵如何编写? 老师:deepseek老师【大神们看看这个矩阵是否可以如下编写?】 以下是来自de…...
力扣第272场周赛
周赛链接:竞赛 - 力扣(LeetCode)全球极客挚爱的技术成长平台 这场周赛是在课堂上模拟的, 总体来说比较简单, 但不幸被老师压力了。以下分享一下我的解题思路 如果你每天没有时间刷题的话, 可以看一下我写的东西, 我尽量讲解的通俗一些, 不会…...
【5】深入学习npm-Nodejs开发入门
深入学习npm npm详解npm的组成-registrynpm的组成-websitenpm的组成-clinpm-confignpm-initnpm-installnpm-startnpm-uninstallnpm-version其他命令 再谈registrypackage.json配置基本结构必填字段可选字段依赖管理其他配置完整配置 node_modules其他 npm详解 我们在前面安装N…...
2025.04.05 广东汕尾两日游记
2025.04.05 广东汕尾两日游记 文章目录 2025.04.05 广东汕尾两日游记一、前言二、我的两日游行程1、行程2、这两天吃喝玩乐的地方 三、其他1、汕尾两日游小结2、汕尾前十景点(1)玄武山旅游区(2)红海湾遮浪旅游区(3&…...
【数学建模】(智能优化算法)鲸鱼优化算法(Whale Optimization Algorithm)详解与应用
鲸鱼优化算法(Whale Optimization Algorithm)详解与应用 文章目录 鲸鱼优化算法(Whale Optimization Algorithm)详解与应用1. 引言2. 算法原理2.1 生物学基础2.2 数学模型[^3]1. 包围猎物阶段2. 气泡网攻击(螺旋更新)3. 随机搜索猎物(全局探索…...
11-Java并发编程终极指南:ThreadLocal与并发设计模式实战
Java并发编程终极指南:ThreadLocal与并发设计模式实战 一、ThreadLocal核心原理剖析 1. 线程本地存储实现机制 #mermaid-svg-EX865K5oO873R6OO {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-EX865K5o…...
数据库数据恢复——sql server数据库被加密怎么恢复数据?
SQL server数据库数据故障: SQL server数据库被加密,无法使用。 数据库MDF、LDF、log日志文件名字被篡改。 数据库备份被加密,文件名字被篡改。 SQL server数据库数据恢复过程: 1、将所有数据库做完整只读备份。后续所有数据恢…...
0501路由-react-仿低代码平台项目
文章目录 1 react路由1.1 核心库:React Router安装 1.2 基本路由配置路由入口组件定义路由 1.3 导航方式使用 <Link> 组件编程式导航 1.4 动态路由参数定义参数获取参数 1.5 嵌套路由父路由配置子路由占位符 1.6 重定向与404页面重定向404页面 1.7 路由守卫&a…...
C++二分查找
一、模板①:向下取整(mid (l r) >> 1) while (l < r) {int mid l r >> 1; // 等价于 (l r) / 2(向下取整)if (check(mid)) r mid; // 保留左半区else l mid 1; // 舍弃左半区 } 适用场…...
c++将jpg转换为灰度图
c将jpg转换为灰度图 step1:添加依赖 下载这两个文件,放在cpp同一目录下,编译生成 https://github.com/nothings/stb/blob/master/stb_image_write.h https://github.com/nothings/stb/blob/master/stb_image.hstep2:C:\Users\wangrusheng\source\repos…...