全部科目 > 系统架构设计师 >
2026年上半年 上午试卷 综合知识
第 54 题
知识点 多任务调度机制   操作系统   内存   嵌入式操作系统   任务间通信   数据结构  
关键词 操作系统   处理器   地址空间   访问共享   内存   嵌入式   数据结构   通信   数据  
章/节 嵌入式系统  
 
 
要实现多任务间的协同工作,操作系统必须提供任务间的通信手段。嵌入式操作系统一般都会提供多任务间通信的方法,其中(问题1)是任务间最直接、最明显的通信方法,也是访问共享的数据结构,即不同的任务都可以访问同一地址空间。(问题2 )作为一种更高级的通信方式,能够在同一处理器的各个任务间传递任意长度(理论上只受物理内存和机器字长限制)的信息.
 
  A.  信号量
 
  B.  Socket
 
  C.  消息传递
 
  D.  共享内存




 
 
相关试题     嵌入式系统 

  第1题    2016年下半年  
在嵌入式系统的存储部件中,存取速度最快的是(1)。

  第16题    2023年下半年  
单 CPU 系统中,多任务并发运行时采用的运行方式是()。

  第58题    2026年上半年  
Al芯片是当前人工智能技术发展的核心技术,其能力要支持训练和推理,通常,Al芯片的技术架构包括()等三种。

 
知识点讲解
· 多任务调度机制
· 操作系统
· 内存
· 嵌入式操作系统
· 任务间通信
· 数据结构
 
        多任务调度机制
        首先,我们介绍几个基本概念:
        (1)任务。任务是独立执行的线程,线程中包含独立的可调度的指令序列。实时应用程序的设计过程包括如何把问题分割成多个任务,每个任务是整个应用的一个组成部分,每个任务被赋予一定的优先级,有自己的一套寄存器和栈空间。在大多数典型的抢占式调度内核中,在任何时候,无论是系统任务还是应用任务,其状态都会处于就绪、运行、阻塞三个状态之一。另外,某些商业内核还定义了挂起、延迟等颗粒更细的状态。
        (2)任务对象。任务是由不同的参数集合和支持的数据结构定义。在创建任务时,每个任务都拥有一个相关的名字,一个唯一的标识号ID,一个优先级、一个任务控制块、一个堆栈和一个任务的执行例程,这些部件一起组成一个任务对象。
        (3)多任务。多任务是操作系统在预定的死线内处理多个活动的能力。多任务的运行使CPU的利用率得到最大地发挥,并使应用程序模块化。随着调度的任务数量的增加,对CPU的性能需求也随之增加,主要是由于线程运行的上下文切换增加的缘故。
        (4)调度器。调度器是每个内核的心脏,调度器提供决定何时哪个任务运行的算法。多数实时内核是基于优先级调度的。
        (5)可调度实体。可调度实体是一个可以根据预定义的调度算法,竞争到系统执行时间的内核对象。
        (6)上下文切换。每个任务都有自己的上下文,它是每次被调度运行时所要求的寄存器状态,当多任务内核决定运行另外的任务时,它保存正在运行的任务的上下文,恢复将要运行下一任务的上下文,并运行下一任务,这个过程称为上下文切换。在任务运行时,其上下文是高度动态的。调度器从一个任务切换到另一个任务所需要的时间称为上下文切换开销。
        (7)可重入性。指一段代码被一个以上的任务调用,而不必担心数据遭到破坏。具有可重入性的函数任何时候都可以被中断,一段时间以后继续运行,相应数据不会遭到破坏。
        (8)分发器。分发器是调度器的一部分,执行上下文切换并改变执行的流程。分发器完成上下文切换的实际工作并传递控制。任何时候,执行的流程通过三个区域之一:应用任务、ISR(Interrupt Service Routines,中断服务程序)或内核。
        根据如何进入内核的情况,分发的情况也有所不同。当一个任务是用系统调用时,分发器通常在每个任务的系统调用完成后退出内核。在这种情况下,分发器通常是以调用为基础的,因此,它可以协调由此引起的任何系统调用的任务状态转移。另一方面,如果一个ISR做系统调用,则分发器将被越过,直到ISR全部完成它的执行。
        当前,大多数内核支持两种普遍的调度算法,即基于优先级的抢占调度算法和时间轮转调度算法。
               基于优先级的抢占调度
               基于优先级的抢占调度又可以分为静态优先级和动态优先级。静态优先级是指应用程序在执行的过程中各任务的优先级固定不变。在静态优先级系统中,各任务以及它们的时间约束在程序编译时是已知的;动态优先级是指应用程序在执行的过程中各任务的优先级可以动态改变。这种类型的调度,在任何时候运行的任务是所有就绪任务中具有最高优先级的任务,任务在创建时被赋予了优先级,任务的优先级可以由内核的系统调用动态更改,这使得嵌入式应用对于外部事件的响应更加灵活,从而建立真正的实时响应系统。
               一般情况下,可以采用单调执行速率调度法(Rate Monotonic Scheduling,RMS)来给任务分配优先级,基本原则是执行最频繁的任务优先级最高。RMS做了如下假设:
               (1)所有的任务都是周期性的。
               (2)任务间不需要同步,没有共享资源,没有任务间的数据交换等问题。
               (3)系统采用抢占式调度,总是优先级最高且就绪的任务被执行。
               (4)任务的死线是其下一周期的开始。
               (5)每个任务具有不随时间变化的定长时间。
               (6)所有的任务具有同等重要的关键性级别。
               (7)非周期性任务不具有硬死线。
               要使一个具有n个任务的实时系统中的所有任务都满足硬实时条件,必须使下述定理成立。
               RMS定理:
               
               式中,Ei是任务i最长执行时间,Ti是任务i的执行周期,Ei/Ti是任务i所需的CPU时间。
               :基于RMS定理,要所有的任务满足硬实时条件,则所有有时间要求的任务总的CPU利用时间(或利用率)应当小于70%。通常,作为实时系统设计的一条原则,CPU利用率应当在60%~70%之间。
               时间轮转调度
               时间轮转调度算法为每个任务提供确定份额的CPU执行时间。显然,纯粹的时间轮转调度是不能满足实时系统的要求的。取而代之的是,基于优先级抢占式扩充时间轮转调度,对于优先级相同的任务使用时间片获得相等的CPU执行时间。内核在满足以下条件时,把CPU控制权转交给下一个就绪态的任务:
               (1)当前任务已无事可做。
               (2)当前任务的时间片还没用完,任务就已经结束了。
               如下图所示,任务Task1、Task2、Task3具有相同的优先级,它们按照时间片运行,任务Task2被更高优先级的任务Task4抢占,当Task4执行完毕后恢复Task2的执行。
               
               时间轮转调度
               任务操作
               内核提供任务管理服务,也提供一个允许开发者操作任务的系统调用,典型的任务操作有任务创建和删除、任务调度控制、任务信息获取。
 
        操作系统
        编写嵌入式软件有两种选择:一是自己编写内核;二是使用现成的操作系统。如果嵌入式软件只需要完成一项非常小的工作,例如在电动玩具、空调中,就不需要一个功能完整的操作系统。但如果系统的规模较大、功能较复杂,那么最好还是使用一个现成的操作系统。可用于嵌入式系统软件开发的操作系统有很多,但关键是如何选择一个适合开发项目的操作系统,可以从以下几点进行考虑:
        (1)操作系统提供的开发工具。有些实时操作系统只支持该系统供应商的开发工具,因此,还必须从操作系统供应商处获得编译器、调试器等;而有的操作系统应用广泛,且有第三方工具可用,因此选择的余地比较大。
        (2)操作系统向硬件接口移植的难度。操作系统到硬件的移植是一个重要的问题,是关系到整个系统能否按期完工的一个关键因素。因此,要选择那些可移植性程度高的操作系统,以避免因移植带来的种种困难。
        (3)操作系统的内存要求,有些操作系统对内存有较大要求。
        (4)操作系统的可剪裁性、实时性能等。
 
        内存
        除了CPU,内存也是影响系统性能的最常见的瓶颈之一。看系统内存是否够用的一个重要参考就是分页文件的数目,分页文件是硬盘上的真实文件,当操作系统缺少物理内存时,它就会把内存中的数据挪到分页文件中去,如果单位时间内此类文件使用频繁(每秒个数大于5),那就应该考虑增加内存。具体考察内存的性能的参数包括内存利用率、物理内存和虚拟内存的大小。
 
        嵌入式操作系统
               嵌入式操作系统的概念
               嵌入式操作系统是指在嵌入式系统中的操作系统。嵌入式操作系统运行在嵌入式智能芯片环境中,对整个智能芯片以及它所操作、控制的各种部件装置等资源进行统一协调、调度、指挥和控制。
               嵌入式操作系统的特点
               嵌入式操作系统具有占用空间小、执行效率高、方便进行个性化定制和软件要求固化存储等特点。
               (1)微型化。由于硬件平台的局限性,如主存少、字长短、运行速度有限、能源少(用微小型电池)、外部设备和控制对象千变万化,因此,不论从性能还是从成本角度考虑,都不允许它占用很多资源,系统代码量少,应在保证应用功能的前提下,以微型化作为特点来设计嵌入式操作系统的结构与功能。
               (2)可定制。嵌入式操作系统的运行平台多种多样,应用更是千变万化,表现出专业化的特点。从减少成本和缩短研发周期方面考虑,要求它能运行在不同的微处理机平台上,能针对硬件变化进行结构与功能上的配置,以满足不同应用的需要。
               (3)实时性。嵌入式操作系统广泛应用于过程控制、数据采集、传输通信、多媒体信息及一些需要迅速响应的场合,实时响应要求严格,因此实时性是其主要特点之一。
               (4)可靠性。系统构件、模块和体系结构必须达到应有的可靠性,对关键要害应用还要提供容错和防故障措施,以进一步提高可靠性。
               (5)易移植性。为了提高系统的易移植性,通常采用硬件抽象层(Hardware Abstraction Level,HAL)和板级支撑包(Board Support Package,BSP)的底层设计技术。HAL提供了与设备无关的特性,屏蔽了硬件平台的细节和差异,向操作系统上层提供了统一接口,保证了系统的可移植性。
               嵌入式系统开发环境
               嵌入式系统开发环境通常配有源码级可配置的系统模块设计、丰富的同步原语、可选择的调度算法、可选择的主存分配策略、定时器与计数器、多方式中断处理支持、多种异常处理选择、多种通信方式支持、标准C语言库、数学运算库和开放式应用程序接口等。较著名的嵌入式操作系统有Windows CE、VxWorks、pSOS、Palm OS等。
 
        任务间通信
        任务间通信是指任务之间为了协调工作,需要相互交换数据和控制信息。任务之间的通信可以分为两种类型:
        .低级通信:只能传递状态和整数值等控制信息。例如,用来实现任务间同步与互斥的信号量机制和信号机制都是一种低级通信方式。这种方式的优点是速度快。缺点是传送的信息量非常少,如果要传递较多信息,就得进行多次通信。
        .高级通信:能够传送任意数量的数据,主要包括三类:共享内存、消息传递和管道。
               共享内存
               共享内存指的是各个任务共享它们地址空间当中的某些部分,在此区域,可以任意读写和使用任意的数据结构,把它看成是一个通用的缓冲区。一组任务向共享内存中写入数据,另一组任务从中读出数据,通过这种方式来实现它们之间的信息交换。
               在有些嵌入式操作系统中,不区分系统空间和用户空间,整个系统只有一个地址空间,即物理内存空间,系统程序和各个任务都能直接对所有的内存单元进行随意地访问。在这种方式下,内存数据的共享就变得更加容易了,如下图所示。
               
               多个任务共享内存空间
               在使用共享内存来传送数据的时候,通常要与某种任务间互斥机制结合起来,以免发生竞争条件的现象,确保数据传送的顺利进行。
               消息传递
               消息是内存空间中一段长度可变的缓冲区,其长度和内容均由用户定义。从操作系统的角度来看,所有的消息都是单纯的字节流,既没有确切的格式,也没有特定的含义。对消息内容的解释是由应用来完成的,应用根据自定义的消息格式,将消息解释成特定的含义,如某种类型的数据、数据块的指针或空。
               消息传递指的是任务与任务之间通过发送和接收消息来交换信息。
               消息机制由操作系统来维护,包括定义寻址方式、认证协议、消息的数量等。一般提供两个基本的操作:send操作,用来发送一条消息;receive操作,用来接收一条消息。如果两个任务想要利用消息机制来进行通信,它们首先要在两者之间建立一个通信链路,然后就可以使用send和receive操作来发送和接受消息。
               任务之间的通信方式可以分为直接通信和间接通信两种。
               (1)直接通信。在直接通信方式下,通信双方必须明确知道与之通信的对象。采用类似下面的通信原语:
               .send(P,message):发送一条消息给任务P;
               .receive(Q,message):从任务Q那里接收一条消息。如果没有收到消息,可以阻塞起来等待消息的到来,也可以立即返回。
               在通信双方之间存在一条通信链路,该链路具有如下特征:
               .通信链路是自动建立的,由操作系统来维护;
               .每条链路只涉及一对相互通信的任务,每对任务之间仅存在一条链路;
               .通信链路可以是单向或双向的。
               (2)间接通信。在间接通信方式下,通信双方不需要指出消息的来源或去向,而是通过共享的邮箱(mailbox)来发送和接收消息,每个邮箱都有一个唯一的标识。采用类似下面的通信原语:
               .send(A,message):发送一条消息给邮箱A;
               .receive(A,message):从邮箱A接收一条消息。
               间接通信的特点:
               .对于一对任务,只有当它们共享一个公共邮箱时才能进行通信;
               .一个邮箱可以被多个任务访问,每对任务也可以使用多个邮箱来通信;
               .通信可以是单向或双向的。
               邮箱只能存放单条消息,它提供了一种低开销的消息传递机制,其状态只有两种:空或满。另外一种间接通信机制是消息队列。它与邮箱是类似的,但可以同时存放若干条消息,提供了一种任务间缓冲通信的方法。如下图所示,发送消息的任务将消息放入队列,而接收消息的任务则将消息从队列中取出。
               
               消息队列示意图
               管道
               管道通信由UNIX首创,由于其有效性,后来的一些系统相继引入了管道技术。管道通信以文件系统为基础,所谓管道即连接两个任务之间的一个打开的共享文件,专用于任务之间的数据通信。发送任务从管道的一端写入数据流,接收任务从管道的另一端按先进先出的顺序读出数据流。管道的读写操作即为普通的文件读写操作,数据流的长度和格式没有限制。
 
        数据结构
        根据数据元素之间关系的不同特性,通常有下列4类基本的逻辑结构,即集合结构、线性结构、树形结构、图形结构。
        1)线性结构
        线性表是最常用且最简单的一种数据结构。线性表中除第一个元素外,每个元素均只有一个直接前驱;除最后一个元素外,每个元素都只有一个直接后继。
        栈是限定仅在表尾进行插入或删除操作的线性表,是只能通过访问它的一端来实现数据存储和检索的一种线性数据结构。
        队列是一种先进先出(FIFO)的线性表,它只允许在表的一端进行插入,而在另一端删除元素。
        2)树
        树是nn≥0)个互不相交的有限集,当n=0时称为空树。在一棵非空树中,有且仅有一个节点称为根节点;当n>1时,其余的节点可分为若干个不相交的集合,其中每一个集合本身又是一棵树,这些集合称为根节点的子树。
        3)图
        图是由两个集合VE组成的二元组,记为G=(V, E),其中V是顶点的非空有限集合,E是图中边的有限集合。



更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2026 All Rights Reserved
软考在线版权所有