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 ...
随机推荐
- inux设备驱动归纳总结(五):2.操作硬件——IO内存【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-80627.html inux设备驱动归纳总结(五):2.操作硬件——IO内存 xxxxxxxxxxxx ...
- linux设备驱动归纳总结(三):7.异步通知fasync【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-62725.html linux设备驱动归纳总结(三):7.异步通知fasync xxxxxxxxxxx ...
- 160927、用jquery 重置表单的方法
清空 我们项目小小部分的搜索条件: 客户要做的是,只要一键 "清空搜索条件" 即可清空维护地点.订单ID等条件. js函数 //重置表单 function resetform(){ ...
- Oracle:Authid Current_User使用
由于用户拥有的role权限在存储过程是不可用的.遇到这种情况,我们一般需要显示授权,如grant create table to user;但这种方法太麻烦,有时候可能需要进行非常多的授权才能执行存储 ...
- SVN上传文件注意事项-------------------养成良好的项目文件上传习惯
项目组的学弟经常把一些.obj文件和debug目录上传到svn,这个习惯很不好,我说了很多次他总改不了,还是写个文档说清楚吧,以后查起来也方便. svn是一种版本控制工具,主要目的是用来管理代 ...
- MySQL数据库的常用操作
/*创建表*/ CREATE TABLE tb_test ( id ) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', name ) NOT NULL ...
- keepalived + nginx双主 实战
安装nginx nginx 下载地址 http://nginx.org/download/nginx-1.8.0.tar.gz 安装nginx的依赖关系 yum install pcre pcre-d ...
- jquery ui 常用(二)(对话框 | 旋转器 | 工具提示框(表单) | 特效(百叶窗) )
一.添加信息的对话框 http://www.w3cschool.cc/try/tryit.php?filename=jqueryui-example-dialog-modal-form. 模态表单 ...
- Java 流程控制语句
java的流程控制: 1.顺序结构 2.选择结构 a.关系运算.逻辑运算.条件运算 b.if语句 c.if-else语句.if - else if -else语句 d.switch语句. 3.循环语句 ...
- 去掉DataTable中重复的行
//DataView dv = dt3.DefaultView; //dt3默认的虚拟视图 //dv.Sort = "wmid asc"; //排序 ///dv.ToTab ...