首页 > 其他分享 >CPU中断

CPU中断

时间:2023-01-16 11:00:54浏览次数:38  
标签:故障 中断 处理 指令 执行 CPU



什么是中断

假设你在玩王者荣耀,突然一个电话过来…, 这就是​​中断​​!

对CPU来说就是:CPU在执行某一段程序的时候收到某些特定信号转而去执行另一段特定程序的过程。

CPU中断_嵌入式硬件

CPU中断_寄存器_02


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

从某种角度来讲中断可以理解为外部硬件和CPU的一种通信方式。一般CPU与硬件通信的方式有两种轮询和中断,早期的CPU处理外设的事件(比如接收键盘输入),往往采用“轮询”的方式。轮询是指CPU像个查岗的一样轮番对外设顺序访问,比如它先看看键盘有没被按下,有的话就处理,没的话继续往下看鼠标有没有移动,再看看打印机……这种方式使CPU的执行效率很低。中断模式时就是说CPU不主动访问这些设备,只管处理自己的任务。如果有设备要与CPU联系,或要CPU处理一些事情,它会给CPU发一个中断请求信号。这时CPU就会放下正在进行的工作而去处理这个外设的请求。处理完中断后,CPU返回去继续执行中断以前的工作。

一般CPU每执行一条指令就会检查是否有中断过来。一旦发生了中断,就把手头的工作先放一边,去处理一下。

上文提到有很多种硬件要和CPU联系,那么CPU如何区分不同硬件的中断信号呢?答案是靠一个叫做可编程中断控制器PIC的东西,外号8259A,各种外设想发中断请求信号都得通过这个PIC,所以CPU只需要和PIC进行对接就行。

CPU中断_物联网_03


实际长这样:

CPU中断_寄存器_04


所有的需要发中断的外设都要和中断控制器的引脚相连,控制器会根据引脚的编号来给中断编号,比如1号中断,2号中断,…这样CPU就可以区分中断了。接下来的问题是,一个特定的中断过来后,比如110号中断过来了,CPU如何找到所对应的的处理程序?

实际上操作系统也给不同中断处理都分配了一个编号,叫做中断向量。操作系统还准备了一个表格叫中断描述符表IDT,表格里记录了很多信息,其中就有处理这个中断号对应的函数地址。CPU找PIC拿到编号后就执行处理函数就OK了。中断描述符表一般是保存在内存中,然后用一个寄存器IDTR(Interrupt Descriptor Table Register ),中断描述符表寄存器来保存这个表的地址。上面的例子,CPU收到110号中断信号后,根据IDTR寄存器找到中断描述符表,然后读取这个表中的第110表项就能找到110号中断的处理程序的函数地址。

CPU中断_描述符表_05


因为中断处理完之后是要回去继续执行之前的程序的,所以当发生中断的时候,操作系统需要进行上下文切换,就是要先保存当前的工作状态,以便中断处理完再恢复到原来的状态。具体就是把当前执行的这个线程的各个寄存器的值,执行到哪里了等等这些信息都保存在这个线程的内核栈里去。

不过有时候在执行一些非常重要的事情的时候,就不想被打断。于是CPU在一个叫eflags的寄存器中设置了一个标记,如果是1才允许被打断,如果是0那就算天王老子找也不管了。

CPU中断_嵌入式硬件_06


当然,也有一些特别重要的中断是不能屏蔽的,一般是碰到了特别严重的故障!

中断的分类

其实上面讲的中断只是广义中断中的一种:外部中断。中断的分类如下:

CPU中断_单片机_07


外部中断

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

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

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

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

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

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

3、终止:执行指令的过程中发生了致命错误,不可修复,程序无法继续运行,只能终止,通常会是一些硬件的错误。终止处理程序不会将控制返回给原程序,而是直接终止原程序


标签:故障,中断,处理,指令,执行,CPU
From: https://blog.51cto.com/u_15202985/6010208

相关文章

  • cpu profiler及火焰图学习
    转自:https://blog.csdn.net/10km/article/details/838200801.profiler输出 大字体显示的节点就是CPU使用率的’热点’。上述为SVG模式,可伸缩向量图形(ScalableVectorG......
  • 数据库服务器CPU不能全部利用原因分析
    背景客户凌晨把HIS数据库迁移到配置更高的新服务器,上午业务高峰时应用非常缓慢。现象通过SQL专家云实时可视化界面看到大量的绿点,绿点表示会话在等待某项资源,绿点越大说......
  • 中断
    操作系统是个死循环,有了中断,CPU才能执行指令工作。外部中断外部中断是来自CPU外部的中断,而外部的中断源必须是某个硬件,故而又称为硬件中断。比如网卡接收到数据包,就会通......
  • Linux下查看CPU信息, 包括位数和多核信息
     以redhat6.0为例:查看当前操作系统发行版信息#cat/etc/issueRedHatEnterpriseLinuxServerrelease6.0(Santiago)Kernel\ronan\m查看cpu型号#cat/proc/cpuinf......
  • 笔记本在使用一段时间后莫名卡顿的解决方法——CPU莫名锁频
    首先要看看是不是因为CPU锁频了。键盘按下Ctrl+Shift+Esc,看看CPU内的速度部分是否保持在零点几。解决方案如果是的话,可以先将电脑关机,然后将所有的外设拔掉,电源也拔掉......
  • 认识 CPU 底层原理(2)——逻辑门
    本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除上一篇文章我们从最基本的粒子的角度认识......
  • 认识CPU底层原理(1)——MOSFET
    本文为B站UP主硬件茶谈制作的系列科普《【硬件科普】带你认识CPU》系列的学习笔记,仅作个人学习记录使用,如有侵权,请联系博主删除近年来,由于国内外各种因素影响,半导体行业......
  • STM32F407 HardFault_Handler 中断输出初步定位越界问题
    1、测试环境:MDK+STM32F4072、汇编重写 HardFault_Handler 中断/*硬件错误中断的回调*/voidHardFault_CallBack_MSP(void){unsignedintMSP=__get_MSP......
  • MySQL--无效更新导致的CPU飙升问题
    问题描述某业务使用的MySQL服务器CPU存在周期性波动,根据监控排查那种操作引发CPU异常!首先排查QPS,发现增删改查的QPS均无明显波动。然后排查操作记录数,发现增删改查的记......
  • 计算机操作系统第三天(启动中断异常和系统调用 p9~p10)
    视频对外设是I/O和中断来控制对应用程序是系统调用和异常来控制为什么应用系统要通过操作系统来访问外设?异步表示不知道什么时候发生。同步有一个确切......