Различия между версиями 1 и 2
Версия 1 от 2019-04-05 15:37:48
Размер: 495
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2019-04-05 15:57:49
Размер: 6407
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 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

LecturesCMC/ArchitectureAssembler2019/07_Exceptions (последним исправлял пользователь FrBrGeorge 2019-05-17 15:23:15)