您的位置:首页 > 其它

Windows内核学习:OS体系结构

2009-09-17 08:40 351 查看

作者:shenzi

链接:http://blog.csdn.net/shenzi



Windows内核学习:OS体系结构

Windows发展史

Windows NT(New Technology)是Windows核心内核,Windows操作系统的演化也就是Windows NT内核的演化。我们最为熟悉的Windows XP系统是基于NT5.1内核。

1.1Windows NT的主要特点


32位操作系统,多重引导功能,可与其它操作系统共存。

实现了“抢先式”多任务和多线程操作。

采用SMP(对称多处理)技术,支持多CPU系统。

支持CISC(如Intel系统)和RISC(如Power PC、R4400等)多种硬件平台。

可与各种网络操作系统实现互操作。如:UNIX、Novel Netware、Macintosh等系统;对客户操作系统提供广泛支持,如MS-DOS、Windows、Windows NT。

安全性达到美国国防部的C2标准。

1.2Windows操作系统家族

发行时间

产品名称

版本号
1993年9月

Windows For Workgroups 3.11

3.11
1994年9月

Windows NT 3.5

NT 3.5
1995年5月

Windows NT 3.51

NT 3.51
1995年8月

Windows 95

4.0.950
1996年7月

Windows NT 4.0

NT 4.0.1381
1998年6月

Windows 98

4.10.1998
2000年2月

Windows 2000

NT 5.0.2195
2001年10月

Windows XP

NT 5.1.2600
2003年4月

Windows Server 2003

NT 5.2.3790
2007年1月


Windows Vista

NT 6.0.6002
2008年2月

Windows Server 2008

NT 6.0.6002
2009年10月


Windows 7

NT 6.1.7600

Windows体系结构

2.1总体结构


还是先来看看Windows系统组成吧,Windows到底有些什么东西?





图1-1 Windows NT体系结构





文件名

组件

Ntoskrnl.exe

执行体和内核

Ntkrnlpa.exe

支持物理地址扩展(PAE)的执行体和内核,允许多大64GB的物理内存的寻址

Hal.dll

硬件抽象层

Win32k.sys

Win32子系统的内核模式部分(图形子系统)

Ntdll.dll
内部支持函数和执行程序函数的系统服务调度占位程序(stub)

Kernel32.dll

Advapi.dll

User32.dll

Gdi32.dll

Win32子系统DLL


表1-1 Windows NT内核系统文件



2.2
Windows系统关键组件



图1-2 Windows NT体系结构2


用户模式,内核模式介绍



了避免用户应用程序访问和(或)修改重要的操作系统数据,Windows采用两种处理器访问模式态:用户模式和内核模式。用户应用程序在用户模式下运行,
而操作系统代码(如系统服务和设备驱动程序)则在内核模式中运行。内核模式是指处理器的执行方式,而该处理器授予所有系统内存和所有CPU指令访问权限。
通过为操作系统软件提供高于应用程序软件的特权级别
,处理器就为操作系统设计人员提供了必要的基础,以确保错误应用不会破坏整个系统的稳定性。

尽管每个Win32应用程序都有其自身转悠的内存空间,但内核模式操作系统和设备驱动程序代码共享同一虚拟地址空间。一旦处于内核模式,操作系统和设备驱动程序代码就拥有对系统空间内存的完全访问,因此在加载第三方设备驱动程序时应该小心,因为设备驱动程序运行于内核态。


户应用程序在调用系统服务时从用户模式切换到内核模式,从用户模式到内核模式的切换时通过使用特殊的处理器指令而实现的,该指令导致处理器切换到内核模
式。操作系统俘获该指令,注意到系统服务正在被请求,验证线程传递给系统函数的参数,然后执行内部函数。在将控制返回给用户线程之前,处理器模式再切换回
用户模式。

注意:从用户模式到内核模式的切换(和返回)不影响本身的线程调度——模式切换并不是环境切换。

环境子系统

Windows NT原先支持三个环境子系统:Windows,OS/2,POSIX
.

Windows子系统
在Windows操作系统中
必须的,Windows子系统退出Windows将会崩溃。
OS/2,POSIX子系统事实上是Windows应用程序。

OS/2子系统在WIN 2000中被舍弃,
POSIX则在XP/Server 2003

系统中被舍弃。

Windows环境子系统



API DLLs

Kernel32.DLL, Gdi32.DLL, User32.DLL,Advapi32.DLL
环境子系统进程

CSRSS.EXE(Client/Server Runtime Server Subststem)
内核模式图形驱动

Win32.sys

API DLLs:

通过对Ntoskrnl.exe和Win32.sys的调用将存档的Win32 API函数翻译为合适的非存档的内核模式系统调用。

CSRSS.EXE


WINSRV.DLL 控制台窗口,HardError

CSRSRV.DLL 进程,线程维护,调试

BASESRV.DLL 安全,登陆


Win32.sys:

窗口管理器,图形设备接口(实现USER&GDI 函数)
,调用底层图形设备驱动实现图形显示和打印机功能




对于客户端
的每一线程,在Win32子系统进程中都有一个专用的,配对的服务器线程等待客户线程的请求。一个特殊的被称为快速LPC


的进程间通信工具用来传送线程间的信息。和一般的线程环境切换不同,使用快速的LPC的配对线程间切换在内核中不产生重新调度事件,所以在内核的抢先型线程调度程序中,服务器线程在获得它的时间片之前可以在客户线程的剩余时间片中运行。



图1-3 用户程序调用


NTDLL.DLL


NTDLL.DLL主要是用于子系统DLL的一个特殊系统支持库。它包含两种类型的函数:

Windows系统服务调用接口:





图1-4

[b] 子系统,子系统DLL和其它本机映像使用的内部支持函数






图1-5

执行体程序

执行体程序是
Ntoskrnl.exe的上层:

[b]配置管理器


[/b]
[b]进程与线程管理器


[/b]
[b] 安全引用管理器


[/b]
[b]I/O管理器


[/b]
电源管理器

LPC功能

高速缓存管理器


虚拟内存管理器


...

...

[/b]

内核


内核由Ntoskrnl.exe中的一系列函数组成,它提供执行程序组件所使用的基本机制(如线程调度和同步服务)以及低级硬件体系结构的相关支持(如中断和异常调度),它们在每一处理器体系结构上是不同的。

内核中的许多函数存档在DDK中,因为需要它们实现设备驱动程序。

设备驱动程序



设备驱动程序是可加载的内核模式模块(通常以.sys结尾),它是I/O管理器与相关硬件的接口。

设备驱动程序不直接操作硬件,但它们调用HAL中的函数来实现对硬件的操作。

硬件抽象层


HAL是可加载的内核模式模块(HAL.DLL),它为Windows运行的硬件平台提供低级接口。它隐藏硬件相关细节,如I/O接口,中断控制器和多处理器通信机制——指定结构和机器相关的函数。

Windows需要平台相关信息时,不直接访问硬件,内部组件以及用户编写的设备驱动程序通过调用HAL例程获得移植。

参考资料:

Mark E. Russinovich and David A. Solomon,
Microsoft Windows Internals, 4th Edition, Microsoft
Press, 2004.

深入研究Windows内部原理系列之一:Windows的昨天、今天和明天

深入研究Windows内部原理系列之二:Windows体系结构-从操作系统的角度

深入研究Windows内部原理系列之三:Windows体系结构-从应用程序的角度
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: