

系统启动的过程(基础知识)
Bios自检---bios读取mbr中的分区表信息和启动代码---mbr启动ntldr初始化能支持xp的最小系统环境(文件为c:/ntldr)---ntkdr读取启动文件选项(文件为c:/boot.ini)---在启动选中选xp---ntldr调用ntdetect(文件为ntdetect.com)收集当前系统硬件信息并写入注册表—读取硬件配置文件或跳过---将核心层和硬件抽象层装入内存(c:\windows\system32\ntoskrnl.exe和hal.dll)---启动其他服务和驱动程序---加载会话管理器及动winlogon(c:\windows\system32\smss.exe和winlogon.exe)显示登陆界面 2 V1 D9 \; Q- @
- f+ ~- ]: R! B$ ?$ L. c: W下面介绍核心层硬件抽象层和用户层
* l7 f4 k# y" O# V; U9 o$ u8 o, K6 U+ T7 W" ^
8 T( a1 y. {. K+ z) {6 Z
( U2 {1 J& A2 N( l' v h! N. x# c+ Y$ |8 v
操作系统作为一个复杂的运作体系,其内部是必须实现一定的功能模块来进行分工合作的,这些功能模块像金字塔一样层层堆积,形成了系统的几个“层”,分别是系统核心层、硬件抽象层、用户层。3 {& @$ D* w8 f5 k6 {
( V: p, u/ R2 V; P. c. a系统核心层(Kernel Layer)位于整个操作系统的最底层,负责系统的基本运作,在这一层里的所有行为都由系统内置的指令来实现,所有外界因素都不会对这一处的行为造成影响。能直接进入这个层交互的程序不多,除了操作系统自身,第三方厂商若要能在此层直接工作,必须和系统厂商建立合作关系,使用系统厂商提供的接口函数才能进入。目前能在这个层面直接工作的杀毒软件只有赛门铁克的Norton AntiVirus。! Y% a. g/ ], D8 Q) r$ x6 W/ Y
7 t. A" ]% ?2 m5 U
. i4 ^7 _- ^0 d4 _% H! K/ Z9 M
硬件抽象层(Hardware Abstraction Layer)是美国微软公司为了便于操作系统在不同硬件结构上进行移植而提出的将系统底层与硬件相关的部分独立运作的思想,
' E Z0 }* z% |5 q. U1 H$ x. r7 ]HAL为系统实现了“硬件无关性”,即在不同的硬件平台上,硬件与操作系统的交互也不会有所差异,这样一来,硬件厂商开发驱动的难度便能大大降低,HAL将硬件的接口细节隐藏起来,并为操作系统提供一个标准硬件交互接口,目前所有的硬件驱动都工作在这个层面上,当外界硬件存在指令请求时,驱动程序响应请求并将指令通过HAL转换为系统核心层能理解的指令交给内核执行,如果未找到相应的驱动程序类型,则将其视为“默认硬件”(Default Hardware)处理,什么叫“默认硬件”呢?最简单的例子就是进入安全模式,这时候大部分驱动程序不会被加载,此时的系统便是工作于“默认硬件”上。大部分使用“软件驱动”解决方案的杀毒软件就是在HAL层上虚拟了一个硬件来达到与核心层交互的效果,如McAfee、卡巴斯基等,瑞星2006也是通过这个方案实现了内核交互。* ]% V, m* k8 ~1 @- p$ ?. t
9 U. R4 j+ M4 `9 U
5 X3 B& P+ I- T% E- ?& X
! C& u2 a4 v4 L: L# q, u用户层(User Layer)就是平时我们直接看到的部分,例如桌面,大部分杀毒软件也是在这一层运行的,主要用于用户接口交互和将指令传递到杀毒引擎。一般运行于Ring3的程序行为也产生于此,一个应用程序产生的指令要求首先被传递到HAL层,HAL层将其解释处理为核心层可以识别的指令串,然后提交给核心层最后进入CPU的指令处理循环,CPU处理完毕后将结果反向送回到用户层上的应用程序,最终得到运算结果。