Что такое синхронные прерывания
Назначение системы прерываний ЭВМ. Синхронные и асинхронные,внутренние и внешние прерывания.
Современная ЭВМ представляет собой комплекс автономных устройств, каждое из которых выполняет свои функции под управлением местного устройства управления независимо от других устройств машины. Включает устройство в работу центральный процессор. Он передает устройству команду и все необходимые для ее исполнения параметры. После начала работы устройства центральный процессор отключается от него и переходит к обслуживанию других устройств или к выполнению других функций.
Назначение системы прерывания программ – оперативно реагировать на определенные события, происходящие внутри и вне ЭВМ, путем выполнения специальной операции прерывания. Под операцией прерывания понимается (временное) прерывание процесса выполнения текущей программы и переключение процессора на выполнение другой программы, обслуживающей данную причину прерывания. По завершении обслуживания прерывания прерванный процесс должен быть продолжен с того момента, в котором он был прерван. С этой целью в момент прерывания процесса необходимо запомнить (сохранить) всю информацию, необходимую для его возобновления после обработки прерывания, т. е. информацию о состоянии процесса выполнения программы в момент прерывания.
Прерывание— сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код Событием называется сигнал, поступающий в процессор в результате возникновения особого случая при выполнении команды или при работе с внешним оборудованием. Реакцией на событие является передача управления на программу, ответственную за обработку данного события. При этом в большинстве случаев сохраняется информация о состоянии прерванной задачи для того, чтобы можно было возобновить ее исполнение, если это возможно, либо завершить ее, освободив принадлежащие ей ресурсы.
В зависимости от источника возникновения сигнала прерывания делятся на:
§ асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши;
§ внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции;
Внешние прерывания, в зависимости от возможности запрета, делятся на:
маскируемые — прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний (в x86-процессорах — сбросом флага IF в регистре флагов);
немаскируемые (англ. Non-maskable interrupt, NMI) — обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.
§ Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим, поскольку во время их работы могут не обрабатываться другие прерывания, а если их будет много (особенно от одного источника), то они могут теряться. В Windows для этого применяется механизм отложенного вызова процедур.
Программное прерывание — синхронное прерывание, которое может осуществить программа с помощью специальной инструкции.
В процессорах архитектуры x86 для явного вызова синхронного прерывания имеется инструкция Int, аргументом которой является номер прерывания (от 0 до 255). В IBM PC-совместимых компьютерах обработку некоторых прерываний осуществляют подпрограммы BIOS, хранящиеся в ПЗУ, и это служит интерфейсом для доступа к сервису, предоставляемому BIOS. Также, обслуживание прерываний могут взять на себя BIOS карт расширений (например, сетевых или видеокарт), операционная система и даже обычные (прикладные) программы, которые постоянно находятся в памяти во время работы других программ (т. н. резидентные программы). В отличие от реального режима, в защищённом режиме x86-процессоров обычные программы не могут обслуживать прерывания, эта функция доступна только системному коду (операционной системе).
MS-DOS использует для взаимодействия со своими модулями и прикладными программами прерывания с номерами от 20h до 3Fh (числа даны в шестнадцатиричной системе счисления, как это принято при программировании на языке ассемблера x86). Например, доступ к основному множеству функций MS-DOS осуществляется исполнением инструкции Int 21h (при этом номер функции и её аргументы передаются в регистрах). Это распределение номеров прерываний не закреплено аппаратно и другие программы могут устанавливать свои обработчики прерываний вместо или поверх уже имеющихся обработчиков, установленных MS-DOS или другими программами, что, как правило, используется для изменения функционала или расширения списка системных функций. Также, этой возможностью пользуются вирусы
Внешние прерывания, в зависимости от возможности запрета, делятся на:
маскируемые — прерывания, которые можно запрещать установкой соответствующих битов в регистре маскирования прерываний (в x86-процессорах — сбросом флага IF в регистре флагов);
немаскируемые (англ. Non-maskable interrupt, NMI) — обрабатываются всегда, независимо от запретов на другие прерывания. К примеру, такое прерывание может быть вызвано сбоем в микросхеме памяти.
Обработчики прерываний обычно пишутся таким образом, чтобы время их обработки было как можно меньшим, поскольку во время их работы могут не обрабатываться другие прерывания, а если их будет много (особенно от одного источника), то они могут теряться. В Windows для этого применяется механизм отложенного вызова процедур.
Программные прерывания вызываются специальной командой (в МП 80х86 это команда INT) и являются специфической формой вызова подпрограммы. В данном случае программа операционной системы вызывается по её номеру, заданному в виде операнда команды, а параметры передаются через регистры. Это позволяет любой программе обращаться к системным функциям, не зная адреса исполняющей их программы. Кроме того, пользовательская программа не требует модификации при изменении системного объекта-исполнителя.
Наличие системы прерываний позволяет организовать потоковый и интерактивный мультипрограммный режим работы, виртуальную память, обработку ошибок без останова вычислительного процесса, сетевые технологии и является неотъемлимой программно-аппаратной составляющей современных вычислительных комплексов и ОС.
Лекция 4. Обработка прерываний. Синхронизация процессов. Задачи
Внешние прерывания (асинхронные, аппаратные прерывания)
Внутренние прерывания (синхронные, программные прерывания)
программируемое прерывание
У процесса, находящегося в состоянии выполнения, возникает необходимость прерывания процессом самого себя:
прерывания, связанные с работой процессора и являющиеся синхронными с его операциями:
Вызываются событиями, которые не связаны с выполняющимся процессом (события возникают вне выполняющегося процесса без его ведома, т.е. асинхронно).
Аппаратная поддержка прерываний имеет свои особенности, зависящие от типа процессора и других аппаратных компонентов (контроллер внешнего устройства, шина подключения внешних устройств, контроллеры прерываний и др.).
Существует два основных способа, с помощью которых шины выполняют прерывания: векторный (vectored) и опрашиваемый (polled). В обоих случаях процессору предоставляется информация об уровне приоритета прерывания на шине подключения внешних устройств.
В случае векторных прерываний в процессор передается информация о начальном адресе программы обработки прерываний – обработчика прерывания.
При использовании опрашиваемых прерываний процессор получает от запросившего прерывания устройства только информацию об уровне приоритета прерывания. С каждым уровнем может быть связано несколько устройств и, соответственно, несколько обработчиков прерываний. В этом случае при возникновении прерывания процессор вызывает поочередно всех обработчиков прерываний данного уровня приоритета, пока один из обработчиков не подтвердит, что прерывание прошло от обслуживаемого им устройства.
Рис. 4.1. Обработка прерываний
Существует комбинированный подход, сочетающий векторный и опрашиваемый типы прерываний. Такой подход реализован на основе процессоров Intel Pentium. Контроллер прерываний отображает поступающий от шины сигнала IRQ (Interrupt request) на определенный номер вектора прерываний. Вектор представляет собой число, указывающее на одну из 256 программ обработки прерываний, адреса которых хранятся в таблице обработчиков прерываний. В том случае, когда к каждой линии IRQ подключается только одно устройство, процедура прерываний работает как чисто векторная. Однако при совместном использовании одного уровня IRQ несколькими устройствами обработка прерываний реализуется по схеме опрашиваемых прерываний. В данном случае необходимо выполнить опрос всех устройств, подключенных к данному уровню IRQ.
Программное управление прерываниями (с помощью специальных команд управления работой системы прерываний) позволяет операционной системе регулировать обработку сигналов прерывания, заставляя процессор обрабатывать их
Обычно обработка прерывания выполняется только после завершения выполнения текущей команды.
Выбор прерывания для обработки осуществляется на основе приоритетов и очередей прерываний.
Поскольку сигналы прерывания возникают в произвольные моменты времени, то на момент прерывания может существовать несколько сигналов прерывания, которые могут быть обработаны только последовательно.
Чтобы обработать сигналы прерывания в порядке очереди, им присваиваются приоритеты.
Сигнал с более высоким приоритетом обрабатывается в первую очередь, обработка остальных сигналов прерывания откладывается.
Программное управление маскированием сигналов прерывания позволяет реализовать различные дисциплины обслуживания.
• С относительными приоритетами, то есть обслуживание не прерывается даже при наличии запросов с более высокими приоритетами. После окончания обслуживания данного запроса обслуживается запрос с наивысшим приоритетом.
Для организации такой дисциплины необходимо в программе обслуживания данного запроса наложить маски на все остальные сигналы прерывания или просто отключить систему прерываний.
• С абсолютными приоритетами, то есть всегда обслуживается прерывание с наивысшим приоритетом. Для реализации этого режима необходимо на время обработки прерывания замаскировать все запросы с более низким приоритетом. При этом возможно многоуровневое прерывание, то есть прерывание программ обработки прерываний. Число уровней прерывания в этом режиме изменяется и зависит от приоритета запроса.
• По принципу стека, по дисциплине LCFS (Last Come First Served — последним пришел, первым обслужен), то есть запросы с более низким приоритетом могут прерывать обработку прерывания с более высоким приоритетом. Для этого необходимо не накладывать маску ни на один из сигналов прерывания и не выключать систему прерываний.
Обычно в ОС поддерживается механизм приоритетов и маскирования прерываний. Каждый класс прерываний имеет свой уровень приоритета. Приоритеты могут обслуживаться как относительные и как абсолютные. Маскирование позволяет запретить прерывания любого приоритета в некотором промежутке времени. В целом эти механизмы позволяют организовать гибкое обслуживание прерываний.
Русские Блоги
1. Обзор прерываний
Прерывание означает, что во время нормальной работы ЦПУ ЦПУ временно останавливает работающую программу из-за внутренних или внешних событий или событий, запланированных программой, и вместо этого переходит к программе, которая обслуживает внутреннее или внешнее событие или запланированное событие. По окончании вернитесь, чтобы продолжить запуск временно прерванной программы.
1.1 Тип прерывания
Синхронные прерывания генерируются самим процессором, также известным как внутренние прерывания. Синхронизация здесь относится к синхронному выполнению между сигналом запроса прерывания и инструкцией кода.После завершения выполнения инструкции ЦПУ может прервать ее, и не может быть во время выполнения. Так что это также называется аномалией (exception)。
Асинхронные прерывания генерируются внешними аппаратными устройствами, также известными как внешние прерывания. В отличие от синхронных прерываний, асинхронные прерывания могут создаваться в любое время, в том числе во время выполнения инструкций, поэтому их также называют прерываниями (interrupt)。
Исключения можно разделить на маскируемые прерывания (Maskable interrupt) И немаскированное прерывание (Nomaskable interrupt). Прерывание можно разделить на неисправности (fault), Ловушка (trap), Прекращение (abort) Три категории.
Вообще говоря, прерывания можно разделить на четыре категории:Прерывание、Fault、ловушка、прекращение, Пожалуйста, обратитесь к таблице 1 для сходства и различий между этими категориями.
Таблица 1: Категории прерываний и их поведение
категория
причина
Асинхронный / синхронный
Возвращение поведения
Прерывание
Сигнал с устройства ввода / вывода
Всегда возвращайтесь к следующей инструкции
ловушка
Всегда возвращайтесь к следующей инструкции
Fault
Потенциально исправимые ошибки
Вернуться к текущей инструкции
прекращение
Некоторые справочные материалы классифицируются в соответствии с источником прерывания, как показано на следующем рисунке (личные рекомендации не используют этот метод):
Рисунок 1-1 Рисунок 1-1 Рисунки 1-1
1.2 Различают номер прерывания и направление прерывания
Когда устройство ввода-вывода отправляет сигнал прерывания в контроллер прерываний (8259A), он ассоциируется с номером прерывания, а когда контроллер прерываний отправляет сигнал прерывания в ЦП, он ассоциируется с вектором прерывания. С другой стороны, номер прерывания делится от уровня контроллера прерываний, а вектор прерывания делится от уровня ЦП, поэтому существует взаимно-однозначное соответствие между номером прерывания и вектором прерывания. Intel X86 поддерживает максимум 256 прерываний, начиная с 0 до 255, 8-разрядное число является вектором прерывания. Среди них от 0 до 31 зарезервированы для обработки исключений и немаскируемых прерываний.
Во-вторых, структура обработки данных прерывания
Существует три основных структуры данных для обработки прерываний в ядре Linux: irq_desc, irq_chip и irqaction.
Определено в \ include \ linux \ irq.h
1) irq_desc используется для описания свойств и статуса линии IRQ и называется дескриптором прерывания.
2) irq_chip используется для описания различных типов контроллеров прерываний.
В \ include \ linux \ interrupt.h определяется irqaction для описания дескриптора прерывания, сгенерированного конкретным устройством.
Три, механизм прерывания Linux
Механизм прерываний Linux состоит из трех частей:
3.1Инициализация подсистемы прерываний
3.1.1 Инициализация таблицы дескрипторов прерываний (IDT)
Инициализация таблицы дескрипторов прерываний должна проходить через два процесса:
3.1.2 Инициализация очереди запросов на прерывание
init_IRQ вызывает pre_intr_init_hook и, наконец, вызывает init_ISA_irqs для инициализации контроллера прерываний и очереди запросов на прерывание для каждой строки IRQ.
3.2Обработка прерываний или исключений
Обработка прерываний: устройство генерирует прерывание и отправляет сигнал прерывания на контроллер прерываний через линию прерывания. Если прерывание не маскируется, оно достигнет вывода INTR ЦПУ. ЦПУ немедленно останавливает текущую работу в соответствии с номером вектора прерывания, полученным из IDT. Найдите дескриптор шлюза и выполните соответствующую программу прерывания.
Процесс обработки исключений: Исключение генерируется внутренним процессором ЦПУ, поэтому оно не проходит контроллер прерываний.ЦП непосредственно находит дескриптор шлюза из IDT в соответствии с номером вектора прерывания и выполняет соответствующую программу прерывания.
Рисунок 3-1 Рисунок 3-1 Рисунок 3-1 Рисунок 3-2 Рисунок 3-1
Процесс обработки контроллера прерываний состоит из пяти основных этапов: 1. Запрос прерывания 2. Ответ на прерывание 3. Сравнение приоритетов 4. Передача вектора прерывания 5. Окончание прерывания. Конкретный поток из пяти шагов не будет повторяться здесь.
3.3API прерываний
API, предоставляемый ядром, в основном используется для разработки драйверов.
Примечание: ресурсы линии IRQ очень ценны, мы должны сначала зарегистрироваться при использовании, и должны освободить ресурсы IRQ, когда они не используются.
Активировать текущее прерывание процессора:
Отключить текущее прерывание процессора:
Активируйте указанную линию прерывания:
Запрещено указывать строку прерывания:
Запрещено указывать строку прерывания:
Примечание. Эта функция вызывает отключение в irq_chip для отключения указанной строки прерывания, поэтому нет гарантии, что программа обработки прерывания, выполненная в строке прерывания, завершилась.
3.4 Механизм прерывания
Поскольку прерывания будут прерывать нормальное планирование и запуск процессов в ядре, программа обработки прерываний должна быть как можно более короткой и краткой, насколько это возможно, но в реальных системах, когда появляются прерывания, выполнение работы часто отнимает много времени. Поэтому я надеюсь, что обработчик прерываний будет работать быстро, и я хочу, чтобы он выполнял рабочую нагрузку, эти две цели ограничивают друг друга, механизм верхней / нижней половины.
Рисунок 3-2 Примечание. Регистрация прерывается, и нижняя половина процедуры обработки помещается в нижнюю половину очереди выполнения устройства.
3.4.1Принцип деления верхней / нижней половины:
1) Если задача очень чувствительна ко времени, поместите ее в верхнюю половину;
2) Если задача связана с оборудованием, поместите ее в верхнюю половину для выполнения;
3) Если задача гарантированно не будет прервана другими прерываниями, поместите ее в верхнюю половину для выполнения;
4) Все остальные задачи должны быть размещены в нижней половине для выполнения.
3.4.2 Нижняя половина механизма реализации
Рисунок 3-3 Рисунок 3-3 Рисунок 3-3 Рисунок 3-3 Рисунок 3-3.
Мягкое прерывание:
Как представитель второй половины механизма, мягкое прерывание возникло с появлением SMP (процессора общей памяти), а также является основой для реализации тасклета (тасклет фактически добавляет только определенный механизм на основе мягкого прерывания). Мягкие прерывания, как правило, являются общим термином для «задерживаемых функций» и иногда включают в себя тасклеты (пожалуйста, сделайте вывод, включен ли тасклет на основе контекста, когда читатель встречает его). Он возник из-за разницы между верхней и нижней половинами, предложенной выше, так что независящие от времени задачи задерживаются, и обработчик прерываний выполнения мягкого прерывания остается для него для выполнения оставшихся задач, и это может быть Параллельное выполнение на нескольких процессорах повышает общую эффективность системы. Его функции включают в себя:
a) Он не может быть выполнен сразу после того, как сгенерирован, он должен ждать выполнения планирования ядра. Мягкие прерывания не могут быть прерваны сами по себе, но только аппаратными прерываниями (верхняя половина).
b ) Может работать одновременно на нескольких процессорах (даже один и тот же тип). Таким образом, мягкие прерывания должны быть спроектированы как повторяющиеся функции (позволяющие нескольким процессорам работать одновременно), поэтому спин-блокировки также необходимы для защиты их структур данных.
Назначение нескольких программных прерываний определено в ядре:
Tasklet :
Тасклет реализуется с помощью мягкого прерывания, поэтому оно также является программным прерыванием.
Мягкие прерывания обрабатываются опросом. Если это последний тип прерывания, все типы прерываний должны быть зациклены, прежде чем соответствующая функция обработки может быть наконец выполнена. Очевидно, что для обеспечения эффективности опроса разработчики ограничивали количество прерываний до 32.
Чтобы увеличить количество обработки прерываний и повысить эффективность обработки, был создан механизм тасклетов.
Тасклет использует беспорядочный механизм очереди и выполняется только при прерывании, что избавляет от необходимости поиска по круглой таблице. Как новый механизм, Tasklet, очевидно, может иметь больше преимуществ В настоящее время SMP становится все более популярным, поэтому механизм механизма SMP добавляется в тасклет, чтобы гарантировать, что один и тот же тип прерывания может быть выполнен только на одном процессоре. В эпоху мягких перерывов такого рассмотрения явно не было. Следовательно, одно и то же мягкое прерывание может выполняться одновременно на двух процессорах, что может вызвать конфликты.
Суммируйте преимущества тасклета:
(1) Нет ограничения по количеству типов;
(2) Высокая эффективность, нет необходимости в круглом столе поиска;
(3) Поддержка механизма SMP;
Его характеристики следующие:
1) Определенный тип тасклета может работать только на одном процессоре, не параллельно, а только последовательно.
2) Несколько разных типов тасклетов могут быть распараллелены на нескольких процессорах.
3 ) Мягкое прерывание статически размещено и не может быть изменено после компиляции ядра. Но тасклеты гораздо более гибки и могут быть изменены во время выполнения (например, при добавлении модулей).
Очередь работ:
Отложенные функции, которые мы представили выше, выполняются в контексте прерывания, что вызывает некоторые проблемы, указывающие на то, что они не могут быть приостановлены, то есть мягкие прерывания не могут спать или блокироваться, потому что контекст прерывания находится в режиме ядра и нет переключения процессов. Таким образом, если мягкое прерывание находится в спящем режиме или заблокировано, оно не сможет выйти из этого состояния, в результате чего ядро будет полностью мертвым. Поэтому блокируемые функции не могут быть реализованы с мягкими прерываниями. Но они часто имеют характеристики задержки. И поскольку он выполняется последовательно, пока одно время обработки больше, это вызовет задержку ответа другого прерывания. Для выполнения этих невозможных задач появляется рабочая очередь, которая может переключаться между разными процессами для выполнения разных задач.
Как выбрать механизм второй половины:
В-четвертых, концепции, связанные с прерываниями многопроцессорных систем
4.1 Межпроцессорное прерывание
4.2 Прерывание сродства
Выше мое право Linux Прерванное понимание, если есть какие-либо ошибки, пожалуйста, исправьте меня!