Почему ядро linux использует trap gate для обработки исключения div_error?

В ядре 2.6.11.5 обработчик исключения деления на ноль устанавливается как:

set_trap_gate(0,&divide_error);

Согласно «Пониманию ядра Linux», процесс доступа к ловушке Intel не может быть выполнен в режиме пользовательского режима. Но вполне возможно, что процесс пользовательского режима также генерируетdivide_error, Так почему же Linux реализует это таким образом?

[Редактировать] Я думаю, что вопрос все еще открыт, так какset_trap_gate() устанавливает значение DPL для записи IDT равным 0, что означает, что только код CPL = 0 (чтение ядра) может выполнить его, поэтому мне неясно, как этот обработчик может быть вызван из пользовательского режима:

#include<stdio.h>

int main(void)
{
    int a = 0;
    int b = 1;

    b = b/a;

    return b;
}

который был составлен сgcc div0.c, И вывод./a.out является:

Исключение с плавающей точкой (ядро сброшено)

Так что не похоже, что это было обработано делением на код ловушки 0.

Ответы на вопрос(5)

Ваш ответ на вопрос