发明名称 基于代码段多副本对比机制提高程序可靠性方法
摘要 本发明公开了基于代码段多副本对比机制提高程序可靠性方法,通过启动内核线程作为初始化线程,初始化线程获取进程内存信息,在物理内存中保存进程代码段的两份副本,并把进程代码段划分为固定大小的内存区域,按照划分结果,启动相应数目的内核线程作为一致性维护线程实时维护进程代码段区域和其副本之间的一致性,发现由于各种软硬件故障造成的程序代码段错误,并且及时恢复。本发明实现简单、对被保护进程透明、并且能够有效的检测程序代码段错误,防止由于代码段错误造成的程序崩溃甚至系统失效,提高了程序运行的可靠性。
申请公布号 CN101901174B 申请公布日期 2012.07.18
申请号 CN201010239426.4 申请日期 2010.07.28
申请人 西安交通大学;浪潮(北京)电子信息产业有限公司 发明人 张兴军;董小社;雷济凯;郑豪;刘鹏飞;王恩东;胡雷钧;张东;伍卫国
分类号 G06F11/14(2006.01)I 主分类号 G06F11/14(2006.01)I
代理机构 西安通大专利代理有限责任公司 61200 代理人 陆万寿
主权项 一种基于代码段多副本对比机制提高程序可靠性方法,其特征在于,包括下述步骤:(1)在操作系统中启动一个内核线程作为初始化线程,初始化线程通过进程描述符task_struct中的内存信息描述符mm_struct提取需要保护程序的代码段信息,代码段信息包括代码段大小、起始逻辑地址、结束逻辑地址;(2)初始化线程根据步骤(1)中提取的代码段信息,建立两份需要保护进程的代码段副本,一份称为主副本,另外一份称为次副本;(3)初始化进程对需要保护进程的代码段进行划分,把进程代码段划分为多个代码区域,若需要保护进程的代码段大小为代码区域大小的整数倍,则划分得到的代码区域大小都相同;否则划分得到的代码区域中最后一个代码区域大小小于其他代码区域大小;(4)初始化进程根据步骤(3)中划分的代码区域数量,生成相应数目的内核线程作为一致性维护线程;(5)每个一致性维护线程针对自己负责的代码区域,进行代码区域一致性维护工作,一致性维护线程进行的一致性维护工作如下:(a)初始化相应数据结构,包括待比较代码区域相关信息的载入、比较指针的设置;(b)根据一致性维护线程执行频率设置判断一致性维护线程是否应该睡眠,如果未到达执行频率所规定的等待时间,则设置一致性维护线程状态为睡眠,睡眠时间由执行频率决定;(c)更新比较指针,比较当前位置进程代码段和主副本的内容,如果内容一致,并且还有数据比较,则继续执行步骤(c);如果内容一致但已经完 成所有比较,则转步骤(b);否则执行步骤(d);(d)如果系统中有其他CPU,则停止其他所有CPU的执行,如果停止其他CPU失败,则向控制台发送警告信息;(e)判断发生错误的位置:分别比较进程代码段、主副本和次副本当前位置的内容,可能的比较结果及处理方法如下:a)进程代码段和次副本一致但主副本和次副本内容不一致,转步骤(f);b)进程代码段和次副本不一致但主副本和次副本内容一致,转步骤(g);进程代码段和次副本不一致并且主副本和次副本内容不一致,转步骤(h);(f)此时主副本发生错误,使用次副本的当前位置的内容修改主副本当前位置的内容,恢复主副本错误,如果恢复成功,则记录相关错误以及恢复信息,重新启动系统中其他CPU的执行,转步骤(c)执行;如果恢复失败,则记录相关错误以及恢复信息,杀死当前进程的执行然后结束;(g)此时进程代码段自身发生错误,使用主副本的当前位置的内容修改进程代码段当前位置的内容,恢复进程代码段错误,如果恢复成功,则记录相关错误以及恢复信息,重新启动系统中其他CPU的执行,转步骤(c)执行;如果恢复失败,则记录相关错误以及恢复信息,杀死当前进程的执行然后结束;(h)此时不能判断是进程代码段、主副本还是次副本发生错误,杀死当前进程的执行,并且记录相关错误信息然后结束。
地址 710049 陕西省西安市咸宁路28号