正在加载图片...
有较高的IRL值,内核则为系统关键的中断保留最高的IRQL值,例如系统时钟或总线错 误中断 一些系统支持例程运行在 IRQL PASSIVE LEVEL,原因有两个方面:一是因为一些内核模式 组件创建它们自己的线程,另一是因为一些支持例程被作为可分页代码实现,并且/或者访 问可分页数据。 同样的,某种标准驱动程序例程通常运行于 IRQL PASSIVE LEVEL。然而,几个标准的驱动 程序例程要么运行于 IRQL DISPATCH LEVEL,要么运行于设备IRQL(也称为 DIRQL),后 种是针对最低层的驱动程序来说的。参看《内核模式驱动程序设计指南》的第16章中的 “管理硬件优先级”,可以得到关于IRQL的细节。 通常,如果线程正在请求驱动程序的当前I/0操作,则在这些线程的环境中,仅仅最高层 的驱动程序被调用。如果线程已经请求了它的当前I/O操作,中间层或最低层驱动程序从 不假定它正在这些线程的环境中执行。 由于性能的原因(避免环境交换),几乎没有驱动程序创建它们自己的线程。因此,当 个标准的驱动程序例程被调用做某些工作时,驱动程序例程通常恰恰在当前线程环境中执 行。也就是说,它们在专用线程环境中执行。 任何内核模式例程都运行在比 PASSIVE LEVEL高的IRQL上,这些例程拥有比系统中所有线 程都高的优先级。驱动程序中的任何例程都是可中断的:运行在特定IRQL上的任何内核模 式例程一直保留处理器的控制权,除非例程运行时有更高的内核指定的IRQL发生。 甚至一个最底层的驱动程序中断服务例程(ISR)也能被其他运行在较高IRQL上的例程中 断(例如,被另一个驱动程序的ISR中断)。不像一些旧的PC操作系统中的驱动程序 Windows nt/ Windows2000驱动程序的ISR几乎不做任何驱动程序的I/0处理,因为驱动 程序的ISR一直到它返回,也不必保留它正在其上运行的CPU的控制。 相反,最低层的驱动程序必须在较低的IRQL上完成它的I/0操作的大部分,而不是它的 ISR的DIRL。为了获得好的系统整体性能,所有的运行在高级IRQL上的内核模式例程必 须迅速释放CPU的控制权。这样的例程不仅仅做它们在高级IRQL上必须作的,通常将一个 延迟过程调用(DPC)排队,以完成任何能在较低IRQL( DISPATCH LEVEL)上完成的操 作 操作系统的可中断、可抢占优先的设计目标是最大化平均性能。任何驱动程序的ISR能被 运行在较高IR哑L上的例程中断,并且任何线程都能被具有较高优先级的线程中断。虽然一 些线程拥有实时优先级属性,它们仍然能被具有更高优先级的线程抢占。然而 Windows NT/ Windows2000构架并没有提供一个真正的实时系统 如果想得到内核模式驱动程序中系统定义的标准例程的介绍,可以参看第2章,“分层的 I/0、IRP和1/O对象”。参看第4章,“基本驱动程序结构”可以得到这些例程的概述 1.34多处理器安全 在任何 Windows nt/ Windows2000多处理器平台中,需要满足下列条件 所有的CPU是相同的,并且它们要么都有协处理器,要么都没有。 所有的CPU共享内存,并且一致地访问内存。 在对称平台中,每一个CPU能访问内存、处理中断、访问I/0控制寄存器。(相对来 说,在不对称多处理器机器中,一个CPU可能为一组从属CPU处理所有中断。) Windows nt/ Windows2000被设计成一律运行在单一或对称多处理器平台上,内核模式的 Windows2000和WDM驱动程序应该被同样的设计8 有较高的 IRQL 值,内核则为系统关键的中断保留最高的 IRQL 值,例如系统时钟或总线错 误中断。 一些系统支持例程运行在 IRQL_PASSIVE_LEVEL,原因有两个方面:一是因为一些内核模式 组件创建它们自己的线程,另一是因为一些支持例程被作为可分页代码实现,并且/或者访 问可分页数据。 同样的,某种标准驱动程序例程通常运行于 IRQL_PASSIVE_LEVEL。然而,几个标准的驱动 程序例程要么运行于 IRQL DISPATCH_LEVEL,要么运行于设备 IRQL(也称为 DIRQL),后 一种是针对最低层的驱动程序来说的。参看《内核模式驱动程序设计指南》的第 16 章中的 “管理硬件优先级”,可以得到关于 IRQL 的细节。 通常,如果线程正在请求驱动程序的当前 I/O 操作,则在这些线程的环境中,仅仅最高层 的驱动程序被调用。如果线程已经请求了它的当前 I/O 操作,中间层或最低层驱动程序从 不假定它正在这些线程的环境中执行。 由于性能的原因(避免环境交换),几乎没有驱动程序创建它们自己的线程。因此,当一 个标准的驱动程序例程被调用做某些工作时,驱动程序例程通常恰恰在当前线程环境中执 行。也就是说,它们在专用线程环境中执行。 任何内核模式例程都运行在比 PASSIVE_LEVEL 高的 IRQL 上,这些例程拥有比系统中所有线 程都高的优先级。驱动程序中的任何例程都是可中断的:运行在特定 IRQL 上的任何内核模 式例程一直保留处理器的控制权,除非例程运行时有更高的内核指定的 IRQL 发生。 甚至一个最底层的驱动程序中断服务例程(ISR)也能被其他运行在较高 IRQL 上的例程中 断(例如,被另一个驱动程序的 ISR 中断)。不像一些旧的 PC 操作系统中的驱动程序, Windows NT/Windows 2000 驱动程序的 ISR 几乎不做任何驱动程序的 I/O 处理,因为驱动 程序的 ISR 一直到它返回,也不必保留它正在其上运行的 CPU 的控制。 相反,最低层的驱动程序必须在较低的 IRQL 上完成它的 I/O 操作的大部分,而不是它的 ISR 的 DIRQL。为了获得好的系统整体性能,所有的运行在高级 IRQL 上的内核模式例程必 须迅速释放 CPU 的控制权。这样的例程不仅仅做它们在高级 IRQL 上必须作的,通常将一个 延迟过程调用(DPC)排队,以完成任何能在较低 IRQL(DISPATCH_LEVEL)上完成的操 作。 操作系统的可中断、可抢占优先的设计目标是最大化平均性能。任何驱动程序的 ISR 能被 运行在较高 IRQL 上的例程中断,并且任何线程都能被具有较高优先级的线程中断。虽然一 些线程拥有实时优先级属性,它们仍然能被具有更高优先级的线程抢占。然而 Windows NT/Windows 2000 构架并没有提供一个真正的实时系统。 如果想得到内核模式驱动程序中系统定义的标准例程的介绍,可以参看第 2 章,“分层的 I/O、IRP 和 I/O 对象”。参看第 4 章,“基本驱动程序结构”可以得到这些例程的概述。 1.3.4 多处理器安全 在任何 Windows NT/Windows 2000 多处理器平台中,需要满足下列条件: ▪ 所有的 CPU 是相同的,并且它们要么都有协处理器,要么都没有。 ▪ 所有的 CPU 共享内存,并且一致地访问内存。 ▪ 在对称平台中,每一个 CPU 能访问内存、处理中断、访问 I/O 控制寄存器。(相对来 说,在不对称多处理器机器中,一个 CPU 可能为一组从属 CPU 处理所有中断。) Windows NT/Windows 2000 被设计成一律运行在单一或对称多处理器平台上,内核模式的 Windows 2000 和 WDM 驱动程序应该被同样的设计
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有