`
chong_zh
  • 浏览: 71981 次
  • 来自: 杭州
社区版块
存档分类
最新评论

Intel80386知识总结: 中断与异常机制

 
阅读更多
====================================================================
本文用于汇总整理Intel80386的中断与异常机制,
参考文献:
  • 《INTEL 80386 programmer's reference manual 1986》
  • 《Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B & 3C): System Programming Guide》

本文是系列文章《Intel80386知识总结》的一部分。
===================================================================

1. 分类与编号
1.1 中断与异常的分类
        中断与异常都属于控制流转移机制的一种,两者之间的区别在于:中断是一种来源于处理器外部的事件,处理器用异步方式予以处理。异常则由处理器本身负责检测,属于同步处理。按来源,可以对中断与异常进行以下分类:
中断:
  • Maskable Interrupts: 由INTR针脚发送
  • Nonmaskable Interrupts:由NMI针脚发送

异常:
  • 由处理器检测: 进一步分类为Faults,Traps,Aborts三类
  • 通过软件编程(也称为软中断):通过INT0/INT 3/INT n/BOUND指令触发

三种异常:
  • Faults:Faults异常逻辑上在产生异常的指令之前触发,它可以在指令执行过程中被发现,发现后需要把机器状态回溯到指令执行之前。CS寄存器和EIP寄存器指向产生异常的指令。
  • Traps:Trap异常紧接着在产生异常的指令结束后马上触发。CS寄存器和EIP寄存器动态的指向产生异常的指令的下一条指令,如果产生异常的指令是控制流转移指令,例如JMP指令产生了Trap异常,则转移后的CS和EIP寄存器值应该被压入栈。
  • Aborts:Abort异常既不提供异常产生的准确位置,也不重置机器状态,Abort异常表示严重的系统错误


1.2. 中断号
        每一种中断/异常的都对应一个唯一的中断号,NMI中断和异常的中断号由i386预定义,占据0 ~ 31。Maskable中断的中断号由中断控制器(例如典型的Intel8259A Programmable Interrupt Controller)赋值,并且其赋值逻辑是可以通过软件编程的,中断号空间占据32 ~ 255.

2. 中断屏蔽
        中断处理的正常时机是在一条指令结束之后,下一条指令开始之前进行。特别的,对于带有Prefix前缀的String指令在执行时,每完成一次Repeat,都会进行中断响应。在处理器运行的某些特殊时段,需要对中断处理进行屏蔽,主要包括以下三种情况。

2.1 在处理NMI中断的时候
        在处理一个NMI中断的时候,处理器会忽略期间通过NMI针脚发送的中断,直到遇到第一个IRET指令为止。

2.2 通过IF标志位屏蔽Maskable中断
        当IF=0时,处理器会延迟通过INTR针脚发送的Maskable中断的处理,直到IF=1。
        CLI和STI指令分别可以用来clear和set IF标志位,优先权要求:CPL 小于等于 IOPL。

2.3 在堆栈切换时
         在进行堆栈切换时通常需要类似下面的指令,分别用来更新堆栈段和栈顶:
MOV SS, AX
MOV ESP, StackTop

若在这两条指令之间发生中断/,将导致堆栈管理数据不一致。为避免这一情况,i386在通过MOV或POP指令修改SS寄存器之后会延迟处理以下中断异常:
  • NMI中断
  • INTR中断
  • debug异常
  • 单步Traps

其他异常将会获得响应不受影响。

2.4 多个中断/异常发生时的优先级
        当某个指令间隙有多个中断/异常等待处理时,按照下表的顺序先处理最高有限级中断/异常,低优先级中断在下一个指令间隙执行,低优先级异常在当前处理程序结束后再处理。


3. 中断处理
3.1 中断描述符表(IDT)
        中断描述符表维护了一个中断号到中断处理指令描述符的映射关系,其结构与GDT、LDT类似,中断号作为其索引。因为最多只有256个中断/异常,所以IDT的长度不需要超过256×8,可以小于256×8,因为可能不是所有中断/异常都会发生且有处理程序。处理器通过IDTR寄存器找到IDT,通过LIDT和SIDT指令分别进行IDTR寄存器的set和get操作。LIDT指令要求CPL=0,SIDT没有优先权要求,可以在任何CPL执行。

3.2 中断描述符
IDT中可以包含的描述符分为三种:任务门、中断门和Trap门。任务门的作用详见i386多任务支持的内容,中断门和Trap门的格式如下所示。

        通过任务门、中断门和Trap门可以使用以下两种方式来处理中断:
  • 使用Interrupt Procedure处理中断
  • 使用Interrupt Task处理中断


3.3 ErrorCode
某些异常会给处理程序/任务传递ErrorCode,ErrorCode的结构如下图所示:

ErrorCode的结构和选择符类似低位的三个标志位的含义为:
  • EX:当中断/异常来自产生异常的程序外部时设置此位
  • I:当SELECTOR INDEX指向IDT的一个门描述符时设置此位
  • TI:TI=0时,SELECTOR INDEX选中GDT中的描述符;TI=1时,SELECTOR INDEX选中LDT中的描述符


3.4 使用Interrupt Procedure处理中断
        当IDT相应位置保存了Trap门或者中断门的时候,将采用Interrupt Procedure的方式处理中断,如下图所示:

        使用Interrupt Procedure处理中断时的堆栈操作分情况如下图所示:

使用中断门和Trap门的区别在于通过中断门会设IF为0,而通过Trap门不会。

3.5 使用Interrupt Task处理中断
        当IDT相应位置保存了任务门的时候,将采用Interrupt Task的方式处理中断,如下图所示:

        Interrupt Task将会切换到一个独立的上下文来进行中断处理。如果任务切换是由带有ErrorCode的异常引起的,那么处理器会自动的把ErrorCode推到新任务正确的堆栈上。
0
2
分享到:
评论

相关推荐

    Intel 80386 程序员手册 中文 1、2、4、5、6、7、8、9、10、14章

    根据提供的信息,我们可以深入探讨《Intel 80386 程序员手册》中的几个关键章节,这些章节对于理解和使用...以上内容涵盖了Intel 80386程序员手册中的核心知识点,这些知识对于理解和开发基于80386的系统至关重要。

    Intel_80386_Manual

    根据提供的文件信息,我们可以深入探讨Intel 80386处理器的相关知识点,包括其架构特点、编程参考手册中的重要内容以及该处理器在计算机历史上的地位。 ### Intel 80386简介 Intel 80386(简称386)是Intel公司在...

    保护方式下的80386及其编程.rar

    80386处理器是英特尔公司推出的一款32位微处理器,它在1985年发布,极大地扩展了当时微处理器的能力。"保护方式下的80386及其编程"是一个主题,深入探讨了80386在保护模式下的工作原理以及如何在此模式下进行程序...

    Intel 80x86 manul(Vol3)

    通过对系统初始化、中断异常处理、内存管理、I/O操作以及性能优化等技术点的深入讨论,手册不仅为初学者提供了入门指导,也为高级开发者提供了宝贵的参考资料。无论是从事嵌入式系统开发还是操作系统内核设计,...

    Intel 64 and IA-32 Archiectures Software Developer`s Manual v1

    - **异常和中断处理:** 描述异常和中断在Intel架构中的作用及处理方式。 - **调试和故障排除:** 提供关于如何调试和诊断问题的指导。 - **性能优化技巧:** 分享提高程序运行效率的最佳实践。 **核心知识点...

    Intel® 64 and IA-32 Architectures Software Developer’s Manual

    总结,《Intel® 64 and IA-32 Architectures Software Developer’s Manual》是理解和利用英特尔处理器的关键资源,涵盖了从底层硬件到高级编程策略的广泛知识,对于开发高效、优化的软件至关重要。通过深入学习和...

    Intel Architecture Software Developer Manual

    Intel处理器提供了丰富的中断和异常处理机制,用于处理硬件事件、软件错误等。手册详细讲解了中断向量表、中断处理流程,以及如何编写中断服务例程。 五、系统编程接口 手册涵盖了一系列系统编程接口,如系统调用、...

    Intel 80x86 manul(Vol1)

    ### Intel 80x86 Manual (Vol1):核心知识点解析 #### 一、基本架构(Basic Architecture) Intel Architecture Software Developer’s Manual Volume 1 主要涵盖了Intel x86 架构的基础部分,包括但不限于处理器...

    Intel 64 and IA-32 Architectures Software Developer's Manual Vol 3A

    - **中断与异常处理**:讲解了如何在 Intel 64 和 IA-32 架构中实现中断和服务例程,包括中断向量表、中断描述符表和中断服务例程的设计与实现。 - **内存管理**:探讨了与内存管理相关的各种技术,如分页机制、...

    Intel体系结构文档

    1. **基本架构**:涵盖处理器的基本设计原理、指令集架构(ISA)、内存管理机制、中断与异常处理等方面。 2. **指令集参考**:详细记录了Intel架构中的所有指令及其语法、功能、操作模式等内容。 3. **系统编程指南*...

    INTEL汇编语言程序设计(第五版)

    - **中断和异常处理**:中断服务例程的编写及异常处理机制。 ##### 3. 数据操作 - **算术运算**:加减乘除等基本运算指令的使用。 - **逻辑运算**:与、或、非、异或等逻辑操作符的应用。 - **移位操作**:左移...

    IA32体系结构设计手册-卷3

    - **中断与异常处理**:IA-32架构下中断和异常处理的基本原理及实现方式,包括硬件中断、软件中断以及异常处理程序的设计。 - **系统调用接口**:如何通过系统调用来实现用户空间与内核空间之间的通信,以及相关的...

    Intel白皮书

    - **中断和异常处理**:讲解如何处理系统运行过程中的中断及异常情况。 - **内存管理**:探讨内存分配、保护机制等技术。 - **I/O 操作**:介绍输入/输出设备与计算机之间的数据交换原理。 #### 五、模型特定寄存器...

    Intel Architecture Software Developer Manual(编程指南)原版

    - **中断和异常处理**:介绍如何管理和响应各种硬件中断和软件异常。 - **内存管理**:详细讲解内存分配、保护机制以及虚拟内存系统的设计。 - **性能优化**:提供关于如何利用Intel处理器特性来提高应用程序性能...

    IA-32 Intel Architecture Software Developer's Manual,Volume3

    系统编程指南(Volume 3)主要聚焦于IA-32架构下的系统级编程技术,包括但不限于中断与异常处理、处理器状态管理、内存管理和系统初始化等关键领域。它深入探讨了如何利用IA-32架构的特性来优化和调试系统级软件,是...

    微机系统与接口课件:Ch5_3第五章 数字量输入输出(3).ppt

    5. **中断及其处理**:中断是微机系统中的一种处理机制,当外部设备完成一个操作或出现异常时,会向CPU发送中断请求,CPU响应后暂停当前任务,转而执行相应的中断处理程序。 6. **8259中断控制器**:8259是Intel...

    intel cpu sdm2

    具体到“System Programming Guide, Part 2”(系统编程指南,第二部分),这部分主要包含系统级别的编程信息,比如中断和异常处理、系统数据结构、虚拟内存管理以及保护机制等。这些内容对操作系统的内核开发人员...

Global site tag (gtag.js) - Google Analytics