门的作用是什么(任务门,系统门)

时间:2018-12-15 01:19:39

标签: exception linux-kernel interrupt-handling

异常的执行如下:

  1. 将高级C函数可能使用的寄存器保存在堆栈中。
  2. 发出一条cld指令以清除DF的方向标记eflags,从而确保 ediesi寄存器上的自动递增将与字符串指令一起使用。 [*]

    [*] 诸如rep;movsb之类的单一汇编语言“字符串指令”能够 对整个数据块(字符串)起作用。

  3. 复制esp+36中位置edx处堆栈中保存的硬件错误代码。将值-1存储在 相同的堆栈位置。我们将在第11章的“重新执行系统调用”部分中看到 值用于将0x80异常与其他异常分开。
  4. 使用保存在堆栈中的高级edi C函数的地址加载do_handler_name( ) 在位置esp+32;将es的内容写入该堆栈位置。
  5. eax寄存器中加载当前内核模式堆栈的顶部位置。该地址标识 包含步骤1中保存的最后一个寄存器值的存储单元。
  6. 将用户数据段选择器加载到dses寄存器中。
  7. 调用高级C函数,该函数的地址现在存储在edi中。

在第6步中,为什么在这种情况下需要加载数据段选择器?在这种情况下,gates的作用是什么?

对于中断,代码也是->

for (i = 0; i < NR_IRQS; i++)
  if (i+32 != 128)
    set_intr_gate(i+32,interrupt[i]);

0 个答案:

没有答案