嵌入式开发:实时系统中的嵌入式数据库

news2025/1/11 20:06:33

  “实时”这个术语是数据库系统供应商随便说说的,但是实时在嵌入式系统中一直有特定的含义。“实时系统意味着系统是实时的,换句话说,响应应该在指定的时间限制内得到保证,或者系统应该满足指定的期限。例如,飞行控制系统、实时监视器等。”换言之,在嵌入式开发中,实时并不意味着真正的快速。在实时系统中,速度不是衡量成功的标准;决定论是衡量成功的主要标准。

  实时系统正以令人难以置信的速度发展。实时系统曾经相对简单,比如飞机上的防抱死制动系统,以及后来的汽车。今天,实时系统更加复杂。高级驾驶辅助系统(ADAS)是典型代表。它们是现代实时系统复杂性的一个很好的例子。ADAS必须接收来自多个不同来源的数据,例如激光雷达、声纳、雷达、光学相机、GPS和地图等,这就产生了一个重大的传感器数据融合问题。有必要将所有数据放在一个中心位置(一个数据库!)以便可以关联、分析和采取行动(启动、停止、转向等),所有这些都在严格的实时期限内完成。

  但问题是:直到最近,还没有商用现货(COTS)嵌入式数据库可以用于实时系统,因为所有产品都不知道最后期限。为了说明这一点,嵌入式开发人员考虑一个必须在50毫秒内做出反应的实时系统。如所示图1,实时任务分别在5毫秒和10毫秒标记处完成前两步。然后,该任务调用数据库运行时。然而,数据库运行时不知道截止日期,直到截止日期到期时才把控制权交还给任务。这个系统失败了。

  

  三个目标

  为了适用于实时系统,嵌入式数据库运行时系统必须达到三个目标。第一,必须让它知道最后期限,并根据给它的最后期限记录已经过去的时间。第二,它不能有任何不具有时间认知的外部依赖。例如,数据库运行时不应调用malloc()(用于动态分配内存的C运行时函数)。第三个目标是它必须能够以适合实时系统的方式调度数据库事务。

  1.最后期限—如果嵌入式数据库系统必须管理截止日期,那么嵌入式数据库运行时必须能够知道截止日期。只要数据库中的工作单元是一个事务,开始一个事务的数据库API就是将截止日期传递到数据库运行时的逻辑位置。随着事务的进行,数据库运行时需要根据截止日期频繁地检查进度,并且如果必要的话,中止事务以满足截止日期。在实时数据库系统中,事务可以满足(成功提交)或错过(成功中止)它们的截止日期,但绝不会迟到(超过它们的截止日期)。实现这一点并不像你想象的那么简单,除非你只针对一个实时操作系统(RTOS),因为不同的RTOS有不同的管理时钟和定时器的方式。图2说明了事务的时间线。嵌入式开发人员感兴趣的是截止时间验证控制点和截止时间控制点。

  

  2.外部依赖性—大多数嵌入式和实时系统都是用C/C++编写的。程序员倾向于自由地使用C运行时(CRT)库中的函数。在许多情况下,这是无害的,但是应该避免调用像malloc这样的CRT函数,或者执行输入/输出。它们具有与图1所示相同的风险:调用任务和(在本例中是数据库运行时)可能会在没有时间认知的CRT函数中消失,并且直到超过截止日期才返回,从而导致系统失败的风险。

  3.行程安排—数据库通常由多个任务/线程/进程使用。数据库运行时必须协调任务对数据库的访问,以避免冲突。在行业术语中,这被称为并发控制,分为两大类:乐观和悲观并发控制。嵌入式开发人员使用悲观并发控制,一个任务请求访问一个资源,该资源可以是整个数据库、一个数据库表或一组表、一个数据库页或表中的一行。不管这些请求的粒度如何,数据库运行时的一个组件(通常称为锁仲裁器或锁管理器)需要协调这些请求。

  通常,这是按照先进先出的顺序进行的。但是这对于实时数据库系统来说是不够的。实时数据库系统必须首先根据开发人员指定的优先级来调度事务,然后在相同的优先级内,首先根据最早的截止日期来调度事务。或者,实时数据库运行时必须利用优先级继承,以便已经运行的低优先级任务的事务可以提升到与新调度的具有更高优先级的事务相同的优先级。

  重新想象的数据库

  今天的实时系统正在经历增长,就像90年代末和21世纪初的嵌入式系统一样,当时嵌入式数据库成为一种必需品,因为嵌入式系统被赋予了更多的任务。业务线/部门计算嵌入式数据库需要重新设计,以便在嵌入式系统的资源限制内运行。这就是McObject的eXtremeDB开发的驱动力。现在,随着硬实时系统中数据管理需求的不断增长,嵌入式开发人员重新设想和设计了eXtremeDB,以创建eXtremeDB/rt,这是第一个在任务和安全关键实时系统的约束下运行的COTS确定性数据库管理系统。

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

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

相关文章

单目标应用:蜣螂优化算法DBO优化RBF神经网络实现数据预测(提供MATLAB代码)

一、RBF神经网络 1988年,Broomhead和Lowc根据生物神经元具有局部响应这一特点,将RBF引入神经网络设计中,产生了RBF(Radical Basis Function)。1989年,Jackson论证了RBF神经网络对非线性连续函数的一致逼近性能。 RBF的基本思想是…

【面试题】对async/await 的了解?

前言大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库“编程,就像一场开卷考试,题目的答案取决于对书本内容的熟悉程度;而一份源代码就好比一本书&#xff0c…

源码才十几行的数组转换工具arrify,快学起来

前言 前几天在项目中运用到了arrify工具,今天便阅读了arrify的源码,整个源码部分不过才十几行,而且也不难,所以来分享一下阅读心得。 arrify介绍 arrify是什么,有什么作用,或许有些小伙伴还不清楚。简单…

web测试的基本流程

1、web测试流程: (1)web测试 1)参与一个web新项目的测试前,先搜集测试相关的资料,包括原型图、各种需求文档、业务相关等需求相关材料 2)结合第一步搜集到的需求相关资料,自行熟悉系统,同时列出不明白的点,…

时间API在更新,传奇已经谢幕,但技术永远不死

(Bill Joy(左一),Vinod Khosla(左二),Andy Bechtolsheim(右二),Scott McNealy(右一) ) CSDN 博文征集活动(和日期相关的代码和bug):点击这里 各位 “big guys”,这篇博文…

植物大战 二叉搜索树——C++

这里是目录标题二叉排序树的概念模拟二叉搜索树定义节点类insert非递归Finderase(重点)析构函数拷贝构造(深拷贝)赋值构造递归FindRInsertR二叉搜索树的应用k模型KV模型二叉排序树的概念 单纯的二叉树存储数据没有太大的作用。 搜索二叉树作用很大。 搜索二叉树的一般都是用…

摸鱼用python获取弹幕的两种方式【前者简单,后者数据好看】

嗨害大家好鸭!我是小熊猫~ 相信大家对于 “弹幕文化” 已经相当熟悉啦 你不是一个人在看——这就是弹幕网站的存在感。 它形成了新的“抱团”观看模式, 也真正实现了无时空距离的社交。 有网友表示,弹幕简直比剧情还有趣。 看似简单的寥寥…

【ES】Elasticsearch-深入理解索引原理

文章目录Elasticsearch-深入理解索引原理读操作更新操作SHARD不变性动态更新索引删除和更新实时索引更新持久化Segment合并近实时搜索,段数据刷新,数据可见性更新和事务日志更新索引并且将改动提交修改Searcher对象默认的更新时间Elasticsearch-深入理解…

CentOS8基础篇9:进程的延迟与周期调度

一、进程的概念 进程:开始执行但是还没有结束的程序的实例 程序:包含可执行代码的文件 进程与程序的关系 进程由程序产生,是一个运行着的、要占系统资源的程序 进程不等于程序 浏览网络时,打开多个IE浏览器程序;…

一文讲清楚如何进行主数据编码

主数据编码作为一类重要的数据资源,在信息化建设中具有重要的地位和作用,是保证现有信息系统和未来新系统建设成功的关键因素,决定着系统中的信息一致性。 编码,是一件简单的事情,但绝对不是一件容易做好的事情&#…

FPGA案例开发手册——基于全志T3+Logos FPGA核心板

前 言 本文档主要提供评估板FPGA端案例测试方法,适用的开发环境为Windows 7 64bit和Windows 10 64bit。 本文案例基于创龙科技的全志T3+Logos FPGA核心板,它是一款基于全志科技T3四核ARM Cortex-A7处理器 + 紫光同创Logos PGL25G/PGL50G FPGA设计的异构多核全国产工业核心板…

PImpl(Pointer to Implementation)指向实现的指针 [使用ChatGPT学习系列]

PImpl是Pointer to Implementation的缩写,也被称为“编译期实现”,是一种C设计的模式。 用于将类的实现细节与其公共接口分离开来。该模式的核心思想是 通过一个指向类的实现的指针来隐藏类的实现细节,从而提高类的封装性和安全性。PImpl是一…

「考研算法」

考研算法 前言 本系列文章涉及的算法内容,针对的是哈尔滨工业大学854科目。在本文中通过具体的算法题进行讲解相应算法。 今天涉及的算法主要有线性筛,十大排序中快速排序和归并排序。 后续会有动态规划的相关算法以及尝试模型的总结,如果…

[Java·算法·中等]LeetCode17. 电话号码的字母组合

每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2题目 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…

本科毕业设计-基于ORB SLAM3的多从机SLAM导航系统

耗时:两个月 需求:多从机协作 多地图系统 稠密建图 定位 导航 硬件:二个D435 一台X86主机(CPU:13600kf 内存:32G) X86主机环境:ubuntu18.04 opencv3.2 ROS1 主要代码参考:ORB-SLAM3 主要调用…

【CNN】FractalNet——与DenseNet有异曲同工之妙

FractalNet论文名称:FractalNet: Ultra-Deep Neural Networks without Residuals FractalNet论文下载链接: FractalNet(分型网络),2016年Gustav Larsson首次提出。 (1)分形网络不像resNet那样…

嵌入式 Linux 文件IO操作

目录 Linux 文件操作 1 Linux 系统环境文件操作概念 2 缓冲 IO 文件操作 1 文件的创建,打开与关闭 fopen 函数函数 2 freopen 函数 3、fdopen函数 4、fclose函数 5、格式化读写 6、单个字符读写 7、文件定位 8、标准目录文件 9、非缓冲IO文件操作 Linux 文…

十二、MyBatis的高级映射及延迟加载

1 数据库表的准备 准备数据库表:一个班级对应多个学生。班级表:t_clazz。学生表:t_stu 2 环境搭建 创建模块 打包方式:jar 引入依赖:mybatis依赖、mysql驱动依赖、junit依赖、logback依赖 配置文件:…

C#/.net程序调用python

C#/.net程序调用python C#的优势在于window下的开发,不仅功能强大而且开发周期短。而python则有众多的第三方库,可以避免自己造轮子,利用C#来做界面,而具体实现使用python来实现可以大大提高开发效率。本文介绍如何使用pythonnet…

Kubernetes初始化容器

初始化容器 之前了解了容器的健康检查的两个探针:liveness probe(存活探针)和readiness probe(可读性探针)的使用方法,我们说在这两个探针是可以影响容器的生命周期的,包括我们之前提到的容器的…