主页 > 型号大全 > 正文

中断类型号(中断类型号和中断类型码)

2024-04-02 15:59:15 来源:阿帮个性网 点击:
文章目录导航:
  1. 中断类型号的取值范围
  2. 一个8259可提供几个中断类型号
  3. 中断类型号范围
  4. 中断类型号和中断向量的关系
  5. 中断类型号怎么计算
  6. 中断类型号是在什么作用下送往CPU的
  7. 中断类型号和中断类型码

中断类型号的取值范围

答案: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