中断异常—初始化描述符表
发布时间
阅读量:
阅读量
一、中断描述符表的初始化
从操作系统角度描述中断描述符表的初始化。
Linux内核负责完成系统初始化阶段的各项复杂工作,在涉及中断处理方面的主要任务包括:配置可编程控制器(即中断控制器)8259A;将中断描述符表的起始地址加载至IDTR寄存器中,并逐项完成表中各项的初始化工作
系统通过INT指令向中断控制器发送了一个中断请求。其向量值范围限定在0到255之间。为了避免用户进程利用INT指令模拟非法中断或异常行为,必须谨慎地初始化中断描述符表。其中一个措施是将该门或陷阱门中的请求特权级DPL域设置为0。当某个用户进程发送这样的一个中断请求时,CPU将检查当前 privilege level (CPL) 值(3)与所请求的 DPL 域值(0)是否冲突,并由此引发一个通用保护异常处理过程。
然而,在某些情况下需要让用户进程能够利用内核提供的功能(如系统调用),以便从用户态顺利过渡到内核态,并通过设置中断门或陷阱门的DPL域值为3来完成这一转换。
当计算机处于实态运行阶段时,在BIOS机制下完成相应的中断描述符表的初始化工作。随后,在Linux内核真正启动并运行的过程中,则会执行以下步骤来进行预设准备:首先通过LIDT指令将该系统中的一个关键寄存器——IDTR——设置为零值;接着将该段的起始地址加载进另一个相关寄存器——IDT中以完成必要的信息存储配置。
填充中断描述符表中的2
全部评论 (0)
还没有任何评论哟~
