论文部分内容阅读
随着无线通信技术、电子技术以及微机电技术的飞速发展,物联网作为连接物理世界与信息空间的桥梁越来越多的融入到我们的日常生活中。通过物联网相关技术,真实的物理世界将被网络化、信息化、智能化,物理世界中存在的物体也被映射到虚拟的信息空间中,从而实现任何时间、任何地点和任意物体之间的交互,即无所不在的计算以及无所不在的控制。然而在当前的物联网应用中,网络通常由具体的单位或个人所拥有,其上构建的应用也是由网络的拥有者根据自己的需求指定。换言之,网络的拥有者与应用的构建者是统一的。随着物联网的进一步发展,可能导致两个具有因果关系的趋势即:专用私有网络向公用共享网络的转化以及网络拥有者与应用构建者的分离。在这两种趋势下,如何从降低编程难度的角度出发,通过简单的编程手段高效地利用普适的物联网是当前物联网研究的重点内容之一。 当前的研究表明,物联网感知网络中的宏编程(macroprogramming)技术通过将网络中的功能实体进行抽象,极大降低了编程的门槛以及编程的复杂度。在实际物联网宏编程技术研究过程中,由于受到物联网设备之间的异构性、感知网络的动态性以及感知节点低功耗需求等多方面因素的影响。因此针对物联网的特点,面向物联网的宏编程技术亟需从以下三个方面展开研究:(1)从软件编程角度,如何降低编程的难度和复杂度,帮助应用构建者以较少的编程代码量在设备异构的物联网中构建复杂的应用;(2)从应用程序执行角度,如何提高应用程序在物联网前端感知网络中执行的稳定性;(3)从可执行代码加载角度,如何以较低的能量开销完成对物联网资源受限设备的代码更新。 本文的创新性工作主要体现在以下三个方面。 1.针对异构物联网编程复杂的问题,本文提出了一种支持资源运行时组合的编程抽象方法EasiSMP,其核心思想是将宏函数的定义开放给应用构建者,由熟悉异构设备的应用构建者通过统一的编程抽象方法实现设备基本功能的宏函数定义,后来的应用构建者基于前人构建的宏函数可以完成对设备以及其上功能的复用,以此来消除网络中设备异构性对于编程的影响。然而在具体实现上,需要考虑以下两方面的问题:(1)从降低编程难度的角度出发,如何通过统一的编程抽象在编程层面屏蔽设备异构性;(2)从降低编程复杂度的角度出发,在屏蔽异构性的基础上,如何对现有设备或功能实体实现更高层面的复用。针对第一个问题,EasiSMP将面向资源的软件架构风格思想融入感知网宏编程技术中。将网络中的功能实体抽象为可以通过URI访问的虚拟资源,并通过虚拟资源管理器实现对虚拟资源的运行时管理。针对第二个问题,EasiSMP通过设计合理的编程范式,在编程阶段定义对虚拟资源的复用行为,在运行时阶段由资源管理器完成对资源的动态组合,从而实现了区别于传统的代码复用和设备复用的应用层面复用。换言之,应用构建者通过运行时的资源组合,实现了宏函数的运行时定义。通过对具体的应用程序分析表明,应用构建者能够以较少的代码量构建复杂应用。与现有针对物联网的编程抽象方法相比,EasiSMP在部署开销方面较传统方法降低了27%。 2.针对物联网前端感知网络动态性导致的应用程序执行不稳定问题,本文提出了一种基于时空属性的任务迁移方法EasiSNP。该方法的核心思想是由网络自主的完成任务在不同节点上的迁移,以替换执行任务节点的方式提高应用程序整体执行的稳定性。在传统编程方法中,针对感知网络的动态性,一般需针对每个节点,设计复杂的冗余策略来确保单个任务的可靠执行,进而提高应用程序整体执行的稳定性。这不仅会加重应用构建者的编程负担,而且需要考虑各种突发情况定制专门的策略。在宏编程的相关技术中,可供参考的解决思路是通过定义某些任务执行需要满足的条件,由网络完成任务在不同具体设备之间的迁移。考虑到感知节点在存储和计算资源方面受到的严格限制,复杂任务迁移过程可能并不适用。而另一方面,由于物理世界中事件的发生通常与时间和空间密切相关,为此EasiSNP设计了基于时空属性的任务定义方法。并通过一套任务自适应加载机制,实现了任务以任务块(task block)的形式在不同感知节点上的迁移,尽量消除网络动态性给程序执行带来的影响。实验表明,EasiSNP在存储开销和通信开销方面能够适用于资源受限的节点,此外,我们将EasiSNP应用于太湖蓝藻打捞感-执系统后,将应用程序执行不稳定导致的数据延时下降了32%。 3.针对代码更新过程中的重组能量开销过高的问题,本文提出了一种基于重组优化的代码更新方法。问题来自于在使用增量式代码更新的过程中,需要修改原始代码镜像并保存新镜像,这两个步骤会引起大量对非易失性存储的读写操作。为了减少这种读写操作,我们分别对重组过程中的代码修改和代码保存进行了优化。首先,针对代码修改,我们提出了基于原地修改的代码更新方法EasiLIR,其核心思想是直接对保存在微控制单元(Micro Control Unit,MCU)内部非易失性存储单元上的代码进行修改,从而避免对外部非易失性存储单元的读写操作。另一方面,针对多次原地修改后引起的更新过于复杂问题,EasiLIR采用一种基于分段修改的重建策略,利用修改代码的局部性,通过一次性对MCU内部非易失性存储单元的读写操作完成新镜像的重建。实验表明,在基于故宫文物监测系统代码更新场景中,与没有考虑代码修改过程的代码更新方法R2相比,EasiLIR的代码更新开销下降了58.7%。其次,由于频繁代码更新过程中保存代码,会引起大量对MCU内部非易失性存储单元的读写操作,本文提出了一种针对频繁更新代码的缓存方法EasiCache,其核心思想是利用不同存储元器件的读写功耗差,使用低功耗的易失性存储单元RAM保存代码。我们设计了针对频繁更新代码的替换算法。实验表明,在一个连续更新的场景中,EasiCache与没有考虑缓存策略的增量式代码更新方法Tiny Module-Link相比,其对MCU内部非易失性存储单元的读写量下降80%。