1.东莞成电智信信息科技有限公司广东东莞523808;2.电子科技大学广东电子信息工程研究院广东东莞523808
摘要:未来在大多数物联网应用场景中,将答应运用者依据自己的需求复用当时已布置的物联网节点设备.然后要求节点设备具有对本地软件程序重编程的能力.可是,现有重编程办法遍及存在着传输和重组开支过高的问题.在工程实践中,经过运用大容量的扩展存储单元晋级代码,能够有用防止因为传输代码引起的传输开支.因而,当需求对物联网节点软件频频晋级时,重编程的能量开支将首要取决于在节点本地读写代码引起的重组开支.
关键词:面向物联网;重编程;存储优化;办法研讨
1问题描绘
在我们的前期研讨中,代码段是以函数为单位进行缓存.当函数被替换时,需求节点自适应地匹配适宜的存储空间,放入相应的函数.可是随侧重编程次数的增加,这种办法会引起代码碎片化的问题,并终究导致缓存运用率下降.为了量化缓存的碎片化程度,我们界说碎片化程度为
我们运用EasiCache随机接连对TelosB节点上的软件晋级.TelosB节点装备有一块具有10KBRAM以及48KB内部Flash的MCU.给定RAM缓存区巨细为8KB,图1给出了EasiCache在不考虑对缓存空间调整的前提下,接连25次晋级,每次晋级时的碎片化程度.从图1中能够显着看出,当重编程次数超过5次今后缓存的碎片开端增加.经过23次今后,缓存区的碎片化程序现已达到了30%以上.这意味着许多函数不能再被缓存到RAM中.只能经过从头调整缓存中一切函数的方位消除碎片.此外,在实际履行代码缓存的过程中,被替换出缓存区的函数将被尽量保存到内部Flash的原始方位上.可是如果函数在被缓存期间尺度增大,EasiCache学习了文献的做法,直接将尺度增大的函数放入主程序(.text段)的结尾闲暇空间,以防止对其他函数方位的调整.可是内部Flash的容量是有限的,跟着软件晋级次数的增加,如果结尾闲暇空间消耗殆尽,必然需求从头调整内部Flash中一切函数的方位.图2给出了当接连晋级节点软件时,内部Flash的读写字节数.在接连晋级过程中,因为只要被替换出的函数需求回写到内部Flash中,因而对Flash的读写次数较少,可是如果发作结尾空间竭尽的状况(如第9次和第20次晋级),对内部Flash的读写数量将急剧增加.
图2接连晋级场景的写入内部Flash的字节数
为此,我们提出一种依据函数分页的存储优化办法———AdvCache,运用分页的思维,在下降碎片空间的一起,尽量防止因为回写函数导致的内部Flash空间耗尽的状况,削减对内部Flash的读写操作.
2相关作业
前期的重编程办法较少考虑能量开支问题或只是以直接办法来削减对网络全体的担负.例如需求一起将完好的代码镜像和软件晋级协议加载到节点之上.针对缺乏,经过预装重编程协议的办法削减更新时节点失效的时刻.在MobileDeluge中,引进移动Deluge基站,确保待晋级节点坐落基站一跳之内,以进步代码传输链路的质量.MNP中考虑了多跳传输办法对软件晋级的影响,并供给了一种重编程建议方的挑选算法,尽量挑选街坊节点作为更新建议方,削减程序镜像被转发的次数.CORD则应用了一种二阶段(twophase)战略来下降能量开支.新镜像首要被分发给在第1个阶段构成的节点调集,然后在第2阶段,由这个调集中的节点作为建议方向剩下节点转发新镜像.别的,针对物联网感知网络存在的离散性和动态性,一些研讨者提出了依据编码的重编程办法,运用增加的冗余数据,确保单次传输的成功率,防止重传的发作.在这些依据编码的重编程办法中,办法之间的差异首要是采用了不同的编码原理或许编码办法.可是上述办法因为需求传输未经处理的程序镜像,乃至还要加入其它冗余编码,都存在着较为严重的能量开支问题.为了下降对传感器节点重编程过程中的传输开支,一些研讨引进了紧缩算法,研讨了针对节点设备的自适应紧缩算法.则直接运用了GZIP对镜像进行了紧缩.相应地,紧缩程序镜像意味需求由节点本地完成对代码的解压,必然带来很多计算开支以及存储空间缺少问题.现在,针对重编程过高的能量开支,已有研讨者提出了增量式重编程,其中心思维是只是经过传输新旧代码镜像的差异代码来削减传输代码量.依据完成的手法不同,它们首要能够分为两类:一类是以进步代码类似度为手法来削减差异代码量.如Zephyr和Hermes企图经过固定函数和大局/静态变量的引证地址来进步新旧代码镜像的类似度.将软件克隆检测技能应用到新旧软件的监测上,最大极限地进步代码类似度.提出了一种晋级感知(update-conscious)编译器.因为可履行代码的大部分内容是对MCU通用寄存器履行的操作,晋级感知编译器的中心是在生成新镜像之前,经过读取原始镜像内容,对新镜像各个函数中通用寄存器的运用做出调整,以此进步新旧镜像的类似度.另一类,则是以设计更加有用的差异代码生成算法为手法,尽量匹配新旧镜像中的相同代码段.学习了Rsync的思维,提出了RMTD算法,该算法学习了Rsync算法思维,时刻复杂度从O(n3)降到了O(n2),但空间复杂度则达到了O(n3).因而在处理尺度稍大的镜像文件时,即便关于通用PC机也是很大的担负.Dong等人整合Zephyr和RMTD的长处提出了R2以及更加完善的R3.相关于Zephyr,R2和R3运用了相对地址无关代码,行将一切的引证地址都初始化为零来坚持新旧镜像的类似度.一起对RMTD算法进行了改善,成功将空间复杂度降至O(n).可是,增量式的重编程办法并没有将新镜像传输到节点.因而节点需求依据现已保存的原始镜像重组新的代码镜像.在这一过程中,不合理的代码重组办法可能引起很多对节点上的非易失性存储单元的读写操作,然后增加全体的重编程开支.因为现在大多数已知的重编程研讨首要是源自于传统的传感器网络,传感器节点上履行的使命一般不会常常的调整,根本不必考虑在频频软件晋级的状况下怎么合理的对节点代码进行重组.例如在增量式重编程办法Zephyr中,虽然研讨者在试验的最终对非易失性存储单元的读写能量开支进行了测验,而且对当时的代码重组办法提出了质疑,但没有进一步打开研讨.Kim等人提出了TinyModule-Link办法,该办法将新镜像以函数为单位放入了RAM中重组,重组之后新函数需求回写到内部非易失性存储单元保存.此外,Koshy和Pandey企图经过给每个函数结尾增加溢出空间(slopregion),支撑对保存在内部非易失性存储单元中的原始函数进行直接修正.这样做的好处是当函数被更新后其代码量可能增加,而这部分增加能够被放入溢出空间中.在别的一些研讨中,即便提出运用易失性存储单元保存频频晋级的代码段,其意图也不是朴实为了下降能量开支.提出了一种运用RAM保存更新代码的办法Elon.该办法的提出是为了处理因为电池电压下降导致的对非易失性存储单元读写操作失利的问题.为此,Dong等人测验将最有可能晋级的函数放入不受电压变化影响的RAM中保存.当需求更新时,直接运用新的函数替换原始函数.从严厉意义上讲,Elon并不是一种增量式重编程办法;而且,被放入RAM中的函数实际上是必须由开发者在开发阶段指定,当节点布置今后无法改动,不涉及缓存功用.
参考文献:
[1]郭淳学,赵文银.未来物联网及其核心技术[J].中国科技产业,2016,(10):57-59.
[2]王超.物联网工程“Zigbee协议与编程”教学改革探讨[J].吉林省经济管理干部学院学报,2016,30(03):62-64.
[3]杨金辉.物联网在特种设备检验中的应用分析[J].中国新技术新产品,2016,(10):34-35.
支持基金:获得广东省科技计划项目(项目编号:2013B040300001)资助。