首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏Ywrby

    5-中断和异常

    有了中断,才能实现多道程序并发执行 概念 中断发生时,CPU立即进入核心态 中断发生后,当前进程暂停运行,并由操作系统内核对中断进行处理 对于不同的中断信号,会进行不同的处理 用户态切换到核心态是通过中断实现的 ,并且中断是唯一的实现方式 核心态到用户态的切换只需要执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”即可 中断的分类 内中断 也称为异常,例外,陷入 信号来源:CPU内部,与当前执行的指令有关 内中断还细分为 自愿中断:指令中断,如系统调用时的访管指令(陷入指令,trap指令) 强迫中断:硬件故障(如缺页中断),软件中断(如除0) 内中断另一种分类方式: 陷阱,陷入(trap):有意而为之的异常 也称为中断(狭义上的中断) 信号来源:CPU内部,与当前执行的指令无关 外中断还可以分为 外设请求:如I/O操作完成发出的中断信号 人工干预:如用户强行停止一个进程 外中断处理过程 CPU在用户态下逐条执行指令 ,在每条指令执行结束后进行检查,检查当前是否有外部中断信号 如果检测到外部中断信号在,则需要保护被中断进程的CPU环境(如程序状态字PSW,程序计数器PC,各种通用寄存器) 根据中断信号类型转入响应的中断处理程序

    83710编辑于 2022-10-27
  • 来自专栏计算机学习

    xv6(5) 中断代码部分

    注册中断服务程序,首先得有中断服务程序是吧,我将 $xv6$ 里的中断服务程序分为三部分: 中断入口程序 中断处理程序 中断退出程序 中断处理程序每个中断是不同的,但是中断入口和中断的出口(退出)是基本是相同的 中断入口程序就是保存上下文,然后跳到真正的中断处理程序执行中断,之后再跳转到中断退出程序。 这里涉及到两个跳,第一个从中断入口程序跳到中断处理程序,一个相同的入口点是如何跳到不同的中断处理程序的呢? 第二跳从中断处理跳到中断退出程序,这其实没什么特殊的处理,中断入口程序和中断退出程序在一个汇编文件里面,中断入口程序调用中断处理程序,中断处理程序执行完成之后自然会回到中断退出程序。 //向量号 // below here defined by x86 hardware uint err; uint eip; ushort cs; ushort padding5; & 0xf) + ((bcd>>4)*10)); } 其实原理很简单,比如 BCD 码表示 15 这个数字,表示方式是:0001 1001,BCD 码是用四位来表示一个数的,前四位表示1,后四位表示 5

    74000编辑于 2023-12-05
  • 来自专栏全栈程序员必看

    中断和软中断_软中断和硬中断的优先级

    (3) 中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断 除外。 软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。 (4) 软中断指令 int是软中断指令。 中断向量表是中断号和中断处理函数地址的对应表。 int n – 触发软中断n。 相应的中断处理函数的地址为:中断向量表地址 + 4 * n。 (5)硬中断和软中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,软中断中断号由指令直接指出,无需使用中断控制器。 硬中断是可屏蔽的,软中断不可屏蔽。 但一个软中断不会抢占另一个软中断,唯一可以抢占软中断的是硬中断

    3.6K40编辑于 2022-11-03
  • 来自专栏电子工程师成长日记

    单片机中断—外部中断

    51系列单片机的中断共有5个,其中外部中断共占两个。外部中断主要通过单片机的引脚P3.3、P3.4接收外部脉冲或高低电平触发CPU中断。与外部中断有关的多功能寄存器为IE、IP、TCON。 单片机的P0.0口接一只LED,按键接在P3.2端口,按键不按时,由于P3.2接有上拉电阻R3,所以P3.2此时为高电平+5V,如果按键按下,P3.2电源地短路,P3.2为低电平,利用外部中断INT0实现按键输入电路的电路具体如图 #include<reg51.h> sbit LED0 = P0^0; sbit key5 = P3^2; bit i; void int0_isr(void) interrupt 0 //INT0 i; LED0 = i; //INT0中断1次,LED工作状态变化1次 while(key5 == 0)EX0 = 0; //按键按下时刻,禁止中断 EX0 = 1 仿真电路如图: 具体仿真视频如下: http://mpvideo.qpic.cn/0b78dmaawaaayiaa6emli5pvag6dbmnqacya.f10002.mp4?

    3.7K20编辑于 2022-07-21
  • 来自专栏开发与安全

    中断机制和中断描述符表、中断和异常的处理

    中断又分为外部可屏蔽中断(INTR)和外部非屏蔽中断(NMI),所有I/O 设备产生的中断请求(IRQ)均引起屏蔽中断,而紧急的事件(如硬件故障)引起的故障产生非屏蔽中断。 2、外设可屏蔽中断、异常及非屏蔽中断 Intel x86 通过两片中断控制器8259A 来响应15 个外中断源,每个8259A 可管理8 个中断源。 我们把与中断控制器相连的每条线叫做中断线,要使用中断线,就得进行中断线的申请,就是IRQ(Interrupt ReQuirement ),我们也常把申请一条中断线称为申请一个IRQ 或者是申请一个中断号 当控制权通过中断门进入中断处理程序时,处理器清IF 标志,即关中断,以避免嵌套中断的发生。 通过系统门来激活4 个Linux 异常处理程序,它们的向量是3、4、5 及128,也就是说,在用户态下,可以使用int 3、into、bound 及int 0x80 四条汇编指令。

    4.6K10发布于 2017-12-28
  • 来自专栏用户画像

    中断向量 中断向量表

    1、中断标识码(中断类型号):由硬件(通常是中断控制器)产生,以标识不同的中断源。 2、中断向量:早期的微机系统中将由硬件产生的中断标识码(中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址)称为中断向量。 在某些计算机中,中断向量的位置存放一条跳转到中断服务程序入口地址的跳转指令。 3、中断向量地址:存储中断向量的存储单元地址。 存放:存放中断服务程序的入口地址,来存放中断向量(共256个),称这一片内存区为中断向量表。 综上所述:中断向量的地址一定是 中断服务程序的入口地址的地址,但中断向量不一定就是中断服务程序的入口地址。

    3.1K40发布于 2018-08-27
  • 来自专栏dcmickey小站

    线程中断

    线程中断 线程中断即线程运行过程中被其他线程给打断了,它与 stop 最大的区别是:stop 是由系统强制终止线程,而线程中断则是给目标线程发送一个中断信号 如果目标线程没有接收线程中断的信号并结束线程 * 线程中断失败, 因为目标线程收到中断信号并没有做出处理 */ public class T01_ThreadInterrupt_Failed { static int i = 10; package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断失败,Sleep遇到线程中断catch到异常会清除掉中断标记, package com.starry.codeview.threads.P05_ThreadInterrupt; /** * 线程中断失败,Sleep遇到线程中断catch到异常会清除掉中断标记, 但是catch异常块中做出了中断处理动作,所以中断成功!!!

    1.9K20编辑于 2022-06-09
  • 来自专栏TechBlog

    中断系统结构及中断控制详解

    中断系统结构及中断控制详解 MCS—51提供5中断请求源,2个中断优先级,可实现两级中断服务程序嵌套。 MCS-51单片机有5中断源,可提供两个中断优先级,即可实现二级中断嵌套。 二、MCS-51中断源及中断入口 MCS-51的中断源可分为三类:外部中断、定时中断和串行口中断。 IE0:外中断0中断申请标志 若IT0=0,每个机器周期的S5P2采样INT0 ,若INT0=0则IE0=1;当 IT0=1时,第一个机器周期采样到INT0为高电平,第二个机器周期为低电平,则IE0= EX0=1,允许外部中断0中断 MCS-5l系统复位后,IE中各中断允许位均被清“0” 。 五、 中断优先级 中断优先级——设计人员给每个中断源事先安排中断响应的优先顺序。然后按轻重缓急的次序响应。 PT0——T0中断优先级控制位。 PX0——外部中断0中断优先级控制位。 以上对应位为1,高优先级;为0,低优先级。 当系统复位后,IP低5位全部清“0”,将所有中断源设置为低优先级中断

    4.1K20编辑于 2022-09-20
  • 来自专栏Linux驱动

    5.分析内核中断运行过程,以及中断3大结构体:irq_desc、irq_chip、irqaction(详解)

    我们找到vector_stub这个定义: .macro vector_stub, name, mode, correction=0 //定义vector_stub有3个参数 .align 5 : .macro vector_stub, name, mode, correction=0 //定义vector_stub有3个参数 .align 5 vector_stub _irq_invalid @ 4 .long __irq_invalid @ 5 ret_to_user 4.2.irq_handler的实现过程,arch\arm\kernel\entry-armv.S .macro irq_handler   get_irqnr_preamble r5, lr   get_irqnr_and_base r0, r6, r5, lr // get_irqnr_and_base:获取中断号,r0=中断号   

    1.9K80发布于 2018-01-03
  • 来自专栏韩曙亮的移动开发专栏

    【嵌入式开发】ARM 关闭中断 ( CPRS 中断控制位 | 中断使能寄存器 | 中断屏蔽寄存器 | 关闭中断 | 汇编代码编写 )

    寄存器中的值 保存到 SPSR 寄存器中, 以便 异常处理完毕后 再回到原来断点处 继续运行 ; 4.SPSR 寄存器分布 : 用户模式 和 系统模式 没有 对应的 SPSR 寄存器, 只有 5 为 0, 那么 中断不可用; ( 1 ) 读取到 1 值 : 如果读取到的值 为 1, 那么 中断可用; 5.设置寄存器值 : 这两个寄存器 只能设置中断可以使用, 无法设置 屏蔽 中断, 如果设置 3.快速中断设置 : 关闭 快速中断, 需要将 CPRS 的 F [ 6 ] 位 设置为 1; 4.最后向 CPRS 寄存器设置的值 : 最终值为 0b11010011, 其中 0 ~ 5 位 的 位 清 0 : 在 R0 中将从 CPSR 中导出的寄存器值 对应的 0 ~ 4 位 清0, 使用 bic r0, r0, #0x1f, 将 R0 寄存器的值 与 #0x1f 进行 与操作, 即 后5 位都设置成0, 然后将 与 操作的结果保存到 R0 寄存器中 ; 5.将 R0 中的 M 位 设置 模式代码 : 在下图中, svc 的模式代码时 0b10011 ( 二进制 ), 即 0x13 (

    10.3K21编辑于 2023-03-27
  • 来自专栏杨焱的专栏

    线程的中断

    中断是对线程的一个指示,它应该停止正在做的事情并做其他事情。由程序员决定线程如何响应中断,但是线程终止是很常见的。这是本节课要强调的用法。 线程通过在要被中断的线程对象上调用interrupt来发送中断。为了让中断机制正常工作,被中断的线程必须支持自己的中断。 Supporting Interruption 线程如何支持自己的中断? return; } } 在这个简单的示例中,代码只是测试中断并在收到中断后退出线程。 中断状态标志 中断机制是使用一个内部标志来实现的,这个标志被称为中断状态。调用Thread.interrupt设置这个标志。 当线程通过调用静态方法thread .interrupted来检查中断时,中断状态将被清除。一个线程使用非静态的isInterrupted方法来查询另一个线程的中断状态,它不会改变中断状态标志。

    1.5K20编辑于 2021-12-07
  • 来自专栏ops技术分享

    CPU的中断

    一.简介 中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号。中断允许让设备,如键盘,串口卡,并口等设备表明它们需要CPU。 二.具体 方式 中断服务程序或中断处理器可以在中断向量表中找到,而这个中断向量表位于内存中的固定地址中。中断被CPU处理后,就会恢复执行之前被中断的程序。 我们可以将一个比特位设置为0,来禁用在此针脚触发的中断。 软中断 编程异常通常叫做软中断,软中断是通讯进程之间用来模拟硬中断的 一种信号通讯方式 通常,软中断是一些对I/O的请求。 中断切换 中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完成之前,其他中断都不能响应,也就是说中断有可能会丢失。 ) NET_TX: 5 7(网络接收中断) NET_RX: 39237430 16258579(网络发送中断) BLOCK:

    4.1K30发布于 2021-05-24
  • 来自专栏嵌入式ARM和Linux

    中断和异常

    1 基本概念 中断定义:通常被定义为改变CPU指令执行序列的事件。 中断可以分为异步和同步中断: 同步中断,是由CPU在执行指令时由CPU控制单元产生的中断。 这意味着,CPU必须停止指令的执行,转而响应中断。通常情况下,同步中断就是指 异常。 异步中断,是由外部设备随机产生的,信号采样按照CPU时钟信号。异步中断就是我们通常情况下所指的中断中断处理程序必须能够允许中断嵌套处理。 虽然内核允许中断嵌套处理,但是内核代码中,必须提供临界段代码,在其中,中断必须被禁止。因为有些时候,我们的代码是不允许被中断的,这也是内核同步的一种手段。 3 中断和异常 Intel官方文档将中断和异常分类为: 中断: 可屏蔽中断 所有I/O设备发出的IRQ都能产生可屏蔽中断。屏蔽掉的中断中断控制器忽略其存在。 非可屏蔽中断和异常编号是固定的;而可屏蔽中断是不固定的,可以通过对中断控制器进行编程进行修改。 4 中断请求线-IRQ 硬件设备和可编程中断控制器之间使用中断请求线(IRQ)进行连接。

    2K20编辑于 2022-08-15
  • 来自专栏Linux内核那些事

    Linux中断处理

    中断处理 - 上半部(硬中断) 由于 APIC中断控制器 有点小复杂,所以本文主要通过 8259A中断控制器 来介绍Linux对中断的处理过程。 中断处理相关结构 前面说过,8259A中断控制器 由两片 8259A 风格的外部芯片以 级联 的方式连接在一起,每个芯片可处理多达 8 个不同的 IRQ(中断请求),所以可用 IRQ 线的个数达到 15 处理中断请求 当一个中断发生时,中断控制层会发送信号给CPU,CPU收到信号会中断当前的执行,转而执行中断处理过程。 这里要注意的是,如果中断处理过程能够开启中断的,那么就把中断打开(因为CPU接收到中断信号时会关闭中断)。 中断处理 - 下半部(软中断) 由于中断处理一般在关闭中断的情况下执行,所以中断处理不能太耗时,否则后续发生的中断就不能实时地被处理。

    8.2K20发布于 2020-08-25
  • 来自专栏专注 Java 基础分享

    线程的中断

    中断同时也是我们实现并发的基础,中断一个线程的执行,调度另一个线程的执行。 中断源 如果按照中断事件类型来分,大致上有以下几种类型的中断事件类型: 机器故障中断事件。 往往是电源故障、硬件设备连接故障等 程序性中断事件。这种大多是我们的程序代码逻辑问题,导致的例如内存溢出、除数为零等问题 外部中断事件。主要是时钟中断 输入输出中断事件。 设备出错或是传输结束 每一种类型的中断事件都对应一位二进制的比特位,系统中也对应一个中断寄存器用于保存当前系统所遇到的所有中断事件,1 表示该类型的中断事件发生,0 表示未发生。 中断操作主要分为两种方式,一种叫『抢占式中断』,一种叫『主动式中断』。前者就是在发生中断时,强制剥夺线程的 CPU,后者是在正在执行的线程中断位上标记一下,具体什么时候中断由线程自己来决定。 当线程发现自己有中断事件时,会根据中断事件的类型去对应相应的中断处理程序来处理该中断事件。 下面我们看几种类型的中断事件,对应的中断处理程序是如何处理的。

    2.2K30发布于 2018-09-27
  • 来自专栏兮动人的博客

    中断和异常

    中断机制的诞生 2. 中断的概念和作用 3. 中断的分类 4. 外中断的处理过程 知识回顾与重要考点 知识总览 1. 中断机制的诞生 2. 中断的概念和作用 3. 中断的分类 4. 外中断的处理过程 知识回顾与重要考点

    1.4K20发布于 2021-06-11
  • 来自专栏全栈程序员必看

    中断之NVIC

    uint32_t RESERVED4[56]; __IO uint8_t IP[240]; //中断优先级寄存器(8Bit wide) uint32_t RESERVED5[644]; 优先级的分组由内核外设SCB的应用程序中断及复位控制寄存器 AIRCR的PRIGROUP[10:8]位决定,F103分为5组,具体如下:主优先级=抢占优先级。 中断编程的3个要点 1.使能外设某个中断,具体由每个外设的相关中断使能位控制。 例如串口有发送完成中断,接收完成中断 这两个中断都是由串口控制寄存器的相关中断使能位控制 2.初始化 NVIC_InitTypeDef结构体,配置中断优先分级组,设置抢占优先级和子优先级,使能中断请求 3、编写中断服务函数 在启动文件 startup_stm32f10x_hd.s 中我们预先为每个中断都写了一个中断服务函数, 只是这些中断函数都是为空,为的只是初始化中断向量表。

    1K20编辑于 2022-08-24
  • 来自专栏Linux内核深入分析

    中断SOFTIRQ

    中断的引入 软中断的出现和linux系统对中断的划分是分不开的。 linux系统将整个中断处理过程分为了两部分,分别为上半部(Top Half)和下半部(Bottom Half),之所以要这样分是因为关闭中断的时间不能过长,也就是在关闭中断期间尽可能少干事,否则影响整个系统的性能 所以linux系统将中断处理分为两部分,在上半部全程关闭中断,下半部打开中断。而在上半部主要干一些和硬件有关的操作,速度快,在下部分做一些耗时的操作。这样一来既能保证系统效率又能处理各种中断。 如果当前有中断嵌套,当irq_exit退出的时候,这时候还会在中断上下文,也是不会处理softirq的。 因为如果SOFTIRQ执行时间过长,会导致一个中断处理流程迟迟无法结束,这意味此前被中断的进程无法执行,影响系统性能。

    2.9K21发布于 2020-03-24
  • 来自专栏码农知识点

    Java线程中断

    Thread.interrupt 的作用其实也不是中断线程,而是 通知线程应该中断了。 具体到底中断还是继续运行,应该由被通知的线程自己处理。 ② 如果线程处于正常活动状态,那么会将该线程的中断标志设置为 true,仅此而已。被设置中断标志的线程将继续正常运行,不受影响。 interrupt() 并不能真正的中断线程,需要被调用的线程自己进行配合才行。 也就是说,一个线程如果有被中断的需求,那么就可以这样做: ① 在正常运行任务时,经常检查本线程的中断标志位,如果被设置了中断标志就自行停止线程。 如果一个线程被设置中断标志后,选择结束线程那么自然不存在下次的问题,而如果一个线程被设置中断标识后,进行了一些处理后选择继续进行任务,而且这个任务也是需要被中断的,那么当然需要清除标志位了。

    1.5K20发布于 2020-06-22
  • 来自专栏全栈程序员必看

    NVIC中断管理

    使用中断之前,第一步要了解的是其优先级管理,下面总结一下STM32 NVIC的中断优先级管理。(正点原子系列) 以smt32f103系列为例,其具有16个内核中断和60个可屏蔽中断。 */ uint32_t RESERVED5[644]; __O uint32_t STIR; < Offset: 0xE00 Software Trigger Interrupt Register */ } NVIC_Type; 中断分组: 将中断分为5组,每组有对应的抢占优先级和子优先级 而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。 以上就是原理的一点总结了,下面到使用中断时库函数的配置: 配置中断三步走: 第一! 每个中断对应的名字。

    1.2K20编辑于 2022-09-01
领券