[发明专利]一种基于动态预测的网络驱动层数据包接收方法和系统有效
| 申请号: | 201310628565.X | 申请日: | 2013-11-29 |
| 公开(公告)号: | CN103634230A | 公开(公告)日: | 2014-03-12 |
| 发明(设计)人: | 陈进才;刘玉虎;周功业;周可;张英男;余乐;陈涛 | 申请(专利权)人: | 华中科技大学 |
| 主分类号: | H04L12/861 | 分类号: | H04L12/861;G06F9/50 |
| 代理公司: | 华中科技大学专利中心 42201 | 代理人: | 朱仁玲 |
| 地址: | 430074 湖北*** | 国省代码: | 湖北;42 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 动态 预测 网络 驱动 数据包 接收 方法 系统 | ||
1.一种基于动态预测的网络驱动层数据包接收方法,其特征在于,包括以下步骤:
(1)建立空白链表和循环队列,并创建内核线程和内核定时器,其中空白链表用于保存内核线程分配的数据包缓存,循环队列用于保存每次网络设备中断所产生的状态数据,内核线程用于分配数据包缓存和进行错误处理,并将数据包缓存插入空白链表,内核定时器用于定时唤醒内核线程;
(2)接收网络设备中断,执行中断处理程序,并在进入中断处理程序后立即停止接收网络设备中断;
(3)判断网络设备中断指令的类型是接收指令还是错误指令,如果是接收指令,则转入步骤(4),如果是错误指令,则转入步骤(10);
(4)判断接收指令的接收描述符中数据到达位是否为0,如果是则过程结束,转入步骤(12),如果不是则转入步骤(5);
(5)判断空白链表中数据包缓存的数量是否低于阈值,如果是则转入步骤(6),如果不是则转入步骤(7);
(6)设置数据包缓存分配标志,并唤醒内核线程,以分配数据包缓存:
(7)从空白链表中获取一个新数据包缓存,判断是否成功获取,如果是则转入步骤(8),如果不是则转入步骤(9);
(8)解除当前接收描述符对应的数据包缓存,并将新数据包缓存挂载到该接收描述符;
(9)统计当前接收描述符对应的数据包缓存中有效数据的长度,并丢弃有效数据,不改变当前接收描述符数据包缓存;
(10)判断错误指令的类型,如果是致命错误,则转入步骤(11),否则统计错误数据;
(11)停止接收上层发送的数据包,设置网络设备错误标志,唤醒内核线程以进行错误处理;
(12)在循环队列中保存本次的状态数据,打开网络设备中断。
2.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于,
空白链表包括一个数据包缓存的指针和一个计数器,指针指向链表的第一个元素,初始时为空;
计数器用于记录链表中元素的数量,初始时为0;
循环队列是由n个元素的环形数组组成,用于保存状态数据;
每个状态数据包括三个组成部分,分别用于记录一次中断当中接收到的数据包数量的计数器,用于记录开始接收第一个数据包的时间的变量,以及用于记录接收完最后一个数据包的时间的变量,初始时循环队列置为0。
3.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于,内核线程和内核定时器在驱动程序加载时被创建,内核线程在完成数据包缓存分配或错误处理后,进入休眠状态,内核定时器时间到期后,唤醒休眠状态的内核线程,以进行数据包缓存分配,并修改定时器时间,以在下一次时间到期后再次唤醒内核线程。
4.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于,步骤(6)中分配数据包缓存的步骤包括以下子步骤:
(6-1)根据循环队列保存的状态数据,计算需要分配的数据包缓存数量
(6-2)根据步骤(6-1)计算的需要分配的数据包缓存数量,分配对应数量的数据包缓存,对于分配的每一个数据包缓存,将其插入空白链表;
(6-3)清除数据包缓存分配标志,内核线程进入休眠状态。
5.根据权利要求4所述的网络驱动层数据包接收方法,其特征在于,步骤(6-1)中的计算过程包括以下子步骤:
(6-1-1)计算接收单个数据包所需时间,并计算其与网络设备接收描述符数量的乘积TIME;
(6-1-2)获取循环队列中数据包的总数量SUM,以及接收完成最后一个数据包的时间与开始接收第一个数据包的时间的差值TN;
(6-1-3)根据乘积TIME与差值TN计算最多需要分配的数据包缓存数量,计算方式为SUM*(TIME/TN);
(6-1-4)获取总共需要分配的数据包缓存数量,其为最多需要分配的数据包缓存数量和当前空白链表中剩余数据包缓存数量的差值。
6.根据权利要求1所述的网络驱动层数据包接收方法,其特征在于,步骤(11)中的错误处理过程包括以下子步骤:
(11-1)根据错误指令的类型,调用错误处理函数进行处理;
(11-2)清除网络设备错误标志,开始接收上层发送的数据包,内核线程进入休眠状态。
7.一种基于动态预测的网络驱动层数据包接收系统,其特征在于,包括:
第一模块,用于建立空白链表和循环队列,并创建内核线程和内核定时器,其中空白链表用于保存内核线程分配的数据包缓存,循环队列用于保存每次网络设备中断所产生的状态数据,内核线程用于分配数据包缓存和进行错误处理,并将数据包缓存插入空白链表,内核定时器用于定时唤醒内核线程;
第二模块,用于接收网络设备中断,执行中断处理程序,并在进入中断处理程序后立即停止接收网络设备中断;
第三模块,用于判断网络设备中断指令的类型是接收指令还是错误指令,如果是接收指令,则转入第四模块,如果是错误指令,则转入第十模块;
第四模块,用于判断接收指令的接收描述符中数据到达位是否为0,如果是则过程结束,转入第十二模块,如果不是则转入第五模块;
第五模块,用于判断空白链表中数据包缓存的数量是否低于阈值,如果是则转入第六模块,如果不是则转入第七模块;
第六模块,用于设置数据包缓存分配标志,并唤醒内核线程,以分配数据包缓存:
第七模块,用于从空白链表中获取一个新数据包缓存,判断是否成功获取,如果是则转入第八模块,如果不是则转入第九模块;
第八模块,用于解除当前接收描述符对应的数据包缓存,并将新数据包缓存挂载到该接收描述符;
第九模块,用于统计当前接收描述符对应的数据包缓存中有效数据的长度,并丢弃有效数据,不改变当前接收描述符数据包缓存;
第十模块,用于判断错误指令的类型,如果是致命错误,则转入第十一模块,否则统计错误数据;
第十一模块,用于停止接收上层发送的数据包,设置网络设备错误标志,唤醒内核线程以进行错误处理;
第十二模块,用于在循环队列中保存本次的状态数据,打开网络设备中断。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华中科技大学,未经华中科技大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310628565.X/1.html,转载请声明来源钻瓜专利网。





