日期:2014-05-17 浏览次数:21006 次
Windows NT中的NT意为New Technology,其实Microsoft自从93年推出的第一个windows NT 3.1到即将发布的windows 7都属于NT版本的范畴,只不过是Windows 2000之后的版本不再以内核版本号命名。
Microsoft Windows NT 3.1 (1993)
Microsoft Windows NT 3.5 (1994)
Microsoft Windows NT 3.51 (1995)
Microsoft Windows NT 4.0 (1996)
Microsoft Windows 2000 (Windows NT 5.0) (1999)
Microsoft Windows XP (Windows NT 5.1) (2001)
Microsoft Windows Server 2003 (Windows NT 5.2) (2003)
Microsoft Windows Vista (Windows NT 6.0) (2006)
Microsoft Windows Server 2008 (Windows NT 6.1) (2008)
Microsoft Windows 7 (Windows NT 6.1) (2009夏末发布)
NT体系中最大的特点莫过于系统分为内核模式与用户模式,在这里就着重谈一下这两个模式的特点。
使用内核模式或者用户模式是由硬件控制的处理器状态,NT利用硬件的特性对内存的访问进行控制。其中对内存页面的读写控制主要体现在3方面:保护系统页面,用户程序不可访问。避免了由于用户程序错误对系统页面的影响;用户进程相互之间的保护,隔离用户进程避免相互干扰;对代码区域的“不可写”保护。
内核模式和用户模式能够执行的指令也有区别,特权指令只能在内核模式下运行,用户模式下并不能使用CPU提供的所有功能。
Windows NT使用的模式可以用Performance Monitor查看Processor对象的两个计数器”Privileged Time”和”User Time”,可看到CPU在内核模式和用户模式下所花的时间。
?
两种模式的状态何时切换呢?切换发生在系统调用或者中断发生时。
系统调用:当应用程序调用系统功能时,从用户模式切换到内核模式。调用完成后返回用户模式。
中断发生:直接进入内核模式。
两种模式与线程有何种关系呢?线程可以在两种模式之间来回切换,CPU的运行模式和线程调度没有必然联系。
一、谈到Windows体系结构以及它的两种模式,就不得不提到Windows子系统。因为正是由众多Windows子系统所组成的内核模式和用户模式最终构成了Window操作系统的整个体系结构。示意图如下所示,
?1、内核
Ntoskrnl.exe(NT体系结构中最核心的部分)
(1)、执行体功能:进程和线程管理器、虚拟内存管理器、安全引用监视器(Security Reference Monitor)、I/O管理器、即插即用管理器、电源管理器、缓存管理器、其他一些服务组件,比如对象管理器、LPC、一些库函数和支持函数。
(2)、内核功能:供其他组件使用的底层操作系统、线程调度、中断处理、多处理器的同步。
此外Ntkrnlpa.exe? 支持PAE(物理地址扩展)的执行体和内核—特殊版本的内核,用于在32位系统对超过4GB物理内存寻址的内核。
2、硬件抽象层(HAL)
硬件抽象层用于屏蔽硬件的差异,保证内核在任何硬件环境下保持可移植性,在内核不变的情况下可更换硬件。它对硬件平台的细节进行了抽象,包括I/O接口,中断控制器等
Windows 2000/XP/2003支持如下几种硬件结构
Hal.dll? 标准PC
Halacpi.dll 高级配置和电源接口(APIC)PC
Halapic.dll 高级可编程中断控制器(APIC)PC
Halaacpi.dll APIC ACPI PC
Halmps.dll 多处理器PC
Halmacpi.dll 多处理器ACPI PC
3、I/O管理器
(1)、Windows的I/O管理结构灵活,它将磁盘I/O、网络I/O等抽象成IRP(I/O请求包)。所以I/O管理器是一个用于传递IRP的框架,通过IRP控制了所有I/O操作的处理过程(唯一的例外:快速I/O不使用IRP)
(2)、I/O管理器工作过程:
>为每个I/O操作创建一个IRP
>把IRP传递给正确的驱动程序
>当I/O操作完成时删除IRP
(3)、驱动程序与I/O管理器的关系:
>向I/O管理器登记必要的信息
>接收IRP
>执行IRP指定的操作
>把IRP传回给I/O管理器,或者通过I/O管理器传递给另一个驱动程序以便进一步处理。
4、内核模式驱动程序Win32k.sys
Win32k.sys包括窗口管理器和图形设备接口GDI,其作用是高效的处理用户图形界面,灵活的管理窗口。
(1)、窗口管理器。控制窗口显示、管理屏幕输出、收集来自键盘鼠标和其它设备的输入、把用户消息传递给应用程序。
(2)、图形设备接口(GDI)。这是针对图形输出设备的函数库,包括画线、文本和各种图形的函数,以及一些用于控制图形操作的函数。
5、环境子系统进程
Win32子系统进程csrss.exe作用包括控制台窗口、创建或删除进程或线程、对16位虚拟DOS机的支持。
注:对OS/2和POSIX的支持通过其他方式支持,这里不再说明。
6、子系统DLL:
子系统DLL 包括Kernel32、Advapi32、User32、GDI32等,为Windows应用程序调用系统服务和Win32子系统提供接口模块。
7、Ntdll.dll
内部支持函数和执行体函数的存根函数,将用户模式的请求转译为内核模式,在这一层上CPU进行环境切换(sysenter/sysexit)。
用户程序与系统的交互也就是用户模式和内核模式的切换方式如下,
(1)、用户程序通过子系统直接调用内核执行体所提供的函数
(2)、用户程序通过子系统调用Win32 User/GDI,直接从用户模式切换到内核模式,调用完成后返回。
(3)、用户程序通过环境子系统csrss.exe,相对过程要经过4次环境切换,效率较低。
8、系统进程和系统线程
Smss.exe、Winlogon.exe、Services.exe
二、对于Windows Vista(Windows NT 6.0)在内核上的变化下面简要介绍一下
1、? 线程调度更加公平:更精确地计算线程执行时间,按照线程执行时间而不是时间点调度。
2、? I/O系统的改进
(1)、I/O完成端口的改进:I/O完成端口用于提高系统对I/O处理的吞吐量。之前的版本每次完成都立即切换到发出I/O的那个线程,而不管该线程是否需要I/O完成的结果。在Vista中,延迟到该线程来读取或者处理此I/O请求,从而避免了不必要的线程环境切换。
(2)、同步I/O可以被取消:既可以取消当前线程发出的I/O,又可以取消其他线程发出的I/O。比如系统的文件对话框都支持取消操作,访问远程计算机时在等待连接过程中都可以取消,避免了由于网络路径不可用需要等到连接超时之后才能进行下一步操作。
(3)、I/O优先级的改进:
之前版本的I/O优先级都是根据线程I/O优先级来确定,Vista引入了两种I/O优先级类型--I/O优先级和I/O带宽预留。这样使得后台任务更少的干扰前台任务。
3、? 内存管理的改进
(1)、内存池的大小可以是动态的:在32位Vista系统中,虚拟内存的分配可以根据需要动态变化。主要针对换页内存池、非换页内存池和会话内存池。
(2)、SuperFetch:对应XP中的Prefetcher,Prefetcher在进程启动时候针对单个进程来预取数据。例如启动Word这样比较大的程序时,如果不使用Prefetcher预先处理进程WINWORD.EXE启动效率会非常低,Prefetcher可以对每个程序预留内存页面以提高进程启动的速度。在Vista中,SuperTetch能够根据更加复杂的模式来预取数据,例如可以跨越多个应用程序。
(3)、ReadyBoost:支持用Flash(闪存)来缓存,介于RAM和硬盘之间,数据可以被压缩和加密。如果是顺序访问,Flash的速度不如硬盘。但对于缓存的访问常是随机的,Flash的性能优于硬盘。
4、? ReadyBoot 引导和停机
(1)、使用引导配