Создание операционной системы на ассемблере

Исключения защищенного режима.


Я уже неоднократно упоминал это слово в предидущих выпусках. Но думаю что не всем было понятно что это такое. Сейчас мы рассмотрим это поподробнее.

Исключения или системные прерывания существовали еще в самых первых моделях процессоров от Intel. Вот их список:

  • Division by zero (деление на ноль или переполнение при делении);
  • Single step (пошаговая отладка);
  • Breakpoint;
  • Overflow (срабатывает при команде into в случае установленного флага overflow в регистре flags);
  • Invalid opcode (i286+);
  • No math chip;
  • Исключения располагаются в начале таблицы прерываний. В реальном режиме занимают 8 первых векторов прерываний.

    Введение защищенного режима потребовало введения дополнительных исключений. В защищенном режиме первые 32 вектора прерываний зарезервированы для исключений. Не все они используются в существующих процессорах, в будующем возможно их будет больше. Системные прерывания в защищенном режиме делятся на три типа: нарушения (fault), ловушки (trap) и аварии (abort). Итак в защищенном режиме у нас существуют следующие исключения:

  • Divide error (fault);
  • Debug (fault/trap);
  • Breakpoint (trap);
  • Overflow (trap);
  • Bounds check (fault);
  • Invalid opcode (fault);
  • Coprocessor not available (fault);
  • Double fault (abort);
  • Coprocessor segment overrun (fault);
  • Invalid tss (fault);
  • Segment not present (fault);
  • Stack fault (fault);
  • General protection fault (fault);
  • Page fault (fault);
  • Coprocessor error (fault);
  • Alignument check (fault) (i486+);
  • Hardware check (abort) (Pentium+);
  • SIMD (fault) (Pentium III+).
  • Нарушения возникают вследствии несанкционированных или неправильных действий программы, предполагается, что ошибки можно исправить и продолжить выполнение программы с инструкции, которая вызвала ошибку.

    Ловушки возникают после выполнения инструкции, но тоже подразумевают исправление ошибочной ситуации и дальнейшую работу программы.

    Аварии возникают в случае критических нарушений, после этого программа уже не может быть перезапущена и должна быть закрыта.

    Но иногда в случае ошибки или ловушки программа тем не менее не может продолжить свое выполнение. Это зависит от тяжести нарушения и от организации операционной системы, которая обрабатывает исключения. И если ошибка или ловушка не может быть исправлена, программу так же следует закрыть.

    При возникновении исключения процессор иногда помещает в стек код ошибки, по которому обработчик исключения может проанализировать и, возможно, исправить возникшую ошибку.

    Все исключения обрабатываются операционной системой. В случае микроядерных систем этим занимается микроядро. Вот о микроядрах мы и поведем наш дальнейший разговор.



    Содержание раздела