陷阱处理程序到底是什么?



据我所知,陷阱是在发生特殊事件时发生的事情。 在系统调用的情况下,程序执行陷阱指令并跳转到内核模式。然后,陷阱处理程序跳转到所需的处理程序(例如 fork、exec、open)。

当 fork、exec、open 等的执行完成后,OS 调用从陷阱返回指令并使程序返回到用户模式。

但究竟什么是陷阱处理程序?(另外,如果可以的话,什么是陷阱表?

陷阱处理程序是在触发陷阱时将运行的代码。在您的示例中,操作系统将安装一个处理程序(即告诉 CPU 一个代码的内存地址,以便在陷阱发生时运行),处理程序将执行系统调用。转到内核模式的不是程序。程序在触发陷阱后立即中断。使用陷阱处理程序恢复执行。

这样,三层(在保护模式下运行的程序、在特权模式下运行的操作系统以及强制当前执行的代码无法脱离保护模式的 CPU/硬件)可以相互切换控制。

还要注意的是,a)现代CPU有专门的系统调用指令 - 一种比陷阱更有效的机制,但在概念上工作原理相同,b)还有其他陷阱/中断也用于不同的目的 - 它们提供了停止顺序程序执行的基本机制,并执行"其他事情"以响应某种事件。

阅读本文, http://www.cse.iitd.ernet.in/~sbansal/os/lec/l8.html

x86 处理器使用称为中断描述符表 (IDT) 的表来确定在发生陷阱时如何转移控制权。x86 允许多达 256 个不同的中断或异常入口点进入内核,每个入口点都有不同的中断向量。向量是介于 0 和 256 之间的数字。中断的向量由中断源决定:不同的设备、错误条件和对内核的应用程序请求会生成具有不同向量的中断。CPU 使用向量作为处理器 IDT 的索引,内核在内核选择的内核专用内存中设置该索引,与 GDT 非常相似。从此表中的相应条目中,处理器加载:

要知道用户模式程序不能跳转到内核模式,它只是唤醒内核模式程序来执行。

最新更新