《Windows内核原理与实现》(笔记) 1. 基本概念

353 阅读3分钟

1. 现在操作系统的基本结构

image.png

2. Windows系统结构

image.png  Windows采用了双模式结构来保护操作系统本身,以避免被应用程序的错误所波及。操作系统核心运行在内核模式下,应用程序运行在用户模式下。  每当应用程序需要用到系统内核或内核的扩展模块(内核驱动程序)所提供的服务时,应用程序通过硬件指令从 用户模式切换到内核模式 中;当系统内核完成了所请求的服务后,控制权又回到用户模式代码。  在windows中,用户代码和内核代码有各自的运行环境。在32位环境下,内核代码可以访问当前进程的整个4GB虚拟地址空间.而用户代码只能访问底端的2GB虚拟地址(或3GB,如果打开了内核启动开关/3GB的话).

 windows内核分为三层:

  • 硬件抽象层(HAL): 与硬件直接打交道。这一层用意是把所有与硬件相关联的代码逻辑隔离到一个专门模块中,从而使上面的层次尽可能做到独立于硬件平台。
  • 内核层: 也成为微内核,这一层包含了基本的操作系统原语和功能。如: 线程、进程、线程调度、中断和异常的处理、同步对象和各种同步机制
  • 执行体层: 这一层的目的是提供一些可供上层应用程序或内核驱动直接调用的功能和语义。该执行体包含一个对象管理器,用于一致的管理执行体中的对象。执行体层和内核层位于同一个二进制模块中,即内核基本模块,其名称位ntoskrnl.exe. 内核层和执行体层的分工是:

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

下图显示了windows内核的详细组成结构

image.png

 (重要) windows内核为用户模式代码提供了一组系统服务,供应用程序使用内核中的功能.应用程序通常并不直接调用这些系统服务,而是通过一组系统DLL,最终通过ntdll.dll切换到内核模式下的执行体API函数中,以调用内核中的系统服务。Ntdll.dll是连接用户模式代码和内核模式系统服务的桥梁.对于内核提供的每一个系统服务,该DLL都提供了一个相应的存根函数,这些存根函数的名称以"Nt"作为前缀,例如: NtCreateProcess、NtOpenFile和NtSetTimer.另外,ntdll.dll还提供了许多系统级的支持函数,比如影响加载器函数(以"Ldr"作为前缀)、Windows子系统进程通信函数(以"Csr"为前缀)、调试函数(以"Dbg"为前缀)、系统事件函数(以"Etw"为前缀),以及一般的运行支持函数(以"Rtl"为前缀)和字符串支持函数等.

后续更新...