windows第21章系统结构.ppt_第1页
windows第21章系统结构.ppt_第2页
windows第21章系统结构.ppt_第3页
windows第21章系统结构.ppt_第4页
windows第21章系统结构.ppt_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第二章 Windows系统结构,2.1 需求和设计目标 2.2 操作系统原型 2.3 总体结构 可移植性,对称多处理器,可伸缩性,检查版本 2.4 关键的系统组件 环境子系统,硬件抽象层HAL,设备驱动程序,系统进程,2,2.1、需求和设计目标,需求 提供一个真正32位抢先式(preemptive)可重入(reentrant)虚拟内存操作系统。 在多种硬件体系结构和平台上运行。 运行在对称多处理器系统(symmetric multiprocessing systems),很好适应处理器数量。 成为一个主要的分布式计算平台,含客户机和服务器。 能运行大多数已有的16位MS-DOS和Windows3.1应用程序 符合POSIX 1003.1兼容性要求。 符合对操作系统安全性要求。 支持Unicode,以易于适应全球市场。,3,扩展性 Extensibility。 编写的系统代码必须能够随市场需求变化而自如增长和改变。 可移植性 Portability。 必须能在多种硬件体系结构运行,根据市场需要容易移到新的体系结构上。 可靠性和健壮性 Reliability and Robustness。 系统能保护自己,不因内部错误和外部篡改而停止工作;应用程序应该无法伤害操作系统或者其它应用程序。 兼容性 Compatibility 用户界面和API应该与老Windows和MS-DOS兼容,也能与其它系统很好地互操作,如UNIX、OS/2和NetWare。 性能 Performance 满足其它设计目标约束,在每一种硬件平台上尽可能运行得更快,对外部响应尽可能地及时。,设计目标 1,4,2.2 操作系统模型,内核模式 kernel mode 操作系统内核代码运行在处理器的特权模式下。 用户模式 user mode 应用程序代码运行在处理器的非特权模式下。 用户模式程序调用一个系统服务: 处理器捕获到该调用,将调用线程切换到内核模式; 该服务完成,将线程环境切换回用户模式,允许调用者继续。,5,操作系统模型 2,共享内核模式内存空间 操作系统大部分代码与设备驱动程序代码共享同样的受保护的内核模式内存空间。操作系统任一组件或设备驱动程序都可能破坏其它系统组件的数据。 不是微内核microkernel系统 微内核定义:操作系统主要组件(内存管理器,进程管理器和I/0管理器)运行在各自独立进程中,有私有的地址空间,在这组组件上是微内核提供的一组原语服务。任何其它组件(包括各种API,文件系统和网络等)都运行在用户模式下。 操作系统所有组件受保护 组件体现基本的面向对象设计原则 大多数代码用C语言编写(不支持面向对象概念,如数据类型动态绑定,多态函数,类继承等),其对象实现只是借用了特定面向对象语言的特性。,6,2.3 总体结构,图2.1 简化的Windows结构图,7,四种基本的用户模式进程 3,系统支持进程 system support processes。 比如登录logon进程和会话管理器 session manager,它们不是Windows服务。它们不是由服务控制管理器来启动的。 服务进程 service processes。 主持Windows服务,比如任务调度器(Task Scheduler)和假脱机服务。服务运行常独立于用户登录。 用户应用程序 user applications。 有六种类型:Windows 32位,Windows 64位,Windows3.1 16位,MS-DOS 16位,POSIX 32位 或者OS/2 32位 环境子系统服务器进程 environment subsystem server processes。环境是指操作系统展示给用户或者程序员的个性化部分。最早带了三个子系统:Windows,POSIX和OS/2。,8,用户应用程序不直接调用原始的Windows操作系统服务,而是通过子系统动态链接库DLLs来发起调用。 子系统DLL角色:将一个已文档化的函数转化为一些恰当的内部Windows系统服务调用(通常未文档化)。 此转化过程可能会(可能不会)向正在为用户应用程序提供服务的环境子系统进程发送一个消息。,子系统DLL 3,9,内核模式组件 3,Windows执行体(executive) 包含了基本的操作系统服务,比如内存管理,进程和线程管理,安全性,I/O,网络和跨进程通信。 Windows内核(kernel) 由一组低层次功能组成,比如线程调度thread scheduling,中断interrupt和异常分发exception dispatching,以及多处理器同步。kernel提供了一组例程和对象,执行体利用它们实现更高层次的功能。 设备驱动程序(device drivers) 包括硬件设备驱动程序(将用户I/O函数调用转换成特定的硬件设备I/O请求),文件系统和网络驱动程序。 硬件抽象层(Hardware Abstraction Layer) 特殊代码,把内核、 设备驱动程序和执行体的其余部分,跟平台相关的硬件差异隔离开来。 窗口和图形系统(windowing and graphic system) 实现了GUI函数(即GDI函数),如窗口处理、 用户界面控件、 绘制等。,10,Windows核心系统文件 3,11,Windows2000只支持x86体系结构。 WindowsXP和Windows Server2003新增加支持64位处理器族:Intel Itanium IA-64族、AMD x86-64族、EM64T。 两种可移植性实现方法,支持多种体系结构和平台。 一:分层设计。 关键组件:内核和硬件抽象层。体系结构相关功能,如线程环境切换(thread context switching) 和陷阱分发(trap dispatching)在内核实现;不同系统有差异的功能(比如不同主板)在HAL中实现。 系统的高层部分可以不考虑体系结构之间的差别。 二:代码绝大部分用C语言编写。 少部分用C+编写。只有需要直接与硬件通信部分(如中断陷阱处理器,interrupt trap handler),或者对性能极端敏感部分(如环境切换,context switching),才用汇编语言编写。,可移植性 3,12,多任务multitasking与多处理multiprocessing。 前者看起来同时执行多个线程,后者真正同时执行多个线程。 对称多处理与非对称多处理。 对称多处理SMP(symmetric multiprocessing) :没有主处理器,所有处理器共享唯一的内存空间。 非对称多处理ASMP(asymmetric multiprocessing):典型ASMP,操作系统选择其中一个处理器执行操作系统内核代码,其它处理器只运行用户代码。 支持两种新的多处理器系统。 超线程(hyperthreading)和NUMA(非一致内存结构,non-uniform memory architecture)。 超线程为Intel引入技术,可以在一个物理处理器上提供多个逻辑处理器。每个逻辑处理器有自己的CPU状态,并共享执行引擎和芯片上的高速缓存。 NUMA系统中,处理器被组织成更小单元,即节点nodes,每个节点有自己的处理器和内存,通过一个缓存一致的互联总线连接到更大的系统。,对称多处理 3,13,多处理器系统的资源竞争和其他性能问题更为复杂。 操作系统代码能够运行在任何一个可用的处理器上,也可以同时在多个处理器上运行。 单个进程内执行的多个线程,可以在不同处理器上并行执行。 内核内部以及设备驱动程序和服务器进程内部的细粒度同步,使多个组件可并行运行于多个处理器。 诸如I/O完成端口之类的编程机制,可实现高效的多线程服务器进程,并且这样的程序在多处理器系统上有很好的伸缩性。 Windows2003使用针对每个CPU的调度队列,使得可以在多个CPU上并行地执行线程调度。,可伸缩性 scalability 3,14,所支持的处理器的数目不同。 所支持的物理内存的数量不同。 所支持的并行网络连接的数量不同。 Server版本随带的分层服务(layered services)并不包含在Professional版本中,例如目录服务(directory services) 、集群服务(clustering) 、以及对多用户终端服务(multiuser Terminal Services)的支持。,客户和服务器版本差异 3,15,客户和服务器版本差异 3,表2.3 Windows 2000 Professional和Server几个版本之间的差异,Windows操作系统有多个客户版本和服务器版本,但是它们共享同一组核心系统文件,包括内核映像Ntoskrnl.exe(以及PAE版本Ntkrnlpa.exe) 、HAL库、设备驱动程序,以及基本的系统辅助工具和DLL。这些文件在Windows2000的所有版本中都相同。Windows XP和Windows Server 2003的内核映像相同。 默认配置下,服务器系统针对系统吞吐量进行优化,达到高性能应用服务器;客户版本针对交互式桌面用途的响应时间进行优化。,16,客户和服务器版本差异 3,表2.4 Windows XP和Windows Server 2003之间的差异,Windows Server 2003不同版本之间的详细比较,请参考: /windowsserver2003/evaluation/features/compareeditions.mspx,17,客户和服务器版本差异 3,表2.5 ProductType注册表值,系统查询注册表的HKLMSYSTEMCurrentControlSetControl ProductOptions键下的ProductType和ProductSuite两个值。 注册表值ProductType用来区分当前系统是客户系统还是服务器系统,其值存放在系统全局变量MmProductType中,在设备驱动程序中可用内核模式函数MmIsThisAnNtAsSystem查询此值。 注册表值ProductSuite可以区分服务器系统的不同版本(Standard 、Enterprise 、Datacenter等 ),也可区分Windows XP Home和Windows XP Professional系统。,18,Windows操作系统的一个特殊调试版本,称为检查版本checked build。 这是定义一个“DBG”标志之后,将Windows源代码重新编译得到的版本,用于调试和跟踪的编译时刻条件代码也被包含进来。并且为了更加易于理解所得的机器代码,没有执行针对Windows二进制代码的后处理优化。 检查版本代码中,大多数附加代码使用了ASSERT宏,该宏定义在DDK头文件Ntddk.h中,参见DDK文档。ASSERT宏测试一个条件,若表达式计算结果为FALSE,则该宏调用内核模式函数RtlAssert,后者进一步调用DbgPrint,将调试信息文本发送到一个调试信息缓冲区。若有一个内核调试器附载,则该消息自动显示在一个提示符后面,请用户决定如何处理此断言失败(断点、忽略、终止进程或者终止线程);若没有附载内核调试器,ASSERT测试失败将会导致系统崩溃。,检查版本 3,19,2.4 关键的系统组件,环境子系统和子系统DLL OS/2子系统 、POSIX子系统和Windows子系统 。 Ntdll.dll 、执行体、内核、内核对象。 硬件抽象层(HAL) 设备驱动程序 Windows驱动程序模型WDM。 系统进程 空闲进程、System进程和系统线程、会话管理器、服务控制管理器、本地安全认证服务器。,20,Windows系统核心结构和组件 4,服务 控制管理器,用户模式,内核模式,图2.3 Windows系统核心结构和组件,系统进程,服 务,应用程序,环境子系统,LSASS,Winlogon,会话管理器,SvcHost.exe,WinMgt.exe,SpoolSv.exe,Services.exe,任务管理器,Explorer,用户应用,子系统DLL,Windows,OS/2,NTDLL.DLL,POSIX,Windows DLLs,系统线程,系统服务分发器,(内核模式的可调用接口),I/O管理器,文件系统 高速缓存,对象 管理器,即插即用 管理器,安全引用 监视器,虚拟内存,进程 和 线程,配置 管理器 (注册表),本地 过程调用 (LPC),Windows USER, GDI,图形 驱动程序,硬件抽象层(HAL),设备及 文件系统 驱动程序,内 核,硬件接口(总线、I/O设备、中断、间隔定时器、DMA 、内存缓存控制、等 ),21,OS/2和POSIX被配置成按需启动。 Windows子系统必须总是在运行。 子系统启动信息被保存在注册表键HKLMSYSTEMCurrentControlSetControlSession ManagerSubSystems下面。,环境子系统和子系统DLL 4,Required值列出引导时加载的子系统,其中文件csrss.exe代表Client/Server Run-Time SubSystem。Optional值表明OS/2和POSIX子系统将按需启动。,22,环境子系统的角色: 将Windows基本系统服务的部分子集暴露给应用程序。 每个子系统都提供了对于Windows原生服务不同部分的访问能力,这意味着,建立在某一个子系统上的应用程序可以做到的事情,是另一个建立在不同子系统上应用程序所无法做到的。例如,Windows应用程序不能够使用POSIX的fork函数。 每个可执行映像(.exe)被绑定到唯一一个子系统上。当映像文件被运行时,创建进程代码会检查映像头部的子系统类型代码。VC+中link命令的/SUBSYSTEM修饰符可指定此类型代码,Windows资源工具箱中的Exetype工具可查看类型代码。 不同子系统之间,函数调用不能混合。 应用程序不直接调用Windows系统服务,而是通过调用子系统DLL库导出的接口(都有很好文档说明)。如Windows子系统DLL(Krenel32.dll 、Advapi32.dll 、User32.dll和Gdi32.dll)实现了Windows API函数,POSIX子系统DLL(Psxdll.dll)实现了POSIX API函数。,环境子系统和子系统DLL 4,23,应用程序调用子系统DLL中某个函数时发生的事件 该函数完全在该子系统DLL中实现,在用户模式下运行。该函数不向环境子系统发送消息,也没有调用Windows执行体的系统服务。该函数在用户模式下完成,结果返回调用者,如GetCurrentProcess函数和GetCurrentProcessId函数。 该函数要求调用Windows执行体一次或多次。例如ReadFile和WriteFile函数分别调用底层的(无文档)内部Windows I/O系统服务NtReadFile和NtWriteFile。 该函数要求在环境子系统进程(运行于用户模式,负责维护在其控制下运行的客户应用程序的状态)中完成某些工作。该函数以消息形式给环境子系统发送一个客户/服务器请求,从而让环境子系统执行某个操作。然后子系统DLL等待应答,收到应答后再返回给调用者。 Windows设计者将显示基本函数放在Windows子系统中,POSIX和OS/2调用Windows子系统服务来完成显示I/O。,环境子系统和子系统DLL 4,24,环境子系统进程(Csrss.exe): 控制台(文本)窗口。创建或删除进程和线程。 对16位虚拟DOS机(VDM)进程的部分支持。其它函数,如GetTempFile, DefineDosDevice, ExitWindowsEx,及自然语言支持函数。 内核模式设备驱动程序(Win32k.sys): 窗口管理器(window manager),控制窗口显示,管理屏幕输出,采集来自键盘/鼠标和其它设备的输入,同时将用户消息传递给应用程序。 图形设备接口(GDI, Graphic Device Interface),是专门针对图形输出设备的函数库,包括线、文本和图形绘制函数,及绘图控制函数。 子系统DLL: 如Kernel32.dll 、Advapi32.dll 、User32.dll和Gdi32.dll ,它们将已经文档化Windows API函数,翻译成Ntoskrnl.exe 和Win32k.sys中恰当的且未文档化的内核模式系统服务调用。 图形设备驱动程序: 与硬件相关的图形显示器、打印机和视频微端口的驱动程序。,Windows子系统 4,25,POSIX可看成“一个基于UNIX的可移植操作系统接口a Portable Operating System Interface based on UNIX ”的缩写 。 仅仅实现了POSIX.1标准。 目的是满足美国政府采购要求,因此POSIX.1兼容性是Windows的一个强制性目标。 POSIX.1定义了很有限的一组服务(进程控制、进程通信等),随Windows2000带的POSIX子系统不是一个完整编程环境。 要在Windows中编译和链接一个POSIX应用程序,要使用Platform SDK中的POSIX头文件和库文件。POSIX可执行文件需链接POSIX子系统库Psxdll.dll。 默认配置成按需启动POSIX子系统,第一次运行一个POSIX应用程序时,POSIX子系统进程(Psxss.exe)必须被启动。POSIX映像文件本身不直接运行,可启动Posix.exe来创建子进程运行POSIX应用程序。,POSIX子系统 4,26,仅仅实现了OS/2 1.2版本。 不支持OS/2 2.x(及以后版本)。 如果OS/2程序中含有执行IN/OUT指令和高级视频I/O(AVIO)的I/O特权代码,在Windows平台上无法支持。 支持使用CLI/STI指令的应用程序,但系统中其它所有OS/2程序以及发出CLI指令的进程中所有其它线程都被挂起,直到执行STI指令为止。 原来OS/2 1.2上的16MB内存限制取消,在OS/2子系统中可向应用程序提供512MB内存。 64个OS/2优先级(0到63)仅仅映射到Windows动态优先级1至15。OS/2线程不会授予Windows实时优先级16至31。 OS/2子系统在第一次激活一个兼容的OS/2映像文件时才自动启动,它会一直保持运行状态,直到系统被重新引导为止。,OS/2子系统 4,27,特殊系统支持库,主要用于子系统DLL。包含两种类型: 系统服务分发存根(stubs),会调用Windows执行体系统服务。 内部支持函数,供子系统、子系统DLL以及其它的原生映像文件使用。 第一组函数为Windows执行体系统服务提供了接口,用户模式可通过该接口函数调用Windows执行体的系统服务。函数多过200个,如NtCreateFile 、NtSetEvent等。 每个这样函数,Ntdll包含一个同名的入口点。函数内部包含与处理器体系结构相关的模式切换指令,通过该指令可转换到内核模式从而调用系统服务分发器(system service dispatcher)。分发器检验某些参数,然后调用真正的内核模式系统服务,包括Ntoskrnl.exe内部的实际代码。 包含支持函数,如映像加载器(函数以Ldr开头) 、堆管理器、Windows子系统进程通信函数(以Csr开头),一般运行库过程(以Rtl开头)。也包含用户模式的异步过程调用APC (Asynchronous Procedure Call)分发器和异常分发器。,Ntdll.dll 4,28,Windows执行体是Ntoskrnl.exe的上层(内核是其下层)。执行体包含以下类型的函数: 可在用户模式下调用的导出函数,称为系统服务(system services),并通过Ntdll被导出。其中绝大多数通过Windows API来访问,或通过另一个子系统API来访问。然而有些服务,通过任何一个文档化子系统函数都无法访问(如LPC)。 可通过DeviceIoControl函数来调用的设备驱动器函数。在用户模式下可调用设备驱动程序中不与读或者写操作关联的函数。 只能在内核模式下调用的导出函数,且这些函数在Windows DDK或者Windows IFS Kit(Installable File System Kit)中已经文档化。/whdc/ddk/ifskt/default.mspx 在内核模式下调用,未在Windows DDK或者Windows IFS Kit中文档化的导出函数(如以Inbv开头的引导视频驱动程序函数)。 定义为全局符号但未被导出的函数。包括在Ntoskrnl内调用的内部支持函数,如以Iop或者Mi开头的函数。(分别是内部I/O管理器支持函数,和内部内存管理支持函数) 未定义为全局符号,而是在一个模块内部的函数。,执行体_函数类型 4,29,配置管理器(configuration manager)。 负责系统注册表的实现和管理。 进程和线程管理器(process and thread manager)。 创建或终止进程和线程。 Windows内核中实现针对进程和线程的底层支持;而执行体则在底层对象基础上又加上附加语义和功能。 安全引用监视器(security reference manager,简称SRM)。 强制在本地计算机上实行安全策略。它守护着操作系统的资源,执行对运行时对象的保护和审计。 I/O管理器(I/O manager)。 实现了与设备无关的I/O操作,负责将这些操作分派到恰当设备驱动程序以供进一步处理。 即插即用(PnP)管理器(Plug and Play manager)。 为支持一个特定设备,确定哪些驱动程序是必需的,同时也负责加载这些驱动程序。它在设备列举过程中,获取到每个设备的硬件资源需求。PnP管理器根据每个设备的资源请求,分派适当硬件资源,如I/O端口、IRQ 、DMA通道和内存位置。当设备变化(增加/移除)时,负责发送恰当的事件通知。,执行体_主要组件1 4,30,电源管理器(power manager)。 负责协调电源事件,向设备驱动程序发送电源管理I/O通知。可配置为:当系统空闲,通过将CPU置于睡眠状态从而降低电源消耗。单独设备电源消耗变化可由设备驱动程序来处理,但是需要电源管理器协调。 WDM Windows管理规范例程(WDM Windows Management Instrumentation routines) 允许设备驱动程序发布有关性能和配置的信息,接收来自用户模式WMI服务的命令。WMI信息消费客户可在本地机器上,也可在远程机器上。 高速缓存管理(cache manager)。 提高以文件为基础的I/O操作性能。让最近引用过的磁盘数据驻留在主内存中以便快速访问,延迟磁盘写操作,在将更新数据发送到磁盘之前现在内存中停留小段时间。利用内存管理器的映像文件支持来实现。 内存管理器(memory manager) 实现虚拟内存。是一种内存管理方案,为每个进程提供一个巨大的私有地址空间,其数量可大大超过当前可用的物理内存。也为高速缓存管理器提供最基本的底层支持。 逻辑预取器(logical prefetcher) 加速系统和进程的启动过程。对系统或进程启动过程中引用的数据,优化了加载过程。,执行体_主要组件2 4,31,对象管理器(object manager)。 创建、管理和删除Windows执行体对象和抽象数据类型,这些对象和数据类型往往代表了操作系统的资源,如进程、线程和各种同步对象。 LPC设施。 它在同一台机器上的客户进程和服务器进程之间传递消息。LPC是RPC(Remote Procedure Call远程调用)的一个更灵活优化版本。此RPC是指跨网的客户进程和服务器进程之间的通信设施工业标准。 公共运行库。 一组涉及范围广泛的公共运行库函数,如字符串处理、算术操作、数据类型转换,以及安全结构处理等。 执行体支持例程。 如系统内存分配(换页的和非换页的内存池) 、互锁的内存访问,以及两种特殊类型的同步对象:资源和快速互斥体(fast mutexes)。,执行体_主要支持函数 4,32,内核是Ntoskrnl.exe的一组函数以及对于硬件体系结构的底层支持(比如中断和异常分发)构成。 Ntoskrnl.exe中的这组函数提供了最为基本的机制,如线程调度和同步服务,供执行体组件使用;对硬件的底层支持则随处理器结构不同而有所区别。 内核代码主要用C编写,对那些用到特殊的处理器指令和寄存器,并且不容易在C代码中访问的任务,则保留使用汇编代码形式。 内核函数多在DDK中有详细文档描述(以Ke打头函数)。 内核提供了一组定义明确、可预知的操作系统低层原语和机制 使得执行体高层组件可做它们需要做的事情。内核实现了操作系统的基本机制,且避免了各种策略决定,从而将自己与执行体的其余部分分开。几乎将所有的策略决定都留给了执行体,只有线程调度和分发是由内核自己实现。,内核 4,33,从内核外部来看,执行体将线程和其它可共享资源表示为对象。这些对象要求策略开销:比如维护用的对象句柄,以及保护用的各种安全检查,和相应的资源配额(对象被创建时将扣除资源配额)。 内核对象(kernel objects)。 内核对象只是内核分配的一个内存块,并且只能由该内核访问。该内存块是一种数据结构,它的成员负责维护该对象各种信息。 内核对象帮助内核控制中心处理过程,并支持执行体对象创建。 控制对象(control objects)。 一组称为控制对象的内核对象建立了有关控制各种操作系统功能的语义。包括APC对象、DPC(Deferred Procedure Call,延迟过程调用)对象,以及I/O管理器使用的对象如中断对象等。 分发器对象(dispatcher objects)。 一组称为分发器对象的内核对象融合了同步的能力,改变或者影响线程的调度。分发器对象包括内核线程、互斥体(内部称为突变体 mutant)、事件、内核事件对(pair)、信号量(semaphore)、定时器,以及可等待的定时器(waitable timer)。 执行体利用内核函数来创建和维护内核对象实例,构建提供给用户模式的对象。,内核对象 4,34,内核一个主要任务是将执行体和设备驱动程序从windows所支持的各种硬件体系结构中抽象出来,或隔离这些变种之间的差异。包括处理各种功能方面(如中断处理、异常分发和多处理器同步)的变化情况。 对于这些与硬件相关功能,设计内核时也尽可能使公共代码最大化。内核支持一组可移植接口,其语义和大部分代码在不同体系结构上等同。 这组接口的实现,部分代码与体系结构相关。 差异的例子:环境切换(context switching)。从高层看,线程选择和环境切换可使用同样算法(保存前一线程环境,加载新线程环境),但不同处理器的实现仍存在体系结构差异。因为执行环境是由处理器状态(寄存器等)来描述,所以哪些信息应该保存或加载,随着体系结构的不同而有所不同。,硬件支持 4,35,硬件抽象层(HAL) 4,表2.6 在WindowsDriver Cachei386Driver.cab中的x86 HAL列表,硬件抽象层是Windows设计实现可移植性的关键。 HAL是一个可加载内核模式的模块,提供针对Windows当前运行所在的硬件平台的低层接口,隐藏与硬件相关的细节。如I/O接口、中断控制器、多处理器通信机制任何与体系结构或者机器相关的功能。 Windows内部组件和设备驱动程序不直接访问硬件;需要时,将通过调用HAL来保持可移植性。HAL例程相应文档包含在Windows DDK中。,36,设备驱动程序是可加载的内核模式模块(.sys),在I/0管理器和相应硬件之间建立链接。 设备驱动程序运行于内核模式,位于三种执行环境之一: 在发起I/O功能的用户线程的环境中。在内核模式系统线程的环境中。作为一个中断的结果(因此不在任何特定进程或者线程的执行环境中当该中断产生时,无论当前进程或线程是哪个)。 设备驱动程序类型: 硬件设备驱动程序(hardware device drivers) 通过HAL操纵硬件,对物理设备或网络输入输出。类型有总线驱动程序、人机界面驱动程序、大容量存储器驱动程序等。 文件系统驱动程序(file system drivers):可以接受面向文件的I/0请求,并将请求转换成针对某一特定设备的I/O请求。 文件系统过滤器驱动程序(file system filter drivers)比如执行磁盘镜像和加密的驱动程序,截取I/O请求并增值处理后传递的。 网络重定向器和服务器(network redirectors and servers)将文件系统I/O请求传递给某台机器,或从网络上接收此类请求。 协议驱动程序(protocol drivers)实现TCP/IP 、NetBEUI和IPX/SPX等网络协议。 内核流式过滤器驱动程序(kernel streaming filter drivers)被串联起来,对数据流进行信号处理,如录制或播放视音频。,设备驱动程序 4,37,WDM(Windows Driver Model)新增支持即插即用、电源选项。 总线型驱动程序(bus driver) 它为总线控制器、适配器、桥或带有子设备的设备提供服务,是必需的驱动程序,通常Microsoft会提供;系统中每一种总线类型(PCI、PCMCIA和USB)都有一个总线驱动程序。 功能型驱动程序(function driver) 是主要的设备驱动程序,为相应设备提供可操作的接口,是必需的,除非相应设备可以直接使用。功能型驱动程序最了解某个特定的设备,它往往是惟一能访问该设备相关寄存器的驱动程序。 过滤型驱动程序(filter driver) 用来为某一设备增加新功能,或修改来自其它设备的I/O请求或应答。可选,可以有任意数目,可放在一个功能型驱动程序之上或之下,也可放在总线型驱动程序之上。 在WDM环境中,设备不是由单个驱动程序来控制所有方面:一个总线型驱动程序负责向PnP管理器报告其总线上的设备,而一个功能型驱动程序操纵该设备。低层次过滤型驱动程序改变设备行为. 用Msinfo32.exe查看已安装的设备驱动程序。,Windows驱动程序模型WDM 4,38,常用前缀 4,表2.7 常用的前缀,以下列出了执行体组件常用的绝大多数函数前缀。i代表内部,p代表私有。,39,常用前缀 4,40,空闲(Idle)进程 (每个CPU一个线程,占用空闲的CPU时间); System进程(包含大多数内核模式系统线程); 会话管理器(Smss.exe); Windows子系统(Csrss.exe); 登录进程(Winlogon.exe); 服务控制管理器(Services.exe) 和它创建的子服务进程(如系统提供的通用服务宿主进程Svchost.exe); 本地安全认证服务器(Lsass.exe)。,系统进程 4,41,空闲进程 4,系统进程树中,第一个是系统空闲进程。进程由它们的映像文件名来标记。 空闲进程并没有运行一个实际的用户模式映像文件(目录Windows下没有文件“System Idle Process.exe”)。且不同工具中,该进程显示名称不同 表2.8 进程ID为0在各种工具中的名称,42,任务管理器将中断和DPC时间包含在系统空闲时间中。如果使用任务管理器,那么具有大量中断任务的应用系统看起来似乎是空闲的。,中断和DPC 4,43,System进程和系统线程 4,System进程(在Win2K中进程ID8,在WinXP和Win2K3中是进程ID 4)是一种特殊线程的母体。此种特殊线程只能在内核模式下运行,称为内核模式系统线程(Kernel-mode system thread)。 系统线程具备普通用户模式线程的所有属性和环境,它们只能在内核模式下运行系统空间中加载的代码。系统线程没有用户进程地址空间,因此,需要任何动态存储空间,都必须从操作系统的内存堆中分配,比如从一个换页的或非换页的池中分配。 系统线程是通过PsCreateSystemThread函数创建,该函数只能从内核模式调用。Windows及各种设备驱动程序在系统初始化阶段创建系统线程,以执行各种要求线程环境的操作。 内核会创建一个称为平衡集管理器(balance set manager)的系统线程,每秒钟被唤醒一次,从而发出各种与调度和内存管理相关的事件。高速缓存管理器使用系统线程实现预读和滞后写I/O。文件服务器设备驱动程序(Srv.sys)利用系统线程来响应网络I/O请求。 默认系统线程属于System进程,但设备驱动程序可在任何进程中创建系统线程。例如,Windows子系统设备驱动程序(Win32k.sys)在Windows子系统进程(Csrss.exe)中创建系统线程,因而这些线程可以很容易地访问该进程用户模式地址空间中的数据。,44,会话管理器(Smss.exe)是系统中第一个创建的用户模式进程。负责完成执行体和内核初始化工作的内核模式系统线程在最后阶段创建实际的Smss进程。 启动Windows的过程中,会话管理器负责许多重要的步骤,比如打开额外的页面文件、执行延迟的文件改名和删除操作、创建系统环境变量。启动子系统进程(通常只有Csrss.exe)和Winlogon进程,Winlogon进程依次创建其它的系统进程。 HKLMSYSTEMCurrentControlSetControlSession Manager注册表键,含许多配置信息。 Smss主线程执行完初始化步骤后,一直在Csrss和Winlogon的进程句柄上等待。若这两个进程有一个非正常终止,则Smss让系统崩溃,Windows依赖这两进程。 Smss创建终端服务会话(Terminal Services session),调用NtSetSys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论