读书人

Android架构纵横谈之软件自愈能力

发布时间: 2012-08-10 12:19:33 作者: rapoo

Android架构纵横谈之——软件自愈能力 (3)

By 宋宝华

最近马不停蹄往返进行Linux技术讲座,所以本回delay了一周。上回书说到Android中生死与共的Zygote和SystemServer,今回书我们讲SystemServer的watchdog,也为软件架构自愈系列的终结篇。

第三只狗:朝廷鹰犬

2012年7月,网名为“吴法天”、人称中国十大“五毛”的中国政法大学副教授吴丹红,和网名为“此是燕云”的四川电视台记者周燕,“微博约架”北京朝阳公园南门。众多网友前去围观,一场鸡飞狗跳的闹剧就此上演。吴法天被打,天朝为之轰动。笔者观此视频,对于吴被打,稍有振动,而最震慑心灵的是,视频中,吴被众人齐呼“走狗”,却是有相当的讽刺意味。“走狗”,基本上是与“朝廷鹰犬”同等的概念,可笑的是,替现政府说话的人,目前成为“走狗”,换回70年前,又是怎样的观景?当年彼是绿林,今日彼为走狗,想起小时候看过的电影《金镖黄天霸》,黄天霸曾经是伟大的无产阶级领袖,绿林好汉的三统领,后投靠清廷,于是成为“鹰犬”,成功升级为与明朝东厂同等的地位。政治是个卑鄙的把戏,历史上屡次的成功者,基本上都是最卑鄙者。

Android架构纵横谈之——软件自愈能力 (三)

“走狗”、“鹰犬”的特点是,对主人卑躬屈膝,对民间进行秘密监控、暴力镇压、实施酷刑等,搞到人人自危。在Android的世界里,这样的“走狗”也必然存在。在SystemServer启动一些service后,它需要不断监视一些重要service的状况,一旦发现某个service有异动,思想上与统治者长期不一致,势必要采取行动。在SystemService的众多service中,重点监控对象包括ActivityManagerService 、PowerManagerService、WindowManagerService等,这个监控透过Android的watchdog实现 。

在一个典型的嵌入式系统中,会存在一个硬件看门狗,正常运转的系统会周期喂狗,否则证明系统hang了。硬件看门狗存在相当大的局限性,它只能监控整个系统而不能监控单个的进程或者线程。于是发明软件看门狗意义重大。SystemServer会用到软件看门狗来确保AM 、PM、WM这几个服务hang住之后,退出SystemServer进程,从而进入上回书中的Zygote与SystemServer的生死与共。注意service是hang而不是死,绕到个死胡同里出不来了。镜湖女侠决定了革命,你再怎么去说服她也没有用了。这些重要的service运行于SystemServer的进程空间,在祖国的怀抱里长大,它们热爱祖国热爱人民,只是步调偏了,不按照当局规定的方式“爱国”,当局透过Java里面去synchronized某锁拿思想汇报的时候长时间拿不到。

我们随便读一下PowerManagerService.java的源代码,会发现几乎所有的重要操作都会透过synchronized其中的mLocks进行,咱们抓几个看看:

Android架构纵横谈之——软件自愈能力 (三)

很显然,如果我们故意去synchronizedmLocks这个锁,如果长时间拿不到,基本可认定PowerManagerService在某个操作里面hang了,短时间或者直接就拿到了,证明一切正常。PowerManagerService里面实现了monitor成员函数来synchronized mLocks:


在朝廷鹰犬的监控之下,无法与中央保持一致的service革命者就这样被watchdog给揪了出来。鹰犬问道,你只要放弃你的信念,保持喂狗,就可以活。而他(她)毅然选择了慷慨负死。威廉华莱士道:“跟着我,你们将失去生命,但是,你们将获得自由” 。

Android架构纵横谈之——软件自愈能力 (三)

谨以本回,献给中国历史上前赴后继的伟大的为天下人谋求永福的人们。


汝体吾此心,

于啼泣之余,

亦以天下人为念,

当亦乐牺牲吾身与汝身之福利,

为天下人谋永福也。

汝其勿悲!


——宋宝华





读书人网 >Android

热点推荐