首页 理论教育 操作系统实现之路-IA32中断处理过程

操作系统实现之路-IA32中断处理过程

时间:2023-10-21 理论教育 版权反馈
【摘要】:硬件相关部分处理指的是针对不同的CPU平台采用不同的中断处理方法。比如针对Intel IA32架构的CPU,需要建立IDT,并填写每个表项;针对PPC的CPU,则需要初始化特定的寄存器等。IA32 CPU采用中断描述符表的方式对中断和异常进行处理。CPU继续执行中断处理前的任务。可以看出,为了完成对IA32平台的中断处理模块的初始化,只需要完成下列两件事情:正确形成IDT。

操作系统实现之路-IA32中断处理过程

硬件相关部分处理指的是针对不同的CPU平台采用不同的中断处理方法。比如针对Intel IA32架构的CPU,需要建立IDT(中断描述符表),并填写每个表项;针对PPC的CPU,则需要初始化特定的寄存器等。下面针对IA32架构的CPU进行描述,需要说明的是,硬件相关处理仅仅是为了适应不同硬件的中断和异常模型而引入的“第一层”处理,这部分处理比较简单,一般使用汇编语言实现,主要功能就是完成硬件部分的处理,并完成与Hello China本身中断处理机制之间的连接工作。

IA32 CPU采用中断描述符表(IDT)的方式对中断和异常进行处理。IDT是位于内存中的数据结构,该结构由256个中断描述符(或异常描述符)组成,每个中断描述符是一个64bit的数据结构,其每个比特的内容及含义都是由硬件严格定义的。在CPU内部,有一个很重要的寄存器:IDTR,即中断描述符表寄存器,这个寄存器保存了中断描述符表的起始物理地址(物理内存地址),一旦CPU检测到中断或异常发生,则进入如下的中断或异常处理流程:

(1)把下一条将要执行的指令地址(EIP寄存器)和代码段寄存器(CS),以及标志寄存器(EFLAGS)压入堆栈(当前线程堆栈)。

(2)根据中断号或异常号,定位到具体的中断描述符(具体定位方法为:中断/异常向量号乘以8,加上IDTR寄存器的值)。

(3)中断描述符里面存放了处理该中断或异常的处理程序的起始地址以及所在的代码段,CPU把起始地址读入到EIP寄存器(并更新代码段寄存器CS),然后开始执行中断处理程序(实际上是一个跳转的过程)。

(4)处理程序处理完毕,使用iret指令,从中断处理程序中返回(该指令的含义可参考本书第4章)。

(5)CPU继续执行中断处理前的任务。

上述处理过程仅仅是一个简单的描述,实际上,根据不同的任务模型和地址模型,以及不同的CPU工作模式,中断处理方式各不相同,且十分复杂,但由于Hello China的设计充分抽象了CPU的具体特征,最小化地利用了CPU的硬件特性,而把相关的特性放到软件中完成(便于移植到不同的CPU),因此,在Hello China的实现中,上述简单的处理过程描述已经足够。(www.xing528.com)

可以看出,为了完成对IA32平台的中断处理模块的初始化,只需要完成下列两件事情:

(1)正确形成IDT。

(2)把IDT的物理地址填写到IDTR寄存器中。

第(2)步非常简单,只需要如下一条指令就可完成任务:

其中,idt_addr就是IDT的物理地址。

接下来将对IDT的填写进行详细描述。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈