您的位置:首页 > 运维架构 > Linux

Linux内核0.12——8086中断

2012-10-16 22:44 1181 查看
中断:CPU不再继续依序执行指令,而是转去处理某一从CPU外部或内部产生的特殊信息

从汇编角度理解:

内中断:对于8086CPU来说,以下发生在CPU内部的的情况会产生内中断:

除法错误;单步执行;执行into指令;执行int指令。其相应的中断类型码为0,1,4,n(n为字节型立即数)

中断向量表:8086CPU利用此表中的中断类型码来找到相应的中断处理程序的入口地址;中断向量表必须存入内存中0000:0000~0000:03FF的1024个单元中,CPU直接从这个地址开始读取中断向量表;中断向量表的一个表项存放一个中断处理程序的入口地址,而把中断类型码按顺序从0开始排序,所以并不需要多余的空间来记录中断类型码,即一个表项需要两个字(段+偏移);两个字的一个表项说明1KB中最多只能放256个中断处理程序。

中断过程:

1、获取中断类型码N

2、pushf(标志寄存器的值入栈)

3、TF = 0,IF = 0(当TF==1时,陷阱标志被置位,CPU会进入单步模式,即每执行一次便中断一次;当IF==1时,CPU是允许访问外部可屏蔽中断的请求的)

4、push CS(保护CPU现场)

5、push IP(同上)

6、(IP) = (N*4),(CS) = (N*4+2)(将中断程序入口地址读入)

(实地址模式)自制中断处理程序:

1、编写一个程序

2、将程序的入口写入内存的制定地址,并记录

3、将该程序的入口地址写入中断向量表中即可

外中断:CPU对外部信息的处理,多为I/O中断

从操作系统角度:

通常在操作系统中,中断主要用于I/O设备的控制,为每一类设备设置一个I/O进程的设备处理方式时,其中断处理程序的处理过程大致为以下几步:

1、唤醒被阻塞的驱动进程

2、保护被中断进程的CPU环境(同编程角度不太一样,这里的保护不只是单纯的记录中断前程序的运行位置,而且还要记录处理机状态字、程序计数器、所有CPU寄存器)

3、转入相应的设备处理程序

4、中断处理

5、恢复被中断进程的现场

从硬件角度:

CPU响应中断的时候,需要有一个中断控制器,在IBM PC/AT 80x86兼容机上使用两片相连的8259A可编程中断控制芯片来组成一个可以提供15个独立中断控制功能,在内存当然也需要一个中断向量表,当然最多可联到九级芯片

详细的中断控制器介绍:/article/7748414.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: