一种嵌入式实时操作系统中多级资源管理的实现方法

文档序号:6354581阅读:320来源:国知局
专利名称:一种嵌入式实时操作系统中多级资源管理的实现方法
技术领域
本发明属于汽车电子控制技术领域,更为具体地讲,涉及一种嵌入式实时操作系 统中多级资源管理的实现方法。
背景技术
1、资源的概念在汽车电子领域的0SEK/VDX嵌入式实时操作系统规范中,提出了资源管理的功 能要求,主要用于应用程序中的共享资源的保护。这实际上与其他嵌入式实时操作系统中 所提供的信号量机制类似。当任务获取某一共享资源后,其优先级会被抬升到该资源的天 花板优先级,以防止与该任务有相同资源竞争的任务进入。在释放资源时任务的优先级被 恢复到任务原来的优先级。图1是资源优先级的原理实例图。在图1所示的例子中,Taskl的优先级最高,Task4的优先级最低。Taskl与Task4 共享一个资源,则该资源的优先级应该比Taskl高或相等。当Task4占用资源时,它获得 不低于Taskl的优先级,因此在它获得资源后的运行过程中,即便Taskl就绪它也不会被 Taskl抢占,直到Task4释放资源。资源一旦被释放,Task4的优先级立即回到原来的低优 先级,并且处于就绪状态,Taskl进入运行状态。当Taskl占用资源时,它的优先级也会被 抬升到天花板优先级。确定资源优先级的原则是(1)、资源优先级必需高于或者等于要使用该资源的任务的最高优先级;O)、但不能够高于未使用该资源的并且比使用该资源的任务的最高优先级高的 任务的优先级。图2是确定资源优先级的原则实例图。确定资源优先级的原则如图2所示,在图2的实例中,共有12个任务Tl T12,任 务的优先级是数字越大优先级越高,图中各个任务所处的位置所对应的纵坐标表明了它的 优先级。该实例中的T4,T6,T7,T9共享同一个资源R,它们当中的最高优先级是9。根据 上述确定资源优先级原则第(1)条,则资源R的优先级至少应该为9,这个优先级被称为资 源R的天花板优先级。而在这个系统中不共享资源S的任务中,Tl,T2,T3,T5,T8的优先 级低于这个天花板优先级,对该资源R优先级的选择没有影响;但是另外一些不共享资源R 的任务T10,T11,T12的优先级是高于这个天花板优先级的,根据第(2)条规则,资源R的优 先级不能超过它们当中最低的优先级12,则资源R最终的优先级可以介于9和12之间,包 含9但不包含12,即图中加粗的黑色实线所代表的3个优先级9、10、11。2、多级资源的类型0SEK/VDX规范中提出了 5种类型的资源,即标准资源、中断资源、内部资源、调度 器资源和链接资源。这些资源具有不同范围的优先级空间,我们把这些资源的集合称为多 级资源,有关多级资源的概念陈述如下。
通常在一个基于优先级的多任务软件系统中,有两种类型的运行体任务和中断 服务例程。任务有一个优先级范围,中断服务例程也有一个优先级范围。任务的优先级范 围是低于中断服务例程的优先级范围的,因此,在系统允许响应中断的情况下,中断的发生 是可以打断任务的运行的。如图3所示为一个系统范围的优先级模式,在这个系统中,任务 的优先级范围为1 64,中断服务例程,包括异常处理程序的优先级范围为65 96。针对下面将阐述的5种资源,即标准资源、中断资源、内部资源、调度器资源和链 接资源,在如图3的系统中如果有使用这5种类型的资源,则标准资源的优先级范围为1 64,中断资源的优先级范围为65 96,内部资源由于仅限于任务使用,其优先级范围也为 1 64,调度器资源的优先级是个确定值,即为任务优先级范围的最大值64,链接资源的优 先级取决于其所链接的资源的情况,其优先级范围为1 96。有关上述各类型资源的优先 级范围总结如图4所示。2.1标准资源标准资源指的是一个普通的资源,其工作原理如第1节所述,并且它与其他资源 没有关联。标准资源的优先级范围仅限于操作系统中所有任务能够配置的优先级范围。比 如在图4所示系统中,最多允许任务有64个不同的优先级,则标准资源的优先级范围为 1 64。2. 2中断资源中断资源的概念是将操作系统所管理的资源的概念进行了扩展,其含义是如果 有任务和中断服务例程共享资源,那么这个资源被称为中断资源,它的作用与标准资源一 样,当任务获取了这个资源,其优先级会被提升到该资源的天花板优先级,其效果是,任务 获得了比某些中断更高的运行权利,任何一个可能占用相同资源的任务或中断都不会进入 到运行状态,因为他们的优先级都低于或等于当前占用资源的任务的优先级。中断资源的 优先级比纯粹只涉及任务的资源优先级高。中断资源的占用可以通过设置硬件相应的中断标志来完成,结果是,低于该中断 级别的其他中断被禁止。当释放资源时,相应级别的中断被打开允许响应。另外,获取中断资源的也可以是中断服务例程。2. 3内部资源内部资源也是代表了一组共享某资源的任务,可以对使用相同内部资源的任务 进行互斥。与标准资源及其他资源不同的是,内部资源不需要通过显式的资源操作函数 GetResource和ReleaseResource来获取和释放,它是当任务进入运行状态后自动获得的 资源,当任务退出运行态后自动释放,这是由操作系统自动处理的。内部资源只适用于任务。内部资源在任务进入运行态时拥有,退出运行态时释放, 唯一的例外是任务被抢占时,即任务被抢占时其已获得的内部资源是不需要释放的。如果有的话,内部资源总是任务第一个获取的资源,但这并不表示内部资源的优 先级最低,在内部资源之后,任务还可以获得其他更低优先级的资源。如果有的话,内部资源也总是任务最后一个释放的资源,所有其他的资源都必须 在内部资源之前释放。2. 4调度器资源调度程序可以被看作是一种特殊的资源,所有的任务都能够访问它。如果一个任务要想保护自己不被抢占,那么它可以占用调度器资源。当调度器资源被占用时,中断的响 应可以正常发生,但是除锁定调度器资源的任务外,其他任务不能被调度执行。调度器资源也是对资源概念的一种扩展,在其他嵌入式操作系统中也有相类似的 功能,即开关调度。在0SEK/VDX规范中将其作为一种资源类型,可以减少相关系统调用的 数量,而使用与其他资源一样的申请、释放操作来关闭和打开调度。调度器资源的优先级是高于所有任务原本的优先级的,但是如果某任务获取了中 断资源,则其优先级比调度器资源的优先级高。即调度器资源锁定的是调度程序,而中断资 源锁定的是中断响应。2. 5链接资源链接资源和标准资源在使用上是完全一样的,链接资源相当于标准资源的别名, 但其仍然是一个独立的资源。由于在0SEK/VDX规范中,不允许资源的嵌套使用,或者说直 接嵌套调用同一个资源是不允许的,可以使用与这个资源具有相同特征的资源来代替,这 就是链接资源。链接资源可以和链接资源、标准资源进行链接,但不能与内部资源进行链接。当把资源的概念扩展到链接资源后,一个资源的天花板优先级应该至少被设置为 所有访问该资源的任务的最高优先级或任何链接到该资源的资源优先级。图5资源链接之 前的情况,图5中诸如Rl等符号右边的数字代表其优先级。在一个系统中,任务Tl (优先 级1),T2(优先级幻,T3(优先级幻共享一个资源R1,这个Rl是个标准资源,其天花板优 先级应该至少为3。系统中有另外的一些任务Τ4 (优先级4),Τ5 (优先级幻,Τ6 (优先级6) 共享资源R2,R2为一个链接到Rl的资源,因此R2的天花板优先级至少为6,而同时Rl的 天花板优先级需要至少调整到6,图6为资源在链接后的情况。从上述例子得出被链接的资源的优先级升高,其意义相当于扩展了资源所包含 的任务集合。2. 6对资源使用的要求前面对各种资源的描述中,已经给出了一些资源使用的原则,这里再总结下相关 要求。 在申请资源时,资源的优先级一定要比调用任务或中断例程的静态分配的原始 优先级高; 试图获取一个已被某个任务或中断服务例程占有的资源,系统将返回错误; 任务在获得一个优先级较高的资源后,后续还可以获得优先级相等甚至较低的 资源,但是其优先级不变,保持为所有资源最高的优先级; 同一个任务的资源应该按照先进后出(Last In First Out,可简写为LIF0)的 顺序申请和释放; 当任务进入等待态、挂起态时必须释放完所拥有的所有资源,当离开运行态,即 切换到等待态、挂起态或就绪态时由操作系统完成内部资源的释放; 链接资源、中断资源和标准资源在使用上是完全一样的。

发明内容
本发明目的在于提供一种符合0SEK/VDX规范的、满足嵌入式实时操作系统对于多级资源管理要求的方法。为实现上述目的,本发明嵌入式实时操作系统中多级资源管理的实现方法,其特 征在于,包括以下步骤(1)、相关数据结构的设计1.1)、资源控制块a、采用资源控制块来对嵌入式实时操作系统中,除内部资源外的每个资源进行管 理,资源控制块包括资源ID,用于对资源进行唯一标识,资源是否已被使用标识,用于记录资源是否已被使用,资源的天花板优先级,嵌入式实时操作系统配置时根据资源优先级的确定原则确 定,资源的当前优先级,用于记录任务获取该资源后所达到的优先级,以便在任务释 放资源的过程中其优先级能够恢复到正确的高度,指向下一个资源块的指针,用于将获取的资源链成一个资源链表,新获取的资源 会插入到该链表的头部,释放资源的时候最近获取的资源会被最先释放掉;如果资源为中断资源,则其资源控制块还包括中断掩码,用于处理中断资源时,记录占用该资源前的中断掩码,以便中断资源释 放时,恢复中断前的操作;b、资源链表对于标准资源和链接资源的资源控制块,根据任务获取它们的先后顺序链接成资 源链表,并链接到该任务的任务控制块上;对于中断资源的资源控制块,根据获取它们的先后顺序链接成一个全局的中断资 源链表;对于调度器资源的资源控制块,其为独立的资源控制块,没有挂在任何一个资源 链表上;1.2)、任务控制块任务控制块包括任务ID,用于对任务进行唯一标识;任务配置信息表指针,用于指向任务配置信息结构数组中该任务的配置信息表;任务当前优先级,用于记录当任务获取任何一个资源后的最新的优先级;任务使用的资源链表,用于把任务当前所占用的标准资源和链接资源按获取它们 的先后顺序链接起来,任务在释放这些资源的时候则按照先进后出的顺序进行;1. 3)、任务配置信息结构数组任务配置信息结构数组用于记录任务静态配置的信息,由嵌入式实时操作系统中 所有任务的配置信息表组成,这些信息在系统运行过程中不会发生改变;任务配置信息表包括任务ID号、任务静态配置的原始优先级、任务所使用的资 源列表以及内部资源优先级;O)、各级资源的操作2.1)、获取资源
8
以资源ID为输入参数,告诉嵌入式操作系统需要获取的是哪一个资源a、如果要获取的是调度器资源检查其资源控制块的是否已被使用标识,如果未 被使用则成功获得调度器资源并返回;如果调度器资源已被使用则返回失败;b、检查需要获取的资源bl、如果其资源控制块中是否已被使用标识为已被使用,则返回错误,b2、如果当前是在中断处理程序中获取非中断资源,则返回错误,b3、如果要获取的是标准资源或链接资源b31、如果是在中断服务例程中获取该资源,则返回错误,b32、如果其资源控制块中的天花板优先级小于调用该资源的任务的任务控制块 中的任务静态配置的原始优先级,返回错误,b33、如果在这之前调度器资源已经被使用,返回错误;C、获取资源的操作Cl、如果要获取的是中断资源ell、从硬件的中断控制器中获取当前的中断掩码值并将其保存到该中断资源的 资源控制块的中断掩码元素中;cl2、将中断控制器中的中断掩码值设置为该中断资源的控制块中的天花板优先 级的值,以便屏蔽低于或等于该中断资源的天花板优先级的中断;cl3、将该中断资源的控制块是否已被使用过标识设置为已被使用;cl4、将该中断资源的控制块挂接到中断资源链表的头部;c2、如果要获取的是标准资源或链接资源c21、将该资源的控制块是否已被使用过标识设置为已被使用;c22、将该资源的控制块挂接到获取该资源的任务控制块的资源链表的头部;c23、如果获取该资源的任务的控制块中的当前优先级低于该资源的控制块中的 天花板优先级,则将获取该资源的任务的控制块中的当前优先级调整至该资源的天花板优 先级;c24、将该资源的控制块中的当前优先级设置为获取该资源的任务的控制块重的 当前优先级的值;2. 2)、释放资源以资源ID为输入参数,告诉嵌入式操作系统需要获取的是哪一个资源a、如果要释放的是调度器资源检查其资源控制块的是否已被使用标识,如果未 被使用则返回错误;如果调度器资源已被使用则释放它,并进行任务调度;b、检查需要释放的资源bl、如果其资源控制块中是否已被使用标识为未已被使用,返回错误;b2、如果是在中断服务例程中释放非中断类型的资源,则返回错误;b3、如果要释放的是中断资源b31、如果该资源不是中断资源链表头部的那个资源,则返回错误;b4、如果要释放的是标准资源或链接资源b41、如果要释放的资源不是任务资源链表的头节点,返回错误;b42、如果在这之前调度器资源已经被使用,返回错误;
b43、如果是在中断服务例程中释放该资源,返回错误;b44、如果其资源控制块中的天花板优先级小于调用该资源的任务的任务控制块 中的任务静态配置的原始优先级,返回错误。C、释放资源的操作Cl、如果要释放的是中断资源ell、将该中断资源的资源控制块中是否已被使用标识的置为未被使用;cl2、调整中断资源链表取下头节点,下一个中断资源控制块成为链表中的头节占.
^ \\\ cl3、根据该中断资源的资源控制块中保存的中断掩码,恢复之前在获取该中断资 源时所保存的中断掩码值;cl4、检查中断资源链表,如果已释放完所有的中断资源,操作系统就进行任务调 度;c2、如果要释放的是标准资源或链接资源c21、将该资源的资源控制块中是否已被使用标识的置为未被使用;c22、调整获取该资源任务的资源链表取下头节点,下一个资源控制块成为链表 中的头节点;C23、如果获取该资源任务的资源链表上还有其他资源控制块,则调整该任务的控 制块中的当前优先级为资源链表头部那个资源的资源控制块中的当前优先级,然后执行调 度程序进行任务调度;c24、如果调用任务已不再拥有任何资源则进行如下的判断和处理d41、如果该任务使用了内部资源,并且任务的控制块中当前优先级大于内部资 源的优先级,则调整任务当前优先级为内部资源的优先级,然后进行任务调度;d42、如果该任务未使用内部资源,并且任务的控制块中当前优先级不等于其静 态配置的原始优先级,则调整任务的当前优先级到原始优先级的高度,然后进行任务调度。本发明的发明目的是这样实现的为了符合0SEK/VDX规范的、满足嵌入式实时操作系统对于多级资源管理的要求, 本发明嵌入式实时操作系统中多级资源的管理方法针对标准资源、链接资源、中断资源以 及调度器资源设计了资源控制块,并链接到不同的位置,然后,按照不同资源的优先级高低 关系,利用资源控制块,实现对多级资源的管理。


图1是资源优先级的原理实例图;图2是确定资源优先级的原则实例图;图3是嵌入式实时操作系统的优先级模式4是中断资源原理示意图;图5是资源链接前的示意图;图6是资源链接后的示意7是本发明中资源控制块的一种具体实施结构图;图8是中断资源链表结构10
图9是任务控制块的一种具体实施结构图;图10是实例1的系统运行过程图;图11是实例1的系统运行过程图。
具体实施例方式下面结合附图对本发明的具体实施方式
进行描述,以便本领域的技术人员更好地 理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许 会淡化本发明的主要内容时,这些描述在这里将被忽略。实施例1、相关数据结构的设计1. 1、资源控制块图7是本发明中资源控制块的一种具体实施结构图在本实施中,如图7所示,资源控制块包括资源ID resourceld 用于记录资源的ID号,对资源进行唯一标识;资源是否已被使用标识i如sed 用于记录资源是否已被使用;中断掩码savedlsrMask,用于处理中断资源时,记录占用该资源前的中断掩码,以 便中断资源释放时,恢复中断前的操作,这个元素是嵌入式实时操作系统在处理中断资源 时需要用到的;资源的天花板优先级ceilingPriority 这个优先级是在嵌入式实时操作系统配 置时根据资源天花板优先级的确定原则计算出来的,该确定原则属于现有技术,在背景技 术中已经进行了详细描述,在此不在赘述;资源的当前优先级currentPriority 用于记录任务获取该资源后所达到的优先 级,以便在任务释放资源的过程中其优先级能够恢复到正确的高度;指向下一个资源块的指针nextResource 指向下一个资源的指针,它用于将获取 的资源链成一个资源链表,便于资源释放时的操作。这将形成一个单向链表,新获取的资 源会插入到链表的头部,因此在链表最前面的就是最近获取的资源。而释放资源的时候是 要求最先释放链表头部的资源,这样最近获取的资源会被最先释放掉,因而实现的是一个 LIFO (后进先出)的队列。资源控制块适用于标准资源、链接资源、调度器资源和中断资源。对于内部资源, 由于应用不能显式地使用嵌入式实时操作系统提供的API函数(应用程序编程接口函数) 获取或释放该资源,相关操作是在任务进入或离开运行状态时由嵌入式实时操作系统自动 处理的,因此内部资源没有单独的控制块。内部资源的优先级是在进行系统配置时,根据该 任务所使用的内部资源的情况计算出其内部资源优先级并记录在任务配置信息表中的。不同类型资源,即标准资源、链接资源、调度器资源和中断资源的控制块在使用过 程中被嵌入式实时操作系统链接到不同的位置对于标准资源和链接资源的资源控制块,根据任务获取它们的先后顺序链接成资 源链表,并链接到该任务的任务控制块上;对于中断资源的资源控制块,如图8所示,根据获取它们的先后顺序链接成一个 全局的中断资源链表,中断资源链表上每个资源控制块所对应的资源类型都是中断资源;
对于调度器资源的资源控制块,其为独立的资源控制块,没有挂在任何一个资源 链表上;1.2、任务控制块图9是任务控制块的一种具体实施结构图;对于标准资源和链接资源的控制块,是挂接在任务的控制块上的。在本实施中,如 图9所示,任务控制块包括任务ID TaskID,用于对任务进行唯一标识;任务配置信息表指针configTable,用于指向任务配置信息结构数组中该任务的 配置信息表,任务配置信息表中包含任务静态配置的原始优先级、任务所使用的资源列表 以及内部资源优先级;任务当前优先级curPriority,用于记录当任务获取任何一个资源后的最新的优 先级;任务使用的资源链表resourceList,用于把任务当前所占用的标准资源和链接资 源按获取它们的先后顺序链接起来,任务在释放这些资源的时候则按照先进后出的顺序进 行;1. 3、任务配置信息结构数组任务配置信息结构数组用于记录任务静态配置的信息,这些信息在嵌入式实时操 作系统运行过程中不会改变。嵌入式实时操作系统中所有任务的配置信息表组成。表1是任务配置信息结构数组taskConfigArray [NUM_0F_TASKS]
任务ID号 TaskID任务静态配置的原始 优先级 StaticPriority任务所使用的资源列表 sharedResource内部资源优先级 inResPriorityTlT2T3T4T5表 1该数组的元素个数与嵌入式实时操作系统中的任务数量有关,比如嵌入式实时操 作系统系统中有5个任务,则该表的任务ID号为Tl T5。“任务所使用的资源列表”将记录任务在运行过程中可能使用的所有资源的ID号。“内部资源优先级”是指,如果该任务有使用内部资源,这个内部资源的优先级是 多少。1. 4、资源配置信息结构数组资源配置信息结构数组用于记录资源静态配置的信息,由嵌入式实时操作系统中 所有资源的配置信息表组成,这些信息在系统运行过程中不会改变;资源配置信息表包括资源ID号、资源类型、被链接的资源、资源的天花板优先级,嵌入式实时操作系统中所有资源的配置信息形成数组,以表的形式表示如下
表 2 是资源配置信息结构数组 resourceConfigArray [NUM_0F_RES0URCES]
资源ID号 resourceld资源类型 resourceType被链接的资源 IinkedResource资源的天花板优 先级 ceilingProrityRlR2R3R4R5R6R7表2该数组的元素个数与系统中的资源数量有关,在本实施例中,如表2所示,嵌入式 实时操作系统中有7个资源,则该表的资源ID号为Rl R7。其中“资源类型”可能的取值是标准资源为STANDARD、链接资源为LINKED、中断 资源为INTERRUPT、内部资源为INTERNAL、调度器资源为SCHEDULER。如果某个资源属于链接资源类型(LINKED),则在“被链接的资源”中记录其链接到 的资源编号。2、确定资源天花板优先级的算法在一个嵌入式实时操作系统的配置过程中,正确计算各种类型资源的天花板优先 级是非常重要的。在本实施例中,给出一个确定资源天花板优先级的算法。该算法使用上节所述的任务配置信息结构数组和资源配置信息结构数组,具体的 算法描述如下A.相关数据结构的建立及初始化(1)、建立任务的配置信息结构数组 taskConfigArray[NUM_OF_TASKS],宏 NUM_ 0F_TASKS代表系统中的任务总数;O)、在每个任务配置信息结构中设置该任务静态配置的原始优先级 taskConfigArray[i], staticPriority, i 的取值范围是 0 NUM_0F_TASKS_1 ;(3)、在每个任务配置信息结构中设置该任务的资源列表taskConfigArrayEi]. sharedResource,其中的每个列表元素是该任务所共享的不同资源ID号;、建立资源的配置信息结构数组 resourceConfigArray [NUM_0F_RES0URCES], 宏NUM_0F_RES0URCES为系统中资源的总数;(5)、在每个资源的配置信息结构中设置该资源的类型resourceConfigArray [i]. resourceType, i 的取值范围是 0 NUM_0F_RES0URCES_1 ;(6)、如果某个资源属于链接资源类型(LINKED),还需要在资源配置信息结构中明
resourceConfigArray [i]. IinkedResource0B.算法的具体处理过程(1)、将每个资源的配置信息结构中的天花板优先级resourceConfigArray[i].
13ceilingPrority设置为系统最小的优先级(假定为0,数字越小优先级越低);(2)、计算出在没有链接情况下的各个资源的天花板优先级(即共享该资源的任 务集合的最高优先级)。具体方法遍历任务的配置信息结构数组,对于其中的每个任务(2. 1)、获取该任务所使用的资源列表 taskConfigArray[i]. sharedResource ;O. 2)、对于列表中的每个资源,查询该资源的配置信息结构,如果该资源当前 的天花板优先级(resourceConfigArray[j]. ceilingPrority)低于当前任务的优先级 (taskConf igArray [ i ]. stat i cl^riori ty),则修改资源的天花板优先级为任务的优先级 (resourceConfigArray[j]. ceilingPrority = taskConfigArray[i]. staticPriority);(3)、将链接关系考虑进去进行调整,方法遍历资源的配置信息结构数组,对于其 中的每个资源(3. 1)、如果该资源类型是链接资源,则获取被链接的资源的编号 resourceConfigArray[i], linkedResource,并进入步骤(3.2);如果不是链接资源,则遍 历下一个数组元素,继续本步骤的处理;(3.2)、以此资源的编号(resourceConfigArray[i]_ linkedResource)查 询被链接资源的配置信息结构,如果其优先级低于链接到它的资源的优先级(即re sourceConf igArray[resourceConf igArray[i]. 1inkedResource]. cei1ingPrority < resourceConfigArray[i]. ceilingPrority),则调整被链接资源的优先级为链接到它 的资源的优先级(resourceConf igArray [resourceConf igArray [i]. linkedResource]. ceilingPrority = resourceConfigArray [i]. ceilingPrority);(3. 3)、如果第(3. 2)步有调整优先级,则反复执行(3. 1)、(3. 2)继续查询被链接 资源,直到资源类型不是链接资源、或者没有新的优先级调整为止;(3. 4)、如果第(3. 2)步没有调整优先级,则遍历资源配置信息结构数组的下一个 元素,回到步骤(3. 1)。完成上述算法后,在每个资源的配置信息结构中的天花板优先级ceilingPrority 元素的值就是该资源最终得到的天花板优先级了。3、各级资源的操作在本实施例中,对各级资源的操作2个API函数来完成对标准资源、中断资源、调 度器资源和链接资源的获取和释放操作。3. 1 获取资源的 API 函数 GetResource该函数以资源ID resourceld为输入参数,告诉操作系统需要获取的是的哪一个 资源。该函数的工作原理(1)、如果要获取的是调度器资源检查调度器资源是否已经被使用,如果未被使 用则成功获得调度器资源并返回;如果调度器资源已被使用则返回失败;(2)、对输入资源ID resourceld进行检查i、如果该参数所指定的资源已被使用,即资源控制块中的i如sed的值为1,则返
回错误ii、如果当前是在中断处理程序中获取非中断资源,则返回错误;iii、如果要获取的是标准资源或链接资源 如果是在中断服务例程中获取该资源,则返回错误;
如果资源的天花板优先级(即资源配置信息结构中的ceilingPriority)小于 调用任务原始静态配置的优先级(即任务配置信息结构中的staticl^iority),返回错误; 如果在这之前调度器资源已经被使用,返回错误。(3)、获取资源的具体操作i、如果要获取的是中断资源 从硬件的中断控制器中获取系统当前的中断掩码值并将其保存到resourceld 所指定的资源控制块的savedlsrMask元素中; 将中断控制器中的中断掩码值设置为该中断资源的天花板优先级 ceilingPriority 的值; 将资源的状态设置为已使用的,即设置i如sed元素的值为1 ; 将该资源的控制块挂接到系统的中断资源链表,如图8所示的头部;ii、如果要获取的是标准资源或链接资源 将资源的状态设置为已使用的,即设置i如sed元素的值为1 ; 将该资源的控制块挂接到调用该函数的任务的资源链表的头部; 如果调用任务的当前优先级,即任务控制块中的curPriority低于资源的天花 板优先级,即资源控制块中的ceilingPriority,则将调用任务的当前优先级调整至该资源 的天花板优先级; 将资源控制块中的当前优先级currentPriority设置为调用任务的当前优先 级的值。3. 2、释放资源的 API 函数 ReleaseResource该函数以资源ID resourceld为输入参数,告诉操作系统需要释放的是系统中的 哪一个资源。该函数的工作原理(1)、如果要释放的是调度器资源检查调度器资源是否已经被使用,如果未被使 用则返回错误;如果调度器资源已被使用则释放它,并进行任务调度;(2)、对输入资源 ID resourceld 检查i、如果资源ID resourceld所指定的资源未被使用,即资源控制块中的ished的 值为0,返回错误;ii、如果是在中断服务例程中释放非中断类型的资源,则返回错误;iii、如果要释放的是中断资源 如果该资源不是中断资源链表头部的那个资源,则返回错误,因为资源的获取 和释放队列是先进后出的队列;iv、如果要释放的是标准资源或链接资源 如果要释放的资源不是任务资源链表的头节点,即未按照正确的顺序释放资 源,返回错误; 如果在这之前调度器资源已经被使用,返回错误; 如果是在中断服务例程中释放该资源,返回错误; 如果资源的天花板优先级,即资源配置信息结构中的天花板优先级 ceilingPriority小于调用任务静态配置的原始优先级,即任务配置信息结构中的任务静 态配置的原始优先级staticl^riority,返回错误。
15
(3)、释放资源的具体操作i、如果要释放的是中断资源 清除该资源控制块中的已使用标志,即将ii^sed设置为0 ; 调整系统的中断资源链表取下头节点,下一个中断资源控制块成为链表中的 头节点; 恢复之前在获取该中断资源时所保存的中断掩码值; 检查系统的中断资源链表,如果已释放完所有的中断资源,操作系统就进行任 务调度。ii、如果要释放的是标准资源或链接资源 清除该资源控制块中的已使用标志,即将ii^sed设置为0 ; 调整调用任务的资源链表取下头节点,下一个资源控制块成为链表中的头节点。 如果调用任务的资源链表上还有其他资源控制块,则调整该任务的当前优先 级,即任务控制块中的当前优先级curPriority为资源链表头部那个资源的当前优先级, 即资源控制块中的当前优先级currentPriority,然后执行操作系统的调度程序进行任务
调度; 如果调用任务已不再拥有任何资源,即它的资源链表中已没有资源控制块,则 进行如下的判断和处理■如果该任务使用了内部资源,并且任务的当前优先级,即任务控制块中的当前 优先级curPriority大于其内部资源的优先级即任务配置信息结构中的内部资源优先级 inResPriority,则调整任务当前优先级为内部资源的优先级,然后进行任务调度;■如果该任务未使用内部资源,并且任务的当前优先级,即任务控制块中的当前 优先级curPriority不等于其静态配置的原始优先级,即任务配置信息结构中的原始优先 级staticl^iority,则调整任务的当前优先级到原始优先级的高度,然后进行任务调度。3. 3其他与资源管理相关的处理在本实施例中,除上述2个API函数外,在操作系统的功能代码中还要进行以下处理。(1)、与内部资源有关的处理 发生任务切换时,新切换到运行状态的任务,不管该任务是第一次运行还是恢 复以前的运行过程,会自动获取内部资源; 任务在终止运行时,如果它还拥有一个内部资源,则它需要释放该内部资源,其 优先级,即任务控制块中的curPriority会还原到静态配置的原始优先级,即任务配置信 息结构中的staticPriority。(2)、操作系统在进行如下操作时进行与资源相关的检查工作 任务在终止运行时,如果还有资源没有释放,即任务控制块中的资源链表上还 存在资源控制块,则返回错误; 操作系统调度程序运行时,检查是否调度器资源已被使用,如果已被使用,则不 进行调度;另外还要检查系统的中断资源链表上是否有中断资源控制块存在,如果有,也不 进行调度。
实例1下面的实例中,一共有5个任务,其任务配置信息结构数组的内容如表3所示表3为任务配置信息结构数组taskConfigArray[NUM_0F_TASKS](NUM_0F_TASKS = 5)
权利要求
1.一种嵌入式实时操作系统中多级资源管理的实现方法,其特征在于,包括以下步骤(1)、相关数据结构的设计1.1)、资源控制块a、采用资源控制块来对嵌入式实时操作系统中,除内部资源外的每个资源进行管理, 资源控制块包括资源ID,用于对资源进行唯一标识, 资源是否已被使用标识,用于记录资源是否已被使用,资源的天花板优先级,嵌入式实时操作系统配置时根据资源优先级的确定原则确定, 资源的当前优先级,用于记录任务获取该资源后所达到的优先级,以便在任务释放资 源的过程中其优先级能够恢复到正确的高度,指向下一个资源块的指针,用于将获取的资源链成一个资源链表,新获取的资源会插 入到该链表的头部,释放资源的时候最近获取的资源会被最先释放掉; 如果资源为中断资源,则其资源控制块还包括中断掩码,用于处理中断资源时,记录占用该资源前的中断掩码,以便中断资源释放 时,恢复中断前的操作;b、资源链表对于标准资源和链接资源的资源控制块,根据任务获取它们的先后顺序链接成资源链 表,并链接到该任务的任务控制块上;对于中断资源的资源控制块,根据获取它们的先后顺序链接成一个全局的中断资源链表;对于调度器资源的资源控制块,其为独立的资源控制块,没有挂在任何一个资源链表上;·1.2)、任务控制块 任务控制块包括任务ID,用于对任务进行唯一标识;任务配置信息表指针,用于指向任务配置信息结构数组中该任务的配置信息表; 任务当前优先级,用于记录当任务获取任何一个资源后的最新的优先级; 任务使用的资源链表,用于把任务当前所占用的标准资源和链接资源按获取它们的先 后顺序链接起来,任务在释放这些资源的时候则按照先进后出的顺序进行;·1.3)、任务配置信息结构数组任务配置信息结构数组用于记录任务静态配置的信息,由嵌入式实时操作系统中所有 任务的配置信息表组成,这些信息在系统运行过程中不会发生改变;任务配置信息表包括任务ID号、任务静态配置的原始优先级、任务所使用的资源列 表以及内部资源优先级; O)、各级资源的操作·2.1)、获取资源以资源ID为输入参数,告诉嵌入式操作系统需要获取的是哪一个资源 a、如果要获取的是调度器资源检查其资源控制块的是否已被使用标识,如果未被使用则成功获得调度器资源并返回;如果调度器资源已被使用则返回失败;b、检查需要获取的资源bl、如果其资源控制块中是否已被使用标识为已被使用,则返回错误, b2、如果当前是在中断处理程序中获取非中断资源,则返回错误, b3、如果要获取的是标准资源或链接资源 b31、如果是在中断服务例程中获取该资源,则返回错误,b32、如果其资源控制块中的天花板优先级小于调用该资源的任务的任务控制块中的 任务静态配置的原始优先级,返回错误,b33、如果在这之前调度器资源已经被使用,返回错误;c、获取资源的操作Cl、如果要获取的是中断资源ell、从硬件的中断控制器中获取当前的中断掩码值并将其保存到该中断资源的资源 控制块的中断掩码元素中;cl2、将中断控制器中的中断掩码值设置为该中断资源的控制块中的天花板优先级的值;cl3、将该中断资源的控制块是否已被使用过标识设置为已被使用; cl4、将该中断资源的控制块挂接到中断资源链表的头部; c2、如果要获取的是标准资源或链接资源 c21、将该资源的控制块是否已被使用过标识设置为已被使用; c22、将该资源的控制块挂接到获取该资源的任务控制块的资源链表的头部; c23、如果获取该资源的任务的控制块中的当前优先级低于该资源的控制块中的天花 板优先级,则将获取该资源的任务的控制块中的当前优先级调整至该资源的天花板优先 级;c24、将该资源的控制块中的当前优先级设置为获取该资源的任务的控制块重的当前 优先级的值;·2. 2)、释放资源以资源ID为输入参数,告诉嵌入式操作系统需要获取的是哪一个资源a、如果要释放的是调度器资源检查其资源控制块的是否已被使用标识,如果未被使 用则返回错误;如果调度器资源已被使用则释放它,并进行任务调度;b、检查需要释放的资源bl、如果其资源控制块中是否已被使用标识为未已被使用,返回错误; b2、如果是在中断服务例程中释放非中断类型的资源,则返回错误; b3、如果要释放的是中断资源b31、如果该资源不是中断资源链表头部的那个资源,则返回错误;b4、如果要释放的是标准资源或链接资源b41、如果要释放的资源不是任务资源链表的头节点,返回错误;b42、如果在这之前调度器资源已经被使用,返回错误;b43、如果是在中断服务例程中释放该资源,返回错误;b44、如果其资源控制块中的天花板优先级小于调用该资源的任务的任务控制块中的任务静态配置的原始优先级,返回错误; C、释放资源的操作 Cl、如果要释放的是中断资源ell、将该中断资源的资源控制块中是否已被使用标识的置为未被使用; cl2、调整中断资源链表取下头节点,下一个中断资源控制块成为链表中的头节点; cl3、根据该中断资源的资源控制块中保存的中断掩码,恢复之前在获取该中断资源时 所保存的中断掩码值;cl4、检查中断资源链表,如果已释放完所有的中断资源,操作系统就进行任务调度; c2、如果要释放的是标准资源或链接资源 c21、将该资源的资源控制块中是否已被使用标识的置为未被使用; c22、调整获取该资源任务的资源链表取下头节点,下一个资源控制块成为链表中的 头节点;c23、如果获取该资源任务的资源链表上还有其他资源控制块,则调整该任务的控制块 中的当前优先级为资源链表头部那个资源的资源控制块中的当前优先级,然后执行调度程 序进行任务调度;c24、如果调用任务已不再拥有任何资源则进行如下的判断和处理 d41、如果该任务使用了内部资源,并且任务的控制块中当前优先级大于内部资源的 优先级,则调整任务当前优先级为内部资源的优先级,然后进行任务调度;d42、如果该任务未使用内部资源,并且任务的控制块中当前优先级不等于其静态配 置的原始优先级,则调整任务的当前优先级到原始优先级的高度,然后进行任务调度。
2.根据嵌入式实时操作系统中多级资源的管理方法,其特征在于,还包括以下步骤 (1)、与内部资源有关的处理a、发生任务切换时,新切换到运行状态的任务,自动获取内部资源;b、任务在终止运行时,如果它还拥有一个内部资源,则它需要释放该内部资源,任务控 制块中的优先级还原到静态配置的原始优先级;O)、在进行如下操作时进行与资源相关的检查工作a、任务在终止运行时,如果还有资源没有释放,则返回错误;b、操作系统调度程序运行时,检查是否调度器资源已被使用,如果已被使用,则不进行 调度;另外还要检查系统的中断资源链表上是否有中断资源控制块存在,如果有,也不进行 调度。
全文摘要
本发明公开了一种嵌入式实时操作系统中多级资源的管理方法。为了符合OSEK/VDX规范的、满足嵌入式实时操作系统对于多级资源管理的要求,本发明针对标准资源、链接资源、中断资源以及调度器资源设计了资源控制块,并链接到不同的位置,然后,按照不同资源的优先级高低关系,利用资源控制块,实现对多级资源的管理。
文档编号G06F9/50GK102096605SQ20111003956
公开日2011年6月15日 申请日期2011年2月17日 优先权日2011年2月17日
发明者李允 , 赵焕宇, 陈丽蓉 申请人:成电汽车电子产业园(昆山)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1