首页 > 范文大全 > 正文

动态无线传感器应用模拟系统设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇动态无线传感器应用模拟系统设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:本文从多线程模拟思路出发,通过无线传感器结点的独立通信过程,模拟传感器网络基本业务流程,包括结点通信、信息收集、结.最移动和休眠等基本功能。本系统使用Java平台,采用线程池与语义解释器模式提出高效的解决方案。

关键词:多线枉模拟;语义解释器;传感器网络

中图分类号:TP212 文献标识码:A 文章编号:1006-4311(2012)02-0186-02

1 本文思路与研究现状

目前无线传感器网络作为新兴技术,受到越来越多人的关注。但是可以各类模拟程序并不能完全满足用户的各类需求,商业模拟软件往往庞大而且费用较高。网络模拟常用的NS2只能在Linux和unix下运行(在Windows下只能使用虚拟机),而且只善于做低层协议的模拟,在应用层的模拟设计较为困难且不便,所以我们需要一种简单易用而免费的,可跨平台的,侧重于应用层模拟功能的模拟系统。

2 底层通信模块设计思路

模拟传感器结点的分布式流程,结点的独立通信是其中最重要的一环,每个结点需要独立的发送消息和监听消息。如果使用传统的编程方法,是无法做到结点通信的独立性的,所以我们将每个结点作为独立的通信单元,使用多线程模型控制通信过程。

我们采用了一种灵活的设计方法,采用目共享通信模块的方法来模拟底层通信。这种方法可以根据模拟环境的硬件水平和模拟要求灵活调节线程池的规模,在系统开销和并发性上进行平衡,以适应更多的情况。这类方法也有两种思路:

第一种是为线程配备线程池,流程线程为相对短小的处理线程,结点发送消息时,直接由线程池中空闲的监听线程接收消息,并交由结点处理。这种方法基本思想就是创建一个容纳线程的容器(少于实际需要的线程),每当请求到来的时候,如果容器内没有空闲的线程,而且总线程数未到达容器上限时,创建线程来处理请求,当流程结束将线程并不直接销毁,而是回收到线程池中,改为空闲状态等待下一个到来的请求。当有请求到达时,而线程池内所有线程都处于工作状态,而且数量已达到上限时,请求将被阻塞,等待直到出现空闲线程。

第二种方法也需要一个缓冲区是存放消息,不同于第一种方法的是不需要线程池来控制线程的数量,而是打开固定数量的循环监听线程,持续监听队列中的消息,一旦发现队列中存在消息就将其取出交给结点处理,如果不存在则进入阻塞状态,所以需要一个阻塞队列作为缓冲区。阻塞队列不同于一般的队列,可以自动完成同步工作,即同时有多个请求队首数据的线程到达时,会自动互斥,将数据分配给请求线程,而当队列为空时,请求数据的线程会自动阻塞。

考虑到无线传感器结点的特点与这两种方法的优缺点,我们采用建立二级缓存结合两种方法建立模拟通信模块。首先消息的发送过程只是将数据包放至第一级缓存中。在消息的传递上我们采用阻塞队列作为线程之间通信的渠道。结合监听器的线程池模型,这里我们采用单队列多服务台策略处理结点之间的消息通信。即根据结点数目与其他因素创建一定数量的搜索线程,运用上面提到的第二种处理方式,将一级缓存中的数据取出进行拆包和再封装,将处理后的数据包投放至二级缓存中(如果运用了分布式模拟模式,这一步会将数据包分别分发至各个模拟客户端机)。然后,由一个单独的提取线程将数据从二级缓存中取出,交给负责处理消息业务流程的线程池,由线程池控制创建实际的业务流程线程,如果线程池内线程全部处于工作状态则阻塞提取线程。最后由业务流程处理消息。完成通信过程。

3 结点功能性组件设计

在大规模的结点模拟过程中,无疑结点对象是整个模拟程序占用内存最多的部分,随着结点数量的增加,内存的占用也会大幅度增加。所以有效控制结点对象的内存消耗是降低空间复杂度的最重要的一步。

考虑结点的组成,结点对象内部主要由静态字段和功能性模块组成。结点的功能性模块有每个模拟程序实体采用单例模式创建。在所有结点之间共享,实现享元设计模式,有效地节省内存开销。主要的功能性模块有三个:监听器、消息识别器和消息处理器。

监听器内置一个一级缓存区,负责监听任何发送至结点的消息包,然后存放至缓存区内。消息包是结点通信的基本单位,里面封装了消息发送方与接收方的地址与消息数据。一个模拟实例共享一个监听器,也就是说所有结点的通信包都存在在一个缓冲区呢。为了节省存储空间,每个结点发送的消息包,无论是发送至单个结点或是多个结点,都共享一个消息包。

消息识别器内置一个有固定数量线程的消息识别线程组。消息识别线程负责识别一级缓存区内的消息包内的地址信息,并将消息包拆为消息数据,如果采用了多主机分布式模拟方式,将消息数据分发至目标结点所在主机的消息处理器内的二级缓存区内。

消息处理器里面提供了二级缓存功能和一个消息处理线程池。消息处理器自身不断从二级缓存内提取消息数据,交给线程池内的消息处理线程然后返回继续提取。消息处理线程根据事先设定好的消息头的处理命令,对消息进行处理然后返回线程池内待命。

4 语义分析器模块

本系统提供了用户自由设计结点工作流程的功能,以便于传感器网络的应用层等上层协议的模拟工作。所有程序的业务流程都可以分解为由命令组成。无线传感器结点的业务流程和监听触发器也可以分解为命令。本模拟程序就是设计了用户自定义命令的功能。我们把组成一个业务流程的命令称为命令集。而命令集由若干命令构成,而命令是业务执行的基本单位。

为了实现这样的功能,我们运用解释器模式设计了一套抽象的语义表达式,代表一个命令。我们将命令分为三大类:条件性命令,循环命令和元命令。条件性命令相当于程序语言中的if语句,循环命令相当于while语句,一个条件性命令和循环命令由触发条件和一定数量的元命令组成,所有类型的命令均可以相互嵌套。而元命令代表真正的业务内容,相当于一个动作,如发送消息、控制结点休眠、设置某些字段或变量的值。元动作由系统给出,包括各类结点和运算功能,能够满足大多数模拟工作的需要。

作为一个完整的元命令必须要有实施动作的主体与动作内容,有时还需要动作客体。在无线传感器网络中命令的主体往往是结点,所以在设计过程中命令的运行都需要结点参数。而其他的动作客体或是对象需要在创建或运行命令时指定。我们规定元命令的参数不是任意的对象,是系统中自定义的一种实体对象。实体对象可以是基本数据类型,如整数,浮点,布尔等,也可以是是结点对象,另外用户可以按照一定条件白定义结点组或是某种集合,但范围由模拟程序限定,不能使用程序规定以外的对象。

在设计上,我们采用模式设计所有实体对象。在每个实体对象内部设置一个字段代表他的模式类型,每个实体对象在实际需要时才会返回实际内容,根据创建模式的不同,在返回实际值时采用不同的获取方式,如常量模式则从自身内部获取,而变量模式则会从变量列表中读取数据。

5 结语

本系统通过内存的共享机制大限度地降低了多线程程序对系统资源的消耗,通过解释器模式使得用户可以自由设计结点的业务流程,并提供了丰富的元命令组件有相当的灵活性。