论文部分内容阅读
在普适计算环境下,应用程序可以通过传感器来获取的环境上下文信息,并以此自动调整自身行为,为用户提供个性化服务。然而,由于传感器误差以及数据传输失效等因素,上下文信息并不一定准确,这就导致了上下文一致性错误问题。不一致的上下文信息可能会损害应用程序的正常运行,降低服务质量,甚至导致程序崩溃,因此需要被及时的检测和修复。通常,上下文信息由应用中间件管理,中间件会部署一致性约束来定义环境上下文信息必须具备的属性。当上下文信息发生变化时,中间件会对一致性约束进行检测。一旦某条一致性约束被违背,中间件就会意识到一致性错误产生,并且可以根据情况选择恰当的修复策略。这个过程称为环境上下文一致性错误检检测和修复,或者简称为一致性检测和修复。传统的一致性检测方法是,每当上下文信息发生任何变化时,与之相关的所有约束都需要进行检测,以发现潜在的一致性错误。然而,这种做法会导致大量的误报,很多被检测出来的一致性错误实际上并不是由不准确的上下文数据导致,而是由于在不恰当的时机进行一致性检测而引发的,我们将其称之为“一致性错误冒险”,简称为“冒险”。这些冒险很快就会自行消失,不会对应用程序运行造成任何影响,因此对一致性错误冒险的检测和修复是没有必要的,只会浪费计算资源。在某些情况下,检测和修复冒险甚至会影响程序的正常运行,因此应当加以避免。一致性错误冒险与真实的一致性错误没有本质的不同,都是由一致性约束没有被满足而导致的。其区别仅在于是否会在短时间内自行消失。因此,一个一致性错误在刚刚检测出来时,中间件通常无法判断它到底是真正的一致性错误,还是一个误报。本文针对这种冒险进行了完整的研究,分析了冒险的危害和成因,并提出了自动的一致性错误检测调度算法来抑制这类冒险。本文的主要发现是,这类误报的产生通常伴随着某些特定的上下文变化模式。通过挖掘这些上下文变化模式,一致性错误的检测可以被重新调度,以抑制误报的产生。经过实验验证,本文中提出的调度策略可以有效的抑制90%以上的一致性错误误报,并且能保证绝大部分的真实的一致性错误被及时检测和修复。