【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理
发布日期:2021-07-01 00:05:28 浏览次数:2 分类:技术文章

本文共 1811 字,大约阅读时间需要 6 分钟。

上一篇文章我们模拟操作系统的加载器程序,使用汇编语言实现了一个程序加载器:点击链接查看上一篇文章:

本篇文章,是实模式学习的结尾。在经过了那么多坎坷,终于学完了8086的实模式!!!最重要的是本篇文章没有汇编代码,只讲原理~~ 今天的内容比较简单,学习一下中断的原理-包括硬中断和软中断。主要理解以下内容:

  • 硬中断的工作原理
  • 软中断的工作原理
  • 中断向量表

1、硬中断

硬中断一般是外部硬件中断-就是从处理器外部来的中断信号。

当外部设备发生错误或者有数据要传送时,或者处理器交给它的任务处理完了,它都会向处理器发送信号,高速处理器。

如下图,外部硬件中断是通过两个信号线引入处理器内部的。这两根线的名字恩别叫做NMI和INTR

在这里插入图片描述

当一个中断发生时,处理器将会通过中断引脚NMI和INTR得到通知。除此之外,处理器还需要知道发生了什么,以便采取适当的处理措施。

每种类型的中断都被统一编号,这称为中断类型号、中断向量或者中断号。

1.1 非屏蔽中断(不可屏蔽中断)

NMI接收的是不可屏蔽中断。

不可屏蔽中断的中断号统一为2(因为所有不可屏蔽中断都几乎是致命的无法解决,所以处理器干脆不处理的,统一将他们的中断号令为2,处理器接收到2号中断时直接放弃继续正常工作,也不会试图纠正已经发生的错误。)。

1.2 可屏蔽中断

和NMI不同,INTR一般接收的是可屏蔽中断。大多数的中断也是可屏蔽中断。

INTR接收可屏蔽中断。

Intel处理器允许有256个中断。中断号是0~255。如下图是一个中断控制器,它管理传送来的中断信号,决定是否将中断传送给CPU。

在这里插入图片描述
以上两个8259芯片负责15个中断号的管理。注意这里为什么是15个而不是256个呢?其实是每次它管理的中断号不一样的,这一次可能管理的是10-25号,下次可能管理的是其他的号。

那么在哪里屏蔽中断或者不屏蔽中断呢?实际上有两个位置,一个是8259内部,一个是处理器内部。

**8259内部:**在8259内部有一个中断屏蔽寄存器,这是个8位寄存器,对应着该芯片的8个输入引脚,对应的位是0还是1决定了该引脚输入的中断是否能通过8259芯片。0表示允许 1表示阻断

**处理器内部:**除了要看8259内部,最终还要看处理器。处理器内部的标志寄存器FLAGS有一个标志IF。这是中断标志。当IF为0时所有从INTR来的中断都被忽略。当IF为1时处理器可以接收和相应中断。

1.3、实模式下中断向量表

所谓中断处理,就是处理器要执行一段与该中断有关系的程序(指令)。处理器可以识别256个中断,那么理论上就需要256个中断程序。

这些程序的实际位置并不重要,重要的是,在实模式中,处理器要求将它们的入口点(还记得程序的入口点么?不记得话看上一篇文章)集中存放到内存中的从物理地址0x00000处(0x0000:0x0000)到0x003ff处(0x0000:0x03ff)。共1KB的内存空间。这就是所谓的中断向量表。

如下图是实模式下的中断向量表:

在这里插入图片描述

中断信号来自哪个引脚,8259芯片是最清楚的,所以他会把相应的中断号告诉处理器,处理器拿着这个中断号,要顺序做以下几件事:

  • 保护断点的现场

    • 首先将FLAGS寄存器压栈,然后清楚它的IF位(防止在中断的时候被打断,如果想要有嵌套中断,可以在编写中断处理程序时适时使用sti指令开放中断)
    • 然后依次将CS于IP寄存器压栈
  • 执行中断处理程序

    • 由于处理器已经拿到了中断号,它用中断号乘以4(见上图)就得到了该中断的入口点的偏移地址和段地址
    • 接着将得到的段地址与偏移地址传送给CS和IP
  • 返回到断点接着执行

    • 所有中断的程序的最后是一条iret指令。这将导致处理器一次从栈中弹出IP CS FLAGS的原始内容,于是转到主程序继续执行
    • 由于中断处理程序返回时已经将FLAGS内容恢复,所以IF标志位也恢复。也就是说可以接收新的中断

2、软中断

和硬件中断不同,软中断是处理器内部产生的。是由执行指令引起的。

软中断是由int指令引起的。这类中断不需要中断识别总线周期,中断号在指令中给出。

更详细的内容,可以见我另一篇博客:

3、总结

今天学会了以下内容:

  • 硬中断
  • 软中断
  • 中断向量表的概念与意义

笔记记得不是很全,如果有不懂的可以加我联系方式一起交流。

学习探讨加个人:

qq:1126137994
微信:liu1126137994

转载地址:https://lyy-0217.blog.csdn.net/article/details/84751809 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【数据结构与算法-java实现】二 复杂度分析(下):最好、最坏、平均、均摊时间复杂度的概念
下一篇:【OS学习笔记】十 实模式:实现一个程序加载器-程序加载器如何将用户程序加载到内存并执行

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月23日 20时58分25秒