首页 > 其他分享 >我所理解的CPU中断

我所理解的CPU中断

时间:2023-02-01 14:24:14浏览次数:36  
标签:故障 中断 理解 处理 指令 执行 CPU

我所理解的CPU中断

 

什么是中断
假设你在玩王者荣耀,突然一个电话过来…, 这就是中断!
对CPU来说就是:CPU在执行某一段程序的时候收到某些特定信号转而去执行另一段特定程序的过程。

 

那为什么需要中断呢?原因是CPU不能闷着头啥也不管一个劲的只管执行代码,还得和连接在主板上的其它硬件打交道。经常和CPU保持联系的硬件有键盘、鼠标、磁盘,还有网卡等。如果没有中断那就意味着你猛敲键盘电脑都没反应,这显然不是你想要的结果。注意一点就是上图中,当CPU收到一个中断请求转去执行中断处理程序之后,不一定会返回继续执行原来的程序A,有可能是另一段程序B。就好比你玩荣耀,突然接了一个电话之后可能就是扔下手机领快递去了。

中断如何发生
从某种角度来讲中断可以理解为外部硬件和CPU的一种通信方式。一般CPU与硬件通信的方式有两种轮询和中断,早期的CPU处理外设的事件(比如接收键盘输入),往往采用“轮询”的方式。轮询是指CPU像个查岗的一样轮番对外设顺序访问,比如它先看看键盘有没被按下,有的话就处理,没的话继续往下看鼠标有没有移动,再看看打印机……这种方式使CPU的执行效率很低。中断模式时就是说CPU不主动访问这些设备,只管处理自己的任务。如果有设备要与CPU联系,或要CPU处理一些事情,它会给CPU发一个中断请求信号。这时CPU就会放下正在进行的工作而去处理这个外设的请求。处理完中断后,CPU返回去继续执行中断以前的工作。
一般CPU每执行一条指令就会检查是否有中断过来。一旦发生了中断,就把手头的工作先放一边,去处理一下。
上文提到有很多种硬件要和CPU联系,那么CPU如何区分不同硬件的中断信号呢?答案是靠一个叫做可编程中断控制器PIC的东西,外号8259A,各种外设想发中断请求信号都得通过这个PIC,所以CPU只需要和PIC进行对接就行。

实际长这样:

所有的需要发中断的外设都要和中断控制器的引脚相连,控制器会根据引脚的编号来给中断编号,比如1号中断,2号中断,…这样CPU就可以区分中断了。接下来的问题是,一个特定的中断过来后,比如110号中断过来了,CPU如何找到所对应的的处理程序?
实际上操作系统也给不同中断处理都分配了一个编号,叫做中断向量。操作系统还准备了一个表格叫中断描述符表IDT,表格里记录了很多信息,其中就有处理这个中断号对应的函数地址。CPU找PIC拿到编号后就执行处理函数就OK了。中断描述符表一般是保存在内存中,然后用一个寄存器IDTR(Interrupt Descriptor Table Register ),中断描述符表寄存器来保存这个表的地址。上面的例子,CPU收到110号中断信号后,根据IDTR寄存器找到中断描述符表,然后读取这个表中的第110表项就能找到110号中断的处理程序的函数地址。


因为中断处理完之后是要回去继续执行之前的程序的,所以当发生中断的时候,操作系统需要进行上下文切换,就是要先保存当前的工作状态,以便中断处理完再恢复到原来的状态。具体就是把当前执行的这个线程的各个寄存器的值,执行到哪里了等等这些信息都保存在这个线程的内核栈里去。
不过有时候在执行一些非常重要的事情的时候,就不想被打断。于是CPU在一个叫eflags的寄存器中设置了一个标记,如果是1才允许被打断,如果是0那就算天王老子找也不管了。

当然,也有一些特别重要的中断是不能屏蔽的,一般是碰到了特别严重的故障!
中断的分类
其实上面讲的中断只是广义中断中的一种:外部中断。中断的分类如下:

外部中断

1、可屏蔽中断:通过INTR线向CPU请求的中断,主要来自外部设备如硬盘,打印机,网卡等。此类中断并不会影响系统运行,可随时处理,甚至不处理,所以名为可屏蔽中断。

2、不可屏蔽中断:通过NMI线向CPU请求的中断,如电源掉电,硬件线路故障等。这里不可屏蔽的意思不是不可以屏蔽,不建议屏蔽,而是问题太大,屏蔽不了,不能屏蔽的意思。
注:INTR和NMI都是CPU的引脚

内部中断
内部中断又叫软中断或者异常
1、陷阱:是一种有意的,预先安排的异常事件,一般是在编写程序时故意设下的陷阱指令,而后执行到陷阱指令后,CPU将会调用特定程序进行相应的处理,处理结束后返回到陷阱指令的下一条指令。如系统调用,程序调试功能等。

尽管我们平时写程序时似乎并没有设下陷阱,那是因为平常所用的高级语言对底层的指令进行了太多层的抽象封装,已看不到底层的实现,但其实是存在的。例如printf函数,最底层的实现中会有一条int 0x80指令,这就是一条陷阱指令,使用0x80号中断进行系统调用。

2、故障:故障是在引起故障的指令被执行,但还没有执行结束时,CPU检测到的一类的意外事件。出错时交由故障处理程序处理,如果能处理修正这个错误,就将控制返回到引起故障的指令即CPU重新执这条指令。如果不能处理就报错。

常见的故障为缺页,当CPU引用的虚拟地址对应的物理页不存在时就会发生故障。缺页异常是能够修正的,有着专门的缺页处理程序,它会将缺失的物理页从磁盘中重新调进主存。而后再次执行引起故障的指令时便能够顺利执行了。

3、终止:执行指令的过程中发生了致命错误,不可修复,程序无法继续运行,只能终止,通常会是一些硬件的错误。终止处理程序不会将控制返回给原程序,而是直接终止原程序
————————————————
版权声明:本文为CSDN博主「普通网友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ajekseg/article/details/123578455

标签:故障,中断,理解,处理,指令,执行,CPU
From: https://www.cnblogs.com/iancloud/p/17082428.html

相关文章

  • seata分布式事务原理解释,AT模式简介
    seata是阿里开源的一个分布式事务框架,能够让大家在操作分布式事务时,像操作本地事务一样简单。一个注解搞定分布式事务。有些地方官网文档写的可能比较难以理解,这里用较为简......
  • 【八大数据排序法】选择排序法的图形理解和案例实现 | C++
    第十五章选择排序法:::hljs-center目录第十五章选择排序法●前言●认识排序●一、选择排序法是什么?1.简要介绍2.图形理解3.算法分析●二、案例实现1.......
  • content-type的理解和日常实践
    Content-Type,内容类型,一般是指网页中存在的Content-Type,用于定义网络文件的类型和网页的编码。在HTTP协议消息头中,使用Content-Type来表示请求和响应中的媒体类型信息。它......
  • 理解Golang 赋值的并发安全性
     1.什么是并发安全并发安全就是程序在并发情况下执行的结果是正确的。比如对一个变量简单的自增操作count++,在非并发下很好理解,而在并发情况下却容易出现预期之外......
  • C++ traits 萃取的一些简单理解
    摘取自<effectivec++>  ......
  • linux服务器运行java项目, 监控查看内存、储存空间和cpu占用率
    服务器部署方式为tomcat中运行war包的方式,有一次重新部署时候发现报异常堆栈溢出了.想要定位到某个war包中通过学习整理出此篇文章以作记录笔记.1.关于内存过高......
  • 基于Docker安装的Stable Diffusion使用CPU进行AI绘画
    基于Docker安装的StableDiffusion使用CPU进行AI绘画由于博主的电脑是为了敲代码考虑买的,所以专门买的高U低显,i9配核显,用StableDiffusion进行AI绘画的话倒是专门有个......
  • 中断ISR技术架构
    架构一ISR采用立即响应思路,技术架构如下图: 优点:简单。缺点:处理性能不高,中断优先级规划性不高(仅仅区分CPU的32个优先级别,针对不同类型中断优先级不支持)。选型:对于......
  • Operating Systems: Three Easy Pieces-虚拟化CPU——第6章 受限直接执行
    1、虚拟化采用的机制:采用时分共享CPU的方式,也就是运行一个进程一段时间,然后运行另一个进程,如此轮换。2、虚拟化机制的挑战:第一个是性能:如何在不增加系统开销的情况下实现......
  • 公务员行测——语言理解与表达【片段阅读】
    个人理解:中文版的英语阅读理解题,对应了平时英语阅读理解中的找表述一致的题目和判断对错的题目目标:更快更准我的思路:总结的思维导图:(有时会有两个主题词,需仔细注意)......