zoukankan      html  css  js  c++  java
  • 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的信息。

  • 相关阅读:
    【LabVIEW】多列列表框使用汇总
    【LabVIEW】数据类型 汇总
    U-BOOT移植 前准备
    linux 的 输入子系统 与 平台设备系统个人理解
    关于内核编译的理解
    关于 内核编译make menuconfig 不能使用的解决
    函数式接口的使用 (Function、Predicate、Supplier、Consumer)
    获取单列集合,双列集合,数组的Stream流对象以及简单操作
    多线程的创建、匿名内部类方式创建线程、定义、调度步骤
    异常类的使用
  • 原文地址:https://www.cnblogs.com/AmitX-moten/p/5062120.html
Copyright © 2011-2022 走看看