网络栈和通信层(COMM)
发布时间:2012/4/3 0:34:18 访问次数:1089
MOS网络栈作为一个或多个用户级SFH484-2 E7517线程执行(图6-2),网络栈支持网络的第三层及第三层以上,如路由层、传输层和应用层(MAC协议由通信层提供)。网络栈的不同层可以执行在不同的线程中,也可以所有层均由一种线程实现,这取决于性能与扩展性。网络栈的各层都被设计成了最小化内存缓冲区,一个线程内,一个数据包的数据负载通常在通过网络栈的所有层。通过采用这种机制,网络栈避免了数据复制,这和TinyOS的零复制方法有异曲同工之妙。
MOS的通信层为通信设备驱动程序提供统一的接口(如串口、USB或者无线通信设备),如图6-3所示。COMM层也负责实现管理数据包缓冲和同步功能。网络线程或应用程序线程通过4个函数与通信设备进行交互:com_send、com recv、com_mode.
com ioctl。
当调用com_send时,发送线程(可能是网络线程,也可能是应用程序线程)传递指针给数据包缓冲区( comBuf),COMM层对发送线程进行阻塞,将指针传递给指定的设备驱动,而设备驱动程序由线程实现,典型的实现便是以中断驱动状态机的形式,该状态机通过硬件设备优先发送数据包,当状态机达到完成状态时,发送线程得到恢复。
尽管发送线程可以是同步的,接收线程必须在后台进行(即使网络线程或者应用程序线程并没有立即执行com—recv调用)。接收的数据包内存管理由COMM层自己负责(COMM层拥有许多comBuf)。设备驱动器可以向COMM层请求comBuf, COMM层批准后将comBuf分配给那台设备。一旦获得一个comBuf,设备驱动程序可以将接收到的数据包填进去(这由中断状态机来控制)。当数据包接收完毕,设备驱动程序调用com_swap_bufs将comBuf清空,COMM层对历有数据包按照顺序进行缓存。当一个线程调用com recv时,它将被阻塞,直到指定设备获得一个完整的comBuf(当此时将返回指向comBuf的指针)。如果接收线程拥有COMM层分配的comBuf,则必须在它结束时调用com_free_buf对comBuf进行释放,这样,就可以重新利用这个comBuf。对于接收线程而言,额外调用释放缓冲区是十分复杂的工作,但是,这使得COMM层提供真正的零复制服务。除此以外,因为COMM层完全是中断驱动的,COMM层也是闲时零轮询(可以节约能量)。
除发送和接收外,COMM层提供模式mode调用和ioctl调用,mode调用用来调节设备能量的高低,而ioctl调用用于对设备的I/O通道进行管理。
MAC层协议在无线电通信的设备驱动中实现(驻留在COMM层)。MAC层负责控制诸如网络占空比、无线电通信何时休眠以节约能量、传输功率控制等。
MOS网络栈作为一个或多个用户级SFH484-2 E7517线程执行(图6-2),网络栈支持网络的第三层及第三层以上,如路由层、传输层和应用层(MAC协议由通信层提供)。网络栈的不同层可以执行在不同的线程中,也可以所有层均由一种线程实现,这取决于性能与扩展性。网络栈的各层都被设计成了最小化内存缓冲区,一个线程内,一个数据包的数据负载通常在通过网络栈的所有层。通过采用这种机制,网络栈避免了数据复制,这和TinyOS的零复制方法有异曲同工之妙。
MOS的通信层为通信设备驱动程序提供统一的接口(如串口、USB或者无线通信设备),如图6-3所示。COMM层也负责实现管理数据包缓冲和同步功能。网络线程或应用程序线程通过4个函数与通信设备进行交互:com_send、com recv、com_mode.
com ioctl。
当调用com_send时,发送线程(可能是网络线程,也可能是应用程序线程)传递指针给数据包缓冲区( comBuf),COMM层对发送线程进行阻塞,将指针传递给指定的设备驱动,而设备驱动程序由线程实现,典型的实现便是以中断驱动状态机的形式,该状态机通过硬件设备优先发送数据包,当状态机达到完成状态时,发送线程得到恢复。
尽管发送线程可以是同步的,接收线程必须在后台进行(即使网络线程或者应用程序线程并没有立即执行com—recv调用)。接收的数据包内存管理由COMM层自己负责(COMM层拥有许多comBuf)。设备驱动器可以向COMM层请求comBuf, COMM层批准后将comBuf分配给那台设备。一旦获得一个comBuf,设备驱动程序可以将接收到的数据包填进去(这由中断状态机来控制)。当数据包接收完毕,设备驱动程序调用com_swap_bufs将comBuf清空,COMM层对历有数据包按照顺序进行缓存。当一个线程调用com recv时,它将被阻塞,直到指定设备获得一个完整的comBuf(当此时将返回指向comBuf的指针)。如果接收线程拥有COMM层分配的comBuf,则必须在它结束时调用com_free_buf对comBuf进行释放,这样,就可以重新利用这个comBuf。对于接收线程而言,额外调用释放缓冲区是十分复杂的工作,但是,这使得COMM层提供真正的零复制服务。除此以外,因为COMM层完全是中断驱动的,COMM层也是闲时零轮询(可以节约能量)。
除发送和接收外,COMM层提供模式mode调用和ioctl调用,mode调用用来调节设备能量的高低,而ioctl调用用于对设备的I/O通道进行管理。
MAC层协议在无线电通信的设备驱动中实现(驻留在COMM层)。MAC层负责控制诸如网络占空比、无线电通信何时休眠以节约能量、传输功率控制等。