基于驱动程序的协议栈设计

基于驱动程序的协议栈设计

ID:23795622

大小:50.50 KB

页数:6页

时间:2018-11-10

基于驱动程序的协议栈设计_第1页
基于驱动程序的协议栈设计_第2页
基于驱动程序的协议栈设计_第3页
基于驱动程序的协议栈设计_第4页
基于驱动程序的协议栈设计_第5页
资源描述:

《基于驱动程序的协议栈设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于驱动程序的协议栈设计

2、第1每一层被作为一个单独的任务,外加任务间通信机制负责传送数据和控制包上下通过协议栈,程序设计者负责定义层与层之间的接口和一个应用程序接口(API),以利于应用程序员传送和接收数据。在这里存在几个效率不高的:首先,正如图1中点线所说明的,当包在应用程序、上层的通信协议,以及网络接口的设备驱动程序之间交换时,下层的操作系统正忙于上下文切换,每一次实时操作系统挂起其中一个任务,恢复执行另一个任务,时间都浪费在存取任务上下文中,考虑到每一个包无论是发还是收,都要通过协议栈的每一层,上下文切换的确造成了巨大的浪费。另外,当数据和控制包在应用程序

3、任务和网络接口之间流动时,包含此类信息的缓冲区必然重复在任务间通信队列加入或删除。然而,这个系统开销是很大的,这本身是由于系统在队列操作时必然包括需与中断和上下文切换隔离的临界区。因此,不仅时间浪费于队列操作,而且整个系统对一些重要的事件例如中断的响应变得延迟。2基于驱动程序的方法另外一种选择是将协议栈各层置于实时操作系统之中,图2说明了基于此种方案,同样的三层间通信协议是如何实施的。两者之间的显著区别在于:各个协议层是作为驱动程序模块,而不是任务来实现的。500)this.style.ouseg(this)">另外一个改变在于:协议栈之上还有一个网络服务模块。

4、加入这个模块的目的在于将与协议无关的网络特性抽象化。也就是说,它将应用程序设计者用来在协议栈间收发数据的应用程序接口(API)标准化,例如:你的嵌入式系统可能需要同时支持基于调制解调器接口的PPP连到一台远程计算机和一个红外接口用来与本地计算机通信。然而程序设计者不必为两个事件各自编程,它只需用网络服务模块提供API与其它计算机进行通信,唯一的区别在于通过哪个网络接口而已。基于驱动程序方式的一个显著优点就在于上下文切换的次数仅仅是基于控制台应用程序的函数,并不基于协议层的数量。这样一来就可以减少实时操作系统保存和恢复任务上下文的次数,因而空出时间作更有意义的事,

5、例如执行应用程序代码。另一个好处在于,数据和控制信息更简单的在层与层之间传输,因为所有的协议层都处于同一个上下文中,所以相关的数据结构自动地为上下层所接受,结果你不必把他们在任务间队列中传送,由此产生的是,同时也避免了那些临界区系统由此可改进中断和优先级任务的响应时间。3缓冲区拷贝缓冲区拷贝效率不高的第一个潜在因素在于:当数据在层与层之间传输时,数据缓冲区的分配、拷贝和释放,这与协议栈的结构无关,仅与缓冲区本身的结构有关。一般来说,有两种常用的方式用于协议栈层与层之间传送数据,如图3所示。500)this.style.ouseg(this)">然而,这两种方式均

6、有缺陷,我们假设,应用层有一些数据需要传送,通常我们把它称作消息,消息需被送至协议栈的最底层,因为在缓冲区中没有多余的空间来存放头尾信息,而协议层必须给数据本身加上头尾信息,协议层或分配一个足够大的缓冲区得以容纳消息本身和头尾信息,或分配两个小缓冲区,一个用于头信息,一个用于尾信息,然后用指针将三个缓冲区链接起来。众所周知,每一层加入自己的头尾信息源于上一层传来的信息。因此,一个包在自上而下通过网络时,必须重复这一个过程许多次,时间被消耗于内存的分配之中(而自下而上则好得多,因为下层的头尾信息可以被上层忽略)。这种拷贝方式同时伴随着越来越大的消息,释放老缓冲区。

7、链接方式虽然不涉及多余的拷贝,但是却将传输包的设备驱动程序代码复杂化。另一种替代的方式与基于设备驱动程序的方式相当吻合,如图4所示。每次当协议栈创建或改变时,网络服务模块执行一个查询以确定整个协议栈的头、尾信息和最大传输单元要求,这样一来当应用程序向协议栈发消息时,网络服务模块相应地分配一些足够大容纳整个协议栈头尾信息的缓冲区,每一层仅仅将头尾信息填充至这些缓冲区,而不需内存分配或拷贝,这一机制对于性能有显著的改善。重传缓冲区另一个效率不高的原因在于,协议层提供确认与重传机制,一个可靠的协议层的实现通常包括为每个包分配一个重传缓冲区,将包的内容拷贝至重传缓冲区中

8、。如果远程系统的同一层确认了正确接收,重传缓冲区将被释放,然而,如果一个“NACK”发生,协议层重传缓冲区的内容,同时再分配一个重传缓冲区,拷贝内容至重传缓冲区。500)this.style.ouseg(this)">如果已经发出的包可以被协议层标记为“Unmarked”或“Reserved”的话,上述机制就可被取消,这种情况仅保存一个指针而不拷贝。当设备驱动程序完成传送包并试图释放缓冲区,缓冲区系统确认此缓冲区保留,并不释放包,仅仅将它标记为“已传输”,当相应的协议层收到确认(ACK)之后,就把包去掉标识,并且释放缓冲区,通过把这一特性固化至网络服务模块中,整

9、个协议栈的效率将大大提高

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。