现在的CPU基本上都带有WatchDog功能,这种硬件的WatchDog可以在系统死掉(死锁或者程序跑飞)后重启系统,让系统回到可以工作的状态。WatchDog不能防止系统死掉,但是它能够起死回生,从而提高系统的可用性。
硬件级的WatchDog也有它的局限性,它只能在系统范围内生效,不能针对单个进程,某个进程死掉了,WatchDog未必知道。对于像Linux这类久经考验的操作系统来说,整个系统死掉概率非常低,所以此时硬件级的WatchDog意义反而不大。
Android 平台实现了一个软件的WatchDog来监护SystemServer。SystemServer无疑是Android平台中最重要的进程了,里面运行了整个平台中绝大多数的服务。在这个进程中运行着近50个线程,任何一个线程死掉都可能导致整个系统死掉。SystemServer退出反而问题不大,因为 init进程会重新启动它,但是它死锁就麻烦了,因为整个系统就没法动了。
在 SystemServer里运行的服务中,最重要的几个服务应该数ActivityManager、WindowManager和 PowerManager。软件的WatchDog主要就是确保这几个服务发生死锁之后,退出SystemServer进程,让init进程重启它,让系统回到可用状态。
每个被监护的Service必须实现Watchdog.Monitor接口,这个接口只要实现一个函数monitor,这个函数实现非常简单,就拿ActivityManager来说吧:
public void monitor() {
synchronized (this) { }
}
它去锁一下对象,什么也不做,然后就返回。如果对象没有死锁,这个过程就会很顺利。如果对象死锁了,这个函数就会挂在这里。
当然实现Watchdog.Monitor接口还不够,还要把它注册到WatchDog服务中,在初始化时加这样一行代码就行了:
Watchdog.getInstance().addMonitor(this);
最后我们看看WatchDog服务的实现。WatchDog服务包括两个方面:
1.定期调用被监护对象的monitor函数,这是在主线程中完成的。如果被监护对象死锁,则会阻塞在这里。
final int size = mMonitors.size();
for (int i = 0 ; i < size ; i++) {
mCurrentMonitor = mMonitors.get(i);
mCurrentMonitor.monitor();
}
2.检测是否发生死锁,这是在Watchdog线程中运行的。如果发生死锁而且没有被调试,则退出SystemServer,init进程就会重启SystemServer进程。
if (!Debug.isDebuggerConnected()) {
Slog.w(TAG, "*** WATCHDOG KILLING SYSTEM PROCESS: " + name);
Process.killProcess(Process.myPid());
System.exit(10);
} else {
Slog.w(TAG, "Debugger connected: Watchdog is *not* killing the system process");
}
分享到:
相关推荐
S3C2410 Watchdog 详解 Watchdog中文名称叫做“看门狗”,全称Watchdog Timer,从字面上我们可以知道其实它属于一种定时器。然而它与我们平常所接触的定时器在作用上又有所不同。普通的定时器一般起记时作用,记时...
**ARM开发WatchDog接口详解** 在嵌入式系统开发中,WatchDog定时器(简称WatchDog)是一个重要的安全机制,它用于防止系统因为异常或死锁状态而长时间停滞。WatchDog的基本原理是设置一个定时器,在预定的时间内,...
《STM32F103开发实践:USART、Flash与Watchdog详解》 在嵌入式系统开发领域,STM32系列微控制器以其强大的性能、丰富的外设接口以及高效的能源管理,深受工程师们的喜爱。本篇文章将围绕STM32F103这款经典芯片,...
### ZYNQ Linux Watchdog配置详解 #### 一、引言 在嵌入式系统设计中,为了确保系统的稳定性和可靠性,通常会采用Watchdog机制来监控系统的运行状态。一旦系统发生异常或长时间未响应,Watchdog将自动重启系统,...
### 嵌入式系统之WATCHDOG(看门狗)详解 #### 一、引言 在嵌入式系统的设计与开发中,确保系统稳定性和可靠性是至关重要的任务之一。WATCHDOG,通常被称为看门狗,是嵌入式系统中不可或缺的一部分,其核心功能在于...
**看门狗定时器(Watchdog Timer)详解** 在计算机硬件和嵌入式系统中,"watchdog",中文称为“看门狗”,是一个至关重要的组件,尤其在可靠性与稳定性要求极高的应用环境中。它的全称是watchdog timer,正如其名,...
《S3C2410看门狗详解》 在嵌入式系统设计中,看门狗定时器(Watchdog Timer)是一种至关重要的安全机制,它用于监控系统的正常运行。在本文中,我们将深入探讨S3C2410处理器中的看门狗定时器,并解析其工作原理、...
《MSP 430 Watchdog Timer应用详解》 在嵌入式系统设计中,Watchdog Timer(看门狗定时器)是一种至关重要的组件,它主要用于确保系统的稳定性和可靠性。本篇文章将深入探讨MSP 430微控制器中的Watchdog Timer应用...
《PyPI官网下载的watchdog-2.1.5-cp39-cp39-macosx_11_0_arm64.whl——Python监控库详解》 Python作为一个强大的编程语言,拥有丰富的第三方库支持,其中Watchdog库是Python中用于文件系统事件监控的重要工具。本文...
《WatchDog.zip:QT、看门狗与UDP技术详解》 在IT领域,"WatchDog.zip"这个压缩包文件很可能包含了一个与QT编程框架、看门狗定时器以及UDP网络通信相关的项目或教程。让我们深入探讨一下这些关键知识点。 首先,QT...
80s52 Watchdog 软件程序详解 80s52 是一款基于8051微控制器系列的微处理器,具有丰富的内置功能,其中包括看门狗定时器(Watchdog Timer)。看门狗定时器是一种硬件机制,用于监控程序的运行状态,防止程序因为...
**看门狗(Watchdog)技术详解及其在IMX6平台的应用** 看门狗定时器(Watchdog Timer,简称WDT)是嵌入式系统中一个重要的安全机制,它的主要功能是在系统出现故障或者异常时,自动重置系统,以确保系统的稳定运行。在...
【TMS320F28335看门狗定时器详解】 TMS320F28335是德州仪器(Texas Instruments)推出的一款高性能浮点数字信号处理器(DSP),广泛应用于工业控制、电力系统、汽车电子等领域。在这些应用中,系统的稳定性和可靠性...
在本实验"嵌入式原理与实践(实验四)"中,主要关注的是两个关键的嵌入式组件:ADC(模数转换器)和看门狗(Watchdog Timer)。实验旨在加深对keil开发环境的熟悉,掌握数据手册的阅读方法,以及理解ADC和看门狗的...
**知识点详解:** 1. **Winbond 8362DHG芯片**:这是一个微控制器,通常包含CPU、内存、I/O接口等,常用于嵌入式系统中,因其集成度高、功耗低等特点。 2. **Watchdog定时器**:是系统的一种自我保护机制,当程序...
### 看门狗定时器的使用详解 #### 一、引言 看门狗定时器(Watchdog Timer,简称WDT)是一种用于监控系统运行状况的重要机制,它能够自动重启系统以应对软件死锁等问题。本文档主要针对M16C/Tiny系列单片机中的看门...
### 英创ARM9嵌入式主板Watchdog的使用详解 #### 一、引言 在嵌入式系统设计中,Watchdog(看门狗)机制是保障系统稳定性和可靠性的关键组件之一。看门狗的基本原理是通过一个定时器监控系统运行状态,当系统发生...
**Laravel的AuthServiceProvider详解** Laravel的`AuthServiceProvider`是框架提供的服务提供者之一,它负责注册认证相关的服务和绑定。默认情况下,`AuthServiceProvider`包含了以下主要职责: 1. **配置认证模型...
### LM3S811 7_看门狗(WatchDog)详解 #### 1.1 什么是看门狗 看门狗(WatchDog)是一种用于监控微控制器(MCU)运行状态的硬件机制,旨在防止因软件错误或外部干扰而导致的系统故障。当MCU中的程序运行异常进入无限...