lvhaow
驱动小牛
驱动小牛
  • 注册日期2001-10-31
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望35点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1312回复:2

针对同一PCI设备的读写操作,系统线程中的操作是否会被DPC中的操作中断?

楼主#
更多 发布于:2004-01-30 02:53
使用9052做的PCI卡,定义了两个地址空间,驱动程序要向这两个地址空写入数据。对这两个地址空间写入数据的方式不相同。

对地址空间A的写入操作是在硬件中断的触发下写入固定数量的数据,数据量不大(一次十几K DWORD),但要求要可靠,不可以丢中断。

对地址空间B的写入操作是随机产生的,数据量很大(一次有数M DWORD),但这个操作的实时性要求不高。

驱动程序打算这样写:
APP传下一个写操作IRP,驱动判断其写入的目标地址。
如地址指向地址空间A,则该IRP被排队等待PCI卡的硬件中断,中断到达后,申请一个DPC执行数据写操作。
如地址指向地址空间B,则把数据写操作交给系统线程来做。

问题:
由于指向地址空间B的数据传输量较大,则其在传输过程中,APP上肯定会有写地址空间A的IRP传下,并且也一定会有硬中断发生。问题在于两个写操作所针对的硬件是同一块卡,操作B会不会被操作A所中断?虽然DPC的执行级别高过系统线程,但没有这么做过,心里没底。在动手之前,还请各位老大指教一二!

谢谢。
lvhaow
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-01-30 08:22
使用9052做的PCI卡,定义了两个地址空间,驱动程序要向这两个地址空写入数据。对这两个地址空间写入数据的方式不相同。

对地址空间A的写入操作是在硬件中断的触发下写入固定数量的数据,数据量不大(一次十几K DWORD),但要求要可靠,不可以丢中断。

对地址空间B的写入操作是随机产生的,数据量很大(一次有数M DWORD),但这个操作的实时性要求不高。

驱动程序打算这样写:
APP传下一个写操作IRP,驱动判断其写入的目标地址。
如地址指向地址空间A,则该IRP被排队等待PCI卡的硬件中断,中断到达后,申请一个DPC执行数据写操作。
如地址指向地址空间B,则把数据写操作交给系统线程来做。

问题:
由于指向地址空间B的数据传输量较大,则其在传输过程中,APP上肯定会有写地址空间A的IRP传下,并且也一定会有硬中断发生。问题在于两个写操作所针对的硬件是同一块卡,操作B会不会被操作A所中断?虽然DPC的执行级别高过系统线程,但没有这么做过,心里没底。在动手之前,还请各位老大指教一二!

谢谢。


八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
lvhaow
驱动小牛
驱动小牛
  • 注册日期2001-10-31
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分44分
  • 威望35点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2004-01-30 13:46
谢谢!
lvhaow
游客

返回顶部