在正式些和主题相关内容以前,先说一句题外话,我从事计算机方面工作也有很多年了,基本上每天都在和Winows打交道,我每天也在不停地学习基于Windows 系统上的一些软件和技术。忽然有一天我发现,我的水平无法得到突破,我知道我遇到了瓶颈。其实这么多年来一直都是在知道怎么用,很少深究底层的东西,也许这就是原因,也许不是全部的原因,但肯定是主要原因之一。

      知其然,知其所以然,这句话大家都懂,但很多人只能做到前面一句,对于一般用户而言,能做到前面一句就可以了,但作为一个从事专业计算机工作的人来说,还应该知其所以然。这样才能有更大的发展空间。

     上面不知所云的说一些,主要是想大家明白了解一个操作系统的重要性,今天这篇博文只是我学习过程中的理解,可能有理解错误的地方,欢迎大家指正。今天就从Windows NT的体系结构开始吧。

      我们现在用的Windows 操作系统都是基于Windows NT内核的,Windows XP是NT5.1 Windows 7是NT6.1

概念

首先我们来了解一些基本概念

Windows API

就是我们常说的应用程序接口,Windows平台上应用程序都需要通过这些接口来访问或者调用系统资源。

进程和线程

进程是一个其容器,里面包含了执行一个程序所需要的资源,如地址空间,安全令牌等等,每一个进程都对一个可执行映像文件(空闲进程和系统进程除外)

线程是进程内部的一个视体,也是Windows执行此进程的调度实体,同一进程内的线程共享该进程内的虚拟地址空间。

服务

在Windows中服务可以指一个驱动程序,也可以指一个windows服务器进程

windows服务有三种名称,经常名称、注册表中的内部名称以及在服务管理工具中的显示名称。

虚拟内存

虚拟内存提供了一个内存的逻辑试图,可以经虚拟内存中的虚拟地址映射到物理内存的物理地址,这样可以保护一个进程不会闯入到另一个进程。

终端服务和多个会话

终端服务指的是Windows为了单个系统中支持多个可交互的用户会话而提供的能力

在本地就算登陆的的称为控制台会话,可以同远程桌面来建立终端服务,也可以通过mstsc /Admin(Windows 7)或者mstsc /console(Windows XP SP3之前使用)来连接到控制台会话。

注册表

注册表是系统数据库,它包含了引导和配置系统所必需的信息,系统范围的控制Windows操作的软件设置、安全数据库,以及针对每个用户的配置信息。

内核模式(kernel mode)

操作系统内核代码运行在处理器的特权模式

用户模式(user mode)

应用程序代码运行在非特权模式下,只有很有限的一组接口可以使用,对系统数据的访问受到限制,并且无法访问硬件

模式的切换

当用户模式程序需要一个系统服务是,处理器将捕获该调用,然后将该调用切换到内核模式。系统服务完成任务后,系统将模式切换回用户模式

在了解了一些概念之后,我们来看一下Windows NT系统的总体结构

图片1

组件

我们首先来看看用户模式下的几个组件

系统支持进程

以下系统进程是每一个Windows系统都会出现的进程

空闲进程(System Idle Process)

该进程没有一个实在的可执行映像文件,他占用了CPU的空闲进程,你在任务管理中可以看到,大多数情况向该进程的CPU占用率总是最高的

System进程

该进程是内核模式系统线程的母体,他也没有一个实在的可执行映像文件

会话管理器(Smss.exe)

它是系统中创建的第一个用户模式进程,是负责完成执行体和内核初始化工作的内核模式系统线程在最后阶段创建了实际的Smss进程。同时该进程将会启动系统子进程(Csrss.exe)和WinLogon进程。

WinLogon进程

负责处理交互式用户登陆和注销,当捕捉到用户的用户名和密码后,将他们送到本地安全认证服务器进程(Lsass.exe)

本地安全服务器进程(Lsass.exe)

对用户名和密码执行验证,如果通过验证的话,将会为该用户建立一个安全令牌,Windlogon利用此安全令牌建立改用会话中的初始进程

服务控制管理器(Services.exe)

负责启动、停止服务进程,也负责与这些服务进程进行交互。

用户应用程序

就是我们每天接触到的一些程序,如一些播放软件,杀掉软件和Office等等,应用程序的类型有分为很多种,如32位程序、64位程序 MS-DOS 16位等等

环境子系统

实现了操作系统环境的支持部分,这个所谓的环境是指操作系统展示给用户或程序员的个性化部分

最早的时候Windows带了3个环境子系统,Windows、POSIX和OS/2;现在Windows 操作系统基本上只有一个Windows子系统。

子系统DLL

当用户模式下的一些应用程序或者服务需要访问或者调用内核模式下的一些资源的话,都是通过该DLL来实现的

下面来看看内核模式下的一些组件

执行体

Windows执行体是Ntoskrnl.exe的上层

包含了基本的操作系统服务,比如内存管理、进程和线程管理、安全性、I/O、网络和跨进程通信

内核

内核是有Ntoskrnl中的一组函数以及对硬件体系结构的底层支持构成

是由一组低层次的操作系统功能构成的,比如线程调度、终端和异常分发,以及多处理器同步。他也提供了一组例程和基本对象,执行体的其余部分利用这些离场和对象实现更高层次的功能。

内核实现了操作系统的基本机制,避免了各种策略的决定,

另一个主要任务是将执行体和设备驱动程序从Windows所支持的的各种硬件体系结构中抽象出来。或者隔离出这些变种之间的差异

驱动程序

驱动程序有以下几种类型

硬件设备驱动程序

通过HAL操纵硬件,从而将输出写到物理设备,或者从物理设备或网络上接受输入

文件系统驱动程序

可以接受面向文件的I/O请求,并且将这些请求转换成针对莫一特定设备的I/O请求

文件系统过滤驱动器驱动程序

比如那些执行磁盘镜像和加密的驱动程序

网络重定向器和服务器

分别是指那些将文件系统I/O请求传递给网络上某台机器,或者从网络上接受此类请求的文件系统驱动

协议驱动程序

实现诸如TCP/IP、NetBEUI和IPX/SPX之类的网络协议

内核流式过滤器驱动程序

这样的驱动程序被串接起来,以便对数据流进行信号处理,比如录制或者播放视音频。

驱动程序的模型有以下几类

总线驱动程序模型

它为总线控制器、适配器、桥或任何带有子设备的设备提供服务

功能型驱动程序

是主要的驱动程序他们为相应的设备提供了可操作的接口

过滤型驱动程序

用来为某一设备增加新的功能,或修改来自其他设备的I/O请求或应答

硬件抽象层(HAL)

是一层特殊的代码,他把内核、设备驱动程序和Windows执行体的其余部分,跟与平台相关的硬件差异隔离开来。

HAL是一个可加载的、内核模式的模块,它提供了针对Windows当前运行所在的硬件平台的底层接口。

保证操作系统的在不同硬件平台上的可移植性。

上面说了这么多,我忽然发现都是在说概念,呵呵,不过很多东西都是从概念开始的,了解了这些概念才能更输入的了解更深层次的内容。

如果这篇博文能让一些朋友对NT系统总体结构上有个简单的框架,我会很高兴,后面我会继续和大家分享我学习总结,谢谢大家的支持,希望大家能一起学习和讨论

 

参考书籍:本文中的资料均参考《深入解析Windows操作系统》第四版。