Chinaunix首页 | 论坛 | 博客
  • 博客访问: 400265
  • 博文数量: 87
  • 博客积分: 1171
  • 博客等级: 少尉
  • 技术积分: 1068
  • 用 户 组: 普通用户
  • 注册时间: 2012-09-19 14:34
文章分类

全部博文(87)

文章存档

2014年(10)

2013年(24)

2012年(53)

我的朋友

分类: 嵌入式

2012-10-13 21:54:05

6 MANTIS 

       MANTIS提供了一种心得多线程OS for WSNs,MANTIS 是一种轻量级的节能的OS,它可以只占有500byte的封装,其中包含 kernel  scheduler 和网络协议栈。太多额key feature 是可移植在多种平台上。

     

     6.1  体系结构

       MOS 是分层体系结构,每层都作为一个曾强型的虚拟机为上层提供服务,

 

 

 

      layer 3:网络协议栈 command Server ,用户级线程

      layer 2: MANTIS  system API

      layer 1: kernel/ Scheduler, Communication Layer (MAC and PHY), Device Divers

      layer 0: Hardware

 

 

      ThE MOS kernell 只处理时钟中断,所有的其他中断都会直接发送的与之对应的硬件驱动上去,当硬件驱动收到一个中断,它发送一个信号,去激活一个等待的线程,这个线程将会处理引起这个中断的事件。

 

      6.2 编程模型

       MOS 支持抢占式多线程,MOS设计为多线程的原因是“一个线程驱动系统,适当的修改threading package 将会取得更好的表现在并发性强的应用中“,传感器内存是受限资源,所以MOS 主张分成两个逻辑层of RAM,在编译的时候为全局变量分配空间,同时将剩下的RAM管理为一个堆,每当一个线程被创建,栈空间由kernel从heap中分配。当线程退出的时候,栈空间会被返回到heap中,线程table是线程的主要数据结构当其被kernel创建的时候,在thread table 每个线程都有一个entry,MOS 静态的为thread table 分配内存,所以可以修改线程的最大数目,线程的最大数目可以在编译的时候作调整,默认值是12,每个thread table entry 由10个字节组成,包括 当前的栈指针,栈边界信息(base pointer and  size),指向线程起始函数的指针,线程优先级,以及指向下一个线程的指针,当一个线程被挂起的时候,它的上下文被保存在栈空间上。每个条目10个字节,默认12个条目,所以缺省的分配空间是120bytes,默认时间片是10ms,在时钟中断的帮助下完成切换,post a semaphore 也可以引起调度。

 

       在MOS的多线程支持是以上下文切换和栈空间 消耗为代价的,  调查显示每次任务切换会话费60 微秒,相比这个花销来说,每次时间片是10ms,所以任务切换的花销还不是很大。另一方面是栈空间分配,默认的栈空间大小是128bytes,并且MICA2 motes( 一种芯片)有4kb RAm,既然MOS内核只占有500bytes,这个空间说明多线程是可以被支持。

 

     MOS 避免使用 二值信号量和计数信号量,一个semaphore在MOS 是一个5字节的结构,在需要的应用中被声明,这个semaphore 结构 包含一个锁或者 count byte along with head and tail pointers.

 

    6.3 调度

 

阅读(769) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~