【发布时间】:2011-10-17 01:42:35
【问题描述】:
我正在编写一个小型操作系统,它将在用户模式(权限级别 3)下执行一些代码。从该用户级代码中,我想将中断调用回打印消息的操作系统。现在我并不关心我的中断处理程序如何接受参数或类似的东西,我真的只是想要一个中断处理程序通知我(用户)代码已经执行。
我的问题是:如何在用户模式下运行代码?我有一个函数可以设置一个带有代码段和数据段的本地描述符表(都具有用户模式权限)。我不明白我应该如何将这些段加载到cs、ss 和ds。我成功加载了我的 LDT,但我不知道如何实际使用它。我听说我应该使用iret,但我不明白具体怎么做。
我的另一个问题是我的中断处理程序应该如何工作。假设我为向量编号 0x40 安装了一个中断处理程序,我想打印“你好,用户模式!”。我知道如何设置中断处理程序,但我不完全了解从用户模式进入内核中断处理程序时如何切换上下文。我知道cs 寄存器必须更改,因为我的例程将从 IDT 条目中指定的代码段运行。我也知道堆栈选择器也可能会发生变化,但我不能确定这一点。
有人可以向我解释一下调用中断门时会发生哪些上下文变化吗?
【问题讨论】: