Windows内核_概述
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Intel x86 处理器内部使用同一套陷阱机制来处理 中断和异常,它利用 IDT ( Interrupt Descriptor Table ,中断描述符表),将每个中断或异常与一 个处理该中断或异常的服务例程联系起来
Windows 在此硬件机制的基础上,又提供了一种 更为灵活的软件机制,允许设备驱动程序为特定的 中断向量添加它的中断服务例程(ISR,Interrupt ServiceRoutine)
Windows 有一组系统进程对于整个系统的运行来说是必不可少的
系统空闲进程(Idle),该进程的ID 为0,其中每个处理器或核对应有一个线程
System 进程,该进程的ID 为4,包含了内核模式系统线程,系统辅助线程,以 及执行体和驱动程序通过PsCreateSystemThread 创建的线程,都在System 进 程中
内核模块ntoskrnl.exe 中的下层部分(上层部分为执行体),最接近于HAL 层,负 责线程调度和中断、异常的处理
每个处理器上的线程切换也是由内核来完成,它按照调度规则让处理器放弃当前线程, 选择下一个要执行的线程
Windows 的内核按照面向对象的思想来设计,它管理两种类型的对象:分发器对象 (dispatcher object)和控制对象。分发器对象实现了各种同步功能,这些对象的状 态会影响线程的调度;控制对象被用于控制内核的操作,但是不影响线程的调度,它 包括异步过程调用(APC)、延迟过程调用(DPC),以及中断对象等。
当一个线程的执行条件不满足时,该线程进入等待状态,系 统将控制权交给其他满足执行条件但没有得到处理器资源的 线程;以后,当该线程的执行条件满足时,它又有机会继续 执行
在内核中除了内核模块ntoskrnl.exe 和HAL 以外,其他的模块几乎都以 设备驱动程序的形式存在
Windows 操作系统中的设备驱动程序,并不一定对应于物理设备;驱动 程序既可以创建虚拟设备,也可以完全与设备无关,而仅仅是内核的扩 展模块(内核扩展驱动程序、文件系统驱动程序) 设备驱动程序是可以动态加载到系统中的模块,其文件扩展名为 .sys , 其格式是标准的PE 文件格式。驱动程序中的代码运行在内核模式下,尽 管它们可以直接操纵硬件,但理想的情况是,调用HAL 中的函数与硬件 打交道
Windows内核原理与实现
曹飞
操作 系统 概述
Win do ws 概述
进程 和线 程
内存 管理
I/O 系统 管理
文件 系统 管理
系统 服务
操作系统是一种特殊的软件
管理硬件资源的软件,建立抽象层
为上层应用提供服务
计算机系统的资源管 理
• 计算资源
• 存储资源 • 其他资源(I/O)
为应用程序提供执行环境 • 首先,对应用程序的任务 抽象(进程和线程) • 其次,每个应用程序有相 对独立的执行空间 • 最后,多任务的情况下公 平执行(同步)
Windows内核除了接受来自应用程序的系统服务调用,它自 己也有一些线程用于各种用途,这些线程运行在一个特殊的 进程环境中,称为System 进程; System 进程的线程被称为系统线程,其中有一组系统辅助 线程(system worker thread),它们代表操作系统或者 其他的应用进程来完成一些特殊的工作; 系统辅助线程实际上是一个线程池,Windows 在系统初始 化时创建了一定数量的辅助线程,而且,随着辅助线程的负 载的变化,执行体也会动态地创建一些辅助线程,以满足系 统负载的变化需求;
Windows 子系统进程(csrss.exe), Windows 子系统进程负责为用户提供一 个子系统环境,包括提供控制台窗口的功能,以及创建或删除进程和线程
在Intel x86 处理器上,段描述符有一个2 位长度的特权级:0 表示最高 特权级,3 表示最低特权级; Windows 只使用0 和3 两种特权级,通常特权级0 表示CPU 处于内核模 式(kernel mode),3 表示用户模式(user mode),在任何时刻, 处理器总是位于这两种模式之一; 处理器有许多指令只有在特权级0 的模式下才可以使用; 处理器位于用户模式时,它处于一种相对隔离的状态:能够执行的指令 是受限制的,能够访问的内存也是受限制的; 户模式代码触发了异常,则控制流进入到内核模式,内核中的异常处理 函数可以决定该控制流是否继续执行;用户模式代码在执行时,被一个 中断打断(软中断或硬中断),则控制流进入特权模式,等中断处理例 程完成以后,控制流恢复到用户模式下;执行特殊的模式切换指令,例 如Intel x86 的sysenter 指令,从用户模式切换到内核模式
执行体是内核模块ntoskrnl.exe 的上层部分,包含5种函数:可在用户 模式下调用(通过API);无法通过API调用的用户模式函数;内核模式 下调用;执行体之间相互调用;一个组建的内部函数; 内核层和执行体层的分工是,内核层实现操作系统的基本机制,而所有 的策略决定则留给执行体;执行体中的对象绝大多数封装了一个或者多 个内核对象,并且通过某种方式(比如对象句柄)暴露给应用程序 执行体API 函数接收的参数来自于各种应用程序,因此,为了确保系统 的健壮性,以及抵抗来自用户模式的恶意攻击,所有的执行体API 函数 必须保证参数的有效性;必须在恰当的时刻检查参数的值,若是指针的 话,还必须保证调用者可以访问指针所指的内存
中断控制器(如APIC)允许设定每一个硬件中断的优先级
Windows定了一套软件中断优先级,称为中断请求级别(IRQL, Interrupt Request Level) IRQL为0 表示普通线程,称为PASSIVE_LEVEL ; IRQL为1 表示 异步过程调用(APC,Asynchronous Procedure Call),称 为 APC_LEVEL ; IRQL 为 2 也 被 称 为 DISPATCH/DPC 级 别 ; 3~26 是设备IRQL, 27~31 是一些特殊的硬件中断,包括时钟 中断、电源中断、处理器间中断等,它们都是硬件中断
由于多处理器、多核或者中断等各种并发性因素的存在,同 样的代码有可能被并发执行,而数据也可能被并发访问 对 于 可 能 被 并 发 访 问 的 数 据 进 行 必 要 的 同 步 (synchronization)
根 据 执 行 环 境 中 的 IRQL 值 大 于 APC_LEVEL 或 者 等 于 PASSIVE_LEVEL,可以将同步机制分为“不依赖于线程调度 的同步机制”和“基于线程调度的同步机制”两大类
把所有与硬件相关联的代码逻辑隔离到一个专门的模块中, 从而使上面的层次尽可能做到独立于硬件平台
在Windows 中,HAL 是一个独立的动态链接库 提供了一些例程供其他内核模块或设备驱动程序调用,这使得 一个驱动程序可以运行在支持同样的设备在各种硬件平台上
HAL服务包括对设备寄存器的访问、总线独立的设备寻址、中断处理和复 位、DMA传输、定时器和实时时钟的控制、底层的自旋锁(Spin Lock) 和多处理机同步、 BIOS 接口以及 CMOS 配置内存。 HAL 没有提供对特殊 I/O设备(如键盘、鼠标、硬盘和内存管理单元)的抽象或服务
Windows 的图形引擎也是在Windows 子系统中提供的; 提供了一套与设备无关的编程接口,即GDI,这使得应用程序可以适应各种底层 显示设备的差异; 应用程序与图形设备驱动程序之间的通信足够高效,从而即使在频繁输出和刷新 图形元素的情况下,Windows 也能够为用户提供良好的视觉效果; Windows 子系统定义了一个稳定的图形体系结构,以便于第三方的图形设备硬 件厂商可以方便地将他们的视频显示器和打印设备集成到Windows中; Windows 子系统的图形系统,除了支持GDI,还提供了对DirectX 的显示支持, 包括DirectDraw 和Direct3D,因而允许像游戏、多媒体播放器等应用软件绕过 GDI 图形引擎,直接操纵显示器硬件,从而获得更快的显示速度,并且避免屏幕 抖动
命名管道(named pipe)和邮件槽(mailslot),用于 不同进程之间进行通信
RPC ,这是网络编程的一个标准,往往是分布式系统基 础设施的重要组件;RPC 建立在其他的网络API 基础之 上,比如命名管道和Winsock
wk.baidu.com
按照Windows NT 最初的设计,它支持三个环境子系统: OS/2 、POSIX 和 Windows (或称 Win32 ); Windows 子系统是必须要运行的,没有 Windows 系统无法运行,而其他两个子系统则被配置成按需启动; Windows 子系统中既有用户模式部分,也有内核模式部分。内核模式部 分的核心是win32k.sys,虽然它的形式是一个驱动程序,但实际上它并不 处理I/O 请求; 用户模式部分包括Windows 子系统进(csrss.exe)以及一组动态链接库 ( DLL ) ; kernel32.dll 、 user32.dll 、 gdi32.dll 和 advapi.dll ( 通 过 ntdll.dll来调用)
异常是程序指令流执行过程中的同步处理过程,既可以由 处理器硬件产生,也可以由指令流软件产生 Windows 为所有需要处理的异常都提供了异常处理器 (exception handler,即异常处理例程) 内核模式和用户模式的代码都有可能发生异常,根据发生 异 常 时 处 理 器 模 式 的 不 同 , Windows 的 异 常 分 发 (exception dispatch)过程也有所不同
当IRQL 大于APC_LEVEL 时,Windows 提供了一些方便的同步保护机制, 供内核自身或设备驱动程序使用
提升IRQL,当处理器在某个IRQL 上运行时,它只能被更高IRQL的中断 打断 互锁操作,可以实现基本的对整数操作的保护,确保一个操作以原子方 式进行,指令级保护 无锁的单链表, Windows 利用64位互锁指令来实现无锁的单链表数据 结构,并且可支持多核、多处理器环境 自旋锁(spin lock),本质上是一种忙等待
Windows 为应用程 序提供了 多种网络 API , 允 许应用软 件设计人 员根据他 们的需求 适当选择
Windows 套接字,简称Winsock,它实现并扩展了BSD 套接字标准
WinInet ,这是一个高层网络 API,它支持多个协议,包 括 Gopher 、 FTP 和 HTTP ; Microsoft Internet Explorer 使用WinInet 来完成数据传输
Windows 子系统的用户界面管理有一个层次结构,通常应用程序只是在一 个默认的桌面上运行; 交互式窗口站中通常有三个桌面:登录桌面、默认桌面和屏幕保护桌面;
在每个桌面中,都有一个顶级窗口列表,这些窗口往往可以相互重叠,有系 统菜单、最大化/最小化按钮和滚动条等; Windows 子系统会话有一个RIT(Raw Input Thread)线程,负责从输入 设备读取原始的输入事件,然后生成消息,寄送到正确的线程消息队列中;
中断(interrupt)是处理器与外部设备打交道的重要途径,指当出现需 要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行 过程 异常(exception)则是处理器的正常指令流在执行过程中产生的一些特 殊事件,需要紧急处理才能继续原来的指令流
都会打断一个正常的指令流,但区别在于,中断的发生与当前指令流并 无实质联系,而异常则是当前指令流执行的直接结果 中断是异步的,而异常是同步的
应用环境
应用
应用
应用 系统服务
系统环境 驱动程序
系统内核 驱动程序
系统扩展 驱动程序 硬件抽象
硬件设备
鼠标 /键盘
显示器
磁盘
网络
Windows系 统结构
Windows内 核的基本概念 Windows引 导过程
内核结构、关键组件、子 系统、系统进程和系统线 程
处理器模式、中断和异常、 同步
计算机的启动、内核加载、 内核初始化、用户登录会 话