linux 0.11内核源码之中断

1.中断

中断分为硬中断和软中断。整个操作系统就是一个中断驱动的死循环的。所有事情都是通过中断去获取cpu执行权,不然cpu就会一直在空转。所以,我们需要提前往操作系统去注册中断机制和其对应的中断的处理函数完成。

1.1.Inter 手册里面的中断

inter手册里面的中断分为中断和异常。

内部异常:在CPU内部发生的意外事件或特殊事件
外部中断:在CPU外部发生的特殊事件,通过“中断请求“信号向CPU请求处理。


异常和中断的处理
发生异常和中断事件后,系统将进入OS内核态对相应事件进行处理,即改变处理器状态(用户态->内核态)。

1.2中断与异常 同步&&异步

中断是异步的,是指所有中断来的信号都是记录在中断寄存器中的,CPU在执行完一道指令之后,如果enable interrupt,就会检查中断寄存器中有没有中断,如果有中断,就会选择一个中断优先级比较高的中断先处理,等到处理完中断再继续执行;如果是disable interrupt,就不会检查是否有中断,而是直接执行下一条指令。这样就表明中断是异步的。

异常是同步的,是指异常发生的时候,CPU立即处理本次异常,直到异常处理结束之后才能继续进行接下来的任务。例如在进行程序调试的时候,添加一个断点,就必须在断点出发生异常,CPU立即处理,先暂停其工作,否则就无法查看断点处的程序运行信息。

通俗一点的将就是:中断异步就是我可以不用立即处理,而是等执行完一条指令时候才可能处理,异常同步是指出了异常必须立马处理。
 

1.3硬件中断和软中断的区别
硬件中断是由外设引发的, 软中断是执行中断指令产生的.
硬件中断的中断号是由中断控制器提供的, 软中断的中断号由指令直接指出, 无需使用中断控制器.
硬件中断是可屏蔽的, 软中断不可屏蔽.
硬件中断处理程序要确保它能快速地完成任务, 这样程序执行时才不会等待较长时间, 称为上半部.
软中断处理硬中断未完成的工作, 是一种推后执行的机制, 属于下半部.

2.中断的产生

硬件按下,会产生一个信号,这个信号会使得可编程中断控制器发出中断号,然后给cpu的INTR引脚发送信号,cpu收到信号就会去读取这个中断号,这个中断号是保存在可编程中断控制器里面的。


3.中断处理

cpu收到中断号n,会去中断向量表中寻找第n个中断描述符,然后去根据中断描述符去找到中断处理程序的地址,然后去执行。

中断号去中断描述符表里面找到的是段选择子和段内偏移地址。 根据段选择子去全局描述符表里面,找到段描述符(段描述符-段地址),然后获取段地址,组合而成的程序地址。

4.中断描述符表

中断描述符表就是在内存里面的一个数组,大小为256,idt_table.这个数组里面存储的是一个一个结构体,一个中断描述符是64位,也就是8字节大小。中断描述符表存储位置由idtr寄存器进行存储,存储在setup里面。

4.1中断描述符分类

任务门描述符----linux几乎不用

中断门描述符----如果CPU修改了IF标志位,就说明不允许嵌套中断

陷阱门描述符-----不管IF这个标志位,所以可以嵌套。

4.2中断描述符存储的位置

存储在IDTR寄存器里面。这个寄存器48位。前面16位是中断描述符的大小,后面32位是中断描述符的起始地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值