美文网首页
04-30 中断与异常

04-30 中断与异常

作者: 林亨权 | 来源:发表于2018-05-01 16:28 被阅读6次

    1.中断与异常

    在计算机的世界里,不存在一丝温度.

    它只会沿着写好的代码,心无旁骛地执行下去,这是它的优点,也是它的缺点--因为写代码的人不可能把所有意外情况都考虑周全.

    比如说,你要求计算机走一万步,那他就只会走一万步,不管路上是否有车,是否会对自己的安危产生威胁.

    鉴于这种情况,人们很聪明地发明了一种机制---中断与异常.

    中断与异常,在原理上是一样的:在计算机运算的时候,如果遇到突发情况,比如说BUG,硬件损坏.死循环等.这时计算机会主动跳转到一个专门处理突发情况的代码区域,对不同的突发情况进行处理.

    而这种突发情况,我们可以分为两种:

    一种是计算机遇到突发情况,自发跳转.这种情况,我们称之为"异常".

    一种是我们在计算机运行的过程中,通过外部设备人为地截断计算机运行,比如说强制关机,任务管理器强制关闭等,这种情况,我们称之为"中断".

    2. IDT

    中断和异常,虽然截断方式不同,但它们最终是由操作系统统一管理.

    根据不同的情况,中断与异常这两种情况之下,还可以进行进一步的细分.而操作系统负责为每一种细分的情况都提供一种处理函数.这些处理函数,学名叫陷阱处理器.

    那么,操作系统(或者更深入地讲,是CPU)是如何将每一种细分情况,与每一种处理函数,一一对应的呢?

    这时,我们就采用了一种最原始的方法,写一个表格,把细分情况与处理函数一一对应的关系,都写在上面.

    而这个表,就叫做IDT

    操作系统在启动的时候,最早的任务,就是准备好这样的一张IDT表,以便应付接下来可能出现的突发情况.

    我们可以通过两种方式查询到这张表:

    第一,使用windbg配合VirtualKD配置好双机调试环境,加载完符号,输入命令!idt /a

    (搞这个环境时,加载符号是个坑,加载的命令是SRV*C:\symbols*

    http://msdl.microsoft.com/download/symbols,同时要把reload的勾给打上.不过最后我还是没能执行!idt /a的命令,原因极有可能出在加载符号上.)

    第二步,使用PC-Hunter查看IDT

    这个方法我还没尝试,暂且略过.

    相关文章

      网友评论

          本文标题:04-30 中断与异常

          本文链接:https://www.haomeiwen.com/subject/dxdtrftx.html