摘要:提出一种新的协议栈设计思路——基于驱动程序的协议栈设计,在对比传统的协议栈设计方式——基于任务的协议栈设计的基础上,说明了此种方法的优势所在,并给出了协议栈设计的基本框架。
关键词:设备驱动 协议驱动 操作任务 协议栈
基于驱动程序的协议栈设计,相比于传统的基于任务的协议栈设计来说有两点好处:(1)效率更高;(2)对于有多个协议栈的系统来说,有更大的兼容性。
1 基于任务的方式
在我们比较两种设计方式的技术细节之前,我们必须了解它们。传统的设计方式包括将协议栈置于实时操作系统或内核之上,但是大多数实时操作系统不提供网络互连的框架。所以,协议栈的设计者们不得不利用实时操作系统提供的机制——Task。图1说明了如何利用任务来实现一个三层间通信的协议。
每一层被作为一个单独的任务,外加任务间通信机制负责传送数据和控制包上下通过协议栈,程序设计者负责定义层与层之间的接口和一个应用程序接口(API),以利于应用程序员传送和接收数据。
在这里存在几个效率不高的来源:首先,正如图1中点线所说明的,当包在应用程序、上层的通信协议,以及网络接口的设备驱动程序之间交换时,下层的操作系统正忙于上下文切换,每一次实时操作系统挂起其中一个任务,恢复执行另一个任务,时间都浪费在存取任务上下文中,考虑到每一个包无论是发还是收,都要通过协议栈的每一层,上下文切换的确造成了巨大的浪费。另外,当数据和控制包在应用程序任务和网络接口之间流动时,包含此类信息的缓冲区必然重复在任务间通信队列加入或删除。然而,这个系统开销是很大的,这本身是由于系统在队列操作时必然包括需与中断和上下文切换隔离的临界区。因此,不仅时间浪费于队列操作,而且整个系统对一些重要的事件例如中断的响应变得延迟。 大功率电感厂家 |大电流电感工厂