none
关于kernel-mode APC的一些疑问 RRS feed

  • 问题

  • 在MSDN 2008中,

    APCs一节:
    ... An APC generated by the system is called a kernel-mode APC. An APC generated by an application is called a user-mode APC. A thread must be in an alertable state to run a user-mode APC.
    这里没有说kernel-mode APC在什么条件下产生和执行。

    而在PulseEvent API的文档说明中有如下一段:
    A thread waiting on a synchronization object can be momentarily removed from the wait state by a kernel-mode APC, and then returned to the wait state after the APC is complete.

    因此,我的疑问在于:
    kernel-mode APC是如何产生的?它在什么条件被执行?另外,它会对系统产生怎样的影响(比如,前面提到的对等待状态的改变)?

    谢谢!


    2009年1月16日 11:48

答案

  • 我认为IO结束触发的APC应该是kernel-mode的,因为IO只有操作系统能处理,application只能通过操作系统的API请求操作系统监听硬件的中断请求。

    • 取消答案标记 tyc611 2009年3月14日 13:11
    • 已标记为答案 tyc611 2009年3月14日 13:11
    2009年1月19日 5:37

全部回复

  •  

    比如你启动了一个异步IO,操作系统在读写文件结束的时候,可以产生一个kernel-mode APC,操作系统会执行监听这个IO操作完成的回调函数,APC Queue我想应该是。
    2009年1月16日 13:18
  •  Killmyday 写:

     

    比如你启动了一个异步IO,操作系统在读写文件结束的时候,可以产生一个kernel-mode APC,操作系统会执行监听这个IO操作完成的回调函数,APC Queue我想应该是。

    如果以APC方式启动异步I/O,当I/O完成时,系统向APC队列中添加的回调函数是user-mode APC吧?
    2009年1月16日 16:04
  • 我认为IO结束触发的APC应该是kernel-mode的,因为IO只有操作系统能处理,application只能通过操作系统的API请求操作系统监听硬件的中断请求。

    • 取消答案标记 tyc611 2009年3月14日 13:11
    • 已标记为答案 tyc611 2009年3月14日 13:11
    2009年1月19日 5:37