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
发布评论