嵌入式操作系统服务机制

简介: 嵌入式操作系统服务机制

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项目实战” 即可获取美哆商城视频资源!

相关文章
|
5天前
|
存储 消息中间件 算法
深入探索操作系统的心脏——内核机制解析
本文旨在揭示操作系统核心——内核的工作原理,通过剖析其关键组件与机制,为读者提供一个清晰的内核结构图景。不同于常规摘要的概述性内容,本文摘要将直接聚焦于内核的核心概念、主要功能以及其在系统管理中扮演的角色,旨在激发读者对操作系统深层次运作原理的兴趣与理解。
|
26天前
|
存储 资源调度 算法
操作系统的心脏:深入理解内核架构与机制####
【10月更文挑战第16天】 本文旨在揭开操作系统最神秘的面纱——内核,通过剖析其架构设计与关键机制,引领读者一窥究竟。在这篇探索之旅中,我们将深入浅出地讨论内核的基本构成、进程管理的智慧、内存分配的策略,以及那至关重要的系统调用接口,揭示它们是如何协同工作,支撑起现代计算机系统的高效运行。这既是一次技术的深潜,也是对“看不见的手”调控数字世界的深刻理解。 ####
39 3
|
14天前
|
缓存 调度
操作系统的心脏:深入理解内核机制
【10月更文挑战第26天】 在数字化时代,操作系统是计算机系统不可或缺的核心。本文旨在揭示操作系统内核的神秘面纱,探讨其工作原理和重要性。通过深入浅出的语言,我们将一窥究竟,了解内核如何协调硬件与软件,确保计算机系统的稳定运行。
|
2月前
|
移动开发 Android开发 数据安全/隐私保护
移动应用与系统的技术演进:从开发到操作系统的全景解析随着智能手机和平板电脑的普及,移动应用(App)已成为人们日常生活中不可或缺的一部分。无论是社交、娱乐、购物还是办公,移动应用都扮演着重要的角色。而支撑这些应用运行的,正是功能强大且复杂的移动操作系统。本文将深入探讨移动应用的开发过程及其背后的操作系统机制,揭示这一领域的技术演进。
本文旨在提供关于移动应用与系统技术的全面概述,涵盖移动应用的开发生命周期、主要移动操作系统的特点以及它们之间的竞争关系。我们将探讨如何高效地开发移动应用,并分析iOS和Android两大主流操作系统的技术优势与局限。同时,本文还将讨论跨平台解决方案的兴起及其对移动开发领域的影响。通过这篇技术性文章,读者将获得对移动应用开发及操作系统深层理解的钥匙。
|
1月前
|
消息中间件 存储 网络协议
操作系统的心脏:深入理解进程间通信(IPC)机制
在现代计算机系统中,操作系统扮演着至关重要的角色,而进程间通信(IPC)作为操作系统的核心功能之一,极大地影响着系统的性能和稳定性。本文将通过浅显易懂的语言,详细探讨进程间通信的基本原理、主要类型及其实际应用,旨在为读者提供一个清晰且全面的理解和认识。 ##
115 1
|
2月前
|
人工智能 Kubernetes 算法
探究操作系统的心脏——进程管理机制
本文深入探讨了操作系统核心组件之一——进程管理机制。进程管理作为操作系统的基础功能,负责协调和控制计算机系统内运行的所有进程,确保系统资源的有效分配与利用。通过详细介绍进程的定义、状态转换、调度算法以及多线程技术等关键概念,本文揭示了进程管理如何支撑起整个操作系统的运行框架,并保障用户任务的顺利执行。同时,文章还讨论了现代操作系统在进程管理方面的创新与挑战,为读者提供了一个全面而深入的理解视角。
44 1
|
2月前
|
算法 调度 UED
探索操作系统的心脏——进程管理机制
本文将深入探讨操作系统中至关重要的部分——进程管理机制。我们将从基本概念入手,逐步解析进程的定义、状态及其在操作系统中的角色。随后,我们会详细讨论进程调度算法,包括先来先服务、短作业优先、时间片轮转和优先级调度等,分析它们的优势与应用情景。最后,通过实例展示这些算法在实际系统运作中的运用,帮助读者更好地理解进程管理的核心原理。
|
2月前
|
消息中间件 Python
深入理解操作系统的进程间通信(IPC)机制
本文将探讨操作系统中的核心概念——进程间通信(IPC),揭示其在系统运作中的重要性及实现方式。通过分析不同类型的IPC手段,如管道、信号、共享内存等,帮助读者更好地理解操作系统的内部工作原理及其在实际应用中的表现。
126 1
|
1月前
|
缓存 Java C语言
MacOS环境-手写操作系统-12-键盘中断机制
MacOS环境-手写操作系统-12-键盘中断机制为键盘建立中断机制
17 0
|
1月前
|
Java C语言 iOS开发
MacOS环境-手写操作系统-11-建立中断机制
本文详细介绍了如何为内核建立中断机制,涉及8259A中断控制器的初始化、中断信号的传递过程以及中断描述符表的设置。通过汇编和C语言代码展示了如何处理中断,特别是键盘和鼠标中断,最后给出了编译和运行的步骤。 摘要由CSDN通过智能技术生成
39 0