watchdog(1)

昨天对watchdog的代码浅显的看了一下,今天又有进一步的学习了,在看到我昨天处理了关于手机重启的问题我以为是WATCHDOG导致的,但是在LOG 中并没有发现WATCHDOG TIMEOUT,所以这个应该不是这个问题导致的,但我还不是知道到底是什么问题导致的重启。

今天就来讲讲我看到的关于别人watchdogd.c(d->demon)上所打的patch,主要就是为了当在out of memery 时候,把watchdog相关的页换出去,而导致了????watchdog超时所导致的IPINC,在log中的thread的中可以看到在watchdog下 会有<4>[65286.320990]  [<c130c119>] handle_pte_fault+0x79/0xa60
<4>[65286.320999]  [<c130cb86>] handle_mm_fault+0x86/0xc0
<4>[65286.321007]  [<c1227f50>] ? pgtable_bad+0x130/0x130
<4>[65286.321016]  [<c1228064>] do_page_fault+0x114/0x3c0

从上面可以看出watchdog进程的页被换出来了,没能找到,所以必需把这个进程的页锁起来,这个只要在相应进程中用到系统调用,syscall(__NR_mlockall,MCL_CURRENT | MCL_FUTURE),mlockall的函数就是底层实现页表驻留的,防止被换出去。

说道系统调用,这里就不得不说点东西了,在用户空间想进入内核空间访问的话,就智能利用系统调用了,在系统调用在我看来就是调用了内核中的某个函数罢了,它就是利用了一张表格,而宏_NR_mlockall,就相当于是这张表格的下标数组,指向的就是内核中的真正的函数名,如 #define SYS_mlockall __NR_mlockall,呵呵,这个其实就是定义了指向的就是系统中的mlockall,接下来就找mlockall在哪里实现了,大爷的啊,我在代码里竟然只看到了extern int mlockall (int __flags) __THROW,的定义,和一些注释说明,呀呀的啊,这个cscope不是坑爹的吧,真就只能找c,和c++的代码中的啊,晕死,现在不知的怎么下去了,呵呵,接下来的应该是汇编的实现,但是能找到其他函数的汇编实现的地方,但是这个确不能看到,哎,看来也智能暂时休息休息了。对了,在看汇编的时候,又不同架构下的汇编实现,所以所用的指令也是不一样的,用:tnext一个一个的往下看知道了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值