关于中断的入门知识
Linux有一个中断向量表,中断向量表中有不同的项。这些项就是一个一个的“门”。
穿过这些门才能真正进入到通向中断服务程序的走廊。比如一个简单的例子CPU外部
设备产生了一个中断,CPU的程序首先向中断向量表的项,然后穿过门,走过小分类(几个
外设使用一个中断源),执行相应的服务程序。
中断向量表门的种类和结构
这些门有不同的种类:任务们、中断们、陷阱门、调用门,门就在向量表中。
一。门由64位组成,逻辑成员(任务门除外)就是
1。TSS (16位)任务的状态段,就是对运行任务
时所需要的寄存器、堆栈或者叫现场的描述。
2。类型码(3位)代表这是什么门
3。P标志位 表示是否在内存
4。DPL (3位)运行级别
5。服务程序位移高16位,位移低16位
6。保留一位永远为0,另外三位永远为000(??)
二。对IDT的初始化
_ _init trap_init(void) 中使用 set_trap_gate( 偏移量,函数地址) 初始化(不同的
门使用不同的射门函数
set_trap_gate使用 set_gate(IDT表+偏移量,15,0,addr) 中间的参数 2项表示类型码和D位,三项表示DPL。
随后 init_irq()对外设中断向量进行设置。使用了set_intr_gate(偏移量,函数地址数组)
函数地址数组interruput[]表示了所有使用相同中断的函数地址。所有的函数都是将中断的分码进行压栈,然后调用同一个函数(待续)