中断类型号(中断类型号和中断类型码)
中断类型号的取值范围
答案:B一个中断入口地址占用向量表中的4个字节,前2个字节存储偏移地址,后2个字节存储代码段地址。中断类型号=首字节的位置(80)/4=20每四个字节对应一个中断类型号例如:0000H,0001H,0002H,0003H这四个存储单元对应0号中断故0080H—0083H存储单元对应20号中断
一个8259可提供几个中断类型号
UART0的中断:有4个中断,分别是:RBR中断;THRE中断;Rx线中断;其中RBR中断里面包含有2个中断:数据可用RDA中断和接收超时CTI中断。
中断类型号范围
在x86系统中,最低的1k内存中(0-3ffh)存放着256个中断向量地址指针,每个地址指针占用4个字节,该4个字节存放中断向量地址。中断类型码4ah的中断向量地址指针为:4ah*4=128h,即0:128h-0:12bh这4个字节存放的内容是0010f02a(均为16进制),对应该中断服务程序的入口地址就是2af0h:1000h。一个“中断向量地址”和一个“中断向量地址指针”都占4字节,而“中断向量地址”就保存在“中断向量地址指针”中,这就是“中断向量地址指针”和“中断向量地址”的区别。(见图)
中断类型号和中断向量的关系
中断类型码n=14;除非特别注明,类型号是以十六进制形式表示的,即14H;中断类型吗n是一个字节大小的...
中断类型号怎么计算
常见的中断类型
外部中断和内部中断
不可屏蔽中断和可屏蔽中断
硬件中断和软件中断
中断控制器
陷阱、故障和终止
中断异常的优先级
中断向量表IVT
中断描述符表IDT
操作系统中的中断机制
哈喽,大家好,我是呼噜噜,好久没有更新oldlinux了,在上一篇文章Linux0.12内核源码解读(7)-陷阱门初始化中,我们简要地提及了中断,但是中断机制在计算机世界里非常重要,处处都离不开中断,所以特地单拉一篇文章,来详细聊聊计算机里的中断机制
系列文章目录
现代计算机具有多任务处理的能力,可以同时运行着几十上百的任务,如今很难想象,当我们点击鼠标,需要等待计算机中的其他程序全部执行完毕
1956年,IBM7049机器上首先使用了中断技术,提升了计算机具备应对处理突发事件的能力,并开始使用“中断”这一术语
中断,英文为Interrupt,即打断。当CPU在正常运行程序执行任务时,接收到硬件传过来的中断信号(interruptrequest,IRQ),CPU会中断执行当前的工作任务(被打断),转而去处理其他任务,等处理完后再回来继续执行刚才被暂时中断的任务。
广义上中断按照中断来源,可分为外部中断和内部中断
与CPU执行指令无关,中断信号来自CPU外部,一般指指由计算机外设发出的中断请求,如:键盘中断、打印机中断、定时器中断等。外部中断既有可屏蔽的中断也有不可屏蔽的中断,也是狭义上的中断(interrupt)
它不是由任何一条专门的指令造成的。比如硬盘,打印机,网络适配器,磁盘控制器等外部设备等硬件设备,通过向CPU上的引脚(NMI和**INTR)**发信号,并将异常号放在系统总线上,来触发中断。
中断是异步发生的(不同于同步:执行一条指令的结果),中断处理程序总是返回到当前指令的下一条指令
与CPU执行指令有关,中断信号来自CPU内部,一般指通过软件调用的中断,以及由执行指令过程中发生的错误所引起的中断,所以也称为异常(exception),如:trap指令、地址越界、算术溢出、虚存系统的缺页;
我们下文会具体讲讲x86下的异常,接下来还是会继续讲讲中断的其他分类
中断按照是否可被屏蔽,可分为2类:不可屏蔽中断和可屏蔽中断
不可屏蔽中断就是当不可屏蔽中断源一旦提出请求,表明问题非常严重或者系统发生了致命的错误,CPU必须立即无条件响应
另外不可屏蔽中断从源头还可以分为,既可由CPU内部产生,也可由外部NMI引脚产生,比如因运算出错(协处理器运算出错、除数为零、运算溢出、单步中断等)或因硬件出错(如电源掉电,硬件线路故障等)所引起的中断
那什么是NMI引脚?
其实NMI和下面的INTR都是CPU上的引脚,INTR(InterruptRequire)表示可屏蔽中断请求和NMI(NonmaskableInterrupt)表示不可屏蔽中断请求,我们来看下8086CPU的引脚图:
NMI和INTR在上图左下角
所以不可屏蔽中断除了可由CPU内部产生,还可以由外部硬件的中断通过NMI这根信号线来通知CPU产生
可屏蔽中断就是当可屏蔽中断源提出请求,CPU可以响应,也可以不响应;一般是由外部硬件的中断通过INTR这根信号线来通知CPU产生的,比如硬盘,打印机,网卡等外部设备产生中断,这类中断并不会影响计算机的正常运行。不像不可屏蔽中断,它是没有内部中断的,因为内部中断是不可屏蔽的中断
对于可屏蔽中断,除了受本身的屏蔽位的控制外,还都要受一个总的控制,即CPU标志寄存器中的中断允许标志位IF(InterruptFlag)的控制,若IF位为1,可以得到CPU的响应,否则得不到响应。而不可屏蔽中断是不受中断标志位IF的影响,不管IF是什么,CPU都必须响应
随着保护模式的流行,Intel意识到使用中断来控制固件已不再是一种解决方案,引入系统管理模式SMM添加到CPU中,与正常中断相反,SMM是CPU的一种特殊模式;要想要输入SMM,必须生成一个系统管理中断SMI,其是在80386的更高版本中引入的,可以用于透明地转换硬件接口
随着奔腾系列的问世,英特尔推出了LAPIC(本地高级可编程中断控制器),INTR和NMI消失了,取而代之的是LINT0和LINT1(本地中断),大家了解一下即可,本文的中断还是基于INTR和NMI
根据中断源的不同,可以把中断分为硬件中断和软件中断两大类
硬件中断是由硬件设备触发的中断,如时钟中断、串口接收中断、外部中断等。当硬件设备有数据或事件需要处理时,会向CPU发送一个中断请求,CPU在收到中断请求后,会立即暂停当前正在执行的任务,进入中断处理程序中处理中断请求。硬件中断具有实时性强、可靠性高、处理速度快等特点
软件中断不是由硬件设备触发的,而是由软件程序主动发起的,如系统调用、软中断、异常、键盘管理中断、显示器管理中断、打印机管理中断等;软件中断需要在程序中进行调用,其响应速度和实时性相对较差,但是具有灵活性和可控性高的特点
与之对应的还有软中断和硬中断:
操作系统为了提高中断的处理效率,一般当中断发生的时候,硬中断处理那些短时间,就可以完成的工作,而将那些比较耗时的任务,放到中断之后来完成,也就是软中断来完成
中断控制器是计算机系统中的一个重要组成部分,用于管理和控制中断请求。常见的中断控制器有Intel8259A芯片,我们简单了解一下这个芯片:
Intel处理器允许256个中断,中断号的范围是0~255,8259A负责提供其中的15个,但中断号并不固定,允许软件根据自己的需要灵活设置中断号,以防止发生冲突。该中断控制器芯片有自己的端口号,可以像访问其他外部设备一样用in和out指令来改变它的状态,包括各引脚的中断号。所以又被称为可编程中断控制器PIC
上图来源于百度百科
一个8259A芯片的组成可以分为5个主要的逻辑控件:中断屏蔽寄存器(IMR)、中断请求寄存器(IRR)、优先级仲裁单元(PR)、中断向量寄存器(ISR)和控制逻辑单元(ControlLogic)
一个8259A芯片有IRQ0~IRQ7七个IRQ引脚,一个IRQ对应着一个中断号,一个中断号对应着一个中断向量,一个中断向量对应着一个中断处理子程序(ISR,InterruptServiceRoutine)
8259A只适合单CPU的情况,为了充分挖掘SMP体系结构的并行性,能够把中断传递给系统中的每个CPU至关重要。Intel引入了一种名为I/O高级可编程控制器的新组件,来替代老式的8259A可编程中断控制器-高级可编程中断控制器(APIC),大家感兴趣地自行去了解一下
我们再回到上文的异常这块,来了解一下X86下常见异常的类别:陷阱、故障和终止
陷阱trap:是有意的异常,一般用来在用户态和内核态之间提供系统调用接口,陷阱是同步异常,是执行一条指令的结果;陷阱程序总返回到当前指令的下一条指令,比如C语言中的printf函数,底层的实现中会有一条int0x80指令,就是陷阱,即使用0x80号中断实现系统调用
故障fault:是由错误引起,但它可能被故障处理程序修正,故障是同步的,如果修正成功,将返回到当前正在执行的指令,CPU重新执这条指令,否则将终止故障程序。
典型的一种故障,比如缺页异常:当程序试图访问已映射在虚拟地址空间中,但是并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。但缺页异常是可以被修正的,有着专门的缺页处理程序,根据缺页中断的不同类型会进行不同的处理
本文到现在我们也介绍了许多中断和异常,他们之间也是有优先级的,我们这里Intel的开发手册为例
我们接下来看看操作系统是如何处理中断的?
不同的中断信号,需要用不同的中断处理程序来处理。当CPU检测到中断信号后,会根据中断信号的类型去查询“中断向量表”,以此来找到相应的中断处理程序在内存中的存放位置。
中断向量表就是存放中断号和中断处理函数入口地址的表,结构类似数组,我们这里以Linux0.12为例,来看看其是如何实现中断机制的:
实模式下,16位的中断机制依赖的是中断向量表(IVT,InterruptVectorTable),中断向量表初始化在0x0000处,位置是固定的,IVT由BIOS程序所使用,定义了256种中断的入口地址,包括16位段地址和16位段内偏移量,其中将0到31保留用于异常处理和不可屏蔽中断。
当中断发生时,处理器要么自发产生一个中断向量,要么从**intn**指令中得到中断向量,或者从外部的中断控制器接受一个中断向量。接着该向量作为索引访问中断向量表,寻找对应的中断处理程序入口地址(中断处理函数的地址为=中断向量表地址+4*n),去执行程序
IDT,InterruptDescriptorTable,即中断描述符表,和GDT类似,记录着0~255的中断号和调用函数之间的关系,与中段向量表有些相似,但要包含更多的信息。
其中每一个表项叫做中断描述符或门描述符(gatedescriptor),门的含义是指当中断发生时,必须先通过这些门,然后才能进入相应的处理程序
除了我们非常熟悉的中断描述符,IDT内还可以存放2种描述符:任务门描述符,陷阱门描述符
这些参数大家了解一下就行
什么叫中断嵌套?除了同种中断,linux任何一个新的硬中断都可以打断正在执行的中断,形如嵌套;软中断无法嵌套,但相同类型的软中断可以在不同CPU上并行执行
陷阱门TrapGate:与中断门类似,其唯一的区别是,控制权传递到一个适当的段时处理器不修改IF标志,即不关中断;一般中断门用于处理中断,而陷阱门用来处理异常
任务门TaskGate:段选择符中存放的是任务状态段TSS(TaskStateSegment)的选择子,当中断信号发生时,必须取代当前进程的那个进程的TSS选择符存放在任务门中
实模式下,16位的中断机制依赖的是中断向量表,中断向量表初始化在0x0000处,位置是固定的。为了让操作系统的代码中的逻辑地址和实际物理地址一致,操作系统启动时会把system模块搬到零地址处,这样中断向量表就会被覆盖
而在保护模式下,中断机制用的是中断描述符表IDT,位置是不固定的,设计操作系统时可以灵活设置,只需最后把其地址赋值给CPU中的IDTR寄存器。中断描述符表寄存器IDTR是一个48位的寄存器,其低16位保存中断描述符表的大小,高32位保存IDT的基址。
当中断发生时,CPU获取到中断向量后,通过IDTR的值,去查找IDT中断描述符表,得到相应的中断描述符,再根据中断描述符记录的信息来作权限判断,运行级别转换,最终调用相应的中断处理程序
IDT这个我们应该非常熟悉了,之前的文章中频繁出现,我们再来回顾一下IDT中的中断有哪些:
通常在操作系统中,中断一般的处理流程如下:
笔者再结合操作系统相关的知识,吐血画了张图,帮助大家更加直观地了解中断流程:
需要注意的是,中断前后,进程的上下文的保存与恢复,上图不是很详细,但这部分我们其实在前一篇文章Linux0.12内核源码解读(7)-陷阱门初始化介绍过:
linux调用中断函数的流程:
linux0.12对应上下文保存与恢复的源码:
参考资料:
英特尔®64位和IA-32架构开发人员手册:卷3A-英特尔®
《Linux内核完全注释5.0》
https://www.codenong.com/40583848
https://zhuanlan.zhihu.com/p/651460336
维基百科、百度百科
全文完,感谢您的阅读,如果我的文章对你有所帮助的话,还请点个免费的赞,你的支持会激励我输出更高质量的文章,感谢!我们下期再见~~
中断类型号是在什么作用下送往CPU的
中断类型号是系统为每一个中断源分配的代号,它是8位的,与系统的中断源一一对应。
中断类型号负责引导CPU找到中断服务程序的入口点。
通过中断类型号查中断向量表可得到中断向量(中断服务程序入口地址),其中:物理地址为4*n的单元是中断服务程序入口点的偏移地址;物理地址为4*n+2的单元是中断服务程序的段首址。
扩展资料
一般来说,外部中断主要有以下几种:
(1)I/O设备:如显示器、键盘、打印机等;
(2)数据通道:软盘、硬盘、光盘等;
(3)实时时钟:如外部的定时电路等;
(4)用户故障源:如掉电、奇偶校验错误等。
产生于CPU内部的中断源有几种:
(1)由CPU得运行结果产生:如除数为0、结果溢出、单步执行等;
(2)执行中断指令INT:INT3;
(3)非法操作或指令引起异常处理。
参考资料来源:百度百科--中断类型码
参考资料来源:百度百科--中断向量表
中断类型号和中断类型码
中断函数定义时,中断类型号的取值范围是()
A.0、1
B.0~256
C.0~31
D.0~4
正确答案:D
- 途观氙气灯泡型号(途观氙气灯泡型号规格)
- 产品型号4g(产品型号48v20ah怎么解释)
- 长城h5电瓶型号(长城h5电瓶型号及价格)
- 天逸功放哪种型号最好(天逸功放哪种型号最好用)
- 创酷火花塞型号(创酷火花塞型号怎么看)
- s6直屏型号(s6什么屏幕)
- 自吸磁力泵型号(自吸磁力泵型号大全)
- s6平面型号(s6 尺寸)
- 压路机有哪些型号(压路机有哪些型号规格)
- tcl电视什么型号的好(tcl电视什么型号的好用)
- 外径30内径15轴承型号(外径30内径15轴承型号厚9mm)
- 贝亲奶嘴最大什么型号(贝亲奶嘴的型号)
- ps4有几个型号(ps4几个型号的区别)
- 魅蓝a5型号(魅蓝 a5)
- s7港版型号(s7+ 港版)
- 护栏网规格型号(护栏网的用途)