首页 > 其他分享 >中断

中断

时间:2023-08-20 14:55:26浏览次数:33  
标签:操作系统 中断 描述符 屏蔽 寄存器 interrupt

深入理解系统中断

整个操作系统就是一个中断驱动的死循环,操作系统原理如果用一行代码解释,下面这样再合适不过了。

while(true) {
  doNothing();
}

其他所有事情都是由操作系统提前注册的中断机制和其对应的中断处理函数完成,我们点击一下鼠标,敲击一下键盘,执行一个程序,都是用中断的方式来通知操作系统帮我们处理这些事件,当没有任何中断事件时,它就乖乖停在死循环里不出来。

所以,中断,非常重要,它也是理解整个操作系统的根基。

分类

interrupt 中断

interrupt由外部设备触发,外部设备有比如说鼠标、键盘、电池等等。interrupt 可以进一步分成可屏蔽中断不可屏蔽中断

可屏蔽中断常常是 io 设备的请求,不可屏蔽中断经常是内存读写错误、电池掉电这样灾难性的错误必须处理。

异常 exception

CPU 执行指令时产生的异常引起,比如除零异常

INT 指令

由程序(通常是系统调用)或任务显式通过 INT n 等指令触发。

处理

感觉无论是来自软件还是硬件的中断,不论是硬件还是软件处理的中断,都有

用到的部件有哪些

  • 中断描述符
    存放一个中断号对应的中断程序的地址和其他信息

  • 中断描述符表 IDT
    中断描述符按顺序排列组成的数组

  • IDTR
    寄存器,存放着数组的头指针指向的地址和 limit 等信息。这个寄存器会在 bootloader 阶段指定

流程

获取中断号,关中断,跳转到对应地址,保存寄存器,执行中断程序,恢复寄存器,开中断,iret 跳转回去

系统调用

int 80 就是软中断的一种。Syscall 是快速系统调用,简化了检查的步骤。参考 syscall 分析

标签:操作系统,中断,描述符,屏蔽,寄存器,interrupt
From: https://www.cnblogs.com/91ac0m0/p/17643988.html

相关文章

  • 关于 STM32 在使用 C++ 进行编程时无法进行中断(触发中断就死循环)的问题
    他妈的!!!就因为这破事导致我浪费了两天的时间!!!都是基础不扎实的锅,导致我没能第一时间想到问题的关键好了,平复一下心情,快速的写一篇博客来记录这个叼问题解决方法先把结论放在这里:用extern"C"{}把中断函数包起来//就像这样extern"C"{voidEXTI4_IRQHandler(){HAL_GP......
  • GIC入门(二):寄存器组成,配置和中断处理
    1.寄存器组成GIC寄存器分为以下三组:GIC_DistributorGIC_RedistributorCPUInterfaceGIC_D&GIC_R两组寄存器用于配置中断,CPUInterface用于处理中断。GICD_*:distributor寄存器是memory-mapped,即占用地址空间,寄存器功能主要有:为SPI中断设置优先级级别,路由SPI将其分配至不......
  • GIC入门(一):中断类型,状态转换,中断路由,安全模型
    GIC是ARM的通用中断处理器,和ARMCortex-A和Cortex-R系列CPU搭配使用,M系列使用NVIC(nestedvectoredinterruptcontroller)。本篇文章介绍GICV3、V4的一些基本概念:中断类型,状态转换,中断路由,安全模型 1.InterrupttypesSPI:sharedphripheralinterrupt,可以设置为被所有PE处......
  • 王道408---中断等级排行
    参考: https://blog.csdn.net/yuanren201/article/details/109624922http://www.cskaoyan.com/thread-148325-1-1.html1.机器校验中断:高速程序发生了设备故障,比如电源故障,主存出错等2.访馆中断:用户程序需要操作系统接入,调用操作系统服务等3.程序性中断:包括指令和数据的格式错......
  • Linux中断底半部机制总结
    转载:Linux中断底半部机制总结-闹闹爸爸-博客园(cnblogs.com)linux实现底半部的机制主要有tasklet、workqueue、softirq和线程化irq。1.tasklettasklet的使用较为简单,它的执行上下文是软中断,所以在tasklet中不能睡眠,它的执行时机通常是中断顶半部返回的时候。我们只需要定......
  • linux中断
    1,申请中断API函数request_irq()intrequest_irq(unsignedintirq,irq_handler_thandler,unsignedlongflags,constchar*name,void*dev)irq:要申请中断的中断号。handler:中断处理函数。name:中断名字......
  • 文件映射缺页中断和匿名页面缺页中断的区别
    文件映射缺页中断和匿名页面缺页中断主要区别在于缺页时的处理方式和触发原因。对于文件映射缺页中断,当程序需要访问文件映射的某个页面但该页面尚未调入内存时,就会触发文件映射缺页中断。这时,操作系统会根据文件映射的约定从磁盘加载相应的文件内容到内存中,然后更新页表,使得程序......
  • TMS320F28335 ePWM中断函数里不能关时钟?实际上是关时钟之后不能清中断
    最近发现一个很奇怪的现象,如标题,为此写了一个简单的程序来验证这个问题,下面是部分代码:1voidInitEPwm2Gpio(void)2{3EALLOW;4GpioCtrlRegs.GPAPUD.bit.GPIO2=0;//使能上拉5GpioCtrlRegs.GPAMUX1.bit.GPIO2=1;//将GPIO2配置为EPWM2A......
  • 单片机原理2:定时器和中断
    定时器定时器寄存器:TMOD:方式寄存器,设定定时器0和定时器1的工作方式C/T:0为定时,1为计数TCON:控制寄存器,可位寻址TCON:TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0前面四位用于定时/计数,后面四位用于控制外部中断两个模式:定时和计数模式中断:主程序因为随机事件发生,暂停现行程序的运行,......
  • STC15 外部中断编程笔记
    以STC15W4K58S4为例,可以将片上的外部中断资源分为“高级”和“低级”两类,EXINT0和EXINT1属于高级的,EXINT2~EXINT4属于低级的。“高级”的外部中断可以配置中断优先级,选择中断源;低级的则不行。EXINT0和EXINT1的配置这两个外部中断的配置寄存器都可位寻址,因此可以直......