一种多任务操作系统中任务进程的保护方法

文档序号:7951948阅读:259来源:国知局
专利名称:一种多任务操作系统中任务进程的保护方法
技术领域
本发明涉及一种多任务操作系统中任务进程的保护方法。
通常,通信系统软件为了解决效率以及实时性问题,模块间的偶合度比较高,几个并发执行的任务共享数据是不可避免的。而且,为了方便编码,很多数据结构都是以链表形式组织的。链表通常使用动态分配内存的方式,内存的使用效率比较高,使用起来非常灵活,但是如果链表的中间任何一个环节被打断,都有可能破坏链表的完整性,严重的会引起系统瘫痪。例如,路由器通常有很多的接口与外围的设备或者直接与用户的计算机相连,这些接口(interface)保存了许多配置信息。假定这些数据是用链表组织的,以显示接口信息(Show interface)为例,在一台有多个接口的路由器上,如果要显示接口信息,输入显示接口信息的命令,该命令的主要动作就是遍历接口链表,并且结果输出到屏幕上,假设结果信息不能一屏显示完毕,则显示完一屏就需要等待用户发出显示下一屏或结束显示的命令。用户可以在敲键盘之前仔细地查看接口信息。由于路由器的配置是多用户的,也就是可以有多个用户同时执行对接口的操作,如显示接口信息和删除接口等,显示任务挂起等待用户继续操作时,必须允许别的任务对该接口进行操作,否则别的任务会有长时间的等待,使多个任务之间相互之间有很大的影响。假如显示接口命令在遍历链表时不将数据一次完全产生完成,由于在等待时对应的显示任务是挂起的,因此这时该任务中会有一个变量指向当前显示的接口对应的数据结构。具体说,假设当显示任务挂起时,任务中有一个变量pShowIf指向了所述显示接口的1号数据结构,由于显示任务的挂起,所以系统会切到换别的任务运行。假设当前另外一个共享该接口1号数据结构的任务进程删除了1号数据结构,那么这时pShowIf指向的空间就成为一个非法的空间,进而导致显示任务进程的异常终止或系统死机。
为解决上述问题,目前采用的方法一是使每一个任务进程一次完全产生所有的数据,但是这将浪费大量的资源;另外一种做法是加引用计数,当pShowIf指向上述接口的1号数据结构时,将引用计数加1,共享该数据结构的任务进程在删除该数据结构时,判断引用计数,如果不为0,则删除操作失败。第二个方法对于用户可以干预的数据结构可以使用,但是对于路由模块就不适合,因为任务进程可能将路由项挂起很长的一段时间,因此,在这么长的时间内,该路由项不能被更新,会造成转发错误。
本发明的目的在于,提供一种对多任务操作系统中共享数据的多个任务进程的保护方法,该方法能够避免由于共享数据的意外删除而导致任务进程的异常终止或系统死机。
为达到上述目的,本发明提供了一种多任务操作系统中任务进程的保护方法,该方法包括创建一个守护链表,对于可能产生挂起操作的任何一个任务进程,(1)在运行前,向所述守护链表注册本任务进程使用的数据类型多个实例的数据集合,以所述数据集合为一个主类型节点,同时在所述主类型节点下,注册一个叶子节点,用以保存对所述数据类型多个实例的数据集合本次使用所需要的本任务进程的遍历算法,然后运行本任务进程;
(2)本任务进程挂起时,通知所述守护链表中本任务进程注册的叶子节点保存本任务进程所操作的数据子集中当前数据,然后其他任务进程运行;(3)本任务进程结束挂起时,通过所述守护链表中本任务进程注册的叶子节点,取回本任务进程所操作的数据子集中当前数据;所述方法还包括对于可能产生删除操作的任何一个任务进程,在执行删除操作时,通知所述守护链表,将与本任务进程具有共同父节点、且共享当前要删除数据的其它所有叶子节点的指针,指向其对应的数据子集中的下一个要操作的数据。
上面所述保存本任务进程的遍历算法,是保存对本任务所要操作的数据类型多个实例的集合的一个数据子集以及操作所述数据子集所需要的指针。
由于本发明对于可能产生挂起操作的任何一个任务进程,都要在运行前,在所述守护链表中本任务进程使用的数据类型多个实例的数据集合的主节点下,注册一个保存对所述数据类型多个实例的数据集合本次使用所需要的本任务进程的遍历算法的叶子节点,在执行删除操作时,通知所述守护链表中与本任务进程具有共同父节点、且共享当前要删除数据的其它所有叶子节点,将指针指向其对应的数据子集中的下一个要操作的数据,这样,在本任务进程挂起时,只要通知所述守护链表中本任务进程注册的叶子节点,将保存在其中的指针指向本任务进程所操作的数据子集中当前数据,就能够保证在结束挂起时,从上述叶子节点中取回本任务进程所操作的数据子集中的当前数据,因此,本发明能够对多任务操作系统中共享数据的多个任务进程进行保护,避免由于共享数据的意外删除而导致任务进程的异常终止或系统死机。
下面结合附图和实施例对本发明作进一步详细的描述。


图1是本发明采用的守护链表原理图1;图2是本发明采用的守护链表原理图2;图3是本发明采用的守护链表原理图3;图4是本发明实施例的流程图;图5是本发明实施例采用的守护链表状态图1;图6是本发明实施例采用的守护链表状态图2;图7是本发明实施例采用的守护链表状态图3;图8是本发明实施例采用的守护链表状态图4;图9是本发明实施例采用的守护链表状态图5;在多任务系统中,由于可能多个任务进程共享一个数据结构,一个任务进程对该共享的数据结构进行删除,使得其它进程可能崩溃。造成此状况的原因是由于执行删除操作的任务不知道是哪一个变量指向了该数据结构。因此,如果能提供一种支持,使得当执行删除任务的进程在删除该数据结构时能将相应的指向该数据结构的变量都指向正确的位置,就不会使其它共享该数据结构的任务进程产生异常。
按照本发明,首先应创建一个守护链表,用以管理对共享数据的操作,守护链表本身用来管理关键数据操作的数据结构是一棵两层的树,参考图1,其中,主类型节点表示一种数据结构,图中的主类型节点为接口数据结构和路由数据结构;子类型节点表示对作为主类型节点数据的一次使用,图中对应接口数据结构,有按三种不同的次序显示接口信息的三个任务显示任务1和显示任务2,显示任务3,分别对应图中主类型节点为接口数据结构的叶子节点中的三个叶子,表示同时有三个任务对其进行操作,显示任务1和显示任务2,显示任务3三个任务进程在运行前,需要分别注册一次对接口数据结构的使用,以在各自的叶子节点中保存各自对共享数据的使用实例,因为在不同的任务中,显示的接口可能不一样,例如假设路由器有接口1到接口7共7个接口,显示任务1需要显示接口1和接口3,显示任务2需要显示接口2、接口3和接口4,而显示任务3需要显示接口4、接口5和接口7;对应路由数据结构,也有按三种不同的次序操作路由数据结构的三个任务操作任务1和操作任务2,操作任务3,分别对应图中主类型节点为路由数据结构的叶子节点中的三个叶子,表示同时有三个任务对其进行操作。叶子节点中保存了当前操作的一些信息,例如当前显示的接口信息。
图中连接上下两层的箭头表示父子关系,同一层次之间的箭头表示兄弟关系。使用上述链表树对系统中所有可能挂起的任务进程进行管理,从图中可以看出显示任务1,显示任务2,显示任务3形成了兄弟关系。
守护链表树与共享数据的关系如图2所示,假设共享数据A为一数据链表,该表为由数据1到数据7共7个数据构成的数据集合,图中有两条分别由两个任务控制的操作链表,它们的父节点都为主类型为同一共享数据A的节点。其中操作链表1操作由共享数据A的数据集合中的数据2、4和数据5构成的子集,操作链表2操作由共享数据A的数据集合中的数据1、2、3、4和数据6构成的子集。假定某一时刻,两个操作都在操作数据2,那么主节点A的两个叶子节点1和2中的数据指针都指向数据2。
假设此时有第三个任务把关键数据删除了,此时如果不使用守护链表,那么操作链表1和操作链表2将无法找到下一个要操作的数据,数据4和数据3,而且可能对已经释放的内存进行操作。如果在删除数据2之前,使两个叶子节点1和2中的数据指针分别指向数据4和数据3,情况就改变,如图3所示。
图4是本发明实施例的流程图。在图4所述的实施例中,假如现在有两个用户1、2控制的两个显示任务进程1和2在同时使用显示接口命令Show interface显示接口信息,假定有接口1到接口6共6个接口,其中用户1打算显示2、4、5号接口,而用户2显示1、2、3、4、6接口,还有一个用户3控制的任务进程具有删除数据的能力。在使用守护链表之前,将所述守护链表的初始值设置为空,即守护链表的管理树是空的。
首先显示任务1执行步骤1,在运行前,判断所述守护链表中是否存在本任务进程使用的数据类型,因为此时守护链表中还不存在接口数据类型,因此,显示任务1执行步骤2,向所述守护链表注册本任务进程使用的数据类型多个实例的数据集合,即接口数据类型,它包括由接口1到接口6共6个接口组成的数据集合,以所述数据集合为一个主类型节点,接着执行步骤3,在所述主类型节点下,注册一个名为任务1的叶子节点,用以保存对所述接口数据类型多个实例的数据集合本次使用所需要的任务进程的遍历算法,也就是说,保存对本任务所要操作的数据类型多个实例的集合的一个数据子集以及操作所述数据子集所需要的指针。本例中,在由接口1到接口6共6个接口组成的数据集合中,选取2、4、5号接口作为一个数据操作子集,将该子集与指向该子集的指针保存到任务1叶子节点中,当然这种保存并不用物理复制出该自己保存,可以只保存2、4、5接口的标识。然后运行本任务进程;参考图5;接着,显示任务2也执行步骤1,在运行前,判断所述守护链表中是否存在本任务进程使用的数据类型,因为此时守护链表中已经存在接口数据类型,因此,显示任务2直接执行步骤3,向守护链表中的接口节点下,注册一个名为任务2的叶子节点,用以保存对所述接口数据类型多个实例的数据集合本次使用所需要的任务进程的遍历算法,本例中,显示任务2选取1、2、3、4、6号接口作为一个数据操作子集,将该子集与指向该子集的指针保存到任务2叶子节点中,然后运行本任务进程;参考图6。
显示任务1执行步骤4,在显示到接口2时,本任务进程挂起,并且等待用户敲键盘,同时通知守护链表正在使用接口2,也就是通知所述守护链表中本任务进程注册的叶子节点,即任务1叶子节点保存本任务进程所操作的数据子集中当前数据,也就是使保存在本任务进程注册的叶子节点任务1中的指针指向本任务进程所操作的数据子集中的当前数据,即接口2,然后其他任务进程运行。参考图7。
在显示任务1挂起时,显示任务2执行步骤4,也在显示到接口2时挂起,并且等待用户敲键盘,并通知守护链表正在使用接口2,也就是使保存在任务进程2注册的叶子节点任务2中的指针指向任务进程2所操作的数据子集中的当前数据,即接口2,然后其他任务进程运行。参考图8。
用户3控制的任务进程在经过步骤1到步骤4,执行步骤5删除接口2,执行删除操作时,通知所述守护链表,将与本任务进程具有共同父节点、且共享当前要删除数据的其它所有叶子节点,将指针指向其对应的数据子集中的下一个要操作的数据。也就是通知守护链表,守护链表的将叶子节点任务1和任务2的当前指针向后移,分别指向接口4和接口3,参考图9。
显示任务1和显示任务2分别执行步骤5,在结束挂起时,通过所述守护链表中本任务进程注册的叶子节点,取回本任务进程所操作的数据子集中当前数据,也就是获取保存在本任务进程注册的叶子节点中的指针指向的本任务进程所操作的数据子集中的当前数据。由于叶子节点任务1和任务2中的指针已经分别指向了各自的数据操作子集中的接口4和接口3,这样显示任务1和显示任务2在结束挂起时,显示任务1和显示接口4,而显示任务2显示接口3。这样就保证了显示任务1和显示任务2不会因为接口2的删除导致无法再遍历接口,甚至导致系统瘫痪。
当用户1、2控制的两个显示任务进程1和2显示任务1和显示任务2以及用户3控制的任务进程在各自完成使命后,分别通知守护链表删除各自注册的叶子节点,在删除最后一个叶子节点后还要删除响应的父节点,当所有任务进程结束后,所有父节点被删除,守护链表又变成了空树。
权利要求
1.一种多任务操作系统中任务进程的保护方法,该方法包括创建一个守护链表,对于可能产生挂起操作的任何一个任务进程,(1)在运行前,向所述守护链表注册本任务进程使用的数据类型多个实例的数据集合,以所述数据集合为一个主类型节点,同时在所述主类型节点下,注册一个叶子节点,用以保存对所述数据类型多个实例的数据集合本次使用所需要的本任务进程的遍历算法,然后运行本任务进程;(2)本任务进程挂起时,通知所述守护链表中本任务进程注册的叶子节点保存本任务进程所操作的数据子集中当前数据,然后其他任务进程运行;(3)本任务进程结束挂起时,通过所述守护链表中本任务进程注册的叶子节点,取回本任务进程所操作的数据子集中当前数据;
2.根据权利要求1所述的任务进程的保护方法,其特征在于该方法还包括在向所述守护链表注册本任务进程使用的数据类型多个实例的数据集合时,还要判断所述守护链表中是否存在本任务进程使用的数据类型,如果存在,不需要注册。
3.根据权利要求2所述的任务进程的保护方法,其特征在于将所述守护链表的初始值设置为空。
4.根据权利要求1、2或3所述的任务进程的保护方法,其特征在于,它还包括对于可能产生删除操作的任何一个任务进程,在执行删除操作时,通知所述守护链表,将与本任务进程具有共同父节点、且共享当前要删除数据的其它所有叶子节点的指针,指向其对应的数据子集中的下一个要操作的数据。
5.根据权利要求4所述的任务进程的保护方法,其特征在于所述保存本任务进程的遍历算法,是保存对本任务所要操作的数据类型多个实例的集合的一个数据子集以及操作所述数据子集所需要的指针。
6.根据权利要求4所述的任务进程的保护方法,其特征在于所述在本任务进程挂起时,保存本任务进程所操作的数据子集中当前数据,是使保存在本任务进程注册的叶子节点中的指针指向本任务进程所操作的数据子集中的当前数据。
7.根据权利要求4所述的任务进程的保护方法,其特征在于所述在本任务进程结束挂起时,取回本任务进程所操作的数据子集中当前数据,是获取保存在本任务进程注册的叶子节点中的指针指向的本任务进程所操作的数据子集中的当前数据。
全文摘要
本发明公开了一种多任务操作系统中任务进程的保护方法,该方法通过建立守护链表,在守护链表中建立本任务进程使用的数据类型的主节点下,注册一个保存本任务进程一次使用的遍历算法的叶子节点,在执行删除操作时,通知与本任务进程共享当前要删除数据的其它所有叶子节点,将指针指向下一个要操作的数据,使任何任务进程都能取回所操作的当前数据,因此能够对共享数据的多个任务进程进行保护,避免任务进程的异常或系统死机。
文档编号H04L29/10GK1391386SQ0112933
公开日2003年1月15日 申请日期2001年6月12日 优先权日2001年6月12日
发明者朱英明, 吴小前, 李莉 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1