• 第三章 系统机制(p96106) 2009619


    1. 使用内核性能剖析工具可以分析系统在那个函数比较花费时间。。工具是 Kernrate。。。。

    2. 在Dpc/Dispatch级别上运行的代码,有一个重要的限制是: 不能等待任何对象,因为等待对象会导致新的线程调度。同时带来的副作用是不能有页面错误。

    所以这些代码必须运行在非分页内存中。(为什么有这样限制还没想明白?)

    3. 中断对象。。充分证明了windows就是对象的集合。。

    a. 设备驱动程序可以为他们的设备注册ISR(怎么注册?要看 source code )这个就是中断对象。中断对象中包含了 服务例程的起始地址(routine address)

    中断对象运行的IRQL 。。 中断对象的自旋锁。   还有一些从中断处理模板code 放在 DispatchCode【106】变量中。

    b. 在Dispatchcode中调用了 中断分发器。。 内核中中断分发器的例程: KiInterruptDispatch  (只适合一个注册了一个中断对象的中断向量) 和KiChainedDispatch (链式分发 。。)

    7. 中断控制流:

    7. 中断对象的结构

    typedef  struct

    {

      .....

    ServiceRoutine 

    ServiceContext

    SpinLock

    IRQL

    DispatchCode【106】;

    };

    将ISR与只能中断级别联系起来的 函数: IoConnectInterrupt。

     8 软件中断

    主要包括:

       线程分发 DPC  定时器到期  APC  异步I/O 。

    DPC机制

    我理解的DPC机制:

    因为设备驱动的中断服务例程都工作在DPC/Dispatch级别之上。。。这个时候为了使得本来应该在ISR中完成但是又不是很紧迫的任务 放到 DPC队列中,而ISR执行完紧迫任务后,便触发一个软中断,(设置PRCB的标志位),然后中断服务例程便返回了。。 等处理器的IRQL降下来的时候,便去检查DPC队列,如果有请求 ,便执行 。

    DPC请求都对应一个DPC对象。。。该对象中最重要的是 该DPC需要执行的系统函数地址 。。

    线程分发 。。。 时钟中断。。。 都是采用 DPC机制完成的。。

    关于上面的两个部分感觉原著上说的挺好:

    关于DPC机制的实现 :

    http://book.csdn.net/bookfiles/1044/100104431308.shtml  这个ReactOS的实现 。。 我感觉 和windows的真正的实现有些出入 。。

    要调试  看下windows怎么实现的。

  • 相关阅读:
    从gettext来看linux下程序的internationalization
    C++ Convert Operator和其他Operator的应用场景比较
    申明一个函数指针,并且该函数的返回值也是一个函数指针 示例代码
    XML操作大全
    如何让页面延迟显示?
    Ajax实现不刷屏的前提下实现页面定时刷新
    我喜欢的笑话 呵呵
    Atlas UpdatePanel使用技巧以及常见问题
    asp.net 弹出窗体
    C# asp.net操作文件
  • 原文地址:https://www.cnblogs.com/herso/p/1507881.html
Copyright © 2020-2023  润新知