|
知识路径: > 计算机系统综合知识 > 操作系统 > 网络操作系统与嵌入式操作系统 > 嵌入式系统 > 嵌入式操作系统 >
|
被考次数:1次
被考频率:低频率
总体答错率:50%  
知识难度系数:
|
由 软考在线 用户真实做题大数据统计生成
|
考试要求:掌握
相关知识点:15个
|
|
|
|
RTOS的用户可以使用内核对象来解决实时系统设计中的问题,如并发、同步与互斥、数据通信等。内核对象包括信号量、消息队列、管道、事件与信号等。
|
|
|
|
为了同步一个应用的多个并发线程和协调它们对共享资源的互斥访问,内核提供了一个信号量对象和相关的信号量管理服务。信号量是一个内核对象,就像一把锁,任务获取了该信号量就可以执行期望的操作或访问相关资源,从而达到同步或互斥的目的。
|
|
|
|
(1)二值信号量。二值信号量只能有两个值:0或1,当其值为0时,认为信号量不可使用。当其值为1时,认为信号量是可使用的。当二值信号量被创建时,既可以初始化为可使用的,也可以初始化为不可使用的。二值信号量通常作为全局资源,被需要信号量的所有任务共享。
|
|
|
(2)计数信号量。计数信号量使用一个计数器赋予一个数值,表示信号量令牌的个数,允许多次获取和释放。初始化时,如果计数值为0,表示信号量不可用;计数值大于0,表示信号量可用。每获取一次信号量其计数值就减1,每释放一次信号量其计数值就加1。在有些系统中,计数信号量允许实现的计数是有界的,有些则无界。同二值信号量一样,计数信号量也可用做全局资源。
|
|
|
(3)互斥信号量。互斥信号量是一个特殊的二值信号量,它支持所有权、递归访问、任务删除安全和优先级反转,以避免互斥固有的问题。互斥信号量初始为开锁状态,被任务获取后转到闭锁状态,当任务释放该信号量时又返回为开锁状态。
|
|
|
通常,内核支持以下几种操作:创建和删除信号量操作、获取和释放信号量操作、清除信号量的等待队列操作以及获取信号量的信息操作。
|
|
|
|
多数情况下,任务活动同步并不足以满足实时响应的要求,任务之间还必须能够交换信息。为了实现任务之间的数据交换,内核提供了消息队列对象和消息队列的管理服务。
|
|
|
消息队列是一个类似于缓冲区的对象,通过它,任务和ISR可以发送和接收消息,实现数据通信。消息队列暂时保存来自发送者的消息,直到有接收者准备读取这些消息为止。
|
|
|
大多数内核支持以下消息队列操作:创建和删除消息队列、发送和接收消息以及获取消息队列的信息等操作。
|
|
|
|
管道是提供非结构化数据交换和实现任务同步的内核对象。每个管道有两个端口,一端用来读,另一端用来写。数据在管道中就像一个非结构的字节流,数据按照FIFO方式从管道中读出。一般EOS内核支持两类管道对象:
|
|
|
(1)命名管道。具有一个类似于文件名的名字,像一个文件或设备出现在文件系统中,需要使用命名管道的任何任务或ISR都可以用误名字对其引用。
|
|
|
(2)无名管道。一般动态创建,且必须使用创建时返回的描述符才可引用此类型的管道。
|
|
|
通常,管道支持以下几种操作:创建和删除一个管道、读、写管道、管道控制、管道上的轮询。
|
|
|
|
某些特殊的EOS提供一个特殊的寄存器作为每个任务控制块的一部分,称为事件寄存器。它是一个属于任务的对象,并由一组跟踪指定事件的二值事件标志组成。EOS支持事件寄存器机制,创建一个任务时,内核同时创建一个事件寄存器作为任务控制块的一部分。经过事件寄存器,一个任务可以检查控制它执行的特殊事件是否出现。一个外部源(例如,另一个任务或中断处理程序)可以设置该事件寄存器的位,通知任务一个特殊事件的发生。任务说明它所希望接收的事件组,这组事件保存在寄存器中,同样,到达的事件也保存在接收的事件寄存器中。另外,任务还可以指示一个时限说明它愿意等待某个事件多长时间。如果时限超过,没有指定的事件达到任务,则内核唤醒该任务。
|
|
|
|
信号是当一个事件发生时产生的软中断,它将信号接收者从其正常的执行路径移开并触发相关的异步处理。本质上,信号通知其他任务或ISR运行期间发生的事件,与正常中断类似,这些事件与被通知的任务是异步的。信号的编号和类型依赖于具体的嵌入式系统的实现。通常,嵌入式系统均提供信号设施,任务可以为每个希望处理的信号提供一个信号处理程序,或是使用内核提供的默认处理程序,也可以将一个信号处理程序用于多种类型的信号。信号可以有被忽略、挂起、处理或阻塞等4种不同的响应处理。
|
|
|
|
条件变量是一个与共享资源相关的内核对象,它允许一个任务等待其他任务创建共享资源需要的条件。一个条件变量实现一个谓词,谓词是一组逻辑表达式,涉及共享资源的条件。谓词计算的结果是真或假,如果计算为真,则任务假定条件被满足,并且继续运行,反之,任务必须等待所需要的条件。当任务检查一个条件变量时,必须原子性地访问,所以,条件变量通常跟一个互斥信号量一起使用。
|
|
|
一个任务在计算谓词条件之前必须首先获取互斥信号量,然后计算谓词条件,如果为真,条件满足继续执行后续操作;否则,条件不满足,原子性地阻塞该任务并先释放互斥信号量。条件变量不是共享资源同步访问的机制,大多数开发者使用条件变量,让任务等待一个共享资源到达一个所需的状态。
|
|
|