操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个
Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析
目录
一、论文核心思想
二、基本定义
2.1 关键性指标
2.2 任务及相关参数定义
2.3 几个基础定义
三、可调度性分析
3.1 调度算法分类
3.2 DP算法分析
3.3 FJP与FTP算法分析(分析相对于DP的劣势)
3.4 FTP 和 EDF对比
四、混合优先调度
4.1 算法详情
4.2 算法评价
五、结论
一、论文核心思想
本文主要论证了在混合关键系统中各种调度协议不能像在其他没有关键性参数的RTOS系统中存在简单的相互支配(如EDF算法支配所有的FTP算法),并基于Audsley算法与Vestal算法提出了一种新的算法改良,在具有多重关键性要求的系统中不同的任务需要以不同的置信度确保在截止日期前完成,本文利用 WCET 的这种多重规范来获得更好的处理器利用率并证明了这种算法在混合关键系统的任务调度中支配EDF算法与Vestal算法,但依旧不能支配FJP算法(后续会做解释)
二、基本定义
2.1 关键性指标
从A到E,关键级别依次降低,A失败的结果是灾难性的,B是非常危险,以此类推。
尽管 RTCA DO-178B 标准仅指定了五个关键级别 A-E,但没有特别理由要求系统最多具有五个级别。 因此,文章在这里考虑一个系统模型,其中有任意多个不同的关键级别,用正整数表示,整数越大表示关键程度越高。 (因此,RTCA DO-178B 关键级别 A 将映射到 5,级别 E 映射到 1。)
多关键性零星任务模型:假设每个任务都有一对应用于不同关键水平的WCET估计量,系统可以根据实际执行行为在运行时切换不同的关键模式。
2.2 任务及相关参数定义
考虑多关键性零星任务系统的抢占式单处理器调度。 这样一个多关键性零星任务系统 τ 由 n 个多关键性零星任务 τ1,...,τn 组成。 每个任务 τi 由以下参数表征
WCET 函数 Ci : N+ → R+,指定不同关键级别的 WCET:关键级别l的 WCET 等于 Ci(l)。 在不失一般性的情况下,我们假设 , Ci(l) ≤ Ci(l+1) 。
相对期限参数 Di。
最小到达间隔或周期参数 Ti。
关键水平 Li,Li ∈ N+。
2.3 几个基础定义
定义 1(可行性和可调度性)如果算法 A 始终满足 τ 的所有截止日期并达到所需的保证水平,则称多临界零星任务系统 τ 可由调度算法 A 调度。 如果存在某种调度算法 A 使得 τ 可由 A 调度,则称 τ 是可行的。
定义 2(同步到达序列 (SAS))零星任务 τi 的作业同步到达序列包括 τi 的第一个作业到达时刻零,后续作业恰好到达 Ti 时间单位。 任务集合的同步到达序列由任务集合中每个单独任务的同步到达序列的并集组成。
定义二解释:个人理解实际上就是到达时间为n*Ti,其中n为整数
定义 3 对于任意多临界零星任务系统 τ ,我们定义对应的传统零星任务系统为
在这里,每个传统的零星任务系统都由 3 元组(WCET,相对截止日期,期间)表示。
定理 1 多临界性零星任务系统 τ 是可行的当且仅当相应的传统零星任务系统是可行的。
证明:考虑一种调度算法,该算法能够在不同作业之间实施时间隔离,允许每个作业仅执行预定的时间量。 可以使这样的算法在最多 Ci(Li) 时间单位内执行 τi 的每个作业,从而基本上忽略 WCET 的多个规范,并将每个多临界零星任务视为传统零星任务。
三、可调度性分析
从可行性分析的角度来看,多临界零星任务系统与传统的零星任务系统是相同的。 尽管如此,关于多临界性零星任务系统的调度还有许多有趣的未解决问题; 当限制可能使用的调度算法种类时,多关键性零星任务系统与传统零星任务系统有很大不同。
3.1 调度算法分类
根据对作业分配优先级的方式的限制,将分为三类用于调度零星任务系统的算法:
1. 固定任务优先级 (FTP) 调度:给定任务生成的所有作业都分配相同的优先级。
2. 固定作业优先级(FJP)调度:同一任务的不同作业可能有不同的优先级。 然而,每个作业的优先级在其到达时间和完成时间之间可能不会改变。
3. 动态优先级(DP)调度:作业的优先级可能会在发布时间和完成时间之间发生变化。
从定义上可以看出,FJP调度是FTP调度的推广,DP调度是FJP调度的推广。 在传统(即非多关键性)任务系统的单处理器调度中,FJP 调度算法最早期限优先(EDF)被认为是最优的,因为 EDF 总是满足所有可行的传统零星任务系统的所有期限;而DP 调度算法(通常会产生更大的运行时实现开销)并不常用于调度此类任务系统。
在这项研究中,我们考虑更通用的 FJP 和 DP 算法。
3.2 DP算法分析
由于 DP 算法类包括所有调度算法,因此根据定义,所有可行的多临界零星任务系统都可以通过某种 DP 调度算法进行调度。 因此,当且仅当对应的传统零星任务系统(见定义 3)可行时,多临界零星任务系统 τ 是 DP 可调度的。
3.3 FJP与FTP算法分析(分析相对于DP的劣势)
一些调度程序能够在运行时强制执行不同作业之间的时间隔离。 也就是说,每个作业都分配了最大执行量,并且调度程序能够确保没有作业超过分配给它的执行量。 在这样的系统中,没有作业依赖于另一个作业的调度,因此作业的完成不受其他作业执行时间估计准确性的影响。
现在,任何在作业之间实现时间隔离的算法都可以在 DP 优先级驱动调度算法的框架内实现,只需在适当的时刻简单地提高和降低作业的优先级。 然而,这不能在 FJP 和 FTP 调度算法中完成:FJP 和 FTP 算法本身不能保证作业之间的时间隔离
在传统的零星任务系统中,所有可行的任务系统也可以使用某种 FJP 调度算法(特别是 EDF)进行调度。以下示例说明多关键性零星任务系统并非如此:
示例 1 考虑由两个任务 τ1 和 τ2 组成的任务系统,具有以下参数:
通过考虑这两种可能性——(i) τ1 具有更高的优先级,以及 (ii) τ2 具有更高的优先级——可以验证该系统不是 FTP 可调度的。 它也不是 FJP 可调度的,如下面的论证所示。 让我们在调度 SAS 时考虑每个任务的第一个作业,并考虑两种可能性:τ1 的第一个作业比 τ2 的第一个作业具有更高的优先级,反之亦然。
1. 当 τ1 的第一个作业比 τ2 的第一个作业具有更高的优先级时:在这种情况下,τ2 的第一个作业不能保证在保证级别 1 的截止日期前完成:因为 C1(2) = 5,τ1 的第一个作业将在间隔 [ 0, 5), 从而允许 τ2 的作业完全不执行。
2. 当 τ2 的第一个作业比 τ1 的第一个作业具有更高的优先级时:在这种情况下,τ1 的第一个作业不能保证在保证级别 2 的截止日期前完成:因为 C2(2) = 5,所以 τ2 的第一个作业将在区间 [0 , 5), 并在截止日期前只为 τ1 的工作留下一个执行单元。
然而,由于 C1(L1)/T1 + C2(L2)/T2 =5/6+0.5/5 < 1,根据定理 1 的结果,该系统是可行的,因此是 DP 可调度的。
C1/T1 + C2/T2+.... < 1是DP算法中计算是否可调度的公式
也就是存在可使用 DP 调度算法进行调度的多临界零星任务系统,这些系统不能使用任何 FTP 或 FJP 调度算法进行调度。
3.4 FTP 和 EDF对比
对于传统的零星任务系统,从可调度性的角度可知EDF主导FTP调度——所有可通过FTP调度调度的任务系统也可通过EDF调度,而有些可通过EDF调度的任务系统不存在FTP调度。 (这是 EDF 最优性的直接结果,事实上没有 FTP 算法在能够调度所有可行的零星任务系统的意义上是最优的。)但是,这种优势不会延续到多关键零星任务系统,如以下简单示例所示。
示例 2 考虑由两个任务 τ1 和 τ2 组成的任务系统,具有以下参数:
τ1 是一个更高关键性的任务。 通过为 τ1 分配比 τ2 更高的优先级,可以验证这两个任务都在所需的关键级别上满足了它们的截止日期; 因此,该系统是 FTP 可调度的。
现在考虑 EDF,让我们关注 SAS 中 τ1 的第二项工作。 回想一下,多关键性任务模型的语义要求用于确保任务满足其截止日期的所有 WCET 值与任务所需的保证级别相同。 比 τ1 的第二个工作具有更高优先级的工作是 τ2 的第一个工作,并且通过传递性,是 τ1 的第一个工作。 WCET 的 C1(2) 和 C2(2) 必须用于确定 τ1 是否满足其截止日期。 但是在使用这些 WCET 估计在 SAS 上模拟 EDF 时,很容易看出 τ1 的第二个作业在时间点 8 错过了它的截止日期(因为 τ1 的第一个作业在 [0, 2] 上执行,而 τ2 的作业在 [2, 7] 上执行) ,从而只留下一个执行单元,而不是 τ1 在截止日期前的第二个作业所需的两个单元)。
其实我觉得这个例子存在一定的问题,如果要细究的话,FTP调度中的第一轮t在0-2时任务1执行t在2-4时任务2执行,t在4-6时任务1抢占执行,则任务二依旧可能会错过D2(因为为文章给出的EDF调度中任务2的最坏执行时间是按5计算的)。只是任务2的关键性低于任务1,但系统不一定是FTP可调度的。
定理3 FTP和EDF在多临界零星任务系统的调度中是不可比拟的调度策略。
四、混合优先调度
4.1 算法详情
正如上面定理 1 中所讨论的,Vestal 算法(产生最佳 FTP 优先级分配)和 EDF 在涉及多临界零星任务系统时是无法比拟的。 我们在本节中的目标是获得一种调度算法,该算法泛化了 EDF 和 Vestal 算法,并且在多关键性零星任务系统的调度中证明优于两者。 它结合了 FTP 调度和 EDF 的特点。 为了使用这种混合调度策略来调度多关键性零星任务系统 τ,我们必须为 τ 中的每个任务分配一个(不一定是唯一的)优先级。 根据定义,这些优先级是完全相互排序的:只要一个优先级中的作业在运行时等待执行,就不会执行较低优先级的作业。 在每个优先级内,将使用 EDF 安排任务。
同步到达序列 (SAS) 代表最坏情况下的到达序列——如果针对给定的优先级分配使用混合优先级调度来安排零星任务系统的 SAS 以满足所有截止日期,则零星任务 系统将始终满足具有相同优先级分配的混合优先级调度下的所有截止日期。后续将使用这个 观察作为设计多关键零星任务系统的混合优先级调度的优先级分配算法的基础。
优先级分配算法 ASSIGNPRIORITIES(τ ) 是 Audsley 算法的推广,用于在 FTP 调度系统中分配优先级。 过程 AUGMENTEDAUDSLEY(τcur,p) 接受一组任务 τcur ⊆ τ 和优先级 p 作为输入,并确定 τcur 中的哪些任务可以分配优先级 p,哪些必须分配更高的优先级。
在考虑当前优先级 p 的 AUGMENTEDAUDSLEY 中的每个步骤中,τcur 保留尚未排除分配优先级 p 的任务集,τhi 包含已确定需要分配更高优先级的任务集 。开始对 AUGMENTEDAUDSLEY 的初始调用具有最低优先级和所有任务(即 p ← 1 和 τcur ← τ )。
在 AUGMENTEDAUDSLEY 的执行期间,任何被识别为不能保证在当前优先级满足其时序约束的任务必须分配更高的优先级——这样的任务从 τcur 中删除并添加到 τhi。 为了识别在当前优先级无法满足其时序约束的任务,模拟了 (τcur ⋃ τhi) SAS 的混合优先级调度,已经分配了优先级的任务 <p 不需要考虑,因为它们不影响优先级为 p 或更高的任务的调度。
归结的流程如下:
1. 首先让 π1,π2,...,π 表示 τcur 中任务的不同关键级别,按降序排列。用使用 Ci(π1) 作为任务的 WCET; 如果 τcur 中具有临界级别 π1 的任务的所有作业截止日期都得到满足,则它使用 Ci(π2) 作为任务的 WCET 来模拟 (τcur ⋃ τhi) 的 SAS 的混合优先级调度; 如果 τcur 中具有临界级别 π2 的任务的所有作业截止日期都得到满足,它接下来使用 Ci(π3) 作为任务的 WCET 来模拟 (τcur ⋃ τhi) 的 SAS 的混合优先级调度。如果用最低关键级别Ci(πl)用作WCET时满足 τcur 中所有最低关键级别的截止日期,那么就可以完成 τcur 中所有任务都被分配了优先级p时的调度保障
2. 当某个任务在关键级别πj关键级别实验失败时,令 τk 表示具有关键性 πj 的任务生成第一个错过其截止日期的此类作业。 为了让这个作业满足它的截止日期,它有必要比 SAS 中 τcur 分配的优先级 p 中某个任务的某个更早截止日期的作业具有更高的优先级。
3. 以这种方式为 τk 分配了更高的优先级后, 必须再次重新检查整个系统(第 3-5 行中的 while 循环)。 也就是说,它重新模拟 SAS 在每个关键级别 π1、π2、... 的调度,除了现在为 τk 分配的优先级高于 τcur 中剩余的任务。 这样做时,可以确定一些其他任务 τ ′ k 是否也需要提升到更高的优先级。
4. 与Audsley 方法 一样,AUGMENTEDAUDSLEY 本质上是识别要分配当前优先级 p 的任务,后续会继续在τhi中进行递归,逐渐生成更多优先级为p+1,p+2等等各类任务。但若τcur在执行后变空,即所有任务都需要升级优先级(则算法本质上没啥意义了),返回调度失败。
后续的具体执行如下图所示:
算法是为了解决Vestal提出的任务模型在动态优先级调度下的可调度性问题。算法的目标是给每个任务分配一个虚拟截止时间,使得在不同的关键性模式下,任务的虚拟截止时间都不会超过它们的真实截止时间,并且任务集能够被EDF调度。伪代码如下:输入:一个具有多重关键性规范的任务集 T = {T1, T2, ..., Tn}
输出:一个虚拟截止时间分配方案,如果存在的话,或者“不可调度”
开始对于 T 中的每个任务 Ti,计算它的关键性等级 Li = max{L | Ci(L) > 0}按照关键性等级从高到低对 T 中的任务进行排序让 Lmax 为 T 中任何任务的最高关键性等级对于 L = Lmax 到 1,执行以下操作:让 TL 为 T 中关键性等级至少为 L 的任务子集让 CL 为 TL 在 L 等级下的总利用率如果 CL > 1,那么返回“不可调度”让 DL 为 TL 中任务相对截止时间的不同值集合按照相对截止时间从小到大对 DL 进行排序让 D0 = 0 和 Dk+1 = infinity,其中 k >= |DL|对于 j = 1 到 k,执行以下操作:让 Uj 为 TL 中相对截止时间不超过 Dj 的任务的总利用率让 Wj 为 TL 中相对截止时间不超过 Dj 的任务在 [Dj-1, Dj] 内的总工作量如果 Wj > Uj * (Dj - Dj-1),那么返回“不可调度”让 Vj 为 TL 中相对截止时间等于 Dj 的任务集合对于 Vj 中的每个任务 Ti,按照以下方式分配虚拟截止时间 Di(L):Di(L) = min{Di(L+1), Dj - (Wj - Uj * (Dj - Dj-1)) / Ui(L)}如果 Di(L) < Di,那么返回“不可调度”结束循环结束循环返回虚拟截止时间分配方案
结束这种算法的核心思想是从最高的关键性等级开始,逐步给每个任务分配一个虚拟截止时间,使得每个关键性等级下的任务集都能满足EDF调度的充分条件。
4.2 算法评价
算法用于为多关键性零星任务系统中的任务分配优先级,以便使用混合优先级调度算法调度生成的系统以满足其各自所需保证级别的所有时序约束 . 我们现在将这种方法与其他可能的多关键零星任务系统调度方法进行比较。
首先,该算法支配 EDF 调度:任何可被 EDF 调度的 τ 将被该算法确定为可调度,并且 τ 中的所有任务都被分配相同的最低优先级。 也就是说,第一次调用 AUGMENTEDAUDSLEY(τ, 1) 通过执行第 8 行的返回语句来声明成功,并且不再对 AUGMENTEDAUDSLEY 进行递归调用。
该算法也支配了 Vestal 算法。 Vestal 算法在每个优先级必须恰好分配给它一个任务的意义上更具限制性; 不难证明,Vestal 算法找到这种优先级分配的任何 τ 也将具有我们的算法找到的优先级分配。
如定理 2所示,存在可行的多临界零星任务系统,这些系统可以使用动态优先级算法进行调度,但不能使用任何 FJP 或 FTP 算法进行调度。 而对于该算法也是如此,即有些任务系统是 FJP 可调度的,但不能使用算法进行调度。
(举例略,文章中例子很好理解)
五、结论
Vestal 提出的多关键性任务模型代表了安全关键型实时系统的建模和分析方面潜在的非常重要的进步。 在本文中,我们试图更好地理解多关键性零星任务系统的抢占式单处理器调度。 我们已经研究了基本的调度理论问题——表现力; 可行性; 特定类别的调度算法的可调度性; 等等——必须理解这些才能完全理解新的任务模型。 我们从这项研究中学到了很多与我们之前使用传统零星任务系统的经验相反的东西:例如,我们了解到 EDF 不是调度多临界零星任务系统的最佳算法,而且 EDF 和固定优先级调度是无法比较的 . 我们还推导出并评估了一种新方案,用于在抢占式单处理器上调度此类多关键性零星任务系统,并表明该新方案优于先前提出的方案。
相关文章:
操作系统论文导读(八):Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个
Schedulability analysis of sporadic tasks with multiple criticality specifications——具有多个关键性规范的零星任务的可调度性分析 目录 一、论文核心思想 二、基本定义 2.1 关键性指标 2.2 任务及相关参数定义 2.3 几个基础定义 三、可调度性分析 3.1 调度算法分…...
Android IO 问题:java.io.IOException Operation not permitted
问题描述与处理策略 1、问题描述 java.io.IOException: Operation not permittedjava.nio.file.FileSystemException: /storage/emulated/0/test/test.txt: Operation not permittedjava.io.IOException: Operation not permitted:异常为操作不被允许 java.nio.f…...
Unity Mesh生成Cube
1. 配置一个Cube的每个面的数据 一共是6个面,每个面包含的数据包括4个顶点的相对顶点坐标(Cube的中心为原点),法线方向,UV坐标,顶点渲染顺序,以及这个面用到的材质,因为这里是Top&am…...
Wend看源码-Java-Collections 工具集学习
摘要 java.util.Collections它提供了一系列静态方法,用于对集合(如List、Set、Map等)进行操作。这些操作包括排序、查找、替换、同步等多种功能,帮助开发者更方便地处理集合数据。以下是Collections 提供的一些主要方法的总结。…...
怎样用 Excel 做数据分析?
与其单纯地学习怎么使用Excel,不如结合AI工具来进行数据分析。 接下来就来盘一盘AI在Excel做数据分析方面会带来哪些改进和帮助。 原本不能非常复杂的公式,变成聊天的方式。Excel门槛被大大降低,以前技术大佬才能干的活,现在前台…...
深度学习——损失函数汇总
1. 连续值损失函数 总结:主要使用胡贝儿损失函数,应用于连续数值的预测之间的误差损失,参考地址 import torch import torch.nn as nna = torch.tensor([[1, 2], [3, 4]], dtype=torch.float) b = torch.tensor([[3, 5], [8, 6]], dtype=torch.float)loss_fn1 = torch.nn.M…...
KAFKA入门:原理架构解析
文章目录 一、认识kafka二、架构介绍2.1 工作流程2.2 Kafka可靠性保证2.3 Kafka存储 一、认识kafka Kafka到底是个啥?用来干嘛的? 官方定义如下: Kafka is used for building real-time data pipelines and streaming apps. It is horizont…...
记录第一次跑YOLOV8做目标检测
今天是24年的最后一天,终于要向新世界开始破门了,开始深度学习,YOLO来敲门~ 最近做了一些皮肤检测的功能,在传统的处理中经历了反复挣扎,终于要上YOLO了。听过、看过,不如上手体会过~ 1、YOLO是什么&#x…...
全场景——(十一)综合实现
文章目录 一、产品框架1.1 硬件框架1.2 设计思路1.2.1 上位机如何定位到传感器1.2.2 上位机如何读写传感器1.2.3 中控如何读写传感器1.2.4 上位机如何发送映射关系、传输固件1.2.5 上位机界面 1.3 软件框架 二、改造libmodbus 实现文件传输2.1 分析Write File Record 功能2.2 实…...
mysql系列7—Innodb的redolog
背景 本文涉及的内容较为底层,做了解即可,是以前学习《高性能Mysql》和《mysql是怎样运行的》的笔记整理所得。 redolog(后续使用redo日志表示)的核心作用是保证数据库的持久性。 在mysql系列5—Innodb的缓存中介绍过:数据和索引保存在磁盘上…...
数据表中列的完整性约束概述
文章目录 一、完整性约束概述二、设置表字段的主键约束三、设置表字段的外键约束四、设置表字段的非空约束五、设置表字段唯一约束六、设置表字段值自动增加七、设置表字段的默认值八、调整列的完整性约束 一、完整性约束概述 完整性约束条件是对字段进行限制,要求…...
深入解析 Wireshark 的 TLS 设置:应用场景与实操技巧
简述 在网络数据分析中,传输层安全(TLS)协议的流量解密和分析是一项重要的技能。Wireshark 提供了专门的设置选项,帮助用户处理 TLS 流量,例如解密会话、重组分片等。本文将详细解析上图所示的 Wireshark TLS 设置功能…...
小波与傅里叶变换在去噪效果上的对比分析-附Matlab源程序
👨🎓 博主简介:博士研究生 🔬 超级学长:超级学长实验室(提供各种程序开发、实验复现与论文指导) 📧 个人邮箱:easy_optics126.com 🕮 目 录 摘要一、…...
Tailwind CSS 实战:社交媒体信息流开发
在社交媒体的世界里,信息流就像是一条永不停歇的河流,承载着用户的分享与互动。记得在一个社交平台项目中,我们通过重新设计信息流的展示方式,让用户的平均浏览时长提升了 45%。今天,我想和大家分享如何使用 Tailwind …...
深入解析:谱分解、SVD与PCA在算法中的应用与实现
特征值分解(EVD)、奇异值分解(SVD)和主成分分析(PCA)是矩阵分解技术的三种重要形式,它们在人工智能中扮演了关键角色。随着数据维度的快速增长和信息复杂度的提升,这些技术为处理高维…...
C#编写的金鱼趣味小应用 - 开源研究系列文章
今天逛网,在GitHub中文网上发现一个源码,里面有这个金鱼小应用,于是就下载下来,根据自己的C#架构模板进行了更改,最终形成了这个例子。 1、 项目目录; 2、 源码介绍; 1) 初始化; 将样…...
Android 系统 AlarmManager 系统层深度定制
Android 系统 AlarmManager 系统层深度定制 目录 引言AlarmManager 概述AlarmManager 系统架构AlarmManager 核心代码解读AlarmManager 深度定制方法 修改 AlarmManagerService 修改定时任务调度策略增加定时任务类型定制内核层 修改定时触发精度增加定时触发类型优化定时任务…...
uniapp-vue3(下)
关联链接:uniapp-vue3(上) 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…...
Debian-linux运维-docker安装和配置
腾讯云搭建docker官方文档:https://cloud.tencent.com/document/product/213/46000 阿里云安装Docker官方文档:https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker-on-a-linux-ecs-instance 天翼云常见docker源配置指导:htt…...
【每日学点鸿蒙知识】tensorflowlite编译、音频编码线程、沉浸式状态栏、TextArea最大字节数限制等
1、如何编译Tensorflow lite库? 之前项目基于tflite推理引擎做人脸识别的功能,鸿蒙侧如何复用tflite模型? tflite对Android和iOS本身支配了GPU支持,但是鸿蒙侧目前并没有,鸿蒙提供了自己的推理引擎,而且支…...
Windows上Git LFS的安装和使用
到Git LFS官网下载 传送门 初始化GitHub LFS和Git仓库 在仓库目录中运行: git lfs install再运行: git init跟踪大文件 git lfs track "*.zip"添加并提交文件 git add . git commit -m "Add large files"上传到我的github 配…...
嵌入式入门Day37
作业 驱动机械臂 #include <myhead.h>#define IP "192.168.124.16" #define SERPORT 8888int main(int argc, const char *argv[]) {//创建套接字int oldfd socket(AF_INET, SOCK_STREAM, 0);if (oldfd -1){perror("socket");return -1;}//连接服…...
MySQL 的事务与多版本并发控制(MVCC)的那些事
什么是事务原子性:一致性隔离性 问题1: 为什么MySQL要使用mvcc实现隔离性而不使用 锁 解决并发问题?持久性 问题2: MySQL 不是磁盘数据库吗,持久化为什么是 redo log 保证的?问题 3: redo log 储存了什么东西,持久化(崩溃恢复是怎么做的?)问题 4 : MySQL 的 bing log (二进制…...
二层交换机和三层交换机
一、交换机简述 交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。交换机还具备了一些新的功能,如对VLAN(虚拟局域网)的支持、对链路汇聚的支持,甚至有的还具有防火墙的功能。 交换机除了能够连接同种类型…...
Win32汇编学习笔记01.环境配置
Win32汇编学习笔记01.环境配置-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net 环境配置 masm32下载 官网:http://www.masm32.com/安装 成功标志 环境配置: 将masm32下的bin目录添加到path新建include,将masm32目录下的in…...
[创业之路-232]:《华为闭环战略管理》-5-组织架构、业务架构、产品架构、技术架构、项目架构各自设计的原则是什么?
目录 一、组织架构设计原则 二、业务架构设计原则 三、产品架构设计原则 四、技术架构设计原则 五、项目架构设计原则 一、各自的组成元素 组织架构、业务架构、产品架构、技术架构、项目架构各自的组成元素具体如下: 组织架构 - 组织企业相似资源的方式&…...
数组方法 | vue修改数组
数组方法 修改原数组 push() 方法(在数组结尾处)向数组添加一个新的元素 var list["数学","历史"]; list.push("英语"); ["数学","历史","英语"]unshift() 方法(在开头&…...
tcp_rcv_synsent_state_process函数
tcp_rcv_synsent_state_process 是 Linux Kernel 中用于处理 TCP 连接在 SYN-SENT 状态下接收到报文的函数。这个函数在 TCP 三次握手阶段起到了至关重要的作用,处理了在客户端发送 SYN 请求之后收到服务器响应报文的各种情况。 以下是这个函数的解读和剖析: int tcp_rcv_sy…...
【Qt】信号和槽机制
目录 1.信号和槽的理解 Qt内置类的继承关系 2.connect方法 参数 使用示例 2.1 disconnect断开信号槽 2.2 查看内置类型的信号和槽 3.自定义槽函数 3.1 代码方式自定义槽函数 3.2 图形化方式自定义槽函数 4.自定义信号 5.带参数的信号和槽 6.信号和槽的关联关系 7…...
【Pytorch实用教程】循环神经网络中使用dropout需要注意的问题
文章目录 问题解答警告的具体含义解决方案示例代码总结问题 UserWarning: dropout option adds dropout after all but last recurrent layer, so non-zero dropout expects num_layers greater than 1, but got dropout=0.3 and num_layers=1 warnings.warn("dropout op…...
展望2025:在创新与协作中创造价值、奉献佳作
2025,就像远方闪耀着希望之光的灯塔,正逐步靠近我们的视野。在这个充满无限潜力的年份里,我们满怀壮志,立志创造更多价值,为大家呈上更多出类拔萃的作品。 往昔岁月,犹如一幅徐徐展开的长卷,上…...
秒鲨后端之MyBatis【3】自定义映射resultMap、动态SQL、MyBatis的缓存、MyBatis的逆向工程、分页插件(30000字)
这里我分享一下尚硅谷的pdf100页笔记和代码,大家可以参考学习。 笔记: 通过网盘分享的文件:MyBatis.pdf 链接: https://pan.baidu.com/s/14Iu1Zs-_5vZoRjBEjmagag?pwdyjh6 提取码: yjh6 --来自百度网盘超级会员v1的分享代码: …...
springboot之集成Elasticsearch
目录 二、Elasticsearch 是什么?三、Elasticsearch 安装四、Springboot 集成 Elasticsearch 的方式五、创建项目集成 Elasticsearch 2.创建 Spring Initializr 项目 es (3).新建实体类 User(4).新建 dao 接口类 UserRe…...
CLIP (Contrastive Language-Image Pre-training)用途及使用方法
CLIP (Contrastive Language-Image Pre-training) 是由 OpenAI 开发的多模态模型,可以同时处理图像和文本。在 Hugging Face 中使用 CLIP 模型主要有以下几个步骤和用途: 安装必要的库: pip install transformers pip install torch pip install Pillow导入所需模…...
2018年西部数学奥林匹克几何试题
2018G1 未完待续… 2018 G2 在 △ A B C \triangle ABC △ABC 中, E E E, F F F 分别在 A B AB AB, A C AC AC 上, 且 B F C E B C BFCEBC BFCEBC. I B I_B IB, I C I_C IC 分别为 ∠ A B C \angle ABC ∠ABC 和 ∠ A C B \angle ACB ∠ACB 所对的旁心, K K…...
华为配置 之 链路聚合
简介: 链路聚合(Link Aggregation)是一种计算机网络技术,通过将多个物理端口汇聚在一起,形成一个逻辑端口,以实现出/入流量吞吐量在各成员端口的负荷分担。当交换机检测到其中一个成员端口的链路发生故障时…...
MIT线性代数教材:Linear Algebra and Its Applications
这本教材是MIT线性代数课程所使用的教材,上课的老师是Gilbert Strang,而教材的作者也是Gilbert Strang。这本书内容比较直观,配图不少,叙述风格比较几何风格。习题也丰富,但并不怎么对我的胃口,因此我也怎么…...
SpringBoot 集成 Activiti 7 工作流引擎
一. 版本信息 IntelliJ IDEA 2023.3.6JDK 17Activiti 7 二. IDEA依赖插件安装 安装BPM流程图插件,如果IDEA的版本超过2020,则不支持actiBPM插件。我的IDEA是2023版本我装的是 Activiti BPMN visualizer 插件。 在Plugins 搜索 Activiti BPMN visualizer 安装 创…...
【数据结构】数据结构简要介绍
数据结构是计算机科学中用于组织、管理和存储数据的方式,以便于高效地访问和修改数据。 数据结构的分类: 数据结构可以大致分为两类:线性结构和非线性结构。 1. 线性结构 线性结构中的数据按顺序排列,每个元素有唯一的前驱和后…...
SQL Server导出和导入可选的数据库表和数据,以sql脚本形式
一、导出 1. 打开SQL Server Management Studio,在需要导出表的数据库上单击右键 → 任务 → 生成脚本 2. 在生成脚本的窗口中单击进入下一步 3. 如果只需要导出部分表,则选择第二项**“选择具体的数据库对象(Select specific database objects)”**&am…...
蓝桥杯JAVA刷题--001
文章目录 题目需求2.代码3.总结 题目需求 2.代码 class Solution {public String convertDateToBinary(String date) {if (date null || date.length() ! 10 || date.charAt(4) ! - || date.charAt(7) ! -) {throw new IllegalArgumentException("输入的日期格式不正确&…...
2025-01-01 NO2. XRHands 介绍
文章目录 软件配置1 XR Hands 简介2 XRHand2.1 Pose2.2 Handedness 3 XRHandJoint3.1 XRHandJointID3.2 XRHandJointTrackingState 4 XRHandSubsystem4.1 数据属性4.1.1 UpdateSuccessFlags4.1.2 UpdateType 4.2 处理器管理:注册和注销4.3 更新手部数据:…...
SQL 实战:复杂数据去重与唯一值提取
在实际开发中,数据重复是常见问题,例如用户多次登录记录、订单状态重复更新等。如何高效提取符合业务需求的唯一值或最新记录,对系统性能和数据准确性至关重要。 本文将探讨如何使用 SQL 的 窗口函数、分组查询 以及 DISTINCT 实现复杂场景下…...
基于BiLSTM和随机森林回归模型的序列数据预测
本文以新冠疫情相关数据集为案例,进行新冠数量预测。(源码请留言或评论) 首先介绍相关理论概念: 序列数据特点 序列数据是人工智能和机器学习领域的重要研究对象,在多个应用领域展现出独特的特征。这种数据类型的核心特点是 元素之间的顺序至关重要 ,反映了数据内在的时…...
基于 SensitiveWordBs 实现敏感词过滤功能
在现代的互联网应用中,敏感词过滤已成为一个必不可少的功能,尤其是在社交媒体、评论审核等需要保证内容健康的场景下。本文将基于开源库https://github.com/houbb/sensitive-word,详细讲解如何通过自定义敏感词库和工具类实现高效的敏感词过滤…...
计算机的错误计算(一百九十八)
摘要 用两个大模型计算 arctan(54.321). 结果保留 16位有效数字。第一个大模型化简有误差;第二个大模型 Python代码几乎完全正确。无论如何,它们的结果均只有 4位数字正确。 例1. 计算 arctan(54.321). 结果保留 16位有效数字。 下面是一个大模型的回…...
递归算法.
本节我们先来了解一下递归算法. 递归算法的基本原理: 说到递归算法,就不得不提到栈.当程序执行到递归函数的时候,将函数进行入栈操作,在入栈之前,通常需要完成3件事. 1.将所有实参,返回地址等信息传递给被调函数储存 2.为被调函数的局部变量分配储存区 3.将控制转移到被调函…...
我的Java-Web进阶--SpringMVC
1.三层架构与MVC模式 三层架构 MVC模式 2.SpringMVC执行流程 3.SpringMVC的基本使用方法 1. 配置 1.1 Maven依赖 首先,在pom.xml文件中添加Spring MVC的依赖: <dependencies><!-- Spring MVC --><dependency><groupId>org.…...
【复刻】ESG表现对企业价值的影响机制研究(2009-2021年)
一、数据来源:ESG数据采用华证ESG评价体系提供的评级结果,控制变量主要来自上市公司年报,内含原始数据、处理代码和基准回归 二、数据指标:资产收益率 净利润 / 平均总资产销售净利率 净利润 / 营业收入托宾Q值 …...
GSM PDU解码在Linux下的C语言实现
GSM PDU解码在Linux下的C语言实现 一、引言二、GSM PDU格式概述三、Linux环境下的C语言实现(一)头文件包含(二)数据结构定义(三)解码函数实现(四)主函数示例四、编译与运行五、注意事项与优化六、结论一、引言 GSM(全球移动通信系统)PDU(协议数据单元)是用于在GSM…...