
windows内核原理与实现.docx
4页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,但在系统安装的时候只有一个会被选中没被拷 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,但在系统安装的时候只有一个会被选中没被拷 。












