首页 > 范文大全 > 正文

一种windows环境下窗口看门狗方案的设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇一种windows环境下窗口看门狗方案的设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:windows操作系统应用于工业控制等可靠性要求高的领域存在不足,看门狗技术可有效提高系统可靠性。本文在分析现有多任务环境下看门狗技术的基础上,提出了一种windows环境下内核模式软件窗口看门狗方案,给出了基本原理和具体实现。该方案基于windows WDM驱动模型实现软件看门狗,实现对用户模式进程的监控,具有稳定可靠的优点,可有效提高基于windows系统的软件可靠性。

关键词:窗口看门狗;windows操作系统;内核模式;WDM驱动模型;多任务;可靠性

Design of Window Watchdog in Windows OS

LI WenPing

(ANHUI JIYUAN ELECTRIC POWER SYSTEM TECH CO,LTD.. Hefei Anhui 230601, China)

Abstract:Windows OS is deficient for applications which require high reliability, such as industrial control. Based on analysis of related works on watchdog technique in multi-task environment, the paper proposes a new kernel mode window watchdog for Microsoft windows, the principle and implementation is present. Our approach monitor user mode processes through a software watchdog based on windows WDM driver model, and it is very reliable and can improve the reliability of software under windows OS.

Key Words: windowwatchdog; windows s OS; kernel mode; WDM driver model; multi-task; reliability

中图分类号:S611文献标识码: A

1. 引言

看门狗是常用的软件抗干扰技术,用于防止程序跑飞和死机,特别在基于微控制器的无操作系统前后台系统中得到广泛而成功的应用[1]。看门狗根据实现方式不同分为软件看门狗和硬件看门狗,其中硬件看门狗是利用专门的芯片或板卡实现,软件看门狗则是纯软件的方式实现。Windows系统由于其友好的界面和巨大的市场占有率,在很多行业得到应用,如工业控制也越来越多的基于该系统开发。但是对于某些可靠性要求高的应用,windows系统存在不足。将看门狗技术应用于windows平台有助于提高系统的可靠性。然而多任务环境下的相关研究还比较少,为数不多的研究基本都集中在RTOS系统[2-6]。D. Lantrip利用C++设计了一种针对RTOS的软件看门狗机制[3],胡玉霞等人则针对uCOS/II系统提出了一种类似的软件看门狗机制[4]。针对windows系统的主要研究是叶帮利针对windows系统的工控机提出了一种软件看门狗方案[7]。该方案通过设置专门的软件看门狗管理器进程对任务实施监控。管理器进程为每个被监控任务设置一个递减计数器,表示该任务喂软件狗的最大间隔。任务应周期性喂狗,并且喂狗间隔要小于该计数器;如果在此间隔内任务没有喂狗,则计数器递减为0,发生溢出,即认为该任务异常。当发生异常时,通常的处理方法是重启该任务或重启整个系统。

本文在此基础上提出了一种新的windows环境下多任务软件看门狗方案。利用内核模块而不是普通进程实现软件看门狗管理器,防止了管理器本身被无意或有意关闭的风险,从而提高了管理器本身的可靠性。此外,与传统方案不同,我们实现的看门狗是一种窗口看门狗(window watchdog)。所谓窗口看门狗是指喂狗间隔必须处于某个窗口范围内,喂狗过早或者过晚都将被视为异常,导致看门狗触发。

2. 基本原理

本设计采用windows NT平台下标准WDM驱动程序模型实现软件看门狗管理器[8-11]。该管理器以内核模块形式运行,每个被监控进程(任务)通过标准的ioctl接口向管理器提交请求,指定喂狗窗口,创建用于监控该任务的软件看门狗数据结构。进程在运行过程中周期性的喂软件狗,且喂狗间隔处于指定的窗口内。管理器内部维护一个链表,每个任务对应的软件看门狗均连接到该链表。管理器周期性的扫描软件看门狗链表,分析每个软件看门狗的上次喂狗时间间隔是否处于窗口内,如果不在窗口内,则关闭该进程,尝试重新启动。多次重启不成功,可选择重启整个系统。

如果系统有硬件看门狗,管理器还可与硬件看门狗协作以进一步提高可靠性。这种情况下管理器以小于硬件看门狗溢出时间的间隔周期性喂硬件狗;只有在被监控进程异常需要重启系统时才停止喂硬件狗。如果管理器本身出现异常不能按时喂狗,也会触发硬件狗溢出。

该方案由于采用了内核模块实现管理器,而不是一个用户态的进程,用户无法利用任务管理器等工具关闭它;对恶意的破坏也具有更好的防护能力,因而具有更高的可靠性。窗口看门狗的实现可应用于更复杂的场景,在某些产品中,需要防止程序执行过快,窗口看门狗很好的满足了这类需求。

3. 内核软件看门狗的实现

内核软件看门狗管理器为每个需要监控的进程创建一个软件狗,软件看门狗由如下数据结构描述。

struct {

int win_max,win_min; //看门狗喂狗的窗口时间

int last_feed, current_feed; //上次和本次喂狗时间

list_headlist; //用于将所有软件看门狗连接为一个双向循环链表

HANDLEprocess_handle;//对应的进程句柄

}soft_watchdog;

其中win_max和win_min表示喂狗的窗口,即进程喂狗的间隔必须在[win_min,win_max]区间内;last_feed和current_feed则记录最近两次喂狗的时间;这些时间均以系统节拍为单位。process_handle则为对应进程的句柄,list将软件狗连接为双向循环链表。其工作原理如图1所示。

进程通过调用create_softwatchdog创建一个自己的软件看门狗。该函数通过ioctl传递喂狗窗口时间和进程句柄给内核软件狗管理器,管理器分配一个soft_watchdog结构,初始化成员变量,并将其插入链表。当进程不需监控时,可通过调用release_softwatchdog通知内核管理器释放对应的soft_watchdog。

进程在运行过程中,通过调用feed_softwatchdog喂狗。该函数同样是通过标准的ioctl接口通知内核软件看门狗管理器更新last_feed和current_feed。当进程自身发现不可修复异常,需要主动触发一次系统复位时,则调用reset_system通知内核软件狗管理器复位系统。

内核软件狗管理器是个标准的WDM内核模块,运行在内核空间。管理器维护一个软件看门狗的双向循环链表,在加载时创建一个内核定时器,该定时器执行周期性的喂硬件狗(如果系统有硬件狗)和扫描软件看门狗链表的工作。扫描时将依次检查每个软件看门狗的current_feed与当前时间的差值是否大于win_max,以及current_feed和last_feed的差值是否落入[win_min,win_max]窗口内,如果结果是否定的,管理器将杀死该进程,然后尝试重新启动进程。当重启进程失败时,管理器调用NtShutDownSystem重启整个系统。

重新启动进程需要先获得该进程对应可执行文件的完整路径名,在内核模式下有多种方法可以实现这个功能,最为简单的是调用NtQueryInformationProcess来获得。此外,也可以通过调用PsGetProcessImageFileName获得进程的可执行文件路径名。

图1 内核模式软件看门狗工作原理

重启进程有两种方式实现。第一种是设置一个用户态的守护进程,该进程随软件看门狗管理器一起加载运行。当管理器需要重启某进程时,它发送一个Event通知守护进程;守护进程然后调用ioctl获取该进程可执行文件的完整路径名,再调用CreateProcess启动它。另一种方式是利用Gary Nebbett的方法直接在内核态创建用户进程[12],而在windows 7及以后系统,可以更简单的通过调用NtCreateUserProcess来实现。

内核软件看门狗管理器可接收用户态被监控进程的系统复位请求。当进程需要复位系统时,通过调用reset_system通知管理器,管理器可以通过调用NtShutDownSystem或者在有硬件看门狗情况下,停止喂硬件狗的方式实现系统复位。

4. 小结

硬件看门狗技术广泛用于无操作系统的微控制器应用中,但在多任务环境下,应用看门狗存在很大的差异。在windows系统中相关研究和应用鲜有报道,本文针对Windows系统提出了一种内核模式的软件看门狗方案,相对于传统的基于用户模式的方案有更好的可靠性,不仅能有效防止进程跑飞或死循环,还可以防止其他因素导致进程代码执行速度过快的异常,可以用于提高基于windows系统应用的可靠性。

参考文献

[1] 胡屏,柏军. 单片机应用系统中的看门狗技术[J]. 吉林大学学报(信息科学版), 2003, 21(2): 205-208.

[2] 曹敏煊. 嵌入式操作系统应用中的看门狗技术[J]. 单片机与嵌入式系统应用, 2004, 5: 75-76.

[3] D. Lantrip. General Purpose Watchdog Timer Component for a Multitasking System[J]. embedded world, 1997

[4] 胡玉霞, 李绪勇.基于μC/OS -II操作系统的多任务看门狗设计[J].衡水学院学报,2009,11(4):31-33.

[5] 吴允平,蔡声镇,乐仁昌.单片机任务型软件“看门狗”原理及应用[J].计算机工程与用,2004,41(34):122-123.

[6] MARIA POHRONSKA, TIBOR KRAJCOVIC. Embedded Systems with Increased Reliability Using the Multiple Watchdog Timers Approach[C]. // Proceeding of 2010 IEEE International Conference on Applied Electronics (AE). Pilsen: IEEE, 2010: 273-277.

[7] 叶帮利.用于工控监测系统的多进程软件看门狗[J].微计算机信息,2008,24(7):304-305.

[8] Chris Cant. Windows WDM设备驱动程序开发指南[M]. 北京:机械工业出版社,1999.

[9] Mark Russinovich,David Solomon. 深入解析windows操作系统[M]. 北京:人民邮电出版社,2009.

[10] 陈向群. Windows操作系统原理[M].北京:机械工业出版社,2004.

[11] 张佩. 竹林蹊径:深入浅出windows驱动开发[M]. 北京:电子工业出版社,2011.

[12] Gary Nebbett. Windows NT/2000: Native API Reference[M]. New Riders Publishing,2000.