CN102455940B - 一种定时器和异步事件的处理方法及系统 - Google Patents

一种定时器和异步事件的处理方法及系统 Download PDF

Info

Publication number
CN102455940B
CN102455940B CN201010524167.XA CN201010524167A CN102455940B CN 102455940 B CN102455940 B CN 102455940B CN 201010524167 A CN201010524167 A CN 201010524167A CN 102455940 B CN102455940 B CN 102455940B
Authority
CN
China
Prior art keywords
timer
queue
node
user
thread
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201010524167.XA
Other languages
English (en)
Other versions
CN102455940A (zh
Inventor
徐海兵
李永合
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Maipu Communication Technology Co Ltd
Original Assignee
Maipu Communication Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Maipu Communication Technology Co Ltd filed Critical Maipu Communication Technology Co Ltd
Priority to CN201010524167.XA priority Critical patent/CN102455940B/zh
Publication of CN102455940A publication Critical patent/CN102455940A/zh
Application granted granted Critical
Publication of CN102455940B publication Critical patent/CN102455940B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Telephonic Communication Services (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种在嵌入式系统中既能确保多个用户定时器、异步事件的有序控制,又能提高现有用户定时器、异步事件执行效率的方法以及实现该方法的系统。既可以同时启动多个用户定时器也可以同时处理多个异步事件,保证了所述技术方案的通用性,由于用户定时器和异步事件在一个任务(本发明中的调度任务)的多个线程中同时执行,减少了任务间的切换开销,提高了执行效率,并且通过同步信号量的释放有序地控制执行异步事件或用户定时器对应线程。

Description

一种定时器和异步事件的处理方法及系统
技术领域
本发明涉及数据通信领域和计算机领域的技术,尤其涉及一种多线程调度技术。
背景技术
目前,嵌入式系统软件需要处理很多周期性的事务,例如报文的定时发送等。这些周期性的事务往往要求较高的实时性,因此要求嵌入式软件必须提供高精度定时器机制的支持。另一方面,在实际环境中,嵌入式系统大多数是事件驱动或报文驱动的系统,而且处理的外部事件是多发的而且是并发的随机事件。嵌入式软件为了有效地处理这些外部并发事件,往往采用多任务、多进程的运行机制异步处理这些外部事件。任务(进程)通常被业界定义为一个正在运行的程序实例,它是资源分配的基本单位。进一步,为了适应各种复杂的并发环境,获得更快的切换速度,引入了多线程(thread)的处理机制。线程是调度的基本单位,同时任务拥有足够的分离的上下文来维护各自的控制线程,从而一个任务或进程可以支持多个线程。
在一个嵌入式软件系统中,如既要满足高精度的实时性要求,又要满足具有处理异步并发事件的能力,那么,往往就需要多个任务共同来实现整个系统的功能。在满足实时性方面,可以使用系统中断服务程序(ISR)来维护用户定时器处理相关的事件,但用户定时器在使用上具有诸多限制并且在时间上可能不满足高精度的需求,例如看门狗定时器;也可以使用专门的任务定时器处理相关的事件,可以满足高精度的要求,但系统中如果存在多个不同优先级的用户定时器,就需要多个不同的任务;并且在满足异步事件的能力方面,也可能需要多个不同的任务同时进行处理,当任务较多时,任务间会频繁发生切换,势必会影响系统的执行效率。
发明内容
本发明所要解决的技术问题是,提供一种在嵌入式系统中既能确保多个用户定时器、异步事件的有序控制,又能提高现有用户定时器、异步事件执行效率的方法以及实现该方法的系统。
本发明为解决上述技术问题所采用的技术方案是,一种定时器和异步事件的处理方法,包括以下步骤:
a、系统初始化用户队列与就绪队列,并初始化中断定时器的中断周期,用户队列用于存放用户任务需要调度的异步事件或需要启动的用户定时器转换为线程后对应的节点,就绪队列用于存放调度任务需要立即执行的从用户队列中取出的异步事件线程对应的节点或用户定时器线程对应的节点;
b、调度任务检查就绪队列,就绪队列为空时或者执行完就绪队列中所有节点对应的线程直至就绪队列为空后,调度任务检查用户队列;
c、将异步事件线程对应的节点以及已到期的用户定时器线程对应的节点加入至就绪队列,系统启动中断定时器,并设置中断定时器的中断服务程序和定时间隔;
d、初始化中断定时器的中断周期,在所述定时间隔到期后,中断定时器调用中断服务程序释放一个同步信号量,进入步骤b;
在所述步骤b至d循环执行过程中,当用户任务有需要调度的异步事件或需要启动的定时器时,系统立即将该异步事件或用户定时器转换为线程,并加入用户队列形成用户队列的节点。
本方案中既可以同时启动多个用户定时器也可以同时处理多个异步事件,保证了所述技术方案的通用性,由于用户定时器和异步事件在一个任务(本发明中的调度任务)的多个线程中同时执行,减少了任务间的切换开销,提高了执行效率,并且通过同步信号量的释放有序地控制执行异步事件或用户定时器对应线程。
进一步的,当系统要求支持高精度的用户定时器时,则采用高精度的硬件定时器作为中断定时器,本文所述“高精度”为毫秒级的精度,初始化时设置中断定时器的中断周期为需要的精度,如当前的应用环境需要硬件定时器的精度达到1ms,则设置硬件定时器的中断周期为1ms;否则,中断定时器可以使用软中断定时器。当采用高精度的硬件定时器,很容易实现高精度的系统中断,从而保证了用户定时器能够十分准确的定时。
步骤c中,为了更进一步地提高执行效率,提供一种优选的中断定时器的定时间隔设置方法:当检查到用户队列中有异步事件线程对应的节点或已经到期的用户定时器线程对应的节点时,在将以上节点加入就绪队列后,系统设置中断定时器的定时间隔为零;当检查到用户队列中没有节点时,系统设置中断定时器的定时间隔为系统预设的固定值;当检查到用户队列中仅存在用户定时器节点且所有的用户定时器均未到期时,系统设置中断定时器的定时间隔为所有用户定时器的定时间隔的最小值。
进一步的,为了保证执行的灵活性,所述用户队列、就绪队列可以设置多个。即,系统可以根据异步事件和用户定时器的优先级或类型,选择创建多个不同的用户队列或就绪队列。比如根据类型,系统可以创建两个用户队列:异步事件用户队列和用户定时器用户队列;另外一种类型的用户队列可以根据不同的优先级创建不同的用户队列,调度机制可以根据优先级决定优先处理哪些异步事件和定时器,这样保证了灵活性。
进一步的,为了方便后续的维护和调试,系统对所有用户任务的需要调度的各异步事件和用户定时器提供统一的接口,在将异步事件或用户定时器转换为线程,将线程控制块加入用户队列形成用户队列的节点时,还需注明节点所对应线程的类型、优先级。
嵌入式系统,包括接口模块、队列模块、调度任务模块、中断模块;
所述接口模块包括用于当用户任务有需要调度的异步事件或需要启动的用户定时器时,将该异步事件或用户定时器转换为线程,并加入队列模块中的用户队列形成用户队列的节点的子模块;
所述队列模块包括用于初始化用户队列与就绪队列的子模块;所述用户队列用于接收用户任务通过接口模块存入的异步事件线程对应的节点或用户定时器的线程对应的节点;所述就绪队列用于接收需要被调度任务模块立即执行的异步事件线程对应的节点或用户定时器的线程对应的节点;
所述调度任务模块包括用于检查就绪队列,就绪队列为空时或者执行完就绪队列中所有节点对应的线程直至就绪队列为空后,检查用户队列,将用户队列中的异步事件线程对应的节点和已到期的用户定时器线程对应的节点加入就绪队列,加入完毕后启动中断定时器并设置中断定时器的中断服务程序和定时间隔的子模块;
所述中断模块包括用于初始化中断定时器的中断周期;当定时间隔到期后,调用中断服务释放一个同步信号量给调度任务模块的子模块。
进一步的,调度任务模块还包括用于当检查用户队列中没有节点或已经到期的用户定时器线程对应的节点时,在将以上节点加入就绪队列后,设置中断定时器的定时间隔为零;当检查到用户队列中没有节点时,设置中断定时器的定时间隔为系统预设的固定值;当检查用户队列中仅存在用户定时器节点且所有的用户定时器均未到期时,设置中断定时器的定时间隔为所有用户定时器的定时间隔的最小值的子模块。
进一步的,队列模块还包括用于根据异步事件和定时器的优先级或类型,创建多个不同的用户队列或就绪队列的子模块。
进一步的,接口模块还包括用于在将各用户任务需要调度的异步事件或需要启动的用户定时器转换为线程时,将线程控制块加入用户队列形成用户队列的节点,还需注明节点所对应线程的类型、优先级的子模块。
本发明的有益效果是,系统中既可以同时启动多个用户定时器也可以同时处理多个异步事件,保证了通用性,用户定时器和异步事件在一个任务的多个线程中同时执行,减少了任务间的切换开销,提高了执行效率。进一步的,用户队列和就绪队列可以设置多个不同的队列,保证了灵活性。进一步的,采用高精度的硬件定时器,从而保证了用户定时器能够十分准确的定时。进一步的,将异步事件和用户定时器通过接口统一起来,使用起来较为方便,便于后续的维护和调试。
附图说明
图1是本发明的多线程调度的流程示意图;
图2是本发明的多线程调度的系统结构示意图;
图3是实施例1的流程示意图;
图4是实施例2的流程示意图;
图5是实施例3的结构框图。
具体实施方式
本发明利用多线程调度同时处理异步事件和定时器,而需要同时高效处理异步事件和定时器的场景,在数据通信的设备上普遍存在。例如,在双向转发检测协议中,一方面需要启动各种发送报文和检测报文的用户定时器,而且用户定时器需要毫秒级的精度,另一方面又可能随时接收到对端设备发送的控制报文需要及时处理。为适应高精度要求,使用硬件定时器。
如图1所示定时器和异步事件的处理系统包括队列模块、接口模块、调度任务模块、中断模块。
队列模块,负责创建维护就绪队列和用户队列,用户队列负责接收其他任务模块通知的需要执行的异步事件或需要启动的用户定时器,就绪队列则只负责存放将要被调度任务模块执行的线程节点;就绪队列和用户队列可以创建单个的用户队列和单个的就绪队列,也可以根据异步事件和定时器的优先级或类型选择创建多个不同的用户队列、就绪队列;
接口模块,为其他任务模块的外部异步事件或用户定时器提供一个统一的接口,并负责将它们转换一个可被执行的线程控制块,加入到用户队列中形成节点;且加入用户队列前,线程控制块需注明线程的类型、优先级等;
调度任务模块,是多线程执行的主体部分,负责从用户队列中选择需要立即执行的线程(节点)加入到就绪队列,启动硬件定时器并等待同步信号量,获取到同步信号量后,负责从就绪队列中取出各个线程并执行;调度任务模块可以根据优先级选择特定的线程加入到就绪队列,也可以选择不同就绪队列中的线程进行执行;
中断模块,负责根据硬件定时器进行中断控制,当硬件定时器定时到期后执行中断服务程序,中断服务程序释放同步信号量,从而使得调度任务模块可以继续执行。
如图2所示,本发明定时器和异步事件的处理方法包括如下步骤:
a)队列模块初始化用户队列和就绪队列,中断模块初始化设置硬件定时器的中断周期;用户队列负责接收其他任务模块通知的需要执行的异步事件或需要启动的用户定时器,就绪队列则只负责存放将要被调度任务模块执行的线程节点;
b)调度任务模块检查就绪队列中是否存在节点,如果就绪队列为空,或者如果有节点则立即执行该节点所对应的线程,当就绪队列中存在多个节点时,则调度任务模块就不停地取出节点并执行该节点所对应的线程,直至就绪队列中的节点为空;然后调度任务模块检查用户队列;
c)调度任务模块检查用户队列,当检查用户队列中有异步事件线程对应的节点或已经到期的用户定时器线程对应的节点,在将以上节点加入就绪队列后,系统设置硬件定时器的定时间隔为零;当检查用户队列中没有节点时,系统设置硬件定时器的定时间隔为系统预设的固定值;当检查用户队列中仅存在用户定时器节点且所有的用户定时器均未到期,系统设置硬件定时器的定时间隔为所有用户定时器的定时间隔的最小值;。
d)调度任务模块启动中断模块中的硬件定时器,并设置硬件定时器的中断服务程序和定时间隔,之后,调度任务模块进入阻塞状态,中断模块根据硬件定时器对调度任务模块进行中断控制,当硬件定时器的定时间隔到期后,中断模块调用中断服务程序释放一个同步信号量给调度任务模块,调度任务模块接收到同步信号量后调度任务模块返回步骤b)顺序执行;其中,中断服务程序为释放一个同步信号量的函数;
上述步骤a)为初始化步骤,步骤b)至d)的执行是一个无限循环的过程,在步骤b)至d)的执行过程中,当各用户任务有需要调度的异步事件或需要启动的用户定时器时,接口模块立即将该异步事件或用户定时器转换为线程控制块,并加入用户队列形成用户队列的节点。
实施例1
异步事件和用户定时器需要同时多线程调度处理:
在本实施例中,多线程调度需要同时处理异步事件和用户定时器,它们之间发生的顺序是突发的,例如启动用户定时器后,用户定时器并未超时,此时却接收到其他系统的消息或外部设备的控制报文需要所述系统进行处理(异步事件)。本实施例中,有两个需要启动的用户定时器,用户定时器Timer1(定时间隔即超时时间为30毫秒)和用户定时器Timer2(定时间隔即超时时间为50毫秒),无需要调度的异步事件;在第一轮循环中,调度任务模块在等待同步信号量时,由接口模块接收到一个需要调度的异步事件。
如图3所示,详细描述本实施例1多线程调度的过程步骤,其中步骤303-310的执行过程是一个无限循环的过程:
步骤301、队列模块初始化用户队列和就绪队列,此过程包括初始化队列的数据结构、选择队列的种类等。本实施例初始化队列时,选择创建2个用户队列user1和user2以及创建2个就绪队列ready1和ready2,其中,用户队列user1存放异步事件线程对应的节点,用户队列user2存放用户定时器线程对应的节点,就绪队列ready1存放需要立即执行的异步事件线程对应的节点,就绪队列ready2存放已到期的用户定时器线程对应的节点,上述的队列均是由双向链表的数据结构组成。同时,设置硬件定时器的中断周期为1毫秒;
步骤302、当其他用户任务模块有需要调度的异步事件或需要启动的用户定时器时,系统将该异步事件或用户定时器转换为线程,并将线程控制块加入用户队列形成用户队列的节点;本实施例最初有2个需要启动用户定时器,用户定时器Timer1(30毫秒超时)和用户定时器Timer2(50毫秒超时),无需要调度的异步事件;接口模块将两个用户定时器的参数(定时间隔、定时器类型、定时回调函数等)保存到两个线程控制块TCB1和TCB2中,然后将TCB1和TCB2存放到用户队列user2中,使它们成为user2的两个节点;
步骤303、调度任务模块检查就绪队列中是否存在节点,如果存在节点,则转到步骤304,如果不存在节点,则转到步骤305。
步骤304、调度任务模块取出就绪队列中的节点,并执行所述节点所对应的线程。本实施例的本步骤中,第一轮和第二轮循环跳出此步骤;第三轮循环时,调度任务模块执行这TCB1与TCB3两个节点对应的线程,调度任务模块可根据TCB1与TCB3中的优先级信息确定具体执行的先后关系,比如,TCB1的优先级大于TCB3,那么先执行ready1中TCB1相关的线程,再执行TCB3相关的线程,执行完毕后进入步骤305;第四轮循环时,调度任务模块执行这TCB2节点对应的线程,执行完毕后进入步骤305;
步骤305、调度任务模块检查用户队列中是否存在节点,如果不存在节点,则转到步骤307,否则转到步骤306。本实施例中,第一轮循环时,用户队列user2中存在TCB1与TCB2两个节点;第二轮循环时,用户队列user2中存在TCB1与TCB2两个节点,用户队列user1中存在TCB3节点;第三轮循环时,用户队列user2中存在TCB2;用户队列中不存在节点,进入步骤307;
步骤306,如节点为异步事件节点或已到期的用户定时器节点,则将其存放到就绪队列中后,进入步骤307;如节点为未到期的用户定时器,则进入步骤307。本实施例中,第一轮循环时,用户定时器Timer1与用户定时器Timer2均未到期,进入步骤307;第二轮循环时,用户定时器Timer1到期,异步事件已被接口模块接收,则调度任务模块将TCB1与TCB3加入至就绪队列中,进入步骤307;第三轮循环时,用户定时器Timer2到期,将TCB2加入至就绪队列中;
步骤307、调度任务模块计算最小等待时间:如果用户队列中没有节点,则定时器的最小等待时间根据系统需要取一个的固定值;如果用户队列中存在已经到期的定时器节点或异步事件节点,将以上节点加入就绪队列后,将最小等待事件设置为零;如果用户队列中仅有用户定时器节点且所有的用户定时器均未到期,则通过比较线程控制块的定时间隔,最小等待时间为所有定时器的定时间隔的最小值。在本实施例中,第一轮循环中,用户定时器Timer1与用户定时器Timer2均未到期,则比较Timer1和Timer2的定时间隔,最小等待时间为Timer1的定时间隔30毫秒;第二轮循环中,用户队列中存在定时器节点定时已经到期,且就绪队列不为空,将最小等待事件设置为零;第三轮循环时,用户队列中存在定时器节点定时已经到期,将最小等待事件设置为零;第四轮循环时,因用户队列中已无节点,最小等待时间设置一个的固定值,如10毫秒;
步骤308、调度任务模块启动硬件定时器,并设置硬件定时器的中断服务程序和定时间隔,之后调度任务模块进入阻塞状态,进入步骤309。将步骤307中计算的最小等待时间设置为硬件定时器的定时间隔。本实施例,第一轮循环中,硬件定时器的定时间隔设置为30毫秒;第二、三轮循环中,硬件定时器的定时间隔设置为0毫秒;第四轮循环中,硬件定时器的定时间隔设置为10毫秒;
步骤309、中断模块查询硬件定时器是否到期,如果没有到期,则调度任务模块继续等待同步信号量,如果到期,则转到步骤310执行。中断模块的查询可以是通过中断记数,比较记录的数字与用户定时间隔的大小来感知用户中断是否到期,也可以是其它的实现方式。本步骤是已有的技术方案,在此不再赘述。本实施例,第一轮循环中,调度任务模块在等待同步信号量的同时,接口模块接收到异步事件,接口模块首先生成线程控制块TCB3,再将异步事件的控制消息保存在线程控制块中,最后将线程控制块保存在用户队列中,使其成为用户队列user1的一个节点;30毫秒到期后,进入步骤310;第二、三轮循环中,立即进入步骤310;第四轮循环中,10毫秒到期后,进入步骤310;
步骤310、中断模块调用中断服务程序释放一个同步信号量,唤醒调度任务模块继续执行,调度任务模块转到步骤303继续执行。
实施例2
只有异步事件需要多线程调度处理。
除了实施例1的多线程调度过程中同时处理多种异步事件和定时器外,也可以用来只处理异步事件或定时器。本实施例详细描述用来处理异步事件的多线程调度的过程,其中步骤403-409的执行过程是一个无限循环的过程:
在本实施例中,如图4所述,本发明的方法及系统用来处理各种异步事件,根据异步事件的性质,对应于多个不同的优先级,要求高优先级的异步事件优先处理。为便于阐述,异步事件记为event1、event2、event3,它们之间发生的顺序是随机的。
步骤401:队列模块初始化用户队列和就绪队列,并设置硬件定时器的中断周期。在本实施例中,创建三个用户队列user_high、user_middle、user_low,高优先级的异步事件加入user_high队列,中优先级的异步事件加入user_middle队列,低优先级的异步事件加入user_low队列。创建三个就绪队列ready_high、ready_middle、ready_low分别于用户队列相对应。
步骤402、接口模块分别将异步事件event1和event2分别加入到用户队列user_high和user_middle中,其过程为:接口模块首先生成两个线程控制块TCB1和TCB2,将event1和event2的参数信息(回调函数,回调函数参数,事件类型等)分别存放到线程控制块TCB1和TCB2中,将TCB1和TCB2分别加入user_high和user_middle队列中,使其分别成为它们的节点。
步骤403、调度任务模块检查就绪队列中是否存在节点,如果存在节点,则转到步骤404,如果不存在节点,则转到步骤405。本实施例第一轮的循环中,就绪队列ready_high、ready_middle、ready_low均没有节点。
步骤404、调度任务模块取出就绪队列中的节点,并执行所述节点所对应的线程。本实施例的第一轮循环中,直接跳出此步骤。
步骤405、调度任务模块检查用户队列中是否存在节点,如果存在节点,则转到步骤406,如果不存在节点,则转到步骤407。本步骤中,用户队列user_high和user_middle均存在节点。
步骤406、调度任务模块取出用户队列中的节点,并将其放到就绪队列中。在本实施例的本步骤中,将用户队列user_high和user_middle的节点存放到就绪队列ready_high和ready_middle中。
步骤407、调度任务模块启动硬件定时器,并在启动时设置硬件定时器的中断服务程序和定时间隔,硬件定时器到期后,中断模块释放同步信号量,调度任务模块继续执行。本实施例本步骤中,中断服务程序同实施例一,由于就绪队列中加入了两个异步事件节点,故硬件定时器的定时间隔为0,,中断模块释放同步信号量,调度任务模块转到步骤403中继续执行。
本实施例的第2轮循环中,步骤403取出就绪队列ready_high和ready_middle中的线程控制块TCB1和TCB2,分别执行它们所对应的线程;在步骤403到407的循环过程中,异步事件event3可以随时通过接口模块加入到用户队列user_low中,如调度任务模块在第1轮循环的步骤406中将异步事件event3节点加入到就绪队列ready_low中,并在第2轮循环步骤404中执行event3相关的线程。
实施例3
嵌入式多多线程调度系统,所述系统有接口模块,队列模块,调度任务模块和中断模块四部分组成,如图5所示,其中箭头方向代表数据的流向,图中的字母代表模块之间的交互标号。
接口模块,为外部异步事件或定时器提供一个统一的接口,并负责将它们转换为一个可被执行的线程控制块存放到用户队列中,所述线程结构可被调度任务模块识别。
队列模块,负责创建和维护就绪队列和用户队列,其中,用户队列通过接口模块接收其他任务模块通知需要调度的异步事件或需要启动的定时器事件,就绪队列则负责存放将要被调度任务模块执行的线程节点。所述队列模块可以根据系统的需要灵活配置多个就绪队列和多个用户队列,如图5所示配置了多个用户队列和多个就绪队列。为了更好的保证数据完整性,接口模块和队列模块之间交互可能需要一个互斥信号量保护用户队列。
调度任务模块,是多线程执行的主体部分,负责从用户队列中选择合适的线程节点加入到就绪队列,并负责从就绪队列中取出各个线程节点执行,其阻塞是通过等待同步信号量,继续执行需要获取同步信号量。所述调度任务模块需要同队列模块和中断模块进行交互,例如在图5中,调度任务模块从用户队列中获取线程节点,调度任务模块负责将线程节点存放到就绪队列,调度任务模块与中断模块的交互,即调度任务模块在操作用户队列时需要获取互斥信号量,用以保证用户队列中数据的完整性,调度任务模块和用户队列的交互则需要使用互斥信号量来保护用户队列。
中断模块,负责将调度任务模块创建的硬件定时器进行中断控制,当硬件定时器定时到期后执行中断服务程序,释放同步信号量,从而调度任务模块可以继续执行。如果本发明的调度系统要求支持高精度的用户定时器,则中断模块需要高精度的硬件定时器;否则,中断模块中的硬件定时器可以使用一般的软中断定时器替换即可。

Claims (10)

1.一种定时器和异步事件的处理方法,其特征在于,包括以下步骤:
a、系统初始化用户队列与就绪队列,并初始化中断定时器的中断周期,所述用户队列用于存放用户任务需要调度的异步事件或需要启动的用户定时器转换为线程后对应的节点,所述就绪队列用于存放调度任务需要立即执行的从用户队列中取出的异步事件线程对应的节点或用户定时器线程对应的节点;
b、调度任务检查就绪队列,就绪队列为空时或者执行完就绪队列中所有节点对应的线程直至就绪队列为空后,调度任务检查用户队列;
c、将异步事件线程对应的节点以及已到期的用户定时器线程对应的节点加入至就绪队列,系统启动中断定时器,并设置中断定时器的中断服务程序和定时间隔;
d、初始化中断定时器的中断周期,在所述定时间隔到期后,中断定时器调用中断服务程序释放一个同步信号量,进入步骤b;
在所述步骤b至d循环执行过程中,当用户任务有需要调度的异步事件或需要启动的用户定时器时,系统立即将该异步事件或用户定时器转换为线程,并加入用户队列形成用户队列的节点。
2.如权利要求1所述一种定时器和异步事件的处理方法,其特征在于,步骤c中:当检查到用户队列中有异步事件线程对应的节点或已经到期的用户定时器线程对应的节点时,在将以上节点加入就绪队列后,系统设置中断定时器的定时间隔为零;当检查到用户队列中没有节点时,系统设置中断定时器的定时间隔为系统预设的固定值;当检查用户队列中仅存在用户定时器节点且所有的用户定时器均未到期时,系统设置中断定时器的定时间隔为所有用户定时器的定时间隔的最小值。
3.如权利要求2所述一种定时器和异步事件的处理方法,其特征在于,系统初始化时根据异步事件和定时器的优先级或类型,创建不同的用户队列或就绪队列。
4.如权利要求2或3所述一种定时器和异步事件的处理方法,其特征在于,系统将各用户任务需要调度的异步事件或需要启动的用户定时器转换为线程时,将线程控制块加入用户队列形成用户队列的节点,还注明节点所对应线程的类型、优先级。
5.如权利要求4所述一种定时器和异步事件的处理方法,其特征在于,所述中断定时器为硬件定时器或软中断定时器。
6.一种定时器和异步事件的处理系统,其特征在于,包括接口模块、队列模块、调度任务模块、中断模块;
所述接口模块包括用于当用户任务有需要调度的异步事件或需要启动的用户定时器时,将该异步事件或用户定时器转换为线程,并加入队列模块中的用户队列形成用户队列的节点的子模块;
所述队列模块包括用于初始化用户队列与就绪队列的子模块;所述用户队列用于接收用户任务通过接口模块存入的异步事件线程对应的节点或用户定时器的线程对应的节点;所述就绪队列用于接收需要被调度任务模块立即执行的异步事件线程对应的节点或用户定时器的线程对应的节点;
所述调度任务模块包括用于检查就绪队列,就绪队列为空时或者执行完就绪队列中所有节点对应的线程直至就绪队列为空后,检查用户队列;将用户队列中的异步事件线程对应的节点和已到期的用户定时器线程对应的节点加入就绪队列,加入完毕后启动中断定时器并设置中断定时器的中断服务程序和定时间隔的子模块;
所述中断模块包括用于初始化中断定时器的中断周期;当定时间隔到期后,调用中断服务释放一个同步信号量给调度任务模块的子模块。
7.如权利要求6所述定时器和异步事件的处理系统,其特征在于,所述调度任务模块还包括用于当检查用户队列中没有节点或已经到期的用户定时器线程对应的节点时,在将以上节点加入就绪队列后,设置中断定时器的定时间隔为零;当检查到用户队列中没有节点时,设置中断定时器的定时间隔为系统预设的固定值;当检查用户队列中仅存在用户定时器节点且所有的用户定时器均未到期时,设置中断定时器的定时间隔为所有用户定时器的定时间隔的最小值的子模块。
8.如权利要求7所述定时器和异步事件的处理系统,其特征在于,所述队列模块还包括用于根据异步事件和定时器的优先级或类型,创建不同的用户队列或就绪队列的子模块。
9.如权利要求7或8所述定时器和异步事件的处理系统,其特征在于,接口模块还包括用于在将各用户任务需要调度的异步事件或需要启动的用户定时器转换为线程时,将线程控制块加入用户队列形成用户队列的节点,还需注明节点所对应线程的类型、优先级的子模块。
10.如权利要求6所述的定时器和异步事件的处理系统,其特征在于,所述中断定时器为硬件定时器或软中断定时器。
CN201010524167.XA 2010-10-29 2010-10-29 一种定时器和异步事件的处理方法及系统 Active CN102455940B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010524167.XA CN102455940B (zh) 2010-10-29 2010-10-29 一种定时器和异步事件的处理方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010524167.XA CN102455940B (zh) 2010-10-29 2010-10-29 一种定时器和异步事件的处理方法及系统

Publications (2)

Publication Number Publication Date
CN102455940A CN102455940A (zh) 2012-05-16
CN102455940B true CN102455940B (zh) 2014-02-12

Family

ID=46039152

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010524167.XA Active CN102455940B (zh) 2010-10-29 2010-10-29 一种定时器和异步事件的处理方法及系统

Country Status (1)

Country Link
CN (1) CN102455940B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110673938A (zh) * 2019-09-23 2020-01-10 腾讯科技(深圳)有限公司 任务处理方法、系统、服务器及存储介质

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104461710A (zh) * 2014-12-12 2015-03-25 北京国双科技有限公司 任务处理方法及装置
CN106547611A (zh) * 2015-09-16 2017-03-29 中兴通讯股份有限公司 基于业务流的任务调度方法及装置
US20180203813A1 (en) * 2015-09-29 2018-07-19 Shannon Systems Ltd. Methods for processing return entities associated with multiple requests in single interrupt service routine thread and apparatuses using the same
CN105528246A (zh) * 2015-12-07 2016-04-27 厦门雅迅网络股份有限公司 一种基于动态计时周期的进程内定时器管理方法及系统
CN106020978B (zh) * 2016-05-17 2019-05-21 扬州航盛科技有限公司 一种时间差量顺序链表定时器的执行方法
CN107273141B (zh) * 2017-07-10 2020-12-29 无锡走向智能科技有限公司 嵌入式实时操作系统
CN107678843B (zh) * 2017-09-20 2020-12-29 电子科技大学 一种采用多级反馈队列的进程调度方法
CN108958915A (zh) * 2018-06-28 2018-12-07 中国建设银行股份有限公司 定时任务执行方法及装置
CN109471663B (zh) * 2018-10-30 2022-04-05 珠海格力智能装备有限公司 单片机程序的执行方法及装置
CN112894827B (zh) * 2021-02-25 2022-09-02 中国科学院长春光学精密机械与物理研究所 一种机械臂运动控制方法、系统、装置及可读存储介质
CN113176934B (zh) * 2021-04-26 2023-05-16 湖南智领通信科技有限公司 嵌入式超高时钟精度定时任务执行方法和嵌入式操作系统
CN115525402A (zh) * 2021-06-25 2022-12-27 中兴通讯股份有限公司 定时器任务的处理方法、软件定时器及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1926510A (zh) * 2004-03-31 2007-03-07 英特尔公司 事件处理机制

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0310689D0 (en) * 2003-05-09 2003-06-11 Ibm Monitoring operational data in data processing systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1926510A (zh) * 2004-03-31 2007-03-07 英特尔公司 事件处理机制

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110673938A (zh) * 2019-09-23 2020-01-10 腾讯科技(深圳)有限公司 任务处理方法、系统、服务器及存储介质

Also Published As

Publication number Publication date
CN102455940A (zh) 2012-05-16

Similar Documents

Publication Publication Date Title
CN102455940B (zh) 一种定时器和异步事件的处理方法及系统
CN106293919B (zh) 一种时间触发的嵌入式任务调度装置与方法
CA2200929C (en) Periodic process scheduling method
US20060010446A1 (en) Method and system for concurrent execution of multiple kernels
CN102455933B (zh) 一种通过线程管理提高多任务处理效率的方法
EP2460072B1 (en) Apparatus and method for processing events in a telecommunications network
CN102567111A (zh) 一种异步过程调用的方法、系统和终端设备
CN113179227B (zh) 基于队列的at指令控制方法
CN103092682A (zh) 异步网络应用程序处理方法
US6820263B1 (en) Methods and system for time management in a shared memory parallel processor computing environment
CN103493440A (zh) 集成电路装置和执行直通转发的方法
CN111897637A (zh) 作业调度方法、装置、主机及存储介质
KR20000060827A (ko) 실시간 운영체계 커널(Real-time operating systemKernel)의 이벤트 전달 체계 구현방법
US20030163600A1 (en) Method and system where one thread can handle several different services concurrently
JP2904483B2 (ja) 周期的プロセスのスケジューリング方法
US20160048156A1 (en) Automation device and method for reducing jitter
CN101349975B (zh) 一种在嵌入式操作系统上实现中断底半部机制的方法及装置
CN112527532A (zh) 一种基于消息的路径调度方法
JPH11312148A (ja) バリア同期方法及び装置
US10949367B2 (en) Method for handling kernel service request for interrupt routines in multi-core environment and electronic device thereof
CN114924849B (zh) 一种工业控制系统高并发执行和资源调度方法及装置
JP2000322278A (ja) プロセス実行制御方法
CN110489089B (zh) 基于中断管理框架的嵌入式系统低功耗控制方法及系统
CN102096604B (zh) 阅读器及其ro规则调度方法
JP3653176B2 (ja) プロセス実行制御方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CP02 Change in the address of a patent holder

Address after: 610041 15-24 floor, 1 1 Tianfu street, Chengdu high tech Zone, Sichuan

Patentee after: MAIPU COMMUNICATION TECHNOLOGY Co.,Ltd.

Address before: 610041 Sichuan city of Chengdu province high tech Zone nine Hing Road No. 16 building, Maipu

Patentee before: MAIPU COMMUNICATION TECHNOLOGY Co.,Ltd.

CP02 Change in the address of a patent holder
CP02 Change in the address of a patent holder

Address after: 610041 nine Xing Xing Road 16, hi tech Zone, Sichuan, Chengdu

Patentee after: MAIPU COMMUNICATION TECHNOLOGY Co.,Ltd.

Address before: 610041 15-24 floor, 1 1 Tianfu street, Chengdu high tech Zone, Sichuan

Patentee before: MAIPU COMMUNICATION TECHNOLOGY Co.,Ltd.

CP02 Change in the address of a patent holder