论文部分内容阅读
相比传统的标量传感器节点,多媒体传感器节点能够处理和发送更加复杂、数据量更大的多媒体信息(例如图像、视频、声音等),从而使得多媒体传感器网络可以满足更加复杂的应用需求。传感器节点中多媒体数据的本地数据处理能够避免对大量多媒体数据的网络传送,大大降低了网络通信的带宽需求和能量开销。多媒体传感器节点所采集的图片或视频大小可能远远超出了普通低功耗传感器节点所配置的低功耗微处理器的内存大小。本文提出了使用虚拟内存来为节点程序提供大容量的内存,从而支持多媒体传感器节点上大量多媒体数据的处理。由于缺乏内存管理单元的辅助,虚拟内存系统需要对节点程序的汇编代码进行转换,将对内存进行读写的指令用人工定制的高效的汇编代码替代,从而实现对虚拟内存的透明访问。 虚拟内存使用Micro-SD或者NANDFlash作为二级存储,从而为应用程序提供了大容量的地址空间。NANDFlash在读写速度和能量效率上相比Micro-SD卡有较大的优势,但是由于NANDFlash的读写特性比较特殊,无法直接进行随机的按块访问。我们提出了一个面向虚拟内存二级存储的NANDFlash翻译层,将NANDFlash封装为可随机访问的块设备,实现了高效的NANDFlash读写,并大大降低了NANDFlash的擦除次数,延长了NANDFlash的可用时间。另外,我们提出了两种NAND页大小和物理内存缓存块大小的适配方法,使得二级存储访问在不同的缓存块大小下都能进行高效的读写。 为了规避对寄存器上下文的保存和恢复,并充分利用GCC编译器自身的优化能力,我们提出了使用基于C语言代码转换的左值虚拟化的方法,使左值访问能够透明地访问虚拟内存。另外,本文通过记录C语言代码中左值读写时所对应的缓存块来大大降低缓存搜索的开销。 为了找到最适用于当前节点程序的虚拟内存配置,本文提出了一种基于节点程序内存访问轨迹的遗传算法来寻找最优的虚拟内存配置。通过遗传算法进行虚拟内存配置的优化,能够避免繁琐的人工优化,并进一步降低虚拟内存的开销。本文提出了两种开销估计方法来计算基因的适应度。首先,本文使用内存访问轨迹的模拟运行来模仿实际的虚拟内存系统,从而获得较为精确的虚拟内存开销估计。然而这种方法有较大的计算开销,因此本文另外提出了一种基于内存块特征信息的快速准确的虚拟内存开销估计算法。 为了验证虚拟内存系统的可用性,我们对不同场合下的数据处理或传送的开销进行了比较。对于所评估的特定应用和场景,相比数据传输和使用高性能传感器平台两种方法,使用低功耗传感器平台和虚拟内存系统能够获得几倍于其他方法的能量效率。