世界上这类问题研究了20多年了,怎样使一个程序可靠运行?OS那么大程序也会乱,它乱了之后是怎样处理/恢复的?肯定不是靠自动重新启动。 有一种基本策略是软件按功能分层设计,并且 1、各层之间模块不允许互相调用;(DOS时代的设计) 2、只允许自上向下单向(申请)调用;
问:为什么2、比1、设计策略可靠?
3、下层对上层只留有服务接口,它对上层来说基本是封闭的。上层程序崩溃对下层没有影响,也就是你说的“其他模块是好的”(它们没有被调用,所以是好的。)如果分层设计,那么这一层都是好的。 4、......
这样,通信程序所在的那一层,工作不正常了怎么办?基本不用程序员操心。系统(内核)工作还正常,系统心跳还在!每次系统脉搏都会使系统进入中断,中断程序是系统刷新函数,任何崩溃的当前子层在中断返回之后都将恢复正常。除非你驱动程序不完善/硬件出了问题。 5、要中断程序返回到用户程序的希望位置,是很简单的手段。这虽然是违规了——用户直接干预系统工作,可能会造成其他不稳定因素,但是凭你对系统工作的了解清晰度应该有这个把握。
|