Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198705
  • 博文数量: 29
  • 博客积分: 1280
  • 博客等级: 中尉
  • 技术积分: 320
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-22 16:23
文章分类

全部博文(29)

文章存档

2009年(3)

2008年(1)

2007年(1)

2006年(3)

2005年(21)

我的朋友

分类: WINDOWS

2005-10-17 15:27:53

96,97年写的东西.那时候就对网络很有兴趣了,这是第二部分

 

第二章:与缓冲管理

  为了提高协议驱动程序的性能,应用程序在一个协议驱动程序调用中可多个连续DLC命令,只需设置LLC_CCB结构中的pNext成员到下一个LLC_CCB结构,但成员uchAdapterNumber(网络适配器号)必须相同,,如果不同,AcsLan的第二个参数ppBadCcb将指向不能继续执行的LLC_CCB.并且在第一个不能处理的LLC_CCB结构的uchDlcStatus成员将置成LLC_STATUS_CHAINED_DIFFERINT_ADAPTERS,返回值也将变为ACSLAN_STATUS_CHAINED_CCB_IN_ERROR.这里有一些要注意的地方,在链接命令时必须不能链接那些需要上一次完成结果的命令,例如: 不能链接LLC_DLC_OPEN_SAP, LLC_DLC_OPEN_STATION,LLC_DLC_CONNECT_STATION, 因为后两个命令依靠第一个命令的完成.

WIN32_DLC中的缓冲管理与其他的缓冲管理不同,他的缓冲头部在IBMDLC接口中被定义.WIN32DLC缓冲是从一个虚拟内存块中分配一块内存,DLC设备驱动程序为设备驱动程序接收的每一个帧定义缓冲段的大小,它只能是256,512,1024,2048,4096这些大小中的一个,这就可以把不同段的头部所需的无页内存数量减至最少.他也为收到的帧分配最小数目的缓冲数,应用程序也可请求一固定大小的缓冲或一个最佳的缓冲数.

LLC_READ,LLC_DLC_FLOW_CONTROL,LLC_BUFFER_GET命令执行期间,DLC缓冲池是可动态扩展的,即可用缓冲大小小于应用程序指定的最小限度时,然而,系统不能在应用程序指定最大大小后再增加缓冲池.

应用程序可用自己本身的缓冲来发送数据或直接从缓冲池中立即发送数据,因为DLC设备驱动程序锁住了不在此缓冲池中的所有传送缓冲,应当避免使用一大堆尺寸小的缓冲来传送数据,为了提高执行效率,应该采用以下方法:

*   从缓冲池中分配一缓冲,把用户数据区中待发的数据拷贝到这缓冲中.

*         * 协商最大帧的大小来适合一个单个DLC缓冲,例如:20484096减去帧的大小和头部的大小

*   LLC_READ命令接收几个帧

 

阅读(3221) | 评论(0) | 转发(0) |
0

上一篇:DLC协议

下一篇:DLC协议三

给主人留下些什么吧!~~