2024年5月4日发(作者:)

windows内核体系结构与系统机制

每天我们都在使用Windows系统学习、编程、听音乐、玩游戏,Windows的操作想

来是很熟练了,可是你又对Windows到底了解多少呢?本系列的目的,就是让你对

Windows系统有个更直观、更清楚、更彻底的认识。虽然我们大多数人看不到Windows

的源码,对其内存调度算法这种最深层次的技术内幕不能明窥,但是我们可以做到比现在

知道的更多,了解这些之后你会发现在Windows上面开发会轻车熟路,任何木马病毒到

了你机器上不过只会成为你的试验品。 鉴于Windows 9X内核早已淘汰,技术过时,

在此不予讨论。主要是针对Windows2000(Windows 5.0)以后版本,尤以2000为主。

要知道xp是Windows 5.1版本,2003也才是5.2版本。那么,对于本系列提到Windows

OS技术,统指Windows 5.X技术。

分析一个软件,最容易的入手方法就是先搞清楚它的每个文件都是干嘛的。我们先来

让大家对自己正在使用的Windows 操作系统有个直观认识。请在你使用的Windows

2000或Windows XP上,于WINNT/system32或Windows/system32目录(系统目

录)下,找到以下几个文件:、、、、

、。这几个是Windows系统赖以执行的关键,只要你能在图形界

面下操作Windows,这几个文件就肯定在发挥作用。值得一提的是Windows的图形界面

子系统是在内核实现的(知道为什么Linux的图形界面怎么着都没Windows好看好用了

吧)。对这几个文件的功用给出简介如下::Hardware Abstraction Layer,硬

件抽象层。 Windows 2000也是一个软件系统,与我们平时从事的项目开发工作一样,

项目初期需要确定开发目标。而Windows2000开发当初制定的开发目标之一就是要能够

在多种硬件平台上移植(Windows2000支持单处理器、多处理器、Compaq SystemPro),

不同的硬件平台上有不同的硬件抽象层实现。在我们通常使用的标准PC上这个文件就是

(在Compaq SystemPro上是,满足不同硬件平台的硬件抽象层文

件在Windows安装盘上都有,安装时根据计算机的平台类型只复制相应的文件)。

HAL是可加载的内核模式模块(DLL动态链接库文件),它为Windows系统所运行的硬

件平台提供低级接口。它隐藏硬件相关的细节,如I/O接口、中断控制器和多处理器通信

机制等这些与特定硬件结构机密相关的内容,而向操作系统内核提供统一的硬件接口函数。

:NT OS Kernel,毋庸置疑,这就是Windows系统的内核,确切说内核

是在这里面实现的,只有1.6兆,与目前Linux2.4版本内核编译后的大小差不多。这个文

件实际上提供两部分的主要的功能: 一是系统内核,这在硬件抽象层之上,提供系统

的基本机制(线程调度和同步、内存分配等等一切你在操作系统原理书上可以看到的最复

杂的那一部分,如果你觉得操作系统课程学得太抽象又有点跟自己过不去,试着把这个

反汇编了读一读吧,不多,也就300多万行汇编码,只是找不着确切的

入口点)。同时内核还提供硬件支持,实际上是将驱动程序等上层程序的调用对硬件进行具

体化,反过来讲就是硬件抽象层再抽象一次,暴露给上层一个统一的接口,写过Windows

驱动程序或是看过DDK的同学一定对Windows WDM驱动的固定编写模式有很深的印

象。 二是执行程序(称为Executive)。这个执行程序的东东可真是多啊,我在捣腾的

时候都有点让它搞得晕晕的,不过现在来看呢其实也就一句话:执行程序是开发者与

Windows之间交互的窗口,再直观点说执行程序对外暴露Windows开发函数,经过几次

封装后供开发者使用。我们先不管这些函数的功能分类,按功能分类的话东西有点多有点

乱,容易让人puzzled。按开发者的角度来看,有这么几类:Win32 API函数,这是做应

用开发用的,我们常说的MFC、ATL是对其进行的面向对象化及封装;DDK API函数和

IFS kit函数,这是供驱动开发用的,DDK还耳熟些,不过如果你浏览过DDK并且够细心

的话就会觉得奇怪为啥OS很重要的一部分——文件系统驱动的开发没有提供,IFS

(Installable File System) Kit就是做这个的啦。 我们前面说过Windows把图形界

面处理放在了内核态来执行,因此不得不提一个比较特殊的驱动:,你看到的

漂亮的Windows桌面就是这个文件画出来的。 讲到这里,前述内容是Windows系

统在内核态运行的基本功能,也就是说,这是运行于CPU ring0级别的(不懂什么是ring