aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
阅读:1372回复:3

提几个问题,zhaock前辈请看进来

楼主#
更多 发布于:2005-05-21 21:05
zhaock你好。这几天这个网站老是上不去。急阿。
可以请你在帮我回答一下我提问过的其他4,5,6,7的问题吗?
或者说可能是我的基础太差,文字解释不通,这样可以介绍一些资料给我阿,真的太感谢你了。
下面再冒昧问你几个问题吧。
1.包的发送顺序问题,我知道miniport驱动最好不要搞乱包的顺序,但是如果我把包的顺序倒一下应该没有问题吧,譬如我从上层接连拿到两个数据包,但是我把第二个先发了再发送第一个。其是应该是不会发生问题的吧,好奇的问问。

2.还有以太网协议的包是60到1514字节的,但是如果我的硬件发送缓冲区暂时没有办法实现这么大,那么我可不可以在向上层指示的OID的数据,getOID_GEN_MAXIMUM_TOTAL_SIZE函数里将数值设置为小一点,这样是不是上层就会将要发送的包切割为不大于我指定的数值的大小。可不可以到255字节这么大阿(见笑了,硬件那边暂时有困难),如果是这样的话,用indicatereceive接收方式所设置的那个头一小部分缓冲区要设多大阿。在所有我看的正常例子中都是252吧。这样在我这种硬件情况下,应该设置多大,有没有一个说法。

如果我设置的缓冲区直接设置成255可以吗?这样就直接收完了,都不用在transferdata。多好阿。

3.轮询的话,今天去看了驱动开发大全,它里面提到说轮询的函数是在DPC LEVEL下的。我想问两个问题,
(1).你所说的POLLING就是一直去读某个状态位,这是什么意思?是说一个while语句设置几百次一直读这个硬件状态位,还是说用KNDIS_DECLARE_TIMERCALLBACK()。设置一个时间片断,过一段时间读一次过一段时间读一次。我的理解POLLING是第二个意思。
(2).如果是第二个意思的话,那么这样函数运行在DPC下,会不会可能发生,第一个轮询函数还在执行当中,第二个时间就到了,第二个轮询函数就跳出来。还是说它们会排队,时间一起往后挪,不是很强硬的要执行的。

4.我在一段代码中,在代码前面用了lock,后面用了unlock。就是想说这段代码不被打断。如果这段代码执行期间发生中断,这样系统会怎么办?或者说时间到了,这段代码执行期间轮询函数该出来了,系统又如何决结的。
我想了解一下,谢谢。


  
周维彬
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-21 23:20
zhaock你好。这几天这个网站老是上不去。急阿。
可以请你在帮我回答一下我提问过的其他4,5,6,7的问题吗?
或者说可能是我的基础太差,文字解释不通,这样可以介绍一些资料给我阿,真的太感谢你了。
下面再冒昧问你几个问题吧。
1.包的发送顺序问题,我知道miniport驱动最好不要搞乱包的顺序,但是如果我把包的顺序倒一下应该没有问题吧,譬如我从上层接连拿到两个数据包,但是我把第二个先发了再发送第一个。其是应该是不会发生问题的吧,好奇的问问。

2.还有以太网协议的包是60到1514字节的,但是如果我的硬件发送缓冲区暂时没有办法实现这么大,那么我可不可以在向上层指示的OID的数据,getOID_GEN_MAXIMUM_TOTAL_SIZE函数里将数值设置为小一点,这样是不是上层就会将要发送的包切割为不大于我指定的数值的大小。可不可以到255字节这么大阿(见笑了,硬件那边暂时有困难),如果是这样的话,用indicatereceive接收方式所设置的那个头一小部分缓冲区要设多大阿。在所有我看的正常例子中都是252吧。这样在我这种硬件情况下,应该设置多大,有没有一个说法。

如果我设置的缓冲区直接设置成255可以吗?这样就直接收完了,都不用在transferdata。多好阿。

3.轮询的话,今天去看了驱动开发大全,它里面提到说轮询的函数是在DPC LEVEL下的。我想问两个问题,
(1).你所说的POLLING就是一直去读某个状态位,这是什么意思?是说一个while语句设置几百次一直读这个硬件状态位,还是说用KNDIS_DECLARE_TIMERCALLBACK()。设置一个时间片断,过一段时间读一次过一段时间读一次。我的理解POLLING是第二个意思。
(2).如果是第二个意思的话,那么这样函数运行在DPC下,会不会可能发生,第一个轮询函数还在执行当中,第二个时间就到了,第二个轮询函数就跳出来。还是说它们会排队,时间一起往后挪,不是很强硬的要执行的。

4.我在一段代码中,在代码前面用了lock,后面用了unlock。就是想说这段代码不被打断。如果这段代码执行期间发生中断,这样系统会怎么办?或者说时间到了,这段代码执行期间轮询函数该出来了,系统又如何决结的。
我想了解一下,谢谢。


  

1.对于网卡驱动来说,肯定没有问题,主要看协议如何处理,比如tcp就可以处理这种乱序问题的
2.<可以在向上层指示的OID的数据,<getOID_GEN_MAXIMUM_TOTAL_SIZE函数里将数值设置为小一点
当然可以了
 
〈如果我设置的缓冲区直接设置成255可以吗?这样就直接收完了,〈都不用在transferdata。多好阿。
可以。我理解着主要和硬件相关。
一般的网卡驱动,实际上都没有走到transferdata,在我做im的
时候,测试发现

3.对于ne2000驱动来说,是第一个意思
4.lock,unlock目的是同步某个变量,不会发生多个线程都去访问,
例如一个链表,一个去删除,一个去插入,不同步,就乱了,单cpu上自旋锁仅仅是将irql提高到dpc,当然可以被硬件中断所中断.如果你不希望被硬件中断打断,可以直接用cli关中断

因为我这部分也是2,3年前做,某些东西已经记不清了,我回答你的
都是还记得的,比较拿得准的,但也会有不准确之处,你做的过程中,
发现哪些有问题,我们再讨论

关于一些我没有回答的,就是我已经记不清了,如果要回答,我还要去
重新查查资料,看看代码,不然你再多给我一些分,刺激刺激我的积极性,呵呵
这几天网站是有点问题,老登不上来

aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2005-05-22 00:49
我给得就剩下十几分了,都给你吧。
问一下,这些分有什么用阿。
没什么感觉,都是我申请这个帐号就有的。

对了在这再次的感谢你。
周维彬
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2005-05-22 10:16
什么用没有。就给打游戏一样,既然上面有个排行榜,没事的时候
就往上冲一冲,前一段时间做项目太忙了,这段时间闲的事不多,找个乐子。
游客

返回顶部