文档库 最新最全的文档下载
当前位置:文档库 › windows内核原理与实现

windows内核原理与实现

windows采用了双模式结构来保护操作系统本身,以避免被应用程序的错误所波及。操作系统核心运行在内核模式(kernel mode)下,应用程序的代码运行在用户模式下。每当应用程序需要用到系统内核或内核的扩展模块(内核驱动程序)所提供的服务时,应用程序通过硬件指令从用户模式切换到内核模式中,当系统内核完成了所请求的服务以后,控制权又回到用户模式代码。

在windows中,用户代码和内核代码有各自的运行环境,而且他们可以访问的内存空间也不相同。在32为系统中,内核代码可以访问当前进程的整个4GB虚拟地址空间,而用户代码只能访问底端的2GB虚拟地址(或3GB,如果打开了内核启动开关/3GB的话)。用户模式的代码只能访问2GB一下的虚拟内存地址空间,2GB以上车更为系统地址空间。实际上在两者之间有一块特殊的64KB地址空间,位于0x7fff0000—0x7fffffff,两种模式下都不能访问。

windows内核分为三层,与硬件直接打交道的这一层称为硬件抽象层(HAL),即把所有与硬件相关联的代码逻辑隔离到一个专门的模块中,从而使上面的层次尽可能做到独立于硬件平台。

HAL以上是内核层,也称微内核(micro-kernel),这一层包含了基本的操作原理和功能,如县城和进程、线程调度、中断和异常的处理、同步对象和各种同步机制。


在内核层智商则是执行体层,这一层是提供一些可供上层应用程序或内核驱动程序直接调用的功能。windows内核的执行体包含一个对象管理器,用于一致地管理执行提中的对象。执行体层和内核层位于同一个二进制模块中,即内核基本模块,其名为ntoskrnl.exe。

内核层实现操作系统的基本机制,而所有的策略决定则留给执行体。执行体中对象绝大多数封装了一个或者多个内核对象,并且通过某种方式(比如对象句柄)暴露给应用程序。

windows内核为用户模式代码提供了一组系统服务,共应用程序使用内核中的功能,应用程序通常不治之调用这些系统服务,而是通过一组系统dll,最终通过ntdll.dll却换到内核模式下的执行体API函数中,以调用内核中的系统服务,该dll都提供一个相应的存根函数,这些存根函数的名称以"Nt"作为前缀,例如NtCreateProcess、NtOpenFile和NtSetTimer。另外ntdll.dll还提供了许多系统级的支持函数,比如映像加载器函数(Ldr为前缀),windows子系统进程痛心函数(Csr为前缀),调试函数(Dbg为前缀),系统时间函数(Etw为前缀)以及一般的运行支持函数(Rtl为前缀)和字符串支持函数等。

HAL(硬件抽象层):
在windows中,HAL是一个独立的动态链接库。windows随带了多个主流机器的HAL,但在系统安装的时候只有一个会被选中没被拷

贝和改名为hal.dll。HAL提供了一些历程供其他内核模式或设备驱动程序调用,这使得一个驱动程序可以支持同样的设备在各种硬件平台运行。

内核(或微内核):
在内核模块ntoskrnl.exe中的下层部份(上层部份为执行体),最接近于HAL层,负责线程调度和中断、异常的处理。对于多处理器系统,他还负责同步处理器之间的行为以优化系统的性能。这一层的核心人物是让系统中的所有处理器尽可能的忙和高效。内核层可在多个处理器伤病发执行,他的代码以C语言为主。

执行体:
内核模块的ntoskrnl.exe的上层部份,包括5种类型的函数:
1.被到处的、可在用户模式下调用的函数。这些函数的调用接口位于ntdll.dll模块中。应用程序通过api间接的调用这些函数。
2.虽已导出并且可在用户模式下调用,但无法通过任何一个windows api来调用的函数。这样的例子包括lpc(本地过程调用)函数,各种查询函数(NtQueryInformation),以及一些专用的函数如NtCreatePagingFile等。对这些函数的调用需要直接链接ntdll.dll。
3.只能在内核模式下调用的导出函数,可以被设备驱动程序调用。
4.供执行体组件之间相互调用,但未被文档化的函数。这包括执行体内部使用的一组支持函数。
5.属于一个组件的内部函数。

设备驱动程序:
在内核中除了内核模块ntoskrnl.exe和HAL以外,其他的模块几乎都以设备驱动程序的形式存在。windows操作系统中的身背驱动程序,并不一定对应于物理设备;驱动程序既可以创建虚拟设备,亦可以完全与沈北无关,而仅仅是内核的扩展模块。设备驱动程序是可以动态大家在到系统中的模块,其文件扩展名为.sys,其格式是标准的PE文件格式。驱动程序中的代码运行在内核模式下,尽管他们可以直接操纵硬件,但理想的情况是,调用HAL中的函数玉硬件打交道,因此,驱动程序往往用C/C++语言来编写,从而可以方便的在windows所支持的体系结构之间进行源代码层次上的移植。

系统线程和系统进程:
在windows中,每个线程代表一个指令执行序列,同时也是一个调度单元;进程定义了一个执行环境,有自己独立的地址空间。每个线程都必定依附于一个进程。windows内核除了接受来自应用程序的系统服务调用,它自己也有一些线程用于各种用途。浙西县城运行在一个特殊的进程环境中,称为system进程。他的线程被称为系统线程,其中有一组系统辅助线程(system worker thread),他们代表操作系统或者其他的应用进程来完成一些特殊的工作。

系统空闲进程(Idle):该进程的ID为0,其中每个处理器或核对应有一个线程。

system进程: 在windows xp和windows server 2003中该进程的ID

为4,它包含了内核模式系统进程。系统辅 助线程,以及执行体和驱动程序通过PsCreateSystemThread创建的线程,都在System进程中。

会话管理器(Session manager,smss.exe):这个windows系统中第一个创建的用户模式进程。创建环境标量等,它启 动了子系统进程csrss.exe和登录进程winlogon.exe。

登录进程(winlogon.exe):负责处理交互用户的登录和注销

windows子系统进程(csrss.exe):负责为用户提供一个子系统环境,包括提供控制台窗口的功能,以及创建或删除进 程和线程。

本地安全权威子系统进程(lsass.exe):负责本地系统安全策略,例如允许那些用户登录到本地系统中、口令策略、 授予用户和用户组的特权,以及系统安全审计设置,同时也负责认证用户的身份,以及将安全审 计消息发送到系统的时间日志中。

shell进程(explorer.exe):windows默认的shell,提供了系统玉用户打交道的各种界面

服务控制管理器(services.exe):负责管理windows的系统服务,这里的系统服务是指一些特殊的进程,他们通常并 不与登录用户进行交互,因而被配置成可以在系统引导时自动启动起来,无须交互登录过程。









































相关文档