分类: 嵌入式
2012-10-13 21:54:05
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 调度