中断

来源:互联网 发布:java web 许令波 编辑:程序博客网 时间:2024/05/21 09:43
1:中断和异常:当前运行程序——>中断处理程序或异常处理程序
2:随机发生
3:处理器把赋予异常或者中断的向量(标识号)用作中断描述符表IDT中的一个索引号,来定位一个异常或中断的处理程序入口点位置。
4:用户空间进入内核空间:中断或异常
5:从内核空间进入用户空间:中断或者异常返回
6:中断描述符表IDT:将每个异常或中断向量分别与它们的处理过程联系起来。
7:异常或者中断的向量号*8=IDT表中的一个索引值
8:IDTR寄存器来定位IDT表的位置(IDT基地址,,IDT限长值)
9:LIDT:把内存中的限长值和基地址操作数加载到IDTR寄存器。(该指令在当前特权级CPL是0的代码执行)
10:SIDT:把IDTR中的基地址和限长内容复制到内存中。(任何特权级执行)
11:IDT表:可以存放三种门描述符。中断门描述符,陷阱门描述符,任务门描述符。
12:看114页图4-26。中断描述符表IDT和寄存器IDTR
13:看115页图4-27。中断门,陷阱门和任务门描述符格式。
14:当响应一个异常或者中断的时候,处理器使用异常或者中断的向量作为IDT表中的索引。如果索引值指向中断门或者陷阱门,则处理器使用与CALL指令操作调用门类似的方法调用异常或中断处理过程。如果索引值指向任务门,则处理器使用与CALL指令操作任务门类似的方法进行任务切换,执行异常或者中断的处理程序。
15:门中的段选择符指向GDT或者当前LDT中的可执行代码段描述符。门描述符中的偏移字段指向异常或者中断处理过程的开始处。
16:看116页图4-28中断过程调用
17:处理器执行异常或者中断处理过程时的操作:
     堆栈切换过程(高特权级(0级))
     1:处理器从当前执行任务的TSS段中得到中断或者异常处理过程使用的堆栈的段选择符和栈指针(tss.ss0,tss.esp0)。然后处理器会把被中断程序(或者任务)的栈选择符和栈指针压入新栈中。
     2:接着处理器会把EFLAGS,CS,和EIP寄存器的当前值也压入新栈中。
     3:如果异常会产生一个错误码,那么该错误号也会被最后压入新栈中
   处理过程将在被中断任务同一个特权级上运行
    1:处理器把EFLAGS,CS,和EIP寄存器的当前值保存在当前堆栈上。
     2:如果异常会产生一个错误码,那么该错误号也会被最后压入新栈中。
18:中断处理任务
      当通过IDT中的任务门来访问异常或者中断处理过程时就会导致任务切换。
19;IDT中的任务门会引用GDT中的TSS描述符。
20:当异常或中断句柄任务用于操作系统时,实际上有两种分派调度任务的机制:操作系统软件调度和处理器中断机制的硬件调度。
21:看118页图4-30中断处理任务切换。
0 0