一种接收数据的处理方法及装置的制造方法_2

文档序号:9931222阅读:来源:国知局
据读请求的先后顺序直接由顺序的缓冲段中读取到正确顺序的完成数据包,保证了读出的响应数据与读请求在先后次序上的一致性。
[0046]需要说明的是,缓冲器的数量可以为I个,也可以为多个,均在本发明的保护范围之内。将缓冲器进行分割得到缓冲段,缓冲段的数量可以根据实际需要进行确定,如当使用的缓冲器的大小均相同时,可以将全部缓冲器能够同时处理的读请求的数量与缓冲器的个数的比值作为缓冲器内缓冲段的数量,也可以使用不同大小的缓冲器,进而依据响应数据的类型对缓冲器进行分割得到缓冲段等,均在本发明的保护范围之内。
[0047]另外,通常情况下,可以将缓冲器分割成大小均相同的缓冲段,此时,每个缓冲段的大小为一个读请求对应的响应数据的最大值,以保证一个读请求的响应数据对应的完成数据包能够存储在一个缓冲段中;当然,也可以根据实际需要将缓冲器分割成不同大小的缓冲段,均在本发明的保护范围之内。
[0048]S13:将完成数据包依次缓存至目的缓冲段的缓冲片内,以供读取后供上层应用使用;其中,缓冲片为对对应缓冲段进行分割得到的,缓冲片与完成数据包一一对应。
[0049]其中,缓冲片与完成数据包一一对应,即一个缓冲片在同一时刻只能存储一个完成数据包。另外,完成数据包与缓冲片一一对应可以是依据完成数据包携带的序号实现的,将完成数据包按照其序号的顺序依次缓存至对应的缓冲片中,由此,可以直接由顺序的缓冲片中读取到正确顺序的完成数据包。
[0050]需要说明的是,可以将缓冲段分割成大小均相同的缓冲片,每个缓冲片的大小为一个完成数据包大小的最大值,以保证一个完成数据包能够存储在一个缓冲片中;当然,也可以根据实际需要将缓冲段分割成不同大小的缓冲片,均在本发明的保护范围之内。另外,任一缓冲器的结构示意图可以如图2所示,其中,11为缓冲器,111为一个缓冲段,而1111为一个缓冲片。
[0051 ]通过本申请公开的上述技术特征,在得到完成数据包之后,将读请求对应的完成数据包缓存至目标数据段中,并且,完成数据包在数据段中缓存至与其一一对应的缓冲片中,由此,在需要读取完成数据包时,可直接读取对应目的缓冲段中的完成数据包,以避免不同的读请求对应的完成数据包之间的乱序,且由于完成数据包与数据片一一对应,因此,可通过对数据片的依次读取得到对应的完成数据包,避免出现读请求对应的不同完成数据包之间的乱序,即,本申请公开的上述技术特征,有效避免了现有技术中可能出现的完成数据包乱序到达请求者的情况。
[0052]本发明实施例提供的一种接收数据的处理方法中,选取一空闲的缓冲段作为目的缓冲段,可以包括:
[0053]获取每个缓冲器被占用的缓冲段的数量;
[0054]由其被占用的缓冲段的数量不大于其他缓冲器被占用的缓冲段的数量的缓冲器中选取一个缓冲器作为目的缓冲器;
[0055]由目的缓冲器中选取一空闲的缓冲段作为目的缓冲段。
[0056]其中,由其被占用的缓冲段的数量不大于其他缓冲器被占用的缓冲段的数量的缓冲器中选取一个缓冲器作为目的缓冲器可以是随机选取,也可以是按照实际需要设置一定的规则进行选取,同理,由目的缓冲器中选取一空闲的缓冲段作为目的缓冲段可以是随机选取,也可以是按照实际需要设置一定的规则进行选取,均在本发明的保护范围之内。
[0057]由此,能够由缓冲器中选取中负载最轻的缓存器,进而由该缓存器否则缓存完成数据包,从而有效提高了缓冲资源的利用效率。
[0058]本发明实施例提供的一种接收数据的处理方法中,将完成数据包依次缓存至目的缓冲段的缓冲片内,包括:
[0059]将目的缓冲段对应的目的计数器的值设置为完成数据包的数量;每缓存一个完成数据包,则将目的计数器的值减I,并判断目的计数器的值是否为0,如果是,则确定缓存完成,如果否,则继续缓存下一个完成数据包。
[0060]通过目的计数器的值的变化,能够有效获知一个读请求对应的完成数据包是否缓存完毕,以保证一个读请求对应的完成数据包的完整性,提高了响应数据的读取效率及准确率。
[0061]本发明实施例提供的一种接收数据的处理方法中,还可以包括:
[0062]如果在响应读请求之后的预设时间段内并未获取到完成数据包,则输出获取失败的提示信息。
[0063]如果在响应读请求之后的预设时间段内并未获取到对应的完成数据包,则说明在得到完成数据包的过程中存在错误,此时,需要输出获取失败的提示信息,以提示工作人员尽快检测及修正,进一步保证了对于响应数据的顺利读取。
[0064]本发明实施例提供的一种接收数据的处理方法中,还可以包括:
[0065]接收到读请求后,将读请求的请求信息存储至对应的读请求状态表中,以供查询。
[0066]且,将缓冲段的段分配信息按照其基址由小到大的顺序存储至对应的段分配表中,以供查询。
[0067]具体来说,可以预先建立一个读请求状态表以记录请求信息,及预先建立一个段分配表以记录段分配信息。
[0068]其中,读请求状态表可以使用一个环形缓冲区记录,如图2所示,也可以使用其他的数据结构,例如链表等记录,均在本发明的保护范围之内。当读请求状态表如图3所示时,从读请求状态表的表头开始,表中的每一项依次对应于请求者发出的读请求,即请求者发出的读请求的先后顺序,与读请求在请求状态表中对应项的顺序一致。当请求者生成一个新的读请求并发出时,在读请求状态表中生成一个新的表项,插入到表的末尾。
[0069]其中,读请求状态表的表项中各字段含义如下:
[°07°] Tag ID:该表项所记录的读请求的标签ID;
[0071]Buf _Base:该表项所记录的读请求的完成数据包所存储的缓冲器基址;
[0072]Seg_Base:该表项所记录的读请求的完成数据包所在缓冲器中的缓冲段基址;
[0073]Req_Len:该表项所记录的读请求的完成数据包的长度;
[0074]Req_State:该表项所记录的读请求的状态,可能包括:待接收(该读请求尚未收到任何完成者返回的完成数据包)、接收中(该读请求已经接收到一部分完成者返回的完成数据包,但尚未收到全部完成数据包)、接收完成(该读请求已经接收到所有完成者应当返回的完成数据包)、已读取(该读请求所接收到的完成数据包已经被上层驱动读取完毕);
[0075]Time_0ut:该表项所记录的读请求的超时计数器。
[0076]而段分配表具体可以如图4所示,当然也可以使用其他的数据结构,例如链表等,均在本发明的保护范围之内。段分配表用于记录缓冲器的使用情况,具体来说,缓冲器中的各个缓冲段,依照其基址由小到大依次对应于段分配表中的各个表项。
[0077]其中,段分配表的表项中的各字段含义如下:
[0078]Seg_Base:该表项所记录的缓冲段基址;
[0079]Tag_ID:该表项所记录的缓冲段存储的完成数据包对应的读请求的标签ID,当该表项的Is_Free字段为“I”时,该字段无效;
[0080]Spc_C0Unt:该表项所记录的缓冲段接收到的完成数据包计数,即对应计数器,初始值为该缓冲段所对应的读请求的完成数据包的数量;当该表项的Is_Free字段为“I”时,该字段无效;
[0081]Spc_Len[]:该表项所记录的缓冲段的各个缓冲片存储的完成数据包的长度,当该表项的Is_Free字段为“I”时,该字段无效;
[0082]Is_Free:当该字段的值为“I”时,表示该表项所记录的缓冲段是空闲的,当该字段的值为“O”时,表示该表项所记录的缓冲段存储了完成数据包。
[0083]需要说明的是,基于读请求状态表及段分配表实现本发明实施例提供的一种接收数据的处理方法时,具体可以为:
[0084]请求者生成并发送读请求后,在读请求状态表中增加一条表项用于记录该读请求,并且该读请求对应的请求状态为“待接收”;
[0085]接收完成数据包,并在接收到一个完成数据包后,对其进行判断,若接收到的完成数据包不是读请求对应的完成数据包,则进行其他逻辑处理并继续接收数据;若接收到的完成数据包是读请求对应的完成数据包,则根据完成数据包中的Ta
当前第2页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1