-
嵌入式系统的定义:以应用为中心,以计算机技术为基础,软硬件可裁剪,适用应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
-
嵌入式系统的特点:
- 系统资源受限的系统-面向特定应用的
- 大多要求低功耗
- 要求较高的可靠性和稳定性
- 有实时约束
- 需要专用工具和特殊方法
-
开发工具和方法:
- 资源有限,不具备自主开发能力,产品发布后用户也不能对软件进行修改,必须有一套专门的开发环境。
- 专门的开发环境包括专门的开发工具(设计、编译、调试、测试等工具),采用交叉开发的方式进行。
-
嵌入式操作系统的重要指标:
- 实时性(中断响应时间、任务切换时间等)
- 尺寸(可剪裁性)
- 可扩展性(内核、中间件)
-
微处理器结构:
-
嵌入式操作系统体系结构:体系结构是操作系统的基础,它定义了硬件与软件的界限、内核与操作系统其他组件的组织关系、系统与应用的接口。
- 体系结构是确保系统的性能、可靠性、灵活性、可移植性、可扩展性的关键。
- 目前操作系统的体系结构可分为:
- 单块结构
- 层次结构:硬件无关层、硬件抽象层、硬件相关层
- 微内核结构
-
ucos:一种专门为嵌入式设备设计的,基于优先级的可抢占式的硬实时EOS内核
-
实时系统的要求:
- 计算的逻辑正确性
- 产生结果的时间
-
硬实时:系统要确保最坏情况下的服务时间,对于事件的响应时间的截止期限无论如何都必须得到满足。
软实时:从统计的角度来说,一个任务能够得到有确保的处理时间,到达系统的事件也能够在截止期限之前得到处理,但违反截止期限并不会带来致命的错误。
-
任务的基本定义:一个具有独立功能的无限循环的程序段的一次运行活动。
-
优先级含义:表示任务对应工作内容在处理上的优先程度
- 静态优先级:任务的优先级被确定后,在系统运行过程中将不再发生变化
- 动态优先级:系统运行过程中,任务的优先级是可以动态变化的
-
任务截止时间:任务需要在该时间到来之前被执行完成
- 绝对截止时间 – 任务就绪时间 = 相对截止时间
- 就绪时间:任务具备了在处理器上被执行所需要条件时的时间
- 具有强截止时间的任务即为关键任务,如果截止时间不能得到满足,就会出现严重后果。拥有关键任务的实时系统又被称为强实时系统。
-
Ucos任务的五个状态及转换关系
-
系统空闲任务:由操作系统创建,始终设置为最低优先级,永远不能被应用程序软件删除,当没有其他任务准备好时运行执行的命令。
- 统计任务使用OSIdleCtr来确定应用程序软件实际消耗了多少CPU时间(以百分比为单位)。
-
代码反映出嵌入式系统什么特征
- 可伸缩
- 可移植
- 可剪裁
- 可配置性
-
了解临界区的相关代码 进入和退出os-dummy的作用:确保在执行OSTaskDel (INT8U prio)函数执行时的实时性。需要在该函数中开一次中断,即退出临界区一段时间。保证系统实时性。
-
任务扩展:任务创建、删除、上下文切换时,添加一些关于任务的附加操作。
- 任务扩展表
- 应用编程接口
-
任务创建的流程图
- 获取任务控制块TCB,确保不存在相同的优先级。保留优先级以防止他人在创建任务之前执行相同的操作。
- 根据实时内核用户提供的信息初始化TCB
- 为任务分配一个可以唯一表示任务的ID
- 使任务处于就绪状态、把任务放置到就绪队列
- 进行任务调度处理
-
单等待队列:资源对应的事件发生时,内核需要扫描整个等待队列,搜索等待该资源的任务,并按照一定的策略选取任务,把任务的控制块放置到就绪队列。如果系统的资源和任务比较多,搜索等待该资源的任务所需要的事件就比较长,会影响整个系统的实时性能。
-
多等待队列:资源对应的事件发生时,能够在较短的时间内确立等待该资源的任务等待队列。
-
任务切换的步骤:
-
保存任务上下文环境
-
更新当前运行任务的控制块内容,将其状态改为就绪或等待状态
-
将任务控制块移到相应队列(就绪队列或等待队列)
-
选择另一个任务进行执行(调度)
-
改变需投入运行任务的控制块内容,将其状态变为运行状态
-
恢复需投入运行任务的上下文环境
-
任务切换的时机:
- 中断、自陷
- 运行任务因缺乏资源而被阻塞
- 时间片轮转调度时
- 高优先级任务处于就绪时
-
抢占式调度:正在运行的任务可能被其他任务所打断
非抢占式调度:一旦任务开始运行,该任务只有在运行完成而主动放弃CPU资源,或是因为等待其他资源被阻塞的情况下才会停止运行。
-
内核的可抢占性:执行内核提供的系统调用的过程中,是否可以被中断打断。
- 不可抢占内核
- 内核服务函数不能被中断
- 能被中断但是不能进行任务重新调度
- 可抢占内核:即使正在执行的是内核服务函数,也能相应中断,并且中断服务程序退出时能进行任务重新调度
- 不可抢占内核
-
优先级反转:高优先级任务需要等待低优先级任务释放资源,而低优先级任务又正在等待中等优先级任务的现象。
-
优先级继承协议:当一个任务阻塞了一个或多个高优先级任务时,该任务使用所阻塞的所有任务的最高优先级作为其执行临界区的优先级,退出临界区时,恢复到最初的优先级。
本质:局部牺牲高优先级任务的实时性,保证整个系统的确定性。
-
优先级天花板协议:如果任务获得信号量,则在任务执行临界区的过程中,任务的优先级被抬升到所获得信号量的优先级天花板(所有使用该信号量的任务的最高优先级)。
-
系统调用并非直接和程序员或系统管理员打交道,它仅仅是一个通过软中断机制向内核提交请求,获取内核服务的接口。
程序员调用的多是用户编程接口API,有可能和系统调用形式上一致,也可能组合好几个系统调用,也可能不使用系统调用。
系统管理员使用的多是系统命令,是内部引用API的可执行程序。
-
内核函数是在内核实现,满足一些内核编程的要求。系统调用并非内核函数,进入内核后,不同的系统调用会找到对应到各自的内核函数,实际对请求服务的是内核函数而非调用接口。
-
系统调用、用户可编程接口API、系统命令、内核函数之间的关系:
-
系统调用实现原理:x86体系结构中软件中断,由编程人员触发的一种异常。当用户态的进程调用一个系统调用时,CPU便被切换到内核态执行内核函数。进入内核(实际上就是进入高特权级别)必须经过系统的门机制,这里异常实际上就是通过系统门陷入内核。
int $0x80的目的是产生一个编号为128号的编程异常,这个编程异常对应中断描述符表中对应的系统门描述符。门描述符中含有一个预设的内核空间地址,指向了系统调用处理程序:system_call()。所有的系统调用都会统一转到system_call()这个地址。
来源:CSDN
作者:nsn_huang
链接:https://blog.csdn.net/sougou_1323/article/details/103794331