微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 硬件实时操作系统信号量管理的设计与实现

硬件实时操作系统信号量管理的设计与实现

时间:01-23 来源:电子技术应用 点击:

随着嵌入式技术的发展,实时操作系统RTOS(Real Time Operating System)被越来越多地应用在嵌入式系统中,但是对现有基于软件实现的RTOS,单纯依靠改进调度算法已经不能使系统的实时性有很大提高。为提高系统的响应能力,国内外一些研究机构提出RTOS硬化的方法,并开始做这方面的研究工作[1]。目前,软件硬化常用的有两种方法:(1)微程序方式,特点是成本较低,方便灵活;(2)组合逻辑方式,特点是速度快、可靠性高,随着大规模集成电路的发展,这种方式逐渐显示出优越性[2]。信号量管理是RTOS中频繁运行的程序段之一,如果将这一部分用硬件实现,对提高机器的速度将有很明显的效果。本文采用组合逻辑方式参照μC/OS-II将信号量管理及ECB管理硬化到一片芯片上,作为独立的模块与处理器并行工作。

1 信号量管理的工作原理

μC/OS-II中信号量主要数据结构由两部分组成:(1)信号量的计数值Cnt。当数值为正时用于记录可使用的资源数,当数值为负,其绝对值表示等待当前信号量的任务个数;(2)等待该信号量的任务列表。信号量的基本数据结构需要申请一个ECB来存储。一个任务或ISR可以通过ECB向另外的任务发信号,一个任务可以等待另一个任务或中断服务子程序给它发送信号,多个任务可同时等待同一个事件的发生[3]。当事件发生后,等待该事件的优先级最高的任务进入就绪状态,触发一次任务调度[3]。任务或者中断服务子程序都可以给ECB发信号,对ECB进行操作。

信号量管理的工作原理框图如图1所示。信号量管理模块以及事件控制块管理都是独立于CPU的逻辑结构,都可以直接从数据总线上获得数据信息进行处理,在信号量管理模块与ECB的存储模块间建立一条数据通路,在不增加总线负担的情况下加快二者间的通信。这些硬件逻辑独立于CPU工作,减少了CPU的工作,从而提高系统的响应能力。

2 信号量管理的硬件设计与实现

2.1 ECB的设计与实现

ECB是实现信号量管理的基本数据结构,因此在设计实现信号量管理之前,要先完成ECB管理的设计与实现。本系统中ECB的结构参照μC/OS-II中ECB的结构设计。每个ECB存储单元包含一个EventType(事件类型),用于标记当前ECB被分配给信号量、互斥型信号量、邮箱还是消息队列;当一个ECB被分配给信号量时,Cnt做为信号量的计数器;ECB中的等待表lut用于存储等待当前信号量任务的优先级(μC/OS-II中没有两个任务有相同的优先级)[3]。

ECB中等待表硬件实现的结构示意图如图2所示。等待表的结构类似一个8行8列的矩阵,存储单元编号从00~77。当一个任务在申请当前信号量而没有获得时,应将当前任务设置为等待状态,令Wr有效,以申请该信号量任务的优先级为地址,进行译码,选通相应单元后再进行写1操作。例如,申请该信号量的任务优先级Sid为111111时,对其进行译码,高三位行地址译码为10000000,低三位列地址译码为10000000,选中77单元向其写入1,则优先级为111111的任务进入等待状态。若要将一个处于等待表中的任务删除,令De有效,同样,根据地址线选通某一存储单元,向单元内写0,从而删除某一处于等待状态的任务。在控制电路中设置EventGrp 8位寄存器,用于记录当前各行中是否有等待任务;如图2所示,第i行中某一位置为1,EventGrp(i)=1,图中状态EventGrp(7)=1、EventGrp(6)=1、EventGrp(0)=0。Rd有效时,控制电路根据EventGrp采用一定算法生成优先级的高三位;根据EventGrp读出某行后生成优先级低三位;下一时钟送出最高优先级。以上为对等待表进行基本读写操作的过程。

该硬件系统中ECB基本存储单元通过调用系统的IP核来实现,根据存储数据的不同,采用不同的IP核;多个基本单元通过一个上层文件生成一个ECB单元,每个单元再作为一个基本器件用于实现整个ECB的存储体。通过地址的译码选通ECB单元,根据控制信号对数据做读写操作。

2.2 创建/删除一个信号量

ECB是公共数据结构,在传统的操作系统中创建一个信号量时,首先需要申请一个ECB,初始化后才可以对这个信号量进行P/V等操作;在删除一个信号量后,要对信号量占用的ECB进行释放。创建信号量时,信号量管理模块首先要申请一个空ECB,查找ECB的整个存储体判断是否有空余的ECB。如果没有空余ECB,则信号量管理模块将获得一个申请失败信号;否则将获得一个空ECB的地址,并将其返回给创建该信号量的任务;再根据地址初始化ECB[3]。如果用硬件实现信号量管理后,按照以上过程进行操作会浪费很多时钟,数据在模块间来回传送增加通信次数,必然降低系统的执行速度。针对这个问题,提出了在信号量管理模块中设置一个用于记录ECB使用情况的映射表,如图3所示。为方便讨论,假设系统中ECB有64个(可以根据系统中ECB的个数来改变表的大小),表的每个位置对应一个ECB,当某一位置为0时表示该位置对应的ECB空闲,为1时表示该位置对应的ECB被占用。如图3所示,第1行、第8列为1,表示偏移地址为000111的ECB被占用;第2行、第2 列为1,偏移地址为010010的ECB被占用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top