目录

嵌入式操作系统分类

1、按软件结构分类

任务管理

1、多道程序

2、进程

3、线程

4、任务

嵌入式操作系统分层 

嵌入式系统一般分为四层,分别是:

  1. 硬件层:又称硬件抽象层(HAL)或板级支持包(BSP),这是操作系统与硬件直接交互的部分。 HAL或BSP负责隐藏硬件的具体细节,为操作系统提供一个统一的接口来访问和控制硬件。BSP包含硬件初始化和设备驱动的设计,确保操作系统可以在特定的硬件平台上正常运行。
  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、进程

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

以下几个方面的内容。

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

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

        程序计数器用于记录下一条要执行的指令的地址,当CPU执行完当前指令后,就会从程序计数器中读取下一条指令的地址,然后跳转到该地址继续执行。

        程序状态字记录程序的执行状态,并提供一种方式来控制程序的执行。通过读取程序状态字中的标志位,程序可以根据不同的状态采取不同的操作。例如,当程序状态字中的进位标志被设置时,程序可以进行相应的进位处理;当溢出标志被设置时,程序可以检测到数值溢出并采取相应的处理措施。

        通用寄存器:用于暂存指令、数据和地址

        段寄存器:用于对内存的分段管理而设置的。计算机需要对内存分段,以分配给不同的程序使用。描述内存分段时,需要存储段的大小、起始地址和管理属性等信息;

        3、一组系统资源(进程控制块):这是进程存在的唯一标识,包含了进程的描述信息和控制信息。是操作系统用来管理进程的内核对象,其中应该包含操作系统对其进行管理所需的各种信息,如进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息。

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

        (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 系统,其任务指的是进程 。为了方便起见,在 本书中将按照惯例统一使用“任务”这个名词术语,并在需要的时候指明其是进程还是线程。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐