Исключения и многофайловые проекты
Демонстрация calltrace с помощью macros.inc
Программные исключения
Обработка событий в ЭВМ
Что такое «событие»?
- Происходит в процессе работы (какой-либо программы)
Происходит по какой-то причине, явно в программе не заданной
дополнительно: программная имитация события
- Вызывает изменение потока вычислений
- Вариант реализации: меняется значение счётчика команд
Скорее всего, обрабатывается ядром ОС
- Асинхронное / активированное синхронно
- Неожиданное / предполагаемое
- Требующее возврата к прежнему вычислительному процессу / финальное Терминология плавающая. В архитектуре Intel принято все события называть «прерываниями» В MIPS:
прерывания — это события, вызванные внешними причинами (аппаратные)
исключения — события, вызванные внутренними причинами (программные)
Тип события |
Место в программе известно |
Предусмотрено |
Источник |
Термин |
Нештатная ситуация вычислительного процесса (деление на 0, переполнение, защита памяти, нет такой инструкции и т. п.) |
да |
нет |
Внутренний |
Исключение (exception) |
Имитация нештатной ситуации («система, разбирайся»). В MIPS — исключение TRAP_EXCEPTION |
да |
да |
Внутренний |
Ловушка (trap) |
Обращение к функции операционной системы |
да |
да |
Внутренний |
Системный вызов (system call) |
Запрос внешнего устройства |
нет |
нет |
Внешний |
Прерывание (interrupt) |
Сбой внешнего устройства |
иногда |
нет |
Внешний |
Прерывание (interrupt) |
Строго говоря, системный вызов — не событие, т. к. всегда явно вызывается программой, но также требует обработки ядром. Общая идея обработки событий.
- Аппаратура процессора обнаруживает событие и осуществляет передачу управления.
- на фиксированный адрес (как в MIPS, адрес обработчика 0x80000180)
с помощью «вектора прерываний» (он же таблица переходов) — аппаратно поддерживаемая таблица адресов. Предположим, что она находится по адресу 0x80000100
Адрес |
Содержимое |
Пояснение |
0x80000100 |
0x80000180 |
адрес обработчика исключения № 0 |
0x80000104 |
0x800007ac |
адрес обработчика исключения № 1 |
0x80000108 |
0x800015b0 |
адрес обработчика исключения № 2 |
… |
… |
… |
0x80000120 |
0x80000e54 |
адрес обработчика исключения № 8 |
|
|
|
Таблица переходов в MIPS отсутствует:
- Аппаратная поддержка: двойная косвенность.
- При получении исключения вычисляется адрес ячейки, из неё берётся адрес обработчика (+операция доступа к памяти).
- Программная обработка события
Аппаратная поддержка: запрет и/или дисциплина обработки повторных событий (событие внутри события); возможно, специальный режим работы процессора
- Аппаратная поддержка: тип события (выставляется следящей аппаратурой)
- Возврат к нормальному порядку исполнения инструкций
- Аппаратная поддержка: адрес возврата запоминается аппаратурой
- Возможны сложности с конвейером (см. лекцию про конвейер)
Многофайловая сборка
Д/З
TODO