首页
学习
活动
专区
工具
TVP
发布

中断异常

一般是定时器中断I/O设备中断异常通常分为2类:一类是编程错误,另外一类就是需要内核处理的异常情况。编程错误,比如程序异常终止,处理这种异常,内核只需要给当前进程发送一个信号即可。...3 中断异常 Intel官方文档将中断异常分类为: 中断: 可屏蔽中断 所有I/O设备发出的IRQ都能产生可屏蔽中断。屏蔽掉的中断中断控制器忽略其存在。...可以使用int或int3指令触发,也可以使用into-溢出中断指令bound-地址限制异常中断指令检查相应的条件,如果条件为假,也会产生异常。...可编程错误一般被当作陷阱-trap处理,通常被称为软件中断。这类异常一般有两种作用:系统调用告知调试器某个事件。 中断异常使用一张中断向量表进行管理,编号为0-255。...非可屏蔽中断异常编号是固定的;而可屏蔽中断是不固定的,可以通过对中断控制器进行编程进行修改。 4 中断请求线-IRQ 硬件设备可编程中断控制器之间使用中断请求线(IRQ)进行连接。

1.3K20
您找到你想要的搜索结果了吗?
是的
没有找到

5-中断异常

中断异常 本质 发生中断就意味着需要操作系统介入,开展管理工作。由于操作系统的管理工作(如进程切换,分配I/O设备等)需要使用特权指令,所以需要CPU由用户态切换到核心态。...有了中断,才能实现多道程序并发执行 概念 中断发生时,CPU立即进入核心态 中断发生后,当前进程暂停运行,并由操作系统内核对中断进行处理 对于不同的中断信号,会进行不同的处理 用户态切换到核心态是通过中断实现的...,并且中断是唯一的实现方式 核心态到用户态的切换只需要执行一个特权指令,将程序状态字(PSW)的标志位设置为“用户态”即可 中断的分类 内中断 也称为异常,例外,陷入 信号来源:CPU内部,与当前执行的指令有关...内中断还细分为 自愿中断:指令中断,如系统调用时的访管指令(陷入指令,trap指令) 强迫中断:硬件故障(如缺页中断),软件中断(如除0) 内中断另一种分类方式: 陷阱,陷入(trap):有意而为之的异常...也称为中断(狭义上的中断) 信号来源:CPU内部,与当前执行的指令无关 外中断还可以分为 外设请求:如I/O操作完成发出的中断信号 人工干预:如用户强行停止一个进程 外中断处理过程 CPU在用户态下逐条执行指令

40110

中断异常概念详解

异步中断是由其他硬件设备依照CPU时钟信号随机产生的。中断是由间隔定时器I/O设备产生的,例如,用户的一次按键会引起一个中断。...异常 在Intel微处理器手册中,把同步异步中断分别称为异常(exception)中断(interrupt)。我们也采用这种分类,当然有时我们也用术语“中断信号”指这两种类型。...3.中断异常 Intel文档把中断异常分为以下几类: (1)中断: 可屏蔽中断(maskable interrupt) 非屏蔽中断(nonmaskable interrupt) (2)异常: 处理器探测异常...编程异常通常也叫做软中断(software interrupt),这样的异常由两种常用的用途:执行系统调用及给调试程序通报一个特定的事件。 每个中断异常是由0~255之间的一个数来标识。...非屏蔽中断的向量异常的向量是固定的,而可屏蔽中断的向量可以通过对中断控制器的编程来改变。 参考资料: 《深入理解LINUX内核》

1.3K10

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

注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程网络编程中的一些概念性问题...所有256 种中断可分为两大类:异常中断异常又分为故障(Fault)、陷阱(Trap)夭折(Abort),它们的共同特点是既不使用中断控制器,又不能被屏蔽。...非屏蔽中断的向量异常的向量是固定的,而屏蔽中断的向量可以通过对中断控制器的编程来改变。Linux 对256 个向量的分配如下。 • 从0~31 的向量对应于异常非屏蔽中断。...2.中断门(Interrupt gate) 其类型码为110,中断门包含了一个中断异常处理程序所在段的选择符段内偏移量。...4、中断异常的处理 当CPU 执行了当前指令之后,CS EIP 这对寄存器中所包含的内容就是下一条将要执行指令的逻辑地址。

3.5K10

Linux内核18-中断异常的嵌套处理

所以,内核态程序被激活的方式有: 系统调用(异常的一种) 异常 中断 内核线程 上面的任意一种方式,都可以让CPU执行内核态的代码。...异常相反,尽管内核代表当前进程处理这些中断,但是,I/O设备引发的中断当前进程没有直接数据引用的关系。事实上,给定一个中断,无法推断出是哪个进程在运行。...所以,中断的执行不会引起进程的切换,也就可以无限嵌套处理。 中断处理程序可以打断中断异常处理程序执行,但是反过来,异常不能打断中断处理程序。...中断处理程序绝对不能包含页错误的操作,因为这会诱发进程切换。 Linux嵌套执行中断异常处理程序的两个主要原因是: 为了提高可编程中断控制器设备控制器的吞吐量。...内核正在处理一个中断的时候,能够及时响应另一个中断。 实现没有中断优先级的模型。这可以简化内核代码并提高可移植性。 在多核系统中,几个中断异常处理程序可能会并发执行。

2K20

Linux内核17-硬件如何处理中断异常

在上一篇文章中,我们已经了解了中断异常的一些概念,对于中断异常也有了大概的理解。那么,系统中硬件到底是如何处理中断异常的呢?本文我们就以常见的X86架构为例,看看中断异常的硬件工作原理。...然后通过APIC总线发送给目标APIC,该APIC就会给自己的CPU发送一个相应的中断。 CPU间的中断(简称IPI)是多核系统一个重要组成部分。Linux有效地利用它们,在CPU之间传递消息。...陷阱门 同中断门类似,只是不会修改IF标志。 4 中断异常的硬件处理 现在,我们来探究一下CPU控制单元是如何处理中断异常的。我们假设内核已经完成初始化,CPU工作在保护模式下。...其实对于Linux来说,只使用了supervisoruser两种特权等级。所以中断应该都是在supervisor特权等级下运行。...(处理完中断异常后,还要恢复到旧任务执行) 根据造成异常的指令的逻辑地址,加载cseip寄存器(异常解决后,程序可以继续从这儿执行); 保存eflags、cseip到堆栈中; 如果异常携带异常错误码

1.9K10

内核知识第十一讲,门,以及中断中断异常.

内核知识第十一讲,门,以及中断中断异常. 一丶TSSTR寄存器....二丶中断中断异常. 首先,什么是中断? 在我们的8086的年代里面. 调用API的是否是 int 21来进行调用的. 这就是一个中断.中断是什么?  其实中断就是一个电信号....就产生一个异常.而在CPU接受到了,就会去查表.这样就可以处理int 3的指令了. 1.中断异常. 中断我们说过了,是电信号. 而表则是CPU操作系统的通信机制. 那么说下异常把. ...其实异常也是中断. 只不过,我们的软件调试的时候.当我们的程序用内联汇编写的int 3的时候,就会产生断点功能. 其实软件产生的中断,就叫做异常. ...在80386里面.有两个银脚,是专门接受中断信号的. 而且80386最多接受256种中断或者异常.

40420

Linux内核硬中断中断的原理实现

linux为了实现这个特点,当中断发生的时候,硬中断处理那些短时间就可以完成的工作,而将那些处理事件比较长的工作,放到中断之后来完成,也就是软中断(softirq)来完成。...(3)中断嵌套 Linux下硬中断是可以嵌套的,但是没有优先级的概念,也就是说任何一个新的中断都可以打断正在执行的中断,但同种中断除外。软中断不能嵌套,但相同类型的软中断可以在不同CPU上并行执行。...(4)软中断指令 int是软中断指令。 中断向量表是中断中断处理函数地址的对应表。 int n -- 触发软中断n。相应的中断处理函数的地址为:中断向量表地址 + 4 * n。...(5)硬中断中断的区别 软中断是执行中断指令产生的,而硬中断是由外设引发的。 硬中断中断号是由中断控制器提供的,软中断中断号由指令直接指出,无需使用中断控制器。...二、开关 (1)硬中断的开关 简单禁止激活当前处理器上的本地中断: local_irq_disable(); local_irq_enable(); 保存本地中断系统状态下的禁止激活: unsigned

21.1K21

10_异常中断

R14_svc,R14_irq,R14_fiq,R14_abtR14_und同样用于在发生中断异常时,或者执行转移链接指令时,备份R15的返回值。 ​...所有Cortex-A系列处理器都允许这样做,这是Linux内核选择的默认地址。实现安全扩展的内核还可以使用CP15向量基地址寄存器为安全状态非安全状态分别设置向量基地址。 ​...这避免了分支指令任何相关的延迟,从而加快了FIQ响应时间。相对于其他模式,FIQ模式下可用的备份寄存器数量比较多,从而避免要将寄存器的值保存到栈上,提高了执行速度。 ​ Linux通常不使用FIQ。...某些运行Linux的系统仍可以使用FIQ,但是由于Linux内核从不禁用FIQ,因此它们比系统中的其他任何事物都具有优先权,因此需要格外小心。...例11-1中显示了说明Linux内核使用SVC的代码 ​ SVC#0指令使ARM核采用SVC异常(一种访问内核功能的机制)。寄存器R0定义所需的系统调用(在本例中为sys_write)。

1.1K10

Linux中断机制:硬件处理,初始化中断处理

对应I/O APIClocal APIC的组合,其连接方式见下图 ? 针对X86中断控制器硬件linux对这些硬件的初始化,在《interrupt in linux》中有很详细的描述。...CPU对中断异常的处理 相关概念 1、 vector(中断向量) vector是一个整数,在X86CPU上,使用vector对中断(interrupt,外部设备产生)异常(exception,...CPU在程序执行中产生)统一编号,每个CPU核心内部,中断/异常vector所以一一对应的;但是在各个不同的CPU核心上,相同的vector可以对应不同的中断(至少对于linux的设置,异常还是使用相同的...通过INT n指令生成的中断即使使用了外部中断一样的vector,也是不可屏蔽的;同样CPU运行过程中同步产生的trap、fault、abort等异常也是不可屏蔽的。...异常的执行过程类似,只不过异常在执行前不会把IF位清零,只清零TF位。

7.6K30

Linux虚拟内存缺页中断

Linux虚拟内存地址空间 为了防止不同进程同一时刻在物理内存中运行而对物理内存的争夺践踏,采用了虚拟内存。 虚拟内存技术使得不同进程在运行过程中,它所看到的是自己独自占有了当前系统的4G内存。...,只是建立好虚拟内存磁盘文件之间的映射就好(叫做存储器映射),等到运行到对应的程序时,才会通过缺页异常,来拷贝数据。...操作系统中的缺页中断 malloc()mmap()等内存分配函数,在分配时只是建立了进程虚拟地址空间,并没有分配虚拟内存对应的物理内存。...当进程访问这些没有建立映射关系的虚拟内存时,处理器自动触发一个缺页异常。 缺页中断:在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。...,由硬件所产生的一种特殊的中断,因此,与一般的中断存在区别: 1、在指令执行期间产生处理缺页中断信号 2、一条指令在执行期间,可能产生多次缺页中断 3、缺页中断返回是,执行产生中断的一条指令,而一般的中断返回是

5.9K10

MIPS架构深入理解6-异常中断

系统调用陷阱 系统调用,debug时断点等。 在进一步分析异常中断之前,先来理解一个概念,什么是精确异常?...所以,对于TLB未命中异常处理程序(也就是TLB重填异常处理程序)来说,如果读取TLB表(像Linux内核,一般将映射表保存在kseg2段地址空间中)时,发生页表地址读取异常时,程序会再次返回到异常程序入口点...但是,嵌套异常也分为2种:一种就是上面TLB未命中异常嵌套TLB未命中异常,这种不需要人为干预EPCSR状态寄存器;另外一种,就需要我们必须保存被中断程序的EPC寄存器SR寄存器内容。...ARMX86架构有专门的禁止中断的指令。 系统调用看上去负荷还是有点重,虽然执行时间不一定很长。但是,需要编程者在异常派发代码中,将这个系统调用其它异常处理程序理清楚。...对于信号量的理解,我们之前已经写过文章,请参考《Linux内核33-信号量》。

2.4K20

Linux中断 - IDT

[toc] 如何设置IDT IDT 中断描述符表定义 中断描述符表简单来说说是定义了发生中断/异常时,CPU按这张表中定义的行为来处理对应的中断/异常。...中断描述符项定义 当中断发生,cpu获取到中断向量后,查找IDT中断描述符表得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序; 这里涉及到Linux...IDT 中断描述符表本身的存储 IDT 中断描述符表的物理地址存储在IDTR寄存器中,这个寄存器存储了IDT的基地址长度。...idt3.jpg 硬件中断的实现 硬件中断的IDT初始化调用流程 这里我们不讲解具体的代码细节,只关注流程 。...硬件中断相关IDT的初始化也是在Linux启动时完成,在start_kernel中通过调用init_IRQ完成,我们来看一下: void __init init_IRQ(void) { int

6.4K10

中断异常简介与分析

举例: intel x86 CPU有四种不同的执行级别0-3,linux只使用了其中的0级3级分别来表示内核态用户态。 image.png 二、如何区分用户态内核态?...打个比方在ARM处理器的异常种类就有不少,有未定义指令异常,软中断异常,快中断异常等等。异常是由程序错误产生的,或者是内核必须处理的异常条件产生的。...那么在linux内核中的中断其实也是单片机类似的,只不过linux内核的中断定义的比较丰富,但是基本思想还是一样的。linux内核处理中断有一种叫做中断信号的机制。...在intel的文档中,中断异常通常分为几类:中断有可屏蔽的,不可屏蔽的。异常有处理器探测异常,这就包括故障的产生,陷阱,异常的中止,还有编程异常的状况。...每个中断异常都是由0-255之间的一个数来标识。intel管这东西叫向量。 其实在ARM中就有那么一张表叫异常向量表,那就是我刚刚文章里说过的那几个。

1K30

重学计算机组成原理(十二) - 异常中断

可以用Linux下的time指令,去查看一个程序运行实际花费的时间,里面有在用户态花费的时间(user time),也有在内核态发生的时间 (system time)。...在处理异常的过程当中,无论是异步的中断,还是同步的陷阱故障,我们都是采用同一套处理流程,也就是上面所说的,“保存现场、异常代码查询、异常处理程序调用“。...推荐阅读 关于异常中断,《深入理解计算机系统》的第8章“异常控制流”部分,有非常深入充分的讲解,推荐你认真阅读一下。...再续中断分类 软中断中断中断 由硬件发出或产生的中断称为硬中断,按硬中断事件的来源实现手段可将中断划分为外中断中断: 外中断 又称为中断或异步中断,是指来自处理器以外的中断信号,包括时钟中断...外中断又分为可屏蔽中断不可屏蔽中断,各个中断具有不同的优先级,表示事件的紧急程度,在处理高一级中断时,往往会部分或全部屏蔽低等级中断

1.2K40

Linux内核22-软中断tasklet

这对于时间苛刻的应用来说,这是一个很重要的属性,尤其是那些要求中断请求必须在毫秒级别响应的应用。 Linux2.6内核使用两种手段满足这项挑战:软中断tasklet,还有工作队列。...2 软中断 Linux2.6内核中,软中断的数量比较少。对于多数目的,这些tasklet足够了。因为不需要考虑重入,所以简单易用。...Linux中断处理程序总是从索引0开始执行。 2.1 软中断使用的数据结构 软中断的主要数据结构是softirq_vec数组,包含类型为softirq_action的32个元素。...如果在第3步切换到软IRQ堆栈,则恢复原来的堆栈指针到esp寄存器中,然后切换到之前使用的异常堆栈中。 执行local_irq_restore恢复中断标志。...这在Linux内核中是禁止的,因为其可延时函数的执行都是串行的。所以,在此需要禁止软中断。 清除正在执行的软中断对应掩码位。 执行local_irq_enable()使能中断

1.3K30

重学计算机组成原理(十二) - 异常中断

也叫中断向量表(Interrupt Vector Table),好上面的中断向量对应起来。...可以用Linux下的time指令,去查看一个程序运行实际花费的时间,里面有在用户态花费的时间(user time),也有在内核态发生的时间 (system time)。...在处理异常的过程当中,无论是异步的中断,还是同步的陷阱故障,我们都是采用同一套处理流程,也就是上面所说的,“保存现场、异常代码查询、异常处理程序调用“。...推荐阅读 关于异常中断,《深入理解计算机系统》的第8章“异常控制流”部分,有非常深入充分的讲解,推荐你认真阅读一下。 思考 很多教科书网上的文章,会把中断分成软中断中断。...你能用自己的话说一说,什么是软中 断,什么是硬中断吗?它们和我们今天说的中断、陷阱、故障以及中止又有什么关系呢? 欢迎留言和我分享你的疑惑见解。

87200
领券