嵌入式操作系统分类和任务管理

目录

嵌入式操作系统分类

1、按软件结构分类

任务管理

1、多道程序

2、进程

3、线程

4、任务

嵌入式操作系统分类

1、按软件结构分类

        按照软件的体系结构,可以把嵌入式操作系统分为三大类:单体结构、分层结构和微内核结构。它们之间的差别主要表现在两个方面:

        一是内核的设计,即在内核中包含了哪些功能组件;

        二是在系统中集成了哪些其他的系统软件(如设备驱动程序和中间件)。

 1)单体结构

        在单体结构的操作系统中,中间件和设备驱动程序通常就集成在系统内核当中。整个系统通常只有一个可执行文件,里面包含了所有的功能组件(如图4-10 所示)。系统的结构就是无结构,整个操作系统由--组功能模块组成,这些功能模块之间可以相互调用。例如,嵌入式Linux操作系统、Jbed RTOS、μC/OS-II和PDOS都属于单体内核系统。
        单体结构的优点性能较好,系统的各个模块之间可以相互调用,通信开销比较小。
        单体结构的缺点操作系统具有体积庞大、高度集成和相互关联等特点,因而在系统剪裁、修改和调试等方面都较为困难。

2)分层结构

        在分层结构中,一个操作系统被划分为若千个层次,各个层次之间的调用关系是单
向的,即某一层上的代码只能调用比它低层的代码。
与单体结构相似,分层结构的操作
系统也是只有一个大的可执行文件,其中包含有设备驱动程序和中间件。
由于采用了层
次结构,所以系统的开发和维护都较为简单。但是,这种结构要求在每个层次上都要提
供一组API接口函数,这就会带来额外的开销,从而影响到系统的规模和性能。
图4-11
所示为MS-DOS的结构,这是一个有代表性的、良好组织的分层结构。


3)微内核结构

        微内核结构或者客户-服务器结构的操作系统是指在内核中将操作系统的大部分功
能都剥离出去,只保留最核心的功能单元(如进程管理和存储管理),
微内核结构的特点
就是内核非常小,大部分的系统功能都位于内核之外,例如设备驱动程序,所有的设备
驱动程序都被置于内核之外,如图4-12所示。

        在微内核操作系统中,新的功能组件可以被动态地添加进来,所以它具有易于扩展、
调试方便等特点。
另外,由于大部分的系统功能被放置在内核之外,而且客户单元和服
务器单元的内存地址空间是相互独立的,因此系统的安全性更高。它还有一个优点就是
移植方便。但是,与其他类型的操作系统相比(如单体内核),微内核操作系统的运行速
度可能会慢一些
,这是因为核内组件与核外组件之间的通信方式是消息传递,而不是直
接的函数调用。另外,由于它们的内存地址空间是相互独立的,所以在切换的时候,也
增加额外的开销。许多嵌入式操作系统采用的都是微内核的方式,如OS-9、CExecutive、
VxWorks、CMX-RTX、 Nucleus Plus和QNX等。

任务管理

1、多道程序

        嵌入式操作系统可以分为两种类型:单道程序设计和多道程序设计。

        单道程序设计:在操作系统当中,在任何时候只能有-一个程序在运行。

        多道程序设计:在操作系统当中,允许多个程序同时存在并运行。

        在现代操作系统当中,为了提高系统资源的利用率,普遍采用多道程序技术。
 

2、进程

   进程:一个进程就是一个正在运行的程序。 般来说, 一个进程至少应该包括

以下几个方面的内容。

        ●相应的程序:进程是一个正在运行的程序,需要有相应程序的代码和数据。

         CPU上下文:指程序在运行时,CPU 中各种寄存器的当前值,包括:

        程序计数器用于记录将要取出的指令的地址;

        程序状态字:用于记录处理器的运行状态信息; 

        通用寄存器:用于存放数据或地址;

        段寄存器:用于存放程序中各个段的地址;  栈指针寄存器,用于记录栈顶的当前位置。

        ●一组系统资源:包括操作系统用来管理进程的数据结构、进程的内存地址空间、 进程正在使用的文件等。

        进程有动态性、独立性和并发行三个特性。

        (1)动态性。进程是一个正在运行的程序,而程序的运行状态是在不断地变化的。 例如,当一个程序在运行的时候,每执行完一条指令,PC 寄存器的值就会增加,指向下 一条即将执行的指令。而CPU 中用来存放数据和地址的那些通用寄存器,它们的值肯定也不断地变化。另外,堆和栈的内容也在不断地变化,每当发生一次函数调用时,就会在栈中分配一块空间,用来存放此次函数调用的参数和局部变量。而当函数调用结束后,这块栈空间就会被释放掉。

        (2)独立性。 一个进程是一个独立的实体,是计算机系统资源的使用单位。每个进

程都有自己的运行上下文和内部状态,在它运行的时候独立于其他的进程。

        (3)并发性。从宏观上来看,在系统中同时有多个进程存在,它们相互独立地运行。图4-14表示四个进程 A B C D 在系统中并发地运行。从中可以看出,虽然从宏观上来说,这四个进程都是在系统中运行,但从微观上来看,在任何一个特定的时刻,只有一个进程在 CPU 上运行。从时间上来看,开始是进程 A 在运行,然后是进程 B 运行,然后是程 C 和进程 D 。接下来又轮到了进程 A 去运行。因此,在单 CPU 的情 形下,所谓的并发性,指的是宏观上并发运行,而微观上还是顺序运行,各个进程轮流去使用CPU 资源。

        在具体实现上,以 CPU中的程序计数器 PC 为例,真正物理上的 PC 寄存器只有一 个。当四个进程在轮流执行时,PC 取值的运动轨迹是先在进程 A 内部流动,然后再到进  B 的内部流动,再到进程C  D 。从进程的独立性角度来说,每个进程都有“自己” 独立的 PC 寄存器,即逻辑上的 PC 寄存器,它们的取值相互独立、互不影响。所谓的逻 PC,   其实就是一个内存变量。例如,在图4-14中,当进程 A 要执行的时候,就把A 的逻辑 PC  的值拷贝到物理PC  中,然后开始运行。当轮到B 运行的时候,先把物理 PC   的当前值保存到 A 的逻辑 PC 中,然后再把B 的逻辑PC 的值装入到物理PC 中,即可运行。这样就实现了各个进程的轮流运行。

3、线程

        线程是CPU调度的最小单位(程序执行流的最小单元),它被包含在进程之中,是进程中的实际运作单元。一条线程是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

        线程的组成线程ID、当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单元,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现处间断性。 

        线程也有就绪、阻塞和运行三种基本状态。

        就绪状态:是指线程具备运行的所有条件,逻辑上可以运行,在等待处理机;

        运行状态:是指线程占有处理机正在运行;

        阻塞状态:是指线程在等待一个事件(如某个信号量),逻辑上不可执行。

        每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。 

        线程和进程的关系:​​​​​​​进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)。 

        举例说明线程:

        假设,一个文本程序,需要接受键盘输入,将内容显示在屏幕上,还需要保存信息到硬盘中。若只有一个进程,势必造成同一时间只能干一样事的尴尬(当保存时,就不能通过键盘输入内容)。若有多个进程,每个进程负责一个任务,进程A负责接收键盘输入的任务,进程B负责将内容显示在屏幕上的任务,进程C负责保存内容到硬盘中的任务。这里进程A,B,C间的协作涉及到了进程通信问题,而且有共同都需要拥有的东西——-文本内容,不停的切换造成性能上的损失。若有一种机制,可以使任务A,B,C共享资源,这样上下文切换所需要保存和恢复的内容就少了,同时又可以减少通信所带来的性能损耗,那就好了。这种机制就是线程。

4、任务

        在许多嵌入式操作系统中,并没有使用“进程”或“线程”这两个术语,而是把能 够独立运行的实体称为“任务”。

        VxWorks 的“任务”就是线程,类似的系统还有μC/OS-Ⅱ、Jbed 等。当然,也有一 些嵌入式操作系统,如一些 嵌入式 Linux 系统,其任务指的是进程 。为了方便起见,在 本书中将按照惯例统一使用“任务”这个名词术语,并在需要的时候指明其是进程还是线程。

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

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

相关文章

DL专栏—笔记目录

前言: 😊😊😊欢迎来到本博客😊😊😊 🌟🌟🌟 本专栏主要是记录工作中、学习中关于AI(Deep Learning)相关知识并分享。 😊😊&#x1f…

电脑自动开机播放PPT的解决方案

客户有个需求,要求与LED大屏幕连接的电脑定时自动播放PPT。为了安全电脑在不播放的时段,必须关机。 目录 1、使用“时控插座”并进行设置 2、戴尔电脑BIOS设置(上电开机) 3、设置Windows自动登录 4、任务计划设置 5、启动Au…

一个响指,代码生成!华为云CodeArts Snap正式公测

月初,华为云CodeArts Snap正式开启公测,这是一款基于华为云研发大模型的智能化编程助手,旨在为开发者提供高效且智能的编程体验,提升研发人员的单兵作战能力。 如今,生成式AI爆发式增长,大模型商用节奏加快…

Java面试题SPI

Java面试题SPI 文章目录 Java面试题SPISPI何谓 SPI?SPI 和 API 有什么区别?SPI 的优缺点? 文章来自Java Guide 用于学习如有侵权,立即删除 SPI 关于 SPI 的详细解读,请看这篇文章 Java SPI 机制详解 。 何谓 SPI? SPI 即 Ser…

Excel:将截面数据转换成面板数据

原始截面数据如下: 步骤:数据——自表格/区域 点击确定,出现下图: 然后,在这个界面选择:“转换”——“逆透视列”下选择逆透视其他列。会出现面板数据形式。 然后,点击“主页”——关闭并上载即…

金融OCR领域实习日志(一)——OCR技术从0到1全面调研

一、OCR基础 任务要求: 工作原理 OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相)检查纸上打印的字符,经过检测暗、亮的模式肯定其形状,而后用…

2024年,这个铁饭碗一定不要错过!

说到铁饭碗这个话题,你会想到什么职业?有的人可能会想到公务员、老师、医生,有的人会想到企业家。 其实每个人对于铁饭碗的定义都不同,为什么父辈的人觉得只要当了公职人员就是可以吃一辈子的铁饭碗?因为他们生活中接触…

婴儿营养之道:新生儿补充蛋白质的关键

引言: 蛋白质是新生儿生长发育所必需的重要营养物质,对于肌肉、组织和免疫系统的发展至关重要。在新生儿期间,适量的蛋白质摄入有助于建立健康的身体基础,但在补充时需谨慎选择和控制。本文将深入探讨蛋白质的作用、补充时机&…

容器安全工具

容器安全工具是用于保护和监控容器环境安全的工具。它们提供了一系列功能,包括容器镜像的漏洞扫描、运行时监控、事件日志记录、访问控制、运行权限管理等。以下是一些常见的容器安全工具: 1. Docker Bench Security:用于检查Docker环境配置的安全性,提供一些最佳实践建议…

Hadoop基本概论

目录 一、大数据概论 1.大数据的概念 2.大数据的特点 3.大数据应用场景 二、Hadoop概述 1.Hadoop定义 2.Hadoop发展历史 3.Hadoop发行版本 4.Hadoop优势 5.Hadoop1.x/2.x/3.x 6.HDFS架构 7.Yarn架构 8.MapReduce架构 9.大数据技术生态体系 一、大数据概论 1.大数…

GitLab入门指南:上传与下载操作一网打尽

GitLab简介: GitLab是一个基于Git的开源仓库管理系统,提供了一个Web界面的Git存储库管理器,并集成了多种开发工具的功能,如代码审查、问题跟踪、持续集成和持续部署等。GitLab可以在本地服务器上部署,也可以使用其提供…

单核QPS近6000S,陌陌基于OceanBase的持久化缓存探索与实践

挚文集团于 2011 年 8 月推出了陌陌,这款立足地理位置服务的开放式移动视频社交应用在中国社交平台领域内独树一帜。陌陌和探探作为陌生人社交领域的主流应用,涵盖了多种核心业务模块,包括直播服务、附近动态功能、即时通讯(IM&am…

计算机网络 第4章(网络层)

系列文章目录 计算机网络 第1章(概述) 计算机网络 第2章(物理层) 计算机网络 第3章(数据链路层) 计算机网络 第4章(网络层) 文章目录 系列文章目录1. 概述1.1 简介1.2 总结 2. 网络…

大数据信用查询系统能查到什么呢?

在金融助贷行业,大数据有叫大数据信用或者网贷大数据,在申贷的时候,想必大多数人都有听说过,很多人因为大数据不良的原因申贷被拒过,那大数据信用查询系统能查到什么呢?本文就简单为大家总结几点大数据信用查询的内容…

JavaEE之多线程编程:5. 死锁(详解!!!)

文章目录 一、死锁是什么二、关于死锁的三种形式三、如何避免死锁 一、死锁是什么 死锁是这样的一种情形:多个同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。 【举个例子理解死…

Netty Reactor 模式解析

目录 Reactor 模式 具体流程 配置 初始化 NioEventLoop ServerBootstrapAcceptor 分发 Reactor 模式 在刚学 Netty 的时候,我们肯定都很熟悉下面这张图,它就是单Reactor多线程模型。 在写Netty 服务端代码的时候,下面…

如何使用docker实现越权漏洞-webug靶场搭建(超详解)

越权漏洞-webug靶场搭建 1.打开docker systemctl start docker 2.查找webug docker search webug 3.拉取docker.io/area39/webug 镜像 docker pull docker.io/area39/webug 4.查看镜像 docker images 5.创建容器 docker run -d -p 8080:80 --name webug docker.io/area39/we…

Database history tablesupgraded

zabbix升级到6之后,配置安装完成会有一个红色输出,但是不影响zabbix使用,出于强迫症,找到了该问题的解决方法。 Database history tables upgraded: No. Support for the old numeric type is deprecated. Please upgrade to nume…

Qt5编译qextserialport(Qt5.14.2+VS2017)

1、qextserialport库下载 (1)github GitHub - qextserialport/qextserialport: Automatically exported from code.google.com/p/qextserialport (2) code.google https://code.google.com/archive/p/qextserialport/downloads 我下载的是最新版qextserialport-1.2rc.zip ​…

手拉手JavaFX UI控件与springboot3+FX桌面开发

目录 javaFx文本 javaFX颜色 字体 Label标签 Button按钮 //按钮单击事件 鼠标、键盘事件 //(鼠标)双击事件 //键盘事件 单选按钮RadioButton 快捷键、键盘事件 CheckBox复选框 ChoiceBox选择框 Text文本 TextField(输入框)、TextArea文本域 //过滤 (传入一个参数&a…