当前位置: 首页 > news >正文

嵌入式实时操作系统的设计与开发 (前后台系统)

前后台结构

前后台系统也称为中断驱动系统,其软件结构的显著特点是运行的程序有前台和后台之分。
在后台,一组程序按照轮询方式访问CPU;在前台,当用户的请求到达时,首先向CPU触发中断,然后将该请求转交给后台,按照后台的运行模式工作。
因此,前台处理的是中断级别的事务,而后台处理的是非实时程序。

这种系统的一个极端情况是,后台是一个简单的循环不做任何事情,所有其它工作都是由中断服务程序(ISRs)完成的,这是多任务系统的一种简单形式。
但前后台系统与多任务系统存在本质差别:前者的中断事务是外部事件触发,通过中断服务程序实现的;而后者的多任务是通过内核的某种任务调度策略与机制来调度执行,并不直接由事件触发调度。

在前后台系统中,前台中断的产生与后台程序的运行在宏观上是并行的;中断由外部事件随机产生,而且绝大部分不可预知。开发人员还必须解决嵌套中断与后台轮询资源共享的问题。
由于系统对外部事务的响应是由中断触发的,因此外部事务的响应时间比轮询方式更短。

运行方式

中断不同于一般的过程调用:中断不能进行参数传递;中断与后台任务的数据通信完全通过共享存储的方式,这样比如会导致多个任务竞争同一存储区的情况。因此,前后台系统需要重点考虑的是中断的现场保护和恢复、中断嵌套、中断处理过程与主程序的协调等问题。

系统性能

衡量前后台系统性能的重要指标是响应时间。
由于中断直接提现了系统对外部事件的响应速度,因此一般依据中断的执行情况来衡量系统性能。

中断的执行过程主要由中断延迟时间、响应时间和恢复时间来刻画。

响应时间是指从中断发生到中断处理完成所需时间。
恢复时间:从中断处理完成到后台重新开始执行所需时间。
延迟时间:中断请求的到达到正式开始处理中断服务程序的等待时间。

中断延迟时间
当中断发生时,中断服务程序并不一定能立即执行,这将引起中断的延迟,也可称为响应延迟。
诱发中断延迟的主要原因:

  1. 被中断的任务有指令正在执行,不能被中断。
  2. 后台任务正在访问某一临界资源,此时中断被禁止。
  3. 有更高优先级的中断正在执行。
  4. 如果某一时刻,多个任务同时提出相同的中断请求,系统需要额外的开销决定中断的响应次序。

吞吐量
给定时间内系统处理中断级别事务的总数。其大小依赖于中断响应时间和中断完成后的现场恢复时间。
由于中断时要付出额外的开销(现场保护和恢复),因此在有较高吞吐量要求的场合,中断的事务处理是不合适的。此时,往往采用特殊的硬件(如DMA)进行处理,或采用轮询方式。

前后台交互

在前后台系统中,某些情况下前台的中断级事务与后台的任务需要进行信息或数据的交换,简称前后台交互。
主要有两种方式可供选择:同步信号和数据交互。

同步信号
要求前台中断发送单比特的同步信号给后台任务。
具体实现是:当时钟信号到达时,前台中断改变后台任务相应寄存器的标志位,这样,后台在轮询之下,根据标志位对后台任务进行处理。当后台任务处理完成之后,自己又将其标志位置反,以等待新的同步信号的到达。
某些时候,前台同时提出多个中断请求,要求某一后台任务进行处理,此时需要设置一个计数器,而不仅仅是个标志位。
前台中断使计数器的值增加,后台任务使计数器的值减少,这样的计数器就变成一个整形信号量(Integer Semaphore)。

数据交互
前后台系统的数据交互是通过共享存储的方式来实现的。当前台的ISRs与后台任务共享某一存储区时,必须采取互斥机制来确保共享存储区数据的一致性。

http://www.lryc.cn/news/193603.html

相关文章:

  • Macos数字音乐库:Elsten Software Bliss for Mac
  • 基于SpringBoot的校园周边美食探索及分享平台的设计与实现
  • GPT-4V的图片识别和分析能力
  • 蓝桥杯(等差素数列,C++)
  • Ceph 中的写入放大
  • Mabatis-puls强于Mybatis的地方
  • vue项目npm intall时发生版本冲突的解决办法
  • tomcat多实例部署jenkins
  • 强连通分量+缩点
  • 如何做系统架构设计
  • L14D6内核模块编译方法
  • PyTorch入门教学——dir()函数和help()函数的应用
  • 使用Elasticsearch来进行简单的DDL搜索数据
  • 【软考】9.3 二叉树存储/遍历/线索/最优/查找/平衡
  • 关于矿井地面电力综合自动化系统的研究与产品选型
  • 论文阅读:Offboard 3D Object Detection from Point Cloud Sequences
  • Python学习基础笔记六十八——循环
  • 部署k8s dashboard(这里使用Kubepi)
  • Java Lambda表达式的使用
  • 【初始C语言8】详细讲解初阶结构体的知识
  • <C++> IO流
  • 基于单目相机的2D测量(工件尺寸和物体尺寸)
  • 23面向对象案例1
  • go语言基础之常量与itoa
  • 民宿酒店订房房态商城小程序的作用是什么
  • acwing算法基础之数据结构--栈和队列
  • 关于导出的Excel文件的本质
  • Rust中FnOnce如何传递给一个约束Fn的回调
  • 【JUC】线程通信与等待唤醒机制
  • C#面对对象(英雄联盟人物管理系统)