阅读:1509回复:2
关于进程的用户态和核心态的疑问?
应用程序通过win32子系统提供的API接口来进行设备IO,当进行这样的调用的时候,进程会通过I/O管理器来调用设备驱动程序,进入核心态运行,这个时候是没有进程上下文切换的,也就是还在一个进程中,不过特权级发生了变化。我们知道进程有两种I/O模式,同步和异步。进程在发出调用请求后如果不能立刻得到满足,如果是同步调用,进程调度器会将进程挂起,等待I/O完成,如果是异步调用则进程调度器继续调度该进程。不管是哪种调用方式,代表进程执行I/O操作的驱动程序都在内核态执行。
我的问题是:就算是我们认为的普通的单线程应用程序,如果执行异步I/O操作,也是有两个调度单元在接受调度(用户态和内核态),是否是可以认为它有两个线程呢?如果不是,为什么? |
|
沙发#
发布于:2007-11-15 09:55
异步操作的CompleteRoutine是由IoCompleteRequest调用的,使用KeInsertQueueApc插到请求线程里执行,还是在同一个线程里,详见W2K源代码
|
|
|
板凳#
发布于:2007-11-16 04:06
引用楼主mopyman于2007-11-15 09:32发表的 关于进程的用户态和核心态的疑问? : 有2个,但不是你说的那样。另一个是callback函数,用来作一些处理,好让你的主线程继续running. |
|