天极Yesky
  • 笔记本电脑
    笔记本
  • 台式电脑
    台式机
  • 手机
    手机
  • 电脑硬件DIY
    DIY硬件
  • CPU
    主板
    音箱
  • 硬盘
    显卡
    键鼠
  • 内存光驱
    显示器
    机箱电源

  • 数码相机DC
    数码相机
  • MP3播放器
    MP3/MP4
  • 数码摄像机DV
    摄像机
  • 电脑外设
    外设
  • 网络
    网络
  • 服务器
    服务器
  • 数字家庭
    数字家庭
  • 群乐
    群乐
  • 产品报价 行情 经销商 渠道 评测 | 软件 设计 网页 开发 安全 论坛 E时代 游戏 图片 壁纸 下载 网摘 博客 索尼专区 Vista 科技奥运
    天极网
    Windows异常处理流程
    作者: SoBeIt
    出处: xfocus
    责任编辑: BabyBear
    [ 2005-05-01 10:53 ]


      先来说说异常和中断的区别。中断可在任何时候发生,与CPU正在执行什么指令无关,中断主要由I/O设备、处理器时钟或定时器等硬件引发,可以被允许或取消。而异常是由于CPU执行了某些指令引起的,可以包括存储器存取违规、除0或者特定调试指令等,内核也将系统服务视为异常。中断和异常更底层的区别是当广义上的中断(包括异常和硬件中断)发生时如果没有设置在服务寄存器(用命令号0xb向8259-1中断控制器0x20端口读出在服务寄存器1,用0xb向8259-2中断控制器的0xa0端口读出在服务寄存器2)相关的在服务位(每个在服务寄存器有8位,共对应IRQ 0-15)则为CPU的异常,否则为硬件中断。

      下面是WINDOWS2000根据INTEL x86处理器的定义,将IDT中的前几项注册为对应的异常处理程序(不同的操作系统对此的实现标准是不一样的,这里给出的和其它一些资料不一样是因为这是windows的具体实现):

      中断号                        名字                                     原因        
      0x0                        除法错误                                   1、DIV和IDIV指令除0
                                                                                       2、除法结果溢出
      0x1                        调试陷阱 1、EFLAG的TF位置位
                                                                                       2、执行到调试寄存器(DR0-DR4)设置的断点
                                                                                       3、执行INT 1指令
      0x2                        NMI中断                                    将CPU的NMI输入引脚置位(该异常为硬件发生非屏蔽中断而保留)
      0x3                        断点                                            执行INT 3指令
      0x4                        整数溢出                                    执行INTO指令且OF位置位
      0x5                        BOUND边界检查错误              BOUND指令比较的值在给定范围外    
      0x6                        无效操作码                                指令无法识别
      0x7                        协处理器不可用                        1、CR0的EM位置位时执行任何协处理器指令                                                                                                2、协处理器工作时执行了环境切换    
      0x8                        双重异常                                    处理异常时发生另一个异常
      0x9                        协处理器段超限                        浮点指令引用内存超过段尾
      0xA                        无效任务段                               任务段包含的描述符无效(windows不使用TSS进行环境切换,所以发生该异常说明有其它问题)
      0xB                        段不存在                                   被引用的段被换出内存
      0xC                        堆栈错误                                   1、被引用内存超出堆栈段限制
                                                                                        2、加载入SS寄存器的描述符的present位置0
      0xD                        一般保护性错误                       所有其它异常处理例程无法处理的异常
      0xE                        页面错误                                   1、访问的地址未被换入内存
                                                                                       2、访问操作违反页保护规则
      0x10                        协处理器出错                         CR0的EM位置位时执行WAIT或ESCape指令
      0x11                        对齐检查错误                         对齐检查开启时(EFLAG对齐位置位)访问未对齐数据

      其它异常还包括获取系统启动时间服务int 0x2a、用户回调int 0x2b、系统服务int 0x2e、调试服务int 0x2d等系统用来实现自己功能的部分,都是通过异常的机制,触发方式就是执行相应的int指令。

    共7页。 1 2 3 4 5 6 :
    笔名:
    请您注意:

     遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

     天极网拥有管理笔名和留言的一切权利。