Windows Internals学习笔记(四)Trap Dispatching
参考资料:
1. 《Windows Internals》
知识点:
● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位置。在Windows中,处理器将控制权转交到一个trap handler(一个针对特定中断或异常的函数)。
● 一个中断是一个异步的事件,它与正执行的处理器无关。主要由I/O设备、处理器和时钟触发,且可以打开或关闭。
● 一个异常属于一种同步的情况,通常是由于执行某一特殊执行而触发的。
● 内核将系统服务调用当作是异常,尽管在技术上,它们是系统trap。
● 当执行线程处于用户态,且异常或中断发生了,Windows会切换到该线程的内核态。Windows接下来会在内核栈上创建一个trap frame存储线程的执行状态。trap frame是线程完整上下文的子集,可在Kernel Debugger里键入dt nt!_ktrap_frame命令查看其定义。

图1 frame的内容
● 内核安装interrupt trap handlers响应中断。ITH会将控制权交给一个ISR(interrupt service routine)或一个内核例程。设备驱动会提供处理该设备中断的ISR,而Kernel则提供处理其它类型的中断的例程。
● 硬件中断处理流程:①外部I/O中断传到中断控制器。②中断控制器中断处理器。③中断处理器被中断后,发送一个IRQ(interrupt request)请求到中断控制器。④中断控制器将IRQ翻译为一个中断号,并将该中断号作为IDT(interrupt dispatch table)的索引,然后将控制权交给合适的interrupt dispatch routine。我们可以通过!idt命令查看IDT的内容。

图2 IDT内容
● 每一个处理器有一个独立的IDT,因此,不同的处理器可以运行不同的ISR。

图3 x86 APIC架构
● 使用!pic和!apic查看中断控制器的配置。

图4 中断控制器配置
● 中断请求级:尽管中断控制器能中断优先化,但Windows强制使用自己的中断优先级方案IRQLs。尽管Kernel定义了软件中断的IRQL标准集,而HAL仍负责将硬件中断号映射为IRQL。
● 调度等级是线程的一个属性,而IRQL是中断源的一个属性。它们是不同的。
● IRQL值被保存在两个位置:PCR(processor control region)和PRCB(processor region control block)。

图5 IRQL和PCR
● 可以使用!apciirqarb命令获得ACPI IRQ arbiter的信息。
Windows Internals学习笔记(四)Trap Dispatching的更多相关文章
- Windows Internals学习笔记(六)Windows关键系统组件
参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...
- Windows Internals学习笔记(二)系统架构
参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...
- Windows Internals学习笔记(八)IO系统
参考资料: 1. <Windows Internals> 知识点: ● 当一个进
- Windows Internals学习笔记(七)Image Loader
参考资料: 1. <Windows Internals> 2. Fibers 知识点: ● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务.然而, ...
- Windows Internals学习笔记(五)Synchronization
参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...
- Windows Internals学习笔记(一)概念与工具
参考资料: 1. <Windows Internals> 2. Windows Drive Kit 3. Microsoft Windows SDK 4. WDK下载地址 知识点: 1. ...
- Windows Internals学习笔记(三)Procdump的使用
参考资料: 1. 下载地址 2. 使用示例
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- Linux学习笔记(四) vi编辑器
一.vi 编辑器 vi 编辑器 (Visual Interface) 是所有 Unix 及 Linux 系统下标准的编辑器,相当于 Windows 系统中的记事本 它有三种模式,分别是: Comman ...
随机推荐
- linux文件所属用户和组
使用chown命令可以修改文件或目录所属的用户: 命令:chown 用户 目录或文件名 例如:chown -R qq /home/qq (把home目录下的qq目录的拥有者改为qq用户) 使用chg ...
- Dynamics AX 2012 R2 切换环境后项目导入报错
Reinhard重装了服务器.重装后,导入项目A报错,错误提示如下: A table, Extended Data Type, Base Enum or class called ???? a ...
- Java常用jar包用途
Java常用jar包用途: USAGE INDEX JAR NAME USAGE 1 ASM asm-2.2.3.jar ASM字节码库 2 ASM asm-commons-2.2.3.jar ASM ...
- Centos修改镜像为国内的163源
一.yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器.起初是由yellow dog 这一发 ...
- 关于数据库表中的索引及索引列的CRUD
-- 查询一个数据库表中的索引及索引列use [RuPengWangDB]GOSELECT indexname = a.name , tablename = c. name , indexcolu ...
- 关于基于webrtc的android-apk 和 webrtc-brows
这一段时间我在做一些关于基于webrtc应用的一些研究,做个一个android的demo,详情如下: 手机客户端: 基于webrtc的 android apk (webrtc 代码版本 R67 ...
- sdp内容解析
sdp解释 http://datatracker.ietf.org/doc/draft-nandakumar-rtcweb-sdp/?include_text=1
- 【转】启动 Eclipse 弹出“Failed to load the JNI shared library jvm.dll”错误的解决方法! .
转载地址:http://blog.csdn.net/zyz511919766/article/details/7442633 原因1:给定目录下jvm.dll不存在. 对策:(1)重新安装jre或者j ...
- css3 动画 执行一次
function testAnim(x) { $('#animationSandbox').removeClass().addClass(x + ' animated').one('webkitA ...
- c# 客户端
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...