500楼#
发布于:2002-10-25 13:35
图2 Windows 2000 I/O请求简化模型
|
|
501楼#
发布于:2002-10-25 13:35
如图2所示,Windows 2000是分态的操作系统,因此在系统中代码运行在两种模式下:用户态和核心态。
|
|
502楼#
发布于:2002-10-25 13:35
用户应用程序运行在用户态,操作系统代码(如系统服务和设备驱动程序)在核心态下运行。在核心态处
|
|
503楼#
发布于:2002-10-25 13:36
理器模式中,代码可以访问所有系统内存和所有的CPU指令。操作系统软件的特权级别高于应用程序软
|
|
504楼#
发布于:2002-10-25 13:36
你放我领
|
|
505楼#
发布于:2002-10-25 13:36
件,通过这种机制,使得应用程序的不当行为在总体上不会破坏系统的稳定性。Windows 2000对核心态运
|
|
506楼#
发布于:2002-10-25 13:36
Win32 应用程序运行在用户态,操作系统严格限制应用程序的行为,防止其对其它应用和系统代码的破
|
|
507楼#
发布于:2002-10-25 13:37
坏。因此用户态程序只能调用Win32子系统提供的API来同设备交互,Win32子系统模块中的服务代码然
|
|
508楼#
发布于:2002-10-25 13:37
后调用平台无关的系统服务例程来切入核心态并调用核心态组件(I/O管理器)提供的服务例程。当请求
|
|
509楼#
发布于:2002-10-25 13:37
传递到I/O管理器时,它创建一个IRP(I/O Request Packet)并将其传递到适当的驱动程序去,并给应用程序
|
|
510楼#
发布于:2002-10-25 13:37
一个消息,通知这次I/O操作还没完成。应用程序收到通知后或者继续执行,或者挂起等待。在任何一种
|
|
511楼#
发布于:2002-10-25 13:37
端口或寄存器。尽管驱动程序运行在核心态下,可以直接和硬件交互,但在大多数情况下,为保持其可移
|
|
512楼#
发布于:2002-10-25 13:38
植性,驱动程序一般调用硬件抽象层提供的例程来和硬件交互。硬件抽象层提供一种与处理器平台无关的
|
|
513楼#
发布于:2002-10-25 13:38
方法来执行实际的I/O 操作。例如,在Intel x86处理器平台上,硬件抽象层使用IN指令,在Alpha平台
|
|
514楼#
发布于:2002-10-25 13:38
上,它将使用MEMORY读取操作。
|
|
515楼#
发布于:2002-10-25 13:38
驱动程序完成I/O操作后,它将调用一个特殊的内核服务例程来完成IRP。这时,因这个I/O请求挂起的
|
|
516楼#
发布于:2002-10-25 13:39
任何Win32应用将继续执行。
|
|
517楼#
发布于:2002-10-25 13:39
2.2 Windows 98下的WDM驱动程序和I/O子系统的协同工作机制分析
|
|
518楼#
发布于:2002-10-25 13:40
在Windows98中,操作系统内核被称为虚拟机管理器(VMM),因为它的主要任务是在单一的物理硬件上创
|
|
519楼#
发布于:2002-10-25 13:41
的硬件来辅助虚拟机管理器产生一种假象,那就是:每一个虚拟机都拥有一套完整的硬件。这种设计源于
|
|