栈,可以采用大粒度的构件划分方式(如图2所示),即把整个网络协议栈作为一个大的构件,继承预先定义的构件。
(2)如何设计构件接口。要实现(1)所提到的构件的自由替换,必须设计良好的构件接口。所有的构件实现应该继承该接口。设计接口的原则是尽量保持接口的通用性和简洁性。当有新的功能添加时,可以通过继承实现新的接口方便地加入原有的框架,从而实现软件的无缝升级。
(3)提高网络通信的效率。一个高效的通信协议需要满足:1)上下文切换和定时器的轻型完成;2)多个协议具有统一的使用界面;3)在网络设备,核心层和用户层之间有高效的缓冲机制,避免不必要的拷贝。
如果操作系统提供了快捷的上下文切换及高效的进程间的通信,则整个网络协议栈便可以作为一个用户态进程对用户进程提供服务,如果进程上下文切换比较复杂,则整个网络协议栈可以作为动态链接库链入用户进程地址空间,但需要对多进程共享的数据加锁,进行同步访问控制。另外一种选择是将网络协议栈装入内核空间,也可以避免频繁的进程上下文切换带来的系统开销。
因为采用了通用的SOCKET编程接口作为最终提供给用户使用的接口,从而使多个协议具有统一的使用界面。同时,在采用细粒度构件的网络协议栈中,各层协议之间的接口也是精细构造的统一接口,为了避免大量数据的拷贝,需要设计良好的数据结构,同时采取"共享内存"的方法。网络协议各层次间尽量以指针方式传递数据。
构件化的网络协议栈具有以下优点:
(1)
针对不同网络应用的需求,能最大限度地利用领域相关知识进行调整,提高了性能。
(2)底层构件可以在不影响顶层使用的情况下进行修改。
(3)方便用户添加及开发调试新的协议。
该文采用上海科泰公司的CAR构件技术在和欣操作系统上实现了一个构件化的网络协议栈,该网络协议构件既可以加载在内核态,也可以加载到用户态,方便开发调试,有利于开发新网络协议栈,其他开发者采用构件的方法开发出了高效或者针对某特定领域的网络协议栈,可以方便地替换和欣操作系统上原有的网络协议栈。使用构件化的方法开发网络协议栈也可以推广到其他支持构件的操作系统上。
本文关键字:接口 接口电路,单元电路 - 接口电路