热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

嵌入式操作系统基础

一、嵌入式操作系统1、嵌入式操作系统的基本概念嵌入式操作系统是支持嵌入式应用的操作系统,它是一种用途广泛的系统软件。负责嵌入式系统的全部软、硬件资源的分配、任务调

一、嵌入式操作系统

1、嵌入式操作系统的基本概念

嵌入式操作系统是支持嵌入式应用的操作系统,它是一种用途广泛的系统软件。
负责嵌入式系统的全部软、硬件资源的分配、任务调度,控制、协调并发活动。必须体现其所在系统的特征,能够通过装卸某些模块来达到系统所要求的功能。
嵌入式系统引入操作系统的原因:
1)从技术上解决了嵌入式系统标准化、层次化的问题;
2)基于嵌入式操作系统,更容易形成有效的技术和资源积累;
3)嵌入式操作系统是嵌入式系统重要的运行环境和开发平台,它的集成度和可用性直接关系到嵌入式系统的效率。


2、嵌入式操作系统发展历程

(1)无操作系统的嵌入式算法阶段
(2)简单监控式的实时操作系统阶段
(3)通用的嵌入式实时操作系统阶段
(4)以网络为标志的嵌入式系统阶段


3、嵌入式操作系统内核分类及基本结构

内核分类:
(1)宏内核(典型的有Linux、Unix)
(2)微内核(典型的有Nucleus、Uitron、uCOS)
基本结构按照层次划分:
(1)应用服务层
(2)系统层
(3)核心层
(4)硬件接口层


4、嵌入式操作系统内核的基本功能模块

进程管理
操作系统需要为进程分配资源,实现进程间共享和交换信息,保护进程资源,以及实现进程间同步。在一个多线程系统中,进程成了资源管理器,线程成为程序的基本执行单元。
作用是决定在特定的时刻要运行和等待哪个任务、如何调度、保护执行环境等。操作系统为每一个任务维护了一个称为任务控制块的数据结构,记录进程的有关信息,包括任务的环境、状态等。
任务也称线程,是一简单的程序,可认为CPU完全属于该程序自己;
被赋予一定的优先级,有自己的一套CPU寄存器和堆栈空间;
任务状态:休眠,就绪,运行,等待;

多任务
单CPU,轮番服务于一系列任务中的某一个;
使CPU的利用率达到最高;
带来诸如死锁,重入等诸多问题。
任务调度方法
1)优先级调度(优先级抢占和优先级不抢占)
优先级抢占是指当高优先级任务被激活后,立即中止当前任务的执行,抢占CPU运行;优先级不抢占是指当有高的优先级任务被激活后,不中止当前任务的执行,不抢占CPU运行,而是放在任务就绪队列中,在当前执行的任务结束后,从任务就绪队列中选择优先级最高的任务运行

5、任务调度方法
2)轮转调度
任务管理者让就绪任务按照一个固定的时间顺序轮流运行。
3)时间片调度
任务管理者根据各任务不同的情况在不同数量的单位时间的时间片内运行。
在嵌入式操作系统中很难明确哪一种调度方法是最好的,要根据被嵌入的系统的实际情况来优化选择。实际的嵌入式操作系统中一般都配有这三种调度函数的库函数,以满足不同用户的不同需求。

内存管理
虚拟存储管理器管理就是通过操作系统对内存和外存的管理,可以使应用程序获得比计算机实有的内存更大的编址空间,使每个程序都可以享有一个独立的虚拟存储空间。
 静态内存分配
动态内存分配
在内存分配的策略上,一个通用的嵌入式操作系统往往可以提供几种分配策略,而用户在开发自己的嵌入式系统时可以进行合理选择,体现了嵌入式操作系统的可裁减性。
存储管理另外一个重要问题——内存保护

中断管理
在嵌入式系统中,中断可以使CPU从查询方式解放出来。
计算机系统处理外部事件有两种方式:中断和查询。在多任务操作系统中,由于使用查询方式处理事件和I/O请求会大量占用CPU的时间,严重消耗系统的有限资源。因此无论是一般的操作系统还是嵌入式操作系统,都使用中断方式来处理事件或I/O请求。

中断管理
中断处理上,一般操作系统与嵌入式操作系统的不同之处在于现场保护。
一般操作系统的现场保护是由操作系统来完成的,在中断处理完成之后,也由操作系统恢复现场。
在嵌入式操作系统中,由于受到代码量的限制,中断现场的保护由中断处理程序来完成。在中断处理程序的入口要保护在中断处理程序中要用到的寄存器,在中断处理完成后恢复。通过这种方法,减少了代码量,提高了中断响应时间。但损失了系统的安全性,增加了调试的难度。

操作系统与应用程序的接口—API从操作系统的角度来看,提供给用户的有两类接口,分别为:
(1)人机界面;
(2)操作系统提供给用户的开发用户应用程序的API函数,即系统调用。
嵌入式操作系统只能面向被嵌入系统的实际要求,确定系统调用,以便达到在提供最有效的系统调用的同时具有最小的代码量。

本书所称的任务将用来描述一个处理器或一个处理器网络调度或执行的一个工作单元,也称为潜在的或实际的并行处理过程。并不考虑各种任务是由一个处理器网络并行执行还是由一个单一处理器以并行方式执行。

6、任务的调度是由嵌入式操作系统的内核完成的,调度的方式主要有以下三种:
(1)不可抢占(不可剥夺)式调度
(2)可抢占(可剥夺)式调度
(3)时间片轮转调度

(1)不可抢占(不可剥夺)式调度
也称为合作型多任务,是基于任务优先级的。一个任务一旦获得处理器就独占处理器运行,直至该任务结束进入等待状态,才将处理器的使用权让位给优先级最高的处于就绪状态的任务。

(2)可抢占(可剥夺)式调度
可抢占式调度也是基于任务优先级的,当前正在运行的任务必须随时让位给优先级更高的处于就绪态的其他任务。

(3)时间片轮转调度
当两个或两个以上任务有同样的优先级时,某个任务运行事先规定的时间额定(一段时间),然后切换至另外的任务,这就是时间片轮转调度。
在满足以下条件时,将CPU的使用权交给下一个就绪任务:
当前任务进入等待状态;
当前任务在事先规定的时间定额内转为等待状态;
当前任务事先规定的时间定额已用完。
大多数嵌入式操作系统对不同优先级的任务采用基于优先级的抢占式调度法,对相同优先级的任务则采用时间片轮转调度法。

7、嵌入式操作系统下的任务间通信

任务通信是指不同任务之间或任务与中断服务之间的信息传递。
通信方式有两种:
(1)通过全局变量进行通信
(2)通过消息邮箱或消息队列,由一个或若干个指针型变量进行通信。

(1)通过全局变量进行通信
每个任务在处理共享数据时必须是排他的,可采用以下方法。
控制中断,当任务与中断或任务共享数据时,任务在处理共享数据前需关闭中断,处理完共享数据后再打开中断;
控制任务切换,当任务间共享数据时,任务在处理共享数据前需禁止任务切换,处理完共享数据后再允许任务切换;
采用TAS(Test And Set)操作,即处理允许标志控制法;
利用信号量,信号量实际上是一种约定机制,其作用是控制共享资源的使用权、标志某事件的发生和使两个任务同步。
(2)通过消息邮箱或消息队列进行通信

(2)通过消息邮箱或消息队列进行通信

8、嵌入式操作系统实时性要求
嵌入式系统由于是嵌入到被控对象体系中的一个电子系统,与对象系统密切相关。而不同的对象系统会有不同的响应时间要求,体现了嵌入对象对时间响应要求的多样性。
根据嵌入式应用系统的激励-运行-响应特性,形成了以软件运行时间T为主要指标来表征系统的响应能力。而软件运行时间T与指令速度、编程技巧、程序优化等有关,是一个在应用系统设计中
可以改变的参数,它表现了嵌入式应用系统实时能力的可变更性。

响应时间的多样性要求与响应时间可调整性,是嵌入式系统实时性分析的基本出发点。


推荐阅读
  • Java高级工程师学习路径及面试准备指南
    本文基于一位朋友的PDF面试经验整理,涵盖了Java高级工程师所需掌握的核心知识点,包括数据结构与算法、计算机网络、数据库、操作系统等多个方面,并提供了详细的参考资料和学习建议。 ... [详细]
  • 如何高效学习鸿蒙操作系统:开发者指南
    本文探讨了开发者如何更有效地学习鸿蒙操作系统,提供了来自行业专家的建议,包括系统化学习方法、职业规划建议以及具体的开发技巧。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 本文介绍了在Linux环境下如何有效返回命令行状态、上一级目录及快速查找头文件和函数定义的方法。包括处理长时间运行命令、编辑器退出技巧、目录导航以及文件搜索策略。 ... [详细]
  • 深入探讨:Actor模型如何解决并发与分布式计算难题
    在现代软件开发中,高并发和分布式系统的设计面临着诸多挑战。本文基于Akka最新文档,详细探讨了Actor模型如何有效地解决这些挑战,并提供了对并发和分布式计算的新视角。 ... [详细]
  • 关于进程的复习:#管道#数据的共享Managerdictlist#进程池#cpu个数1#retmap(func,iterable)#异步自带close和join#所有 ... [详细]
  • 本文详细介绍了如何在PHP中使用Memcached进行数据缓存,包括服务器连接、数据操作、高级功能等。 ... [详细]
  • 本文详细探讨了 Android Service 组件中 onStartCommand 方法的四种不同返回值及其应用场景。Service 可以在后台执行长时间的操作,无需提供用户界面,支持通过启动和绑定两种方式创建。 ... [详细]
  • linux网络子系统分析(二)—— 协议栈分层框架的建立
    目录一、综述二、INET的初始化2.1INET接口注册2.2抽象实体的建立2.3代码细节分析2.3.1socket参数三、其他协议3.1PF_PACKET3.2P ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • JUC并发编程——线程的基本方法使用
    目录一、线程名称设置和获取二、线程的sleep()三、线程的interrupt四、join()五、yield()六、wait(),notify(),notifyAll( ... [详细]
  • 本文介绍了蓝牙低功耗(BLE)中的通用属性配置文件(GATT),包括其角色、层次结构、属性、特性和服务等内容。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 本文详细介绍了Sleep函数的基本概念、使用方法及其背后的实现原理。适合对Sleep函数的使用和实现感兴趣的开发者阅读。通过本文,您将了解如何在不同操作系统中使用Sleep函数,以及其在多线程编程中的重要性。 ... [详细]
author-avatar
博菡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有