一种基于时间桶的地铁综合监控系统时间序列触发方法_3

文档序号:9474370阅读:来源:国知局
72] 资源管理单元是模型内部核心数据结构时间桶池和时间桶队列的管理者。其主要 任务是接受注册单元的注册需求,分配桶资源,并将任务加入到桶调度队列。
[0073] 桶池:时间桶池是为所有桶开辟的总内存空间,包含两个主要系统配置项:桶初 始分配空间大小和每次池满时增量新分配空间大小。每块空间都包含一个指向下一空间的 指针,最终形成一个桶存储区域的单向链表,供资源管理单元管理使用(如图2所示,桶池 内存储空间链表图)。系统设计人员应根据工程应用规模给出合适的总数,尽可能减少重新 开辟空间的次数。
[0074] 资源管理单元为池内每个桶均赋予全局唯一的顺序索引号,并维护桶所有者与桶 索引的映射,便于在客户提出各种操作要求时能迅速定位目的桶。
[0075] 资源管理单元在接受注册单元的注册需求后,从桶池中找到第一个空桶,该过程 采用bitmap算法,即资源管理单元拥有一张"bit"表,每一 bit位与一个桶对象依次顺序 对应,位"0"表示桶为未占用,位"1"表示桶为占用。查找时以4字节(32位机)为单位, 依次从bit表中取出4字节并与4字节无符号整型最大值(OxFFFFFFFF)比较,当前者较小 时证明有空桶,则再取4字节中的2字节与OxFFFF比较,直至取到1字节与OxFF比较,最 后逐位操作并找到第一个"0";当二者相等时再顺序取bit表第二个4字节......此方式 每次可批处理32个桶,复杂度为0(n/32),显著优化了桶查找效率(桶回收时将依靠桶与 bit位的一一对应关系采用直接索引方式找到对应bit位并置位"0",复杂度为0(1))。
[0076] 当查找结束仍无空桶时,则按系统配置增量大小新开辟桶空间,并将其地址首地 址填充在现有最后一个空间的指针上。同时将新空间中的第一个桶作为找到的空桶放入桶 队列。
[0077] 桶队列:当前有效时间桶组成的最小检测队列,供检测单元使用。队列内每个元素 均为指向桶池的桶指针。
[0078] 资源管理单元将找到的空桶划归为新客户所有,贴上数据标签,放置在桶队列尾 部,即最后一个有效桶的后一个位置,交由检测单元调度,由此完成了整个注册过程。
[0079] 此外,资源管理单元还将接收客户端的暂停、启动、解注册等中途请求,并根据各 自命令对时间桶分别做数据和状态处理。
[0080] 4.时间桶
[0081] 时间桶为带有上下界和数据标签的并装有不定量时间的容器,是触发消息所依据 的核心数据结构,包含如下几项关键数据变量:
[0082] 数据标签(\):注册单元中由客户端提供的信息体ts_REQINF0,为检测单元提供 数据支持,包含桶顶、桶底、工作日、桶时间序列节点等关键桶属性;
[0083] 时序索引(VJ :实时指向当前循环扫描进行到时间序列中的哪一节点;该信息将 传达给客户端,用以指导其发送相匹配的控制命令或其他操作;
[0084] 剩余时间(VR):由检测单元统一管理,为距下一最近时间节点的剩余时间;
[0085] 循环次数(VT):序列已循环执行的次数;
[0086] 桶状态(Vs):时间桶实时所处状态,共四态:
[0087] >空置态:桶未被使用,或已被回收;此时VR= -1,VI= -1,VT= -1 ;
[0088] >就绪态:桶已被某一客户端占用,但未处于有效时间段内,并准备进入工作态; 此时 VR= 0, V 严-1,V τ= 0 ;
[0089] >工作态:在桶内正常循环运转状态,为检测单元所管理;此时% = m,V R= η,V τ =ρ ;其中:m e [0,队列元素个数),η e [0,对应索引时长],ρ e [0,总循环次数);三 值实时循环变化;
[0090] >挂起态:被客户要求临时暂停,并等待客户从暂停点唤醒;其中:V I= j,VR= k, VT= 1 ;其中j,k,1数值同挂起前工作态并被固定直至唤醒;
[0091] 包含四种状态的桶状态机如图3所示,时间桶状态机示意图。
[0092] 5.检测单元
[0093] 检测单元是产生触发消息的执行部件,基于独立线程,其任务是以时间桶队列为 操作对象,逐一扫描队列中指向的每一个对象,依据桶标签和桶状态进行处理判断,过程如 下:
[0094] a.若桶处就绪态,检测是否具备转为工作态的条件,具备则转入工作态,否则跳过 该桶,检测下一个桶;
[0095] b.若处工作态,需根据终止日期时间及工作日做综合条件判断:
[0096] 知超过终止日期时间(年月日+时分秒)将被视为已到达桶底,则将桶归还给管 理单元,管理单元将其始终与队列尾部元素交换,将回收桶置换出队列,同时队列元素总计 数减1,此举最大限度减少数组数据操作和扫描工作量;
[0097] >未超过终止日期时间的,但已达循环次数限制的,表示所有任务已执行完,视为 到达桶底,同上处理;
[0098] >未超过终止日期时间,未达循环次数限制,但已超过终止时间(时分秒)的或工 作日设定不触发的,视为当日任务已完成(或当日无需触发),但桶依然有效,置VR= 0,不 触发消息,转入就绪态,等待再度进入有效时间或工作日内;
[0099] >上述条件均通过后,若桶内剩余时间VR大于0,则V满1个单位;若V>^为0,则表 明既定的时间节点已到,即刻向消息单元发送带有%、上下文指针等附加信息的触发通知, 由其向客户端发送触发控制,同时修改当前时间序列索引VI= (V片1) %桶总数,并再次向 桶内注入下一时长,即VR =新V :的时长;若V :已达队尾则循环次数加1 ;
[0100] c.若处挂起态,则跳过该元素,检测下一个桶;
[0101] 检测单元任务仅限于扫描管理,其他的桶资源管理、消息处理任务均与其分离开 来以保证检测单元的效率。
[0102] 6.消息处理单元
[0103] 检测处理单元将包含客户端名称、触发的时间序列索引及上下文数据指针等重要 信息通过加锁缓冲区传送给消息处理单元,消息处理单元通过事先开辟的消息区将信息反 馈给客户端。如前所述,客户端ts_WaitForNotifications阻塞函数将被触发并开展后续 数据处理过程。
[0104] 7.全局定时单元
[0105] 全局定时单元是检测单元执行的触发源,仅执行定时触发任务,采用独立线程实 现,通过加锁缓冲区与检测单元实现数据交互。本模型中采用select函数模式模拟定时任 务,其中η取值为时间序列中的时间单位,可精确到微秒。应考量操作系统对时钟精度支持 程度和满足所有客户端时间精度两个方面确定采用哪种方式的定时策略,如sleep系列函 数、各种系统锁超时唤醒等均为可选的定时模拟方式。
[0106] 全局定时单元作为独立的执行体设计,可以消除由检测单元负责定时带来的延 迟,无论检测单元当前处于何动作,全局定时单元总能在固定时间间隔η内向数据缓冲区 中放入定时检测命令,即确保检测单元的检测频率与此时间间隔一致。
[0107] 实施例中,部分函数含义如下:ts_CreateClient (创建客户端函数)、ts_ RegisterRequests (注册触发请求函数)、ts_REQINF0(注册信息结构体)、ts_ WaitForNotifications (消息等待函数)、ts_UnRegisterRequests (解注册函数)、
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1