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 ...
随机推荐
- 【python cookbook】【字符串与文本】12.文本过滤和清理
问题:例如清除在web页面表单中填入了pýtĥöñis这样的文本 解决方法:str.translate()方法 s = 'p\xfdt\u0125\xf6\xf1\x0cis\tawesome\r\n ...
- JSP在项目中的路径问题
一.JSP中获得当前应用的相对路径和绝对路径 根目录所对应的绝对路径 : request.getRequestURI() 文件的绝对路径 : application.getRealPath(requ ...
- Environment中针对的读写权限判断
Android应用开发中,常使用Environment类去获取外部存储目录,在访问外部存储之前一定要先判断外部存储是否已经是可使用(已挂载&可使用)状态,并且需要在AndroidManifes ...
- 两个升序链表的合并 Merge Two Sorted Lists 【 leetcode】
class Solution {public: ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) { ListNode *p; ListN ...
- org.hibernate.TransientObjectException
使用JPA注解@ManyToMany做一个多对多的用例. 为了避免在删除主表数据时同时级联删除从表数据,JPA官方文档建议在主表的从表字段使用级联注解:CascadeType.PERSIST,Casc ...
- thinkPHP3.2.3完整版 在sae上面的部署
第一步: thinkPHP3.2.3完整版,目录结构如下 第二步:在新浪sae上面创建一个新应用 第三步:用svn down,下来会有两个文件:index.php.config.ya ...
- ASP.NET数据验证控件的常用的属性
一.非空验证 RequiredFieldValidator ControlToValidate 所验证的控件ID Text 出错时的提示的文本 ErrorMessage 提交给Validati ...
- SDUT 2603:Rescue The Princess
Rescue The Princess Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Several days ago, a b ...
- 怎么查看jar包版本
jar包根目录里的META-INF目录下的MANIFEST.MF文件里一般有会记录版本信息,可以到这个文件里查看 打开Java的JAR文件我们经常可以看到文件中包含着一个META-INF目录,这个目录 ...
- SqlServer性能优化和工具Profiler(转)
合理的优化和熟练的运用Profiler会让你更好的掌握系统的sql语句和存储过程的效率 目录 第1章 如何打开SQL Server Profile. 3 第2章 SQL Server Profile. ...