基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习六重要)

news2024/11/28 6:41:14

差分升级算法研究及改进

文件差分算法通过对不同文件的片段进行对比查找差异,将差异描述输出为差分文件。

差分算法是差分升级的关键技术,因此,差分算法的性能决定着整个升级系统的性能。

差分算法研究

差分更新又称为增量编码,差分字节升级文件仅包括固件版本间字节的差别描述,因此所形成的文件远比固件版本文件小。

可以通过无线固件升级的软件包括系统、驱动等。

字节差分算法通过降低升级包大小从而降低数据传输成本。

因此,如何将生成的差分文件压缩到最小,成为各软件技术提供商竞争的核心方面。

很大一部分的文件差分算法均基于LCS(最长公共子序列)问题,旨在找出醉相思的片段进行二进制文件之间的差异描述与字节替换。

在差分算法中,目前应用最广泛的是Bsdiff和Xdetla算法,在UNIX系统和一些现代软件例如Chrome中,就采用基于Bsdiff算法的方式进行文件的增量描述,并且被大量运用于移动互联网云存储领域、手机操作系统更新。

Bsdiff
Bsdiff是一种基于LCS问题的差分算法,采用近似匹配算法对文件进行比对。

Bsdiff中采用了后缀字典排序算法,使整个匹配过程可以按照二分查找进行,从而达到O(log N)的查找时间,具体流程如下:

  1. 输入旧版本文件OLD
  2. 获取文件的后缀数组
  3. 将后缀数组进行字典排序数组I
  4. 递归二分查找新版本文件的相似片段。

后缀排序使用qsufsort算法,例如,旧版本文件为“Bsdifff”,qsufsort算法会生成“f”,“ff”,“iff”,“diff”,“sdiff”,“Bsdiff”的完整后缀数组。

之后使用快速排序将数组按字典序排序,即为“Bsdiff”,“fidd”,“f”,“ff”,“iff”,“sdiff”。该算法生成的数组I即为字典序数组在old文件中所存在的起始位置,在本例中,数组为I={0,2,5,4,3,1}。

而Bsdiff就是利用qsufsort生成的数组进行文件之间的相似字节匹配。
在这里插入图片描述

在新旧版本匹配时,新版本文件指针为Scan,旧版本文件指针为Pos,Scan每向前移动一步,就调用递归二分查找找到新旧版文件匹配字节数最长的位置并返回匹配匹配长度len。其中Completely matched area为完全匹配区域,代表这个区域的新旧版本文件是完全相同的。

递归二分查找算法search的关键代码如下,其中,newsize为新版本文件字节长度,oldsize为旧版本文件字节长度,scan为新版本文件中的文件指针,pos为旧版本文件中的文件指针,x为当前查找的数据在数组I中的位置,st代表二分区间起始位置,en代表二分区间结束位置。

在这里插入图片描述
在Bsdiff算法中,关键步骤为寻找近似匹配区域,这个近似匹配区域“黏附”在完全匹配区的左右,近似匹配区域的存在是为了减小Patch差分文件的大小。

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

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

相关文章

yarn介绍与说明

1.介绍 说明:Yarn 是一个由 Facebook、Google、Exponent 和 Tilde 公司联合推出的新一代 JavaScript 包管理工具,用于取代 npm。与 npm 相比,Yarn 可以更快地下载依赖,更好地管理依赖版本,更稳定地构建依赖关系。 2.…

AWVS扫描工具使用教程

AWVS是一款Web漏洞扫描工具,通过网络爬虫测试网站安全,检测流行的Web应用攻击,如跨站脚本、sql 注入等。据统计,75% 的互联网攻击目标是基于Web的应用程序。 AWVS的主要功能模块 Blind SQL Injector:盲注工具 HTTP E…

单元测试报错 No tests found for given includes: [StudyApplicationTests.contextLoads]

当你运行单元测试报错No tests found for given includes: [StudyApplicationTests.contextLoads] 如下: 可能是因为你的gradle测试默认使用的是以gradle启动,改成以IDEA启动即可

力扣 64. 最小路径和

文章目录 题目描述解题思路 题目描述 https://leetcode.cn/problems/minimum-path-sum/ 解题思路 问题类型&#xff1a;动态规划 private int MinPathSum(int[][] grid) {for (int i 0; i < grid.Length; i) {for (int j 0; j < grid[i].Length; j) {if (i 0 &am…

Vue3 Diff 算法简易版

背景 学习一下Vue3中的diff算法~ 逻辑概述 这个算法的过程不算太复杂&#xff1a; 同时从新旧列表的头部遍历&#xff0c;找出相同的节点&#xff0c;则patch&#xff0c;否则就停止遍历&#xff1b;同时从新旧列表的尾部遍历&#xff0c;找出相同的节点&#xff0c;则patc…

使用Jetpack Compose中的LazyHorizontalGrid构建灵活的水平网格布局

在这篇博客中&#xff0c;我们将探讨如何使用Jetpack Compose中的LazyHorizontalGrid构建灵活的水平网格布局。 什么是LazyHorizontalGrid&#xff1f; LazyHorizontalGrid是Jetpack Compose中的一个组件&#xff0c;它可以用来创建一个灵活的、可滚动的水平网格布局。这个组件…

django 自定义分页类和使用总结

一、关于为何要分页 当处理大量数据时&#xff0c;如果一次将这些数据查询出来进行响应&#xff0c;必然对服务器内存、负载有所影响&#xff0c;影响低接口响应&#xff0c;进而影响用户体验。 常见的方式是将数据分段展示给用户&#xff0c;如果当前分段中没有需要的数据&am…

Leetcode:84. 柱状图中最大的矩形(单调栈C++)

目录 84. 柱状图中最大的矩形 问题描述&#xff1a; 实现代码与解析&#xff1a; 单调栈 原理思路&#xff1a; 84. 柱状图中最大的矩形 问题描述&#xff1a; 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。…

Redis 7 十大数据类型

10大数据结构图示 10大数据类型&#xff1a; redis字符串(String)redis列表(ist)redis哈希表(Hash)redis集合(Set)redis有序集合(ZSet)redis地理空间(GEO)redis基数统计(HyperLogLog)redis位图(bitmap)redis位域(bitfield)redis流(Stream) Redis键(key) 命令不区分大小写&am…

数据结构-堆的创建(详解)

目录 堆的概念及结构 堆的实现 堆的向上调整算法 代码实现&#xff1a; 思路详解&#xff1a; 堆的向下调整算法 代码实现&#xff1a; 思路详解&#xff1a; 堆的创建&#xff1a; 堆结构的定义及相关函数的声明&#xff1a; 堆的初始化&#xff1a; 堆的销毁&#x…

如何减少图片大小内存?压缩图片内存大小的方法介绍

什么时候需要压缩图片内存大小 随着移动设备的普及和社交媒体的盛行&#xff0c;我们经常需要通过分享图片来传达信息和与他人互动。然而&#xff0c;有时候图片的文件大小过大&#xff0c;可能会导致上传、下载或发送过程中遇到问题。以下是一些常见情况下需要压缩图片内存大…

插值应用案例2

案例1 高点和高程 在一丘陵地带测量高程&#xff0c;x和y方向每隔100m测一个点&#xff0c;得到高程如下表所列&#xff0c;试插值一曲面&#xff0c;确定合适的模型&#xff0c;并由此测到最高点和相应的高程。 x0/z0\y0 100 200 300 400 500 100 636 697 624 478 …

Android GlSurfaceView 入门教程 : 绘制一个三角形

1. GlSurfaceView是什么 GlSurfaceView是Android中的一个类&#xff0c;继承自SurfaceView&#xff0c;用于显示OpenGL ES图形渲染的一个视图。 OpenGL ES是一种跨平台的图形API&#xff0c;用于渲染2D和3D图形&#xff0c;也可以将相机的画面显示到GlSurfaceView上&#xff0…

Spring Boot 中的 SQL 注入攻击是什么,原理,如何预防

Spring Boot 中的 SQL 注入攻击是什么&#xff0c;原理&#xff0c;如何预防 随着互联网的发展&#xff0c;Web 应用程序的数量不断增加&#xff0c;而 SQL 注入攻击也成为了常见的网络安全问题之一。SQL 注入攻击是通过在 Web 应用程序中注入恶意的 SQL 代码&#xff0c;从而…

@RestController 和 @Controller的区别?

Controller 返回一个页面单独使用 Controller 不加 ResponseBody的话一般使用在要返回一个视图的情况&#xff0c;这种情况属于比较传统的Spring MVC 的应用&#xff0c;对应于前后端不分离的情况 RestController 返回JSON 或 XML 形式数据 但RestController只返回对象&#…

FPGA综合设计实验:基于PWM脉宽调制的呼吸流水灯设计

目录 一、引言 二、项目准备 1.项目预期目标 2.项目原理及总体实现思路 三、项目模块设计 1.顶层模块 2.按键控制模块 3.呼吸灯模块 4.数码管显示模块 5.二进制转BCD码模块 四、项目测试 1.仿真测试 2.实物测试 五、项目总结 1.选题思考与过程反思 2.设计的具体…

MySQL之常见的CRUD面试题【上】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于MySQL数据库的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 导读&#xff1a; 一.数据库的连表…

如何获得免费英文文献翻译呢?

我偶然之间发现的一个小技巧分享给大家&#xff01; 这个方法很简单&#xff0c;巧妙地运用了某外国浏览器自带的翻译功能&#xff0c;所以我们需要的是某外国浏览器 1.将需要翻译的pdf文档保存 2.进入http://pdfdo.com/pdf-to-html.aspx将PDF转为网页 3. 上传文件后耐心等待转…

web学习--SpringMVC--1 基础学习

写在前面&#xff1a; 所有的web学习基于springboot项目&#xff0c;而不会去单独的使用spring来进行。 文章目录 SpringMVC介绍原理MVC模式 入门使用导入依赖编写controller类 详细介绍注解详解ControllerRequestMappingResponseBodyRestControllerRequestParamRequestBodyR…