⇤ ← Версия 1 от 2019-04-05 15:37:48
495
Комментарий:
|
6407
|
Удаления помечены так. | Добавления помечены так. |
Строка 2: | Строка 2: |
Строка 6: | Строка 5: |
Строка 9: | Строка 7: |
=== Обработка событий в ЭВМ === Что такое «событие»? * Происходит в процессе работы (какой-либо программы) * Происходит по какой-то причине, ''явно'' в программе не заданной * дополнительно: программная ''имитация'' события * Вызывает изменение потока вычислений * Вариант реализации: меняется значение счётчика команд * Скорее всего, обрабатывается ''ядром'' ОС Свойства события * Асинхронное / активированное синхронно * Неожиданное / предполагаемое * Требующее возврата к прежнему вычислительному процессу / финальное Терминология плавающая. В архитектуре Intel принято все события называть «прерываниями» В MIPS: * ''' [[https://moodle.cs.msu.ru/mod/lesson/view.php?id=1950|прерывания]]''' — это события, вызванные внешними причинами (аппаратные) * '''исключения '''— события, вызванные внутренними причинами (программные) ||'''Тип события''' ||'''Место в программе известно''' ||'''Предусмотрено<<BR>>программой''' ||'''Источник''' ||'''Термин<<BR>>''' || ||Нештатная ситуация вычислительного процесса (деление на 0, переполнение, защита памяти, нет такой инструкции и т. п.) ||да ||нет ||Внутренний ||Исключение (exception) || ||Имитация нештатной ситуации («система, разбирайся»). В MIPS — исключение TRAP_EXCEPTION ||да ||да ||Внутренний ||Ловушка (trap) || ||Обращение к функции операционной системы ||да ||да ||Внутренний ||Системный вызов (system call) || ||Запрос внешнего устройства ||нет ||нет ||Внешний ||Прерывание (interrupt) || ||Сбой внешнего устройства ||иногда ||нет ||Внешний ||Прерывание (interrupt) || Строго говоря, системный вызов — ''не событие'', т. к. всегда явно вызывается программой, но также требует обработки ядром. Общая идея обработки событий. * Аппаратура процессора обнаруживает событие и осуществляет передачу управления. * на фиксированный адрес (как в MIPS, адрес обработчика 0x80000180) * с помощью «вектора прерываний» (он же '''таблица переходов''') — ''аппаратно поддерживаемая ''таблица адресов. ''Предположим'', что она находится по адресу 0x80000100<<BR>> ||''Адрес'' ||<style="border-color:#000000;border-style:solid;border-width:1px;">''Содержимое'' ||<style="border-color:#000000;border-style:solid;border-width:1px;">''Пояснение'' || ||0x80000100 ||<style="border-color:#000000;border-style:solid;border-width:1px;">0x80000180 ||<style="border-color:#000000;border-style:solid;border-width:1px;">адрес обработчика исключения № 0 || ||0x80000104 ||<style="border-color:#000000;border-style:solid;border-width:1px;">0x800007ac ||<style="border-color:#000000;border-style:solid;border-width:1px;">адрес обработчика исключения № 1 || ||0x80000108 ||<style="border-color:#000000;border-style:solid;border-width:1px;">0x800015b0 ||<style="border-color:#000000;border-style:solid;border-width:1px;">адрес обработчика исключения № 2 || ||… ||<style="border-color:#000000;border-style:solid;border-width:1px;">… ||<style="border-color:#000000;border-style:solid;border-width:1px;">… || ||0x80000120 ||<style="border-color:#000000;border-style:solid;border-width:1px;">0x80000e54 ||<style="border-color:#000000;border-style:solid;border-width:1px;">адрес обработчика исключения № 8 || || || || || * Таблица переходов в MIPS''' отсутствует:''' * Аппаратная поддержка: двойная косвенность. * При получении исключения вычисляется адрес ячейки, из неё берётся адрес обработчика (+операция доступа к памяти). * Программная обработка события * Аппаратная поддержка: запрет и/или дисциплина обработки ''повторных ''событий (событие внутри события); возможно, специальный режим работы процессора * Аппаратная поддержка: тип события (выставляется следящей аппаратурой) * Возврат к нормальному порядку исполнения инструкций * Аппаратная поддержка: адрес возврата запоминается аппаратурой * Возможны сложности с конвейером (см. лекцию про конвейер) |
|
Строка 10: | Строка 59: |
Исключения и многофайловые проекты
Демонстрация 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