分类: WINDOWS
2005-10-17 15:27:53
第二章:与缓冲管理 为了提高协议驱动程序的性能,应用程序在一个协议驱动程序调用中可多个连续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中的缓冲管理与其他的缓冲管理不同,他的缓冲头部在IBM的DLC接口中被定义.WIN32DLC缓冲是从一个虚拟内存块中分配一块内存,DLC设备驱动程序为设备驱动程序接收的每一个帧定义缓冲段的大小,它只能是256,512,1024,2048,4096这些大小中的一个,这就可以把不同段的头部所需的无页内存数量减至最少.他也为收到的帧分配最小数目的缓冲数,应用程序也可请求一固定大小的缓冲或一个最佳的缓冲数. 在LLC_READ,LLC_DLC_FLOW_CONTROL,和LLC_BUFFER_GET命令执行期间,DLC缓冲池是可动态扩展的,即可用缓冲大小小于应用程序指定的最小限度时,然而,系统不能在应用程序指定最大大小后再增加缓冲池. 应用程序可用自己本身的缓冲来发送数据或直接从缓冲池中立即发送数据,因为DLC设备驱动程序锁住了不在此缓冲池中的所有传送缓冲,应当避免使用一大堆尺寸小的缓冲来传送数据,为了提高执行效率,应该采用以下方法: