嵌入式操作系统服务机制

news2024/12/26 16:02:41

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。搜索关注公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!


博主介绍:
CSDN优质创作者,CSDN实力新星,CSDN内容合伙人;
阿里云社区专家博主;
华为云社区云享专家;
51CTO社区入驻博主,掘金社区入驻博主,支付宝社区入驻博主,博客园博主。


嵌入式操作系统服务机制

    • 1. 嵌入式操纵系统模型
    • 2. 内核基本服务——多任务机制
    • 3. 实时性与可调度性
    • 4. 任务管理与实时调度
    • 5. 优先级翻转 Priority Inversion
    • 6. 任务间通信机制
    • 7. 分区存储管理机制


专栏:《嵌入式软硬件》


1. 嵌入式操纵系统模型

超微内核: 规模最小,OS核心,主要完成中断、事件分发,部分可对多核处理器资源进行分配。

微内核: 扩展了任务调度等功能。

内核: 增加了任务间同步能力等服务。

执行体: 包括了私有内存模块,IO服务及其它复杂机制,大多商用嵌入式实时操作系统都是此形式。

操作系统: 提供了用户交互接口、文件系统、数据库、安全服务等组件的执行体,是一个完整的系统组件。

2. 内核基本服务——多任务机制

内核分为抢占式内核和非抢占式内核。

任务task

任务是指“需要完成工作的一个特定部分”,强调应用属性,是EOS(嵌入式系统)中的一个软件对象。

任务控制块TCB

①TCB是进行任务管理的数据结构:任务上下文及任务ID、状态、指向下一个要执行任务的TCB的指针、优先级等内容和属性。内核基于TCB中的信息,将相同状态的任务挂载到相应的任务队列中分类管理。

②任务状态由内核维护,包括运行、就绪、阻塞、睡眠、挂起等。

③任务优先级:优先级分为静态优先级和动态优先级,最低优先级的中断程序也要比最高优先级的任务先执行。

任务上下文(Task Context)及其切换

主要是保护现场,任务上下文是多任务系统中,任务被中断时所必需保存的最小数据集,涉及分配给任务的内存区域(包括堆栈)以及处理器的寄存器组等资源。

任务调度器

是内核中以就绪队列为主要对象的任务管理组件,以特定策略从就绪队列中选取要执行的任务,在内核态切换任务的上下文并跳转到该任务PC寄存器所指的位置。

抢占式调度:EDF调度等;

非抢占式调度:时间片轮转等;

中断

构成多任务系统的一种基本方式,最大中断禁止时间,即中断延迟时间,执行高优先级中断时不会响应低优先级中断,时间越小越好。

中断响应时间是指从中断发生到中断处理程序开始执行的时间间隔。

数据共享问题

多个任务间共享数据空间,可能存在读写、谢谢操作的竞争。

3. 实时性与可调度性

实时是指系统能够在限定的响应时间内提供所需水平的服务,实时系统是指计算的正确性不仅取决于程序的逻辑正确性,也取决于结果的产生时间。

逻辑或功能正确 logical or functional correctness,是指产生正确结果。

时间正确 timing correctness,是指在预定时间内完成计算。

对于嵌入式系统来说,一定要关注时间正确性。

任务的时间属性

任务的时间属性包括:就绪/释放时间、截止期、执行时间(真正持有CPU的时间)、完成时间、响应时间、滞后时间(超过截止期的时间,负时间表示提前完成)。

硬实时:截止期之前必须执行完。

硬实时系统:含多个硬实时任务,比如飞行控制、核电站、机器狗等。

软实时:允许超过截止期,统计思想,滞后时间越长,逻辑结果可信度越差。

软实时系统:多媒体、视频安防、火灾监控、城市交通调度。

可调度性

从任务角度:可调度feasible schedule,对于每一个具有截止期要求的任务,不论何时只要在释放时间后启动,就都有可能在截止期前玩成。

从调度算法角度:schedulable,对一个调度算法,一组任务总是有可行的调度方案是每个任务在截止期前完成,如果一个系统中的所有任务都是可调度的,就说这个系统是实时的。

调度优化:optimal schedule,只要存在,调度算法总是可以找到这个可执行的调度序列。

错失率:miss rate,已执行任务中,完成执行但是超过截止期的任务所占的比例。

丢失率:loss rate,丢弃的任务所占的比例。

失效率:invalid rate,错失率+丢失率。

4. 任务管理与实时调度

任务管理

任务管理是内核的核心功能之一,基本操作包括:

  • 任务创建:在内存中为任务控制块和栈分配空间,初始化并激活任务;
  • 任务删除:结束任务执行,删除任务实体并释放其所占用的资源或挂起任务;
  • 任务控制:软件中通过系统调用,对任务运行状态进行动态控制;

实现实时系统的总目标:让紧急任务能够尽可能地先执行并且尽可能快的完成执行。

所需资源+高优先级+抢占式调度机制+尽快拿到资源

任务调度

任务调度器根据调度算法和策略从就绪队列选择要执行的任务。切换上下文+任务调度。

单调速率调度rate monotonic scheduling,RMS,静态优先级调度算法,衍生的单调截至期调度deadline monotonic scheduling,DMS。RMS是一种静态优先级调度算法,优先级一旦分配好就固定不变,分配原则是任务周期越短即执行速率越快,则优先级越高。

最早截止期调度Earliest deadline first scheduling,EDF,动态优先级调度算法,任务优先级在系统运行过程中随着某些因素动态变化,核心思想是截止期最近的任务拥有最高优先级。

时间片轮转调度Round Robin scheduling,RR。相同优先级就绪任务的调度算法,每个任务只执行固定的时间片,然后由调度器在就绪队列中选择下一个任务。

5. 优先级翻转 Priority Inversion

低优先级任务持有高优先级任务所需要的临界资源,从而导致高优先级任务被延迟执行,高优先级任务会抢占低优先级任务所持有的CPU,但需要等待低优先级任务主动放弃所持有的临界资源,此时高优先级任务被阻塞,此时CPU返还低优先级任务,如果再来一个中优先级任务,它不需要等待临界资源,直接抢占CPU执行,这时,中优先级的任务先于高优先级的任务执行完成,这就造成了优先级翻转。优先级翻转的本质就是低优先级的任务持有高优先级任务执行所需要的资源,导致中优先级的任务先于高优先级任务被阻塞执行。

解决方法有如下几种:

①优先级继承协议priority inheritance protocol,PIP

优先级翻转问题发生时,让持有共享资源的子优先级任务获取被阻塞高优先级任务的优先级,以尽快执行完并释放共享资源,进而使高优先级任务能尽快响应。也就是说,通过优先级继承来防止中优先级的任务插队。

②优先级天花板协议priority ceiling protocol,PCP

priority ceiling即为每一个临界资源赋予一个较高优先级。务在临界资源以外时,以原有的优先级运行。当一个任务t尝试获取一组所需临界资源中的一个资源s时,如果任务t的优先级严格大于已被其他任务所持有的临界资源的优先级天花板,任务能够获得该临界资源;否则的话,任务t被阻塞,而且持有临界资源的任务继承任务t的优先级。总之就是,任务有优先级,资源也有优先级,预防了死锁和阻塞传递。

③原始天花板优先级协议original ceiling priority protocol,OCPP

每个任务都有一个默认的优先级,各共享资源分别有一个静态天花板优先级,设定为使用该资源的任务的最大优先级;每个任务有一个动态优先级,是其静态优先级和继承自阻塞者任务的优先级中的最大者;当一个任务申请一个资源时,如果动态优先级高于任何被其他任务持有的资源的优先级天花板时,该任务将能够获得所申请资源。(预防死锁)

④立即天花板优先级协议immediate ceiling priority protocol,ICPP

任务具有静态优先级,每个资源具有静态优先级天花板;任务的动态优先级是其静态优先级及其所持有的资源的优先级天花板的最大值。

6. 任务间通信机制

共享内存(通信机制)

原生机制:公共内存空间+数据结构,比如说全局变量,在两个或多个人物之间交换数据。

当多任务同时访问,且有写操作时会产生数据共享问题,需要考虑互斥。

可使用的数据结构有:共享数组(线性缓冲区)、循环数组(环形缓冲区)、链表、指针变量等。

数据通信+行为协同

①消息队列(是一种内核机制)

内核机制:为多任务交互提供的以消息为单元的数据交互,内核可以同时创建、维护多个消息队列,每个队列有独立的ID,队列中的消息数量和长度可变。

FIFO队列,优先级消息队列。

队列占用内存太大,数据量太大,可以将数据映射为无数据类型指针。要在不同的任务间传递数据,先将数据放在缓冲区中,然后再将指向这个缓冲区的指针放入队列中,接收任务读取指针,依指针读取数据,由接受任务释放指针。

②消息邮箱

内核机制:可以看作是非常短的消息队列,消息指针或短队列。用于任务间少量数据通信,可用于任务间同步(此时不再关注消息内容)。

数据通信

管道:是一种内核机制,在任务见提供消息流的IO对象。流式通道,通常是完全面向字节流的,可按照M个字节写入,N个字节读出。由内核自带的API如创建、读出、写入管道等函数。可以使用标准IO或者文件读写函数对管道操作,管道具有消息队列和邮箱不具备的特性,管道作为IO设备,可使用标准的select函数来读管道。

同步

事件与事件组是基于同步模型的所人物之间,任务与中断服务程序之间,任务与操作系统资源之间的通信机制。每个任务的TCB中会包含一个二进制的事件寄存器,寄存器的每一位对应一个事件,即二进制事件标志。允许多个任务阻塞在同一个事件上,事件到来时内核依据任务优先级从阻塞在该事件的任务队列中选择并释放一个任务,允许一个任务等待在“与”或者“或”逻辑的事件组上。

同步/互斥

信号量是多任务操作系统内核重要的服务机制,用于任务与任务,任务与终端服务程序之间的同步。信号量有二进制信号量、互斥信号量、计数信号量等。

信号

软中断信号,内核提供的任务间异步通信服务,用于改变任务的控制流,以异步方式操作,所发送的信号仅在接收进程被调度时才有机会被处理,不同的EOS的信号机制有不同特性。

7. 分区存储管理机制

操作系统存储管理,重点是对物理内存及虚拟内存的管理,外部存储器的管理有文件系统负责。

静态使用:静态变量、全局变量,不会引起内存的不可预测访问,可靠但利用率低。

动态使用:动态存储器管理,分区存储器管理,按需分配、不可靠、利用率低。

静态内存管理

提前将内存分段划分为多个区域,以供不同的代码或系统功能使用,至少包括:代码区、数据区、可动态使用存储区。

动态内存管理

malloc、free,会产生碎片。

分区池机制

基本思想是对内存中的堆资源进行提前分配,创建一组确定大小的内存块block,一组内存块组成内存池pool,一组内存池构成一个分区partition。

内存是提前确定好的,在使用时进行逻辑操作。

逻辑的分配删除只是表示某块内存空闲或者占用,而不是物理上的删除和分配,物理上的分配在初始化时就已经完成了。EOS应用具有一定的确定性,系统初始化阶段进行存储资源预分配对于提高实时软件进行效率很有意义。

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述


❗❗❗重要❗❗❗☞关注下方公粽号 《机器和智能》 回复关键词 “python项目实战” 即可获取美哆商城视频资源!

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

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

相关文章

ssm电动车租赁网站源码和论文

ssm电动车租赁网站源码和论文107 开发工具:idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 技术:ssm 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳&a…

java 中用 ReentrantReadWriteLock 解决HashMap() 线程安全问题

在并发编程中,当多个线程同时操作一个 变量时,容易出现线程安全的问题,我们可以使用各种锁来解决线程安全问题,比如:ConcurrentHashMap 在底层使用了synchronized 解决 HashMap()的线程安全问题, 我们这里希望使用 Ree…

三维模型OBJ格式轻量化压缩在移动智能终端应用方面的重要性分析

三维模型OBJ格式轻量化压缩在移动智能终端应用方面的重要性分析 三维模型的OBJ格式轻量化压缩在移动智能终端应用方面具有重要性。以下是对三维模型OBJ格式轻量化压缩在移动智能终端应用方面重要性的分析: 1、资源受限的环境:移动智能终端如手机、平板等…

【校招VIP】产品分析之功能分析

考点介绍: 作为一个产品经理,从需求分析到功能实现,一步都不能错过,不断调整不断沟通,以期达到最好的效果。 『产品分析之功能分析』相关题目及解析内容可点击文章末尾链接查看! 一、考点题目 1. 拼多多…

Python中异步编程是什么意思? - 易智编译EaseEditing

异步编程是一种编程模式,用于处理可能会导致程序等待的操作,例如网络请求、文件读写或长时间的计算任务,而不会阻塞整个程序的执行。 在传统的同步编程中,当程序执行一个耗时的操作时,它会等待该操作完成,…

[Qt开发探幽(二)]浅谈关于元对象,宏和Q_ENUM

[Qt开发探幽(二)]深入浅出关于元对象,宏和Q_ENUM [Qt开发探幽(二)]深入浅出关于元对象,宏和Q_ENUM前言一、元对象但是 二、关于Q_OBJECT等宏属性1.元对象系统2.信号与槽3.属性系统 三、关于Q_ENUMS1.将其注…

让文字会说话,启英泰伦离线语音合成(TTS)技术全面升级!

• A01,请用餐 • 请001号到03号窗口办理业务 • 本次列车即将到达火车南站,请提前准备下车 语音合成(TTS)技术作为人工智能领域的一项重要技术,已经深入大众生活,无孔不入。通过将文字转化为生动自然的…

伦敦银杠杆怎么用才对?

在了解伦敦银这个投资方式后,投资者应该明白它是怎样的高杠杆的品种,能够为自己带来多高的回报,然而杠杆的作用是双向的,如果使用不当,对投资者的损害同样也会很大。那么伦敦银的杠杆,到底怎么使用才对呢&a…

如何优化 SketchUp 性能并避免卡顿、崩溃?

SketchUp 是建筑师、工程师、设计师和艺术家使用的流行 3D 建模软件。然而,随着模型变得更加复杂,用户可能会遇到延迟甚至崩溃的情况。在本文档中,我们将提供经过验证的技术来帮助您优化 SketchUp 性能并避免这些令人烦恼的问题。 1.使用高效…

Django(7)-项目实战-发布会签到管理系统

本文使用django实现一个简单的发布会签到管理系统 登录功能 模板页面 sign/templates/index.html <!DOCTYPE html> <html> <head><title>Login Page</title> </head> <body><h1>发布会管理</h1><form action=&qu…

js+canvas实现绘制正方形并插入文字,实现文字居中显示。

目录 一、实现效果二、实现思路三、代码实现四、代码解析五、问题六、改进后的代码1.效果图2.思路3.代码实现 一、实现效果 二、实现思路 1.先根据传入的文本内容&#xff0c;计算出文本的宽度。 2.文本宽度左右间距&#xff0c;得到正方形的边长、画布宽度。 3.在&#xff08…

Python数据分析与展示-Numpy

numpy入门 ndarray对象的属性 import numpy as npdef sun():a np.array([1,2,3,4])b np.array([5,6,7,8])c a**2 b**3return cprint(sun())a np.array([[1, 2, 3, 4],[4, 5, 6, 7]])print(a.ndim) print(a.shape) print(a.size) print(a.dtype) print(a.itemsize) ndarra…

vue3-styled-components inject导致死循环

npm: vue3-styled-components - npm 低版本浏览器报错(chrome 49) Uncaught RangeError: Maximum call stack size exceeded [Vue warn]: Avoid app logic that relies on enumerating keys on a component instance, The keys will be empty in production mode to avoid p…

Vue安装过程的困惑解答——nodejs和vue关系、webpack、vue-cli、vue的项目结构

文章目录 1、为什么在使用vue前要下载nodejs&#xff1f;2、为什么安装nodejs后就能使用NPM包管理工具&#xff1f;3、为什么是V8引擎并且使用C实现&#xff1f;4、为什么会安装淘宝镜像&#xff1f;5、什么是webpack模板&#xff1f;6、什么是脚手架 vue-cli&#xff1f;6.1 安…

【C++】C++11新特性 lambda表达式

C11新特性 lambda表达式1、引入2、lambda表达式语法3、 捕获列表说明4、 lambda表达式的原理5、 lambda对象的大小 lambda表达式 1、引入 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法&#xff0c;如果待排序元素为自定义类…

前端:html实现页面切换、顶部标签栏(可删、可切换,点击左侧超链接出现标签栏)

一、在一个页面&#xff08;不跨页面&#xff09; 效果&#xff1a; 代码 <!DOCTYPE html> <html><head><style>/* 设置标签页外层容器样式 */.tab-container {width: 100%;background-color: #f1f1f1;overflow: hidden;}/* 设置标签页选项卡的样式 …

Synchronized 锁升级的原理

问题解析 Synchronized 在 jdk1.6 版本之前&#xff0c;是通过重量级锁的方式来实现线程之间锁的竞争。 之所以称它为重量级锁&#xff0c;是因为它的底层依赖操作系统的 Mutex Lock 来实现互斥功能。 如下图所示&#xff0c; Mutex 是系统方法&#xff0c;由于权限隔…

【数据分析】使用Python对数据的操作转换

使用Python对数据的操作转换 目录 1、列表加值转字典2、字典键新增值数据3、转换新的字典格式4、两组数据比较筛选5、将两段独立代码合并1、列表加值转字典 在Python中&#xff0c;将列表的值转换为字典的键可以使用以下代码&#xff1a; #!/usr/bin/env python # -*- cod…

详细教程-Chatbot具体需要如何搭建

最近建设企业专属的帮助中心或者博客是很流行的趋势&#xff0c;尤其是在AI功能的介入下&#xff0c;可以帮到企业和用户进行更自助的操作。但是很多企业会遇到以下问题&#xff1a;我们已经有了一个原有的知识库了&#xff0c;再建设一个新的需要把数据迁移。这个操作很麻烦和…

科技资讯|微软获得AI双肩包专利,Find My防丢背包大火

根据美国商标和专利局&#xff08;USPTO&#xff09;近日公示的清单&#xff0c;微软于今年 5 月提交了一项智能双肩包专利&#xff0c;其亮点在于整合了 AI 技术&#xff0c;可以识别佩戴者周围环境、自动响应用户聊天请求、访问基于云端的信息、以及和其它设备交互。 在此附…