Windows系统结构
Windows系统结构,如图:
Windows 采用了双模式结构来保护操作系统本身。操作系统核心运行在内核模式,应用程序的代码运行在用户模式下。每当应用程序需要用到系统内核或内核的扩展模块(内核驱动程序)所提供的服务时,应用程序通过硬件指令从用户模式切换到内核模式中;当系统内核完成了所请求的服务以后,控制权又回到用户模式代码。
一、 Windows内核结构
Windows内核分为三层,硬件抽象层(Hardware Abstraction Layer ,简称HAL), HAL之上是内核层,有时候也称为微内核,在内核层之上则是执行体(executive)层。
硬件抽象层的用意是把所有与硬件相关联的代码逻辑隔离到一个专门的模块中,从而使上面的层次可能做到独立于硬件平台。
内核层和执行层的分工是,内核层实现操作系统的基本机制,而所有的策略决定则留个执行体。
Windows 内核的组成结构,如图:
应用程序最终通过ntdll.dll 切换到内核模式下的执行API函数中,以调用内核中的系统服务。Ntdll.dll 是连接用户模式代码和内核模式系统服务的桥梁。
1.1 Windows内核中的关键组件
1.HAL(硬件抽象层)
Windows Server 2003 的HAL 列表(Intel X86 处理器)
HAL 文件 | 所支持的硬件系统 |
Hal.dll | 标准PC |
Halacpi.dll | ACPI(高级配置和电源接口)PC |
Halapic.dll | APIC(高级可编程中断控制器)PC |
Halaacpi.dll | APIC ACPI PC |
Halmaps.dll | 多处理器PC |
Halmacpi.dll | 多处理器ACPI PC |
2. 内核(或微内核)
它是内核模块ntoskrml.exe 中的下层部分(上层部分为执行体),最接近HAL层,负责现场调度和中断、异常的处理;对于多处理器系统,还负责同步处理器之间的行为。
Windows 内核实现了抢占式线程调度机制。
Windows内核管理两种类型的对象:分发器对象(dispatcher object) 和控制对象。分发器对象实现了各种同步功能。Windows内核实现的分发器对象包括事件(event)、突变体(mutant)、信号量(semaphore)、进程(process)、线程(thread)、队列(queue)、门(gate)和定时器(timer)。控制对象被用于内核的操作,包括异步过程调用(APC)、延迟过程调用(DPC)、中断对象等。
3. 执行体
执行体是内核模块ntoskrnl.exe 的上层部分,包含5种类型的函数
- 被导出的、可在用户模式下调用的函数。如ntdll.dll。
- 虽已被到处并且可在用户模式下调用,但无法通过任何一个Windows API调用的函数。
- 只能在内核模式下调用的导出函数,并且在Windows DDK/WDK中有关这些函数的文档。
- 供执行体组件之间相互调用,但未被文档化的函数。
- 属于一个组件的内部函数。
执行体包含以下组件:
- 进程和线程管理器。负责创建进程和线程,以及终止进程和线程。
- 内存管理器。实现了虚拟内存管理,负责系统地址空间的内存管理,为每个进程提供了一个私有的地址空间,并且支持进程之间内存共享。
- 安全引用监视器(SRM,Security Reference Monitor)。强制在本地计算机上实施安全策略,守护着操作系统的资源,执行对象的保护和审计。
- I/O 管理器。实现了与设置无关的输入和输出的功能,负责将I/O请求分发给正确的设备驱动程序以便进一步处理。
- 缓存管理器。为文件系统提供了统一的数据缓存支持,允许文件系统驱动程序将磁盘上的数据映射到内存中,并通过内存管理器来协调物理内存的分配。
- 配置管理器。负责系统注册表的实现和管理。
- 即插即用管理器。负责列举设备,并为每个列举到的设备确定哪些驱动程序是必需的,然后加载并初始化这些驱动程序。
- 电源管理器。负责协调电源事件,向设备驱动程序发生电源I/O通知。
执行体还包含4组主要的支持函数,如下:
- 对象管理器。负责创建、管理和删除Windows执行体对象,以及用于表达操作系统吸引的抽象数据类型,比如进程、线程和各种同步对象。
- LPC设施。负责同一台机器上的客户进程和服务器进程之间传递消息。
- 一组运行时库函数。
- 执行体支持例程。例如系统内存分配、互锁的内存访问,两种同步对象(资源和互斥体)的支持。
4. 设备驱动程序
设备驱动程式可以懂得加载到系统的模块,其文件扩展名为.sys,是标准的PE文件格式。
设备驱动程序有三种基本类型:
- 即插即用驱动程序(即WDM驱动程序)。
- 内核扩展驱动程序(非即插即用驱动程序)。
- 文件系统驱动程序。
5. 文件系统/存储管理
Windows的原生文件系统是NTFS(NT File System),驱动程序为ntfs.sys。还有一个文件系统格式是FAT(File Allocation Table),是DOS时代发展的文件系统格式。
Windows支持两种形式的过滤驱动程序:一种直接插入到设备栈中,能够看到每个经过设备栈的文件I/O请求;另一种基于Windows提供的过滤管理器驱动程序(FltMgr)的I/O过滤框架,称为文件系统小过滤驱动程序,以回到方式来想要FltMgr的事件。
6.网络
Windows 主要的网络API:
- Windows 套接字,简称Winsock。实现并扩展了BSD套接字标准。
- WinInet 。一个高层网络API,支持Gopher、FTP、HTTP等多个协议。
- 命名管道(named pipe)和邮件槽(mailslot)。用于不同进程之间进行通信。支持不同机器上的进程之间相互通信。命名管道支持连接方式的通信模型;邮件槽支持非链接方式的通信模型,客户进程可以发送广播信息。
- NetBIOS 。
- RPC。
二、 Windows子系统
Windows子系统包含内核模式和用户模式,内核模式部分核心是Win32k.sys ,包含2部分,窗口管理和图形设备接口,窗口管理负责收集分发消息,控制窗口显示和管理屏幕输出。图形设备接口部分包含各种形状绘制及文本输出功能。用户模式部分包括Windows子系统csrss.exe 以及一组动态链接库(DLL)。Csrss.exe 进程主要负责控制台窗口的功能,以及创建或删除进程和线程等。子系统Dll 则被直接链接到应用程序中,包括kernel32.dll ,user32.dll,
gdi32.dll,advapi.dll等,负责实现已经文档化的Windows API函数。
窗口管理:
Windows 子系统的用户界面管理有一个层次结构,通常应用程序只是在一个默认的桌面上运行。Windows子系统窗口管理层次结构:
每个子系统会话都有自己的会话空间,属于某一个会话的资源将从该会话空间中分配。当用户登录到Windows时,操作系统将为该用户建立一个会话;即使用户通过远程桌面或终端服务连接到一个系统中,系统也会为该用户建立一个单独的会话。
在一个会话中,有一个交互式窗口站,可能还有非交互式窗口站。交互式窗口站中通常有三个桌面:登录桌面、默认桌面和屏幕保护桌面。
图形设备接口:
Windows子系统的图形模块结构
Windows的图形引擎有两方面的特点
首先,它提供了一套与设备无关的编程接口,即GDI,这使得应用程序可以使用各种底层显示设备的差异;
其次,应用程序与图形设备驱动程序之间的通信足够高兴,从而即使在频繁的输出和刷新图形元素的情况下,Windows也能够为用户提供良好的视觉效果。
系统线程和系统进程
Windows 关键系统进程介绍:
系统空闲进程(Idle),PID为0,每个处理器或核对应有一个线程
System进程,xp,server2003 PID 为4,包含了内核模式系统线程
会话管理器(Session manager smss.exe),这是Windows系统中第一个创建的用户模式进程。启动了子系统进程csrss.exe 和winlogon.exe。
登录进程winlogon.exe,负责处理交互用户的登录和注销。
Windows 子系统进程csrss.exe , 负责为用户提供一个子系统环境,包括提供控制台窗口的功能,以及创建和删除进程和线程等。
本地安全权威子系统进程(lsass.exe),负责本地系统安全策略。
Shell 进程explorer.exe 。windows 默认Shell,提供了系统与用户打交道的各种界面,包括开始菜单,任务栏等。
服务控制管理器services.exe ,负责管理Windows的系统服务。