【OS学习笔记】十一 实模式:中断-软中断和硬中断基本原理

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

本篇文章,是实模式学习的结尾。在经过了那么多坎坷,终于学完了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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置节处理程序时出错,未能加载文件或程序集

安装sql server2008时,出现下面的错误: 按照上面的提示,查看那个路径下的文件,根据文件名判断可能是临时文件,于是首先将上面的文件剪切出来,然后安装,成功。 转载于:https://www.cnblogs.com/x…

【软件开发底层知识修炼】六 Binutils辅助工具之- addr2line与strip工具

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章我们学习了gcc编译器的相关内容。点击查看上一篇文章:gcc编译器。本篇文章接着上一篇文章,学习GNU为GCC提供的辅助开…

Eboot 中给nandflash分区实现

提到分区就不得不提到MBR,不得不提到分区表。 什么是MBR 硬盘的0柱面、0磁头、1扇区称为主引导扇区,NANDFLASH由BLOCK和Sector组成,所以NANDFLASH的第0 BLOCK,第1 Sector为主引导扇区,FDISK程序写到该扇区的内容称为主…

kmp匹配算法

kmp匹配算法1.第一种方式是暴利匹配方式2.第二种方式采用kmp 方式进行匹配3. 相应的代码1.第一种方式是暴利匹配方式 暴利匹配规则 模型: str1 位源字符串下标为i,str2位匹配字符串,下标为j 。 假设 str1 匹配到i , str2 匹配到j 则有 (1)当 …

【软件开发底层知识修炼】七 Binutils辅助工具之- ar工具与nm工具

学习交流加 个人qq: 1126137994个人微信: liu1126137994学习交流资源分享qq群: 962535112 上一篇文章学习addr2line与strip工具。点击链接查看上一篇文章:点击查看 本篇文章学习两个工具:ar与nm工具。 文章目录1、ar工…

【软件开发底层知识修炼】八 Binutils辅助工具之- objdump工具 与 size,strings工具

上一篇文章学习了ar工具与nm工具,点击链接查看上一篇文章:点击链接 本片文章学习记录以下三个工具: objdumpsizestrings 1、objdump工具 用法: 反汇编目标文件,查看汇编到源码的映射(后面代码案例分析看具体区别&a…

【C++深度剖析教程39】实现C++数组类模板

上一篇文章在那个学习了多参数类模板与特化的分析:点击链接查看上一篇文章:类模板深度剖析 本篇文章学习记录: 数值型模板参数实现C数组类模板 1、模板中的数值型参数 模板参数可以是数值型参数。也就是非类型参数。如下图所示&#xff1…

前端学习(168)全局事件属性

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/ TR/html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>事件</ti…

【原】两个时间相加的运算符重载实现

要求&#xff1a;两个时间相加&#xff0c;得到的时间形如“xx时&#xff1a;xx分&#xff1a;xx秒” -------------------------------------------------------------------------------------------------------------- 解答&#xff1a; 首先编写时间处理类 时间类 1 ///&l…

IOT变现

IOT&#xff08;物联网&#xff09;变现1. IOT 设备基础结构2.IOT 组成元素3.从M2M扩展到IOT的世界4. 工业4.0最近在看IOT变现&#xff0c;记录一下核心的知识点概念&#xff1a;IOT 是利用无线标签&#xff0c;传感器&#xff0c;MEMS(micro-ElectroMechanical System&#xf…

【C++深度剖析教程40】使用数值型模板技术计算1+2+3+...+N的值

上一篇文章学习了数值型模板技术&#xff0c;并利用相关技术&#xff0c;实现了C的数组类模板。点击文章查看上一篇文章&#xff1a;点击链接查看 本篇文章&#xff0c;继续利用模板技术来解决一个问题。 如果想求123…N的结果&#xff0c;有很多种方法。可以循环遍历&#x…

前端学习(169):无语义元素

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>无语义标签&…

dubbo思维导图

dubbo思维导图之前总结的 后续持续更新中

前端学习(170):无语义元素二

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>DIVCSS布局&…

【软件开发底层知识修炼】九 链接器-可重定位文件与可执行文件

上几篇文章学习了Binutils辅助工具里面的几个实用的工具&#xff0c;那些工具对于以后的学习都是非常有帮助的&#xff0c;尤其是C语、C语言的学习以及调试是非常有帮助的。点击链接查看上一篇文章&#xff1a;点击查看 本篇文章开始一个新的知识的学习&#xff0c;链接器的学习…

【软件开发底层知识修炼】十 链接器-main函数不是第一个被执行的函数

上一篇文章&#xff0c;大概了解了链接器的工作内容就是&#xff1a;符号解析和重定位。点击上一篇文章查看&#xff1a;点击查看。 本片文章其实还是围绕链接器来学习。只不过不是很明显&#xff0c;当你学到下一篇文章时&#xff0c;就明白了。 本篇文章来弄明白一个问题&a…

分享博文摘要图标【11/16更新】

经常写文章&#xff0c;希望给朴素的浏览界面添加一些生动的图标&#xff0c;让浏览者直接通过图片来得知这篇文章讲的是什么&#xff1f; &#xff08;效果预览...&#xff09; 博主特意搜集并上传了一些大家可能会用到的图标&#xff0c;提供16、32、48、64、128、甚至256像素…

【OS学习笔记】十二 现代处理器的结构和特点

本文是一个衔接点&#xff0c;上一篇文章以前都是学习8086实模式的知识。本文开始学习80386这种现代处理器的编程架构。由此进入保护模式的学习。点击链接查看上一篇文章&#xff1a;上一篇文章 1、现代处理器的结构和特点 1 流水线技术 处理器可以做很多事情&#xff0c;能…

前端学习(172):格式化文本

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/ html4/strict.dtd"> <html><head><meta http-equiv"content-type" content"text/html; charsetutf-8"><title>格式化</…

输出星号平行四边形

输出星号平行四边形 代码 #include <stdio.h>intmain(){inti, j, k, max; printf("Input max:"); scanf("%d", &max);for(i 1; i <max /21; i) /*1~max / 2 1 行 */{for(j max /2-i; j >0; j--) /*第i行的空白字符 */{ putchar(); }for(j…