Обработка прерываний, векторы прерываний, программные прерывания, IRQ. Управление запросами на аппаратное прерывание Конфликты прерываний в программах can


Редко какой компьютер, особенно домашний, проживет всю свою жизнь, ни разу не подвергшись или модернизации, или добавлению новых устройств. В большинстве случаев, естественно, при соблюдении самых элементарных правил, такая операция проходит безболезненно, не вызывая никаких особых проблем. Но примерно каждый десятый (или даже двадцатый - не суть важно) компьютер доводится до нерабочего состояния: начинает часто зависать, отказывается выполнять какие-либо функции, а то и просто вываливается в столь любимый всеми нами синий экран смерти. Как правило, наиболее вероятная причина таких неполадок кроется в конфликтах оборудования (нового и старого), не поделивших какие-либо аппаратные ресурсы. Хорошо, если Ваша квалификация позволяет решить возникшие проблемы, или поблизости есть кто-то, который может Вам помочь, а если ничего подобного нет? Однако не боги, как известно, горшки обжигают, посидим, подумаем - глядишь, и прорвемся, ведь не так уж все и сложно, хотя проблема совместимости самого различного оборудования, с момента своего возникновения в середине 80-х годов, до сих пор ни сколько не уменьшилась. Предлагаемая статья поможет пользователю разобраться с одним из видов аппаратных ресурсов, требующихся для оборудования, и чаще всего являющихся первопричиной всевозможных конфликтов - с аппаратными прерываниями (IRQ).

Аппаратные ресурсы системы

Компоненты для своей работы могут требовать три основных вида различных аппаратных ресурсов. Практически любое устройство использует один или несколько портов ввода/вывода. В данном случае имеется в виду не последовательный или параллельный порт, а просто специальный адрес, что-то вроде адреса в оперативной памяти. Работа с этими портами осуществляется специальными командами центрального процессора, с помощью которых в порт или записывается какая-либо информация, или считывается из него. Зачастую обмен информацией между процессором и устройством идет только через порты, причем некоторые устройства берут на себя десяток, а то и более адресов портов, каждый из которых служит для выполнения какой-то определенной функции.

Гораздо реже используются каналы прямого доступа к памяти (DMA - Direct Memory Access). Данный тип взаимодействия предназначен для устройств, обменивающихся большими блоками данных с оперативной памятью, например, дисковые накопители или принтеры. Весь обмен идет в обход центрального процессора, который лишь инициирует операцию обмена и сразу же приступает к выполнению другой работы. Такой подход способен значительно увеличить производительность всей системы.

А третьим видом ресурсов являются аппаратные прерывания, которые являются базовым механизмом реакции системы на внешние события. Аппаратные прерывания, называемые обычно IRQ (Interrupt ReQuest) - это физические сигналы, с помощью которых контроллер устройства информирует процессор о необходимости обработать некоторый запрос. Условно схема обработки прерывания может выглядеть следующим образом:

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

В отличие от программных прерываний, вызываемых исполняемой прикладной программой, аппаратные прерывания могут происходить в самые неожиданные моменты времени, и, кроме того, могут возникнуть одновременно сразу несколько прерываний. Для того чтобы система не слишком "задумалась", какое прерывание обслуживать в первую очередь, существует специальная схема приоритетов. Каждому прерыванию назначается свой уникальный приоритет. Если приходит одновременно несколько прерываний, то система отдает предпочтение самому высокоприоритетному, откладывая на время обработку остальных, менее важных, прерываний.

Распределение прерываний

Рассмотрим, как обычно распределяются прерывания в стандартном компьютере. Некоторые из номеров жестким образом привязаны к определенным устройствам, некоторые можно освободить и использовать для своих нужд. Начнем по порядку:

  • IRQ 0 - прерывание системного таймера. Генерируется 18,2 раза в секунду. Применяется в данном качестве с момента создания первого компьютера IBM PC (для другого использования этот номер недоступен);
  • IRQ 1 - прерывание клавиатуры. Генерируется контроллером клавиатуры при каждом нажатии на клавишу (для другого использования номер недоступен);
  • IRQ 2 в компьютерах класса XT, использовавших только 8 линий прерываний, был зарезервирован для дальнейшего расширения системы и, начиная с машин класса AT, стал использоваться для подключения второго контроллера. Сегодня IRQ 2 используется системой для совместимости со старым программным обеспечением, для другого использования номер недоступен;
  • IRQ 3 - прерывание асинхронного порта COM 2. Этим же прерыванием пользуются еще и устройства, работающие через порт COM 4. При желании их можно отключить, но присвоить IRQ 3 все равно больше никому не удастся;
  • IRQ 4 по аналогии с предыдущим, это прерывание используется устройствами, занимающими порты СОМ 1/COM 3;
  • IRQ 5 изначально предназначалось для использования вторым параллельным портом LPT2, но потом, когда от второго параллельного порта отказались, IRQ 5 перешло в разряд свободных. Позже активно использовалось большинством звуковых карт ISA. современные PCI-звуковые карты используют это прерывание исключительно для совместимости со старыми играми, подавляющее большинство которых поддерживают SB Pro. IRQ 5 можно использовать для других целей и привязать к слоту PCI;
  • IRQ 6 , начиная с первых PC, используется флоппи-контроллером (для другого использования номер недоступен);
  • IRQ 7 - по умолчанию прерывание первого параллельного порта LPT 1. При отключенном порте (если принтер отсутствует или рассчитан на USB) может использоваться различными устройствами. IRQ 7 можно привязать к слоту PCI;
  • IRQ 8 - прерывание часов реального времени, впервые появившихся в IBM AT. Другое использование невозможно;
  • IRQ 9 и IRQ 10 свободны;
  • IRQ 11 обычно резервируется для шины USB, однако может применяться и в других целях (для этого следует отключить поддержку USB в BIOS);
  • IRQ 12 используется для мыши типа PS/2, однако может применяться в других целях (если мышь PS/2 отсутствует или отключена);
  • IRQ 13 изначально применялось арифметическим сопроцессором, и теперь оно зарезервировано для совместимости со старым программным обеспечением (для другого использования номер недоступен);
  • IRQ 14 и IRQ 15 применяются, соответственно, первичным и вторичным IDE-контроллерами.

Узнать, как в данный момент распределены номера прерываний в Вашем конкретном случае можно несколькими способами. При запуске компьютера, еще до начала загрузки Windows, появляется текстовая таблица конфигурации. Сразу после нее идет перечень PCI-устройств с указанием назначенного им номера IRQ.

Или, если Вы все еще работаете с Windows 9x, то в панели управления есть иконка Система, щелкните на ней - и выбирайте закладку "Устройства". В свойствах устройства "Компьютер" можно найти перечень всех устройств с указанием их IRQ. В Windows 2000/ХР у нас нет непосредственного доступа к управлению прерываниями, поэтому для просмотра списка IRQ нужно воспользоваться стандартной информационной утилитой (Панель управления/Администрирование/Управление компьютером/Сведения о системе/Ресурсы аппаратуры). Ну и, наконец, никто не отменял использование утилит, тестирующих аппаратные и программные возможности компьютера.


Среди них, без сомнения, самой популярной является SANDRA, способная предоставить пользователю исчерпывающую информацию, в том числе и о прерываниях.

Конфликты устройств

Не вдаваясь в излишние детали, можно сказать, что конфликт - это ситуация, при которой несколько объектов одновременно пытаются получить доступ к одному и тому же системному ресурсу. Конфликт прерываний возникает в том случае, если несколько устройств используют одну и ту же линию прерывания для посылки сигнала запроса и отсутствует механизм, позволяющий ранжировать эти запросы, в результате чего происходит либо сбой, либо одно из устройств попросту перестает работать. Чтобы четко представлять себе, как можно избежать конфликтов или устранить их, нужно разобраться в механизме управления IRQ.

Как Вы знаете, персональные компьютеры начались с IBM PC ХТ. Его архитектура предусматривала всего восемь линий аппаратных прерываний, которыми управлял специальный контроллер. Каждой из них назначался свой уникальный номер, который определял приоритет прерывания и адрес его обработчика (так называемый вектор прерывания). Следующий вариант архитектуры, IBM PC AT, дополнил существующие линии еще восемью, для управления которыми использовался второй контроллер, подключаемый к одной из линий прерывания первого контроллера. К сожалению, на этом данная архитектура остановилась в своем развитии, поэтому все современные компьютеры, несмотря на значительно возросшее число используемых в них дополнительных устройств, по-прежнему имеют только шестнадцать линий прерываний, одно из которых резервируется для эмуляции второго контроллера.

Изначально у компьютера IBM PC AT была только одна шина, по которой устройства могли общаться с процессором и памятью - ISA. Большинство линий прерываний были закреплены за стандартными ISA-устройствами, поэтому, когда появилась новая универсальная шина PCI, выяснилось, что на ее долю осталось всего четыре свободные прерывания, обозначаемые как INT A, INT B, INT C, INT D, поэтому всего только четыре PCI устройства могут получить в системе независимые прерывания. Но при этом необходимо учитывать, что на особенном положении находится контроллер IDE, который не входит в число тех четырех устройств только потому, что, хотя по способу передачи данных он и является PCI-устойством, но за ним жестко закреплены свои прерывания IRQ 14 и IRQ 15, как для старых устройств ISA. Для шины AGP, которая является разновидностью шины PCI, "пожертвован" INT A, а шина USB, как один из системных компонентов, подключается к PCI, используя INT D, что уменьшает число "честных" PCI устройств всего до двух. Не следует забывать и о подсистеме управления питанием Power Management/System Management, которая так же требует своего прерывания. Таким образом, в реальной жизни, при наличии нескольких устройства PCI, использующих прерывания, невозможно обеспечить им уникальные аппаратные IRQ, и в таких случаях используются аппаратно-программный способ, основанный на базе технологии Plug & Play, что теоретически позволяет избежать возникновения конфликтов. Хотя в реальной жизни может случиться все, что угодно, да и оставшиеся до сих пор устройства ISA не умеют делиться линиями прерываний, потому являются основными провокаторами конфликтов. Таким образом, задача устранения конфликтов сводится к правильному распределению номеров прерываний в случае возникновения проблем с устройствами ISA или "глючными" драйверами.

В системе номера IRQ распределяются между физическими линиями дважды. Первый раз это делает системный BIOS при начальной загрузке системы. Каждому Plug & Play-устройству (а к ним относятся все PCI, современные ISA и все интегрированные на системной плате устройства) назначается один номер из числа доступных. Если номеров не хватает, несколько линий получают один общий. Для устройств PCI это не страшно - при наличии нормальных драйверов и поддержки со стороны операционной системы все должно нормально работать. А вот если один номер получают несколько ISA-устройств или не менее "гремучая" смесь из PCI- и ISA-устройств, то конфликт попросту неизбежен, и тогда придется вмешиваться в процесс автоматического распределения прерываний. В этом случае необходимо отключить все неиспользуемые ISA-устройства (в системах без слотов ISA они, тем не менее, присутствуют: это порты COM1, COM2 и дисковод). Также можно отключить режимы EPP и ECP порта LPT, освободив при этом прерывание IRQ7. Все операции по изменению прерываний в BIOS Setup осуществляются в разделе "PCI/PNP Configuration". Есть два способа повлиять на распределения номеров IRQ: заблокировать конкретный номер и напрямую назначить номер линии. Первый способ доступен для всех BIOS, корректируются пункты меню "IRQ x used by:" (в новых BIOS скрывается в подменю "IRQ Resources"). Тем прерываниям, которые должны быть назначены исключительно ISA-устройствам, нужно поставить "Legacy ISA". Тем самым при раздаче номеров для PCI-устройств данные прерывания будут пропущены. Поступать так следует в том случае, если какое-либо ISA-устройство упорно становится на одно прерывание с PCI-устройством, из-за чего оба они не работают. В таком случае необходимо найти номер этого IRQ и заблокировать его. PCI-устройство переходит на новый номер IRQ, а ISA-устройство остается "при своих". Второй способ управления номерами IRQ - прямое назначение, хотя и несколько сложнее первого, но гораздо более эффективный. Очень прискорбно, что далеко не все современные системные платы позволяют осуществлять эту операцию. В том же подменю BIOS Setup могут быть пункты вида "Slot X use IRQ" (другие названия: "PIRQx use IRQ", "PCI Slot x priority", "INT Pin x IRQ"). Эта опция позволяет устанавливать прерывания индивидуально каждому устройству на PCI и AGP шине. При этом необходимо соблюдать следующие правила:

  • Каждый PCI слот может активизировать до четырёх прерываний - INT A, INT B, INT C и INT D;
  • AGP слот может активизировать два прерывания - INT A и INT B;
  • Нормально когда каждый слот назначен как INT A. Остальные прерывания зарезервированы, если PCI/AGP устройство потребует больше, чем одно прерывание или если запрашиваемое прерывание занято;
  • AGP слот и PCI слот 1 распределяют одинаковые прерывания;
  • PCI слоты 4 и 5 так же распределяют одинаковые прерывания;
  • USB использует PIRQ_4.

Ниже приведена таблица, показывающая связь между PIRQ (Programmable Interrupt Request - программируемый запрос прерывания) и INT (Interrupt - прерывание):

Сигнал AGP Slot
PCI Slot 1
PCI Slot 2 PCI Slot 3 PCI Slot 4
PCI Slot 5
PIRQ_0 INT A INT D INT C INT B
PIRQ_1 INT B INT A INT D INT C
PIRQ_2 INT C INT B INT A INT D
PIRQ_3 INT D INT C INT B INT A

Обычно следует оставить опцию в положении AUTO. Но, если возникла необходимость установить индивидуальное IRQ устройству на AGP или PCI шине, прежде всего, необходимо определить, в каком слоте установлено устройство. Потом, сверившись с таблицей, можно установить основной PIRQ. Например, если сетевая карта установлена в слот 3, то основной PIRQ будет PIRQ_2, потому как все слоты назначаются, по возможности, на INT A. После этого выбирается желаемое IRQ, присваивая ему соответствующее значение PIRQ. Только необходимо помнить, что BIOS будет пытаться назначить PIRQ в INT A для каждого слота. Так что, для AGP и PCI 1 слотов основной PIRQ это PIRQ_0, тогда как для PCI слота 2 основной PIRQ это PIRQ_1 и так далее. Второй раз номера прерываний распределяются операционной системой, хотя Windows 9х начинает вмешиваться в произведенные BIOS-ом действия только в крайних случаях. В Windows 98 управление системой распределения IRQ осуществляется с помощью стандартного менеджера устройств. В списке системных устройств нужно найти шину PCI.


В ее свойствах есть особая закладка. Если все настроено правильно, там будет упомянут минипорт ("успешно загружен"), а управление шиной PCI (Steering) будет включено. Таким образом, Windows"98 имеет средства для управления распределением номеров прерываний между физическими линиями. Но поскольку и BIOS чаще всего с этим хорошо справляется, этот механизм не задействуется. Но иногда он просто необходим. При использовании устаревших ISA-устройств, не поддерживающих технологию Plug & Play, BIOS может его и не заметить, отдав занятое им прерывание PCI-устройству - опять конфликт. Для его разрешения необходимо нужное прерывание зарезервировать в диспетчере устройств Windows"98.

Кроме резервирования, можно непосредственно задать номер прерывания для устройства. Для этого нужно в его свойствах найти закладку "Ресурсы", отключить автоматическую настройку и попытаться изменить назначенный номер прерывания. Будьте осторожны, такая операция срабатывает далеко не всегда и порой может привести к совершенно непредсказуемым результатам.

А вот о Windows 2000 (а равно и ХР) - разговор отдельный. Если у Вас достаточно современный компьютер, то он наверняка поддерживает интерфейс конфигурирования ACPI. Windows 2000 в таком случае вообще проигнорирует действия BIOS и "повесит" все PCI-устройства на одно логическое прерывание. В общем случае это будет отлично работать (когда нет устройств ISA), но иногда могут возникнуть проблемы. Чтобы получить возможность изменять номера прерываний, нужно либо поменять HAL-ядро, либо переустановить Windows 2000 с отключенным в BIOS ACPI. Замена ядра производится так: в диспетчере устройств выбирается "Компьютер/Компьютер с ACPI", после этого необходимо изменить драйвер на "Стандартный компьютер" и перезагрузиться. Если это не поможет, придется переустановить Windows 2000 заново.

Заключительные советы

Установив новую операционную систему со всеми драйверами устройств и, убедившись в том, что она работает без проблем, стоит записать все настройки компьютера, особенно если осуществлялись какие-либо изменения установок по умолчанию. Надежнее всего такую информацию записать на обычном листке бумаги. Такая информация может быть очень полезна при внесении каких-либо изменений в настроенную систему, а так же поможет решить проблемы, которые могут возникнуть, если при установке нового оборудования все настройки "съедут" (такое иногда тоже бывает). И, самое главное, помните: большинство возникающих проблем связано с низким уровнем компьютерной грамотности хозяина компьютера. Поэтому нужно всегда стремиться к самообразованию, тогда и проблем будет поменьше, а те, что все-таки возникнут - не будут казаться неразрешимыми.

Михаил Тычков aka Hard

Доброго времени суток.

Давайте рассмотрим такую вот ситуевину: процессор обрабатывает какие-то данные, не важно какие. В этот момент у какого-нить устройства тоже появились данные для обработки. Че делать? Надо просить процессор, что бы тот соизволил обратить на просьбу внимание и решил бы, сейчас обрабатывать эти данные или потом. Так вот эта просьба и есть IRQ или прерывания (вообще-то существуют два типа прерываний: аппаратные (внешние) и программные (внутренние), но поскольку мой раздел называется «Железо и сети», то разговор я буду вести только об аппаратных прерываниях). Строго говоря IRQ – это каналы запросов прерывания, которые используются всевозможными девайсами для того, что бы сообщить процессору о том, что необходимо обработать определенный запрос. Физически, IRQ представляют собой отдельно проложенные линии (проводники) и соответствующие этим линиям контакты в интерфейсах. Все это находится, ессесно на материнской плате. Линии IRQ предназначены только для передачи запросов прерывания.

А ну-ка разберемся, как вся эта фигня с IRQ происходит. Итак, после получения запроса прерывания, камень сохраняет в стеке содержимое регистров. Затем он обращается к таблице векторов прерываний, где есть список адресов памяти программ, соответствующих определенным номерам прерываний. От номера прерывания зависит, какая программа будет запущена. В основном этими программами являются драйвера, относящиеся к устройствам, пославшим запрос (а уж драйвера туго знают свое дело и разберутся, что дальше делать). После всего этого, процедура обработки возвращает из стека то, с чем работал камень, а проще говоря, отдается управление системой той программе, что работала до запроса прерывания. И так постоянно. Сама таблица находится в оперативной памяти и состоит из 256 элементов по 4 байта и начинается с адреса 0000:0000. Занимает она 1024 Кбайт. Надеюсь, что Вы усвоили простую истину: если необходимо обработать хотя бы один новый байт от какого-либо устройства, необходимо сначала обработать IRQ этого устройства.

Что бы не было путаницы у IRQ есть иерархия или говоря другим языком – приоритеты. Чем меньше номер прерывания, тем выше приоритет и наоборот, чем больше номер прерывания, тем ниже приоритет. IRQ всего 16. Самый высокий приоритет у IRQ 0, а самый низкий у IRQ 15. Приведу таблицу иерархии:

Стандартная функция

Системный таймер

Контроллер клавиатуры

Программируемый контроллер прерываний

Последовательный порт COM 2

Последовательный порт COM 1

Стандартный контроллер гибких дисков

Параллельный порт LPT

CMOS и часы

Звуковая или сетевая карты или свободен

Свободен

USB или SCSI или свободен

PS/2 совместимый порт мыши

Сопроцессор

Основной контроллер IDE

Дополнительный контроллер IDE

А хотите посмотреть свои прерывания? Выберите «Пуск – Выполнить», наберите «msinfo32». В появившимся окне «Сведения о системе», слева, выберите вкладку «Ресурсы аппаратуры – Прерывания IRQ».

С прерываниями случаются и геморрои. Если произойдет генерация большого количества IRQ, то стек может переполниться и тогда…. тогда Вы потянитесь к кнопочке . Ежели такая фигня будет происходить часто, то необходимо в файле Config.sys увеличить параметр Stacks. Кроме, этого двум различным устройствам PCI может быть назначено одно и то же прерывание. Теоретически такое не должно происходить, но вот на практике случается. В этом случае Вам придется самому назначить прерывание одному из заглючивших устройств. Как это сделать? Жмем . Выскакивает окно «Свойства: Система». Выбираем вкладку «Устройства», ищем в списке то устройство, IRQ которого будем подправлять и жмем на него пару раз мышью. Выскочит окно его свойств, где выберем вкладку «Ресурсы» и снимем галку «Автоматическая настройка». Затем чуть ниже выбираем «Запрос на прерывания» и кликаем опять два раза мышью. Появится окно, где можно изменить номер IRQ. Ни фиг себе и сложно. Но… Назначать прерывания надо с умом. Сверьтесь с таблицей: какие IRQ для чего предназначены. Посмотрите у себя, какие свободны. Может так случится, что свободных прерываний у Вас и не будет. Думаете – все, жопа? Нет! Новых IRQ Вы конечно не добавите, но подумайте, все ли устройства Вам необходимы. Например, как часто Вы используете порты COM. Я ими последние года три не пользуюсь вообще. Ну и на фиг их из системы. Это можно сделать из BIOS. И вот Вам свободные IRQ. Короче, в решении подобной проблемы надо приложить голову и все у Вас получится. А всяких там кулых спецов хочу предупредить сразу - не пишите мне письма типа: «После твоей статьи клиенты пачками стали нести к нам в магазин компы с развороченными настройками!». Я не отвечаю за действия людей, у которых голова и руки растут из того же места, что и ноги. Когда-то я и сам в этом ни черта не смыслил, но ведь разобрался же. Причем мне никто ничего не объяснял. Дорогу осилит идущий!

Двигаемся дальше. Вообще, следует отметить, что каналы запросов прерывания относятся к системным ресурсам. Дам короткое но очень меткое определение: системными ресурсами называются коммуникационные каналы, адреса и сигналы, используемые узлами компьютера для обмена данными с помощью шин. Вот так вот просто и понятно. К системным ресурсам кроме IRQ относятся: адреса памяти, каналы прямого доступа к памяти и адреса портов ввода/вывода. Но об этом в других статьях. А на сегодня все. Удачи в Ваших начинаниях.

  • Алиева Елена Викторовна , студент
  • Уфимский государственный авиационный технический университет
  • КОНТРОЛЛЕР ПРЕРЫВАНИЙ
  • КОНТРОЛЛЕР
  • АППАРАТНЫЕ ПРЕРЫВАНИ
  • ПРЕРЫВАНИЕ

Прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы. Механизм прерываний поддерживается на аппаратном уровне. Аппаратные прерывания возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени. Контроллер прерываний предназначен для обработки и арбитража поступающих запросов на обслуживание к центральному процессору от переферийных устройств. Прерывания имеют определённый приоритет, который позволяет контроллеру прерываний отдавать предпочтение в данный момент времени одному устройству, а не другому. В современном компьютере существует до 16 внешних и переферийных устройств, генерирующие прерывания.

  • Автоматизация документооборота склада производственного предприятия
  • Calls-технологии, особенности, применение и эффективность
  • Разработка модели информационной системы юридического отдела по сопровождению и заключению договоров предприятия

Введение

Прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы. Т.е. это процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возвратом к прерванной программе. Нажимая клавишу на клавиатуре, мы инициируем немедленный вызов программы, которая распознает клавишу, заносит ее код в буфер клавиатуры, из которого он считывается другой программой. Т.е. на некоторое время микропроцессор прерывает выполнение текущей программы и переключается на программу обработки прерывания, так называемый обработчик прерывания. После того, как обработчик прерывания завершит свою работу, прерванная программа продолжит выполнение с точки, где было приостановлено ее выполнение. Адрес программы-обработчика прерывания вычисляется по таблице векторов прерываний.

Механизм прерываний поддерживается на аппаратном уровне. В зависимости от источника, прерывания делятся на:

  • аппаратные - возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени;
  • программные - вызываются искусственно с помощью соответствующей команды из программы (int), предназначены для выполнения некоторых действий операционной системы, являются синхронными;
  • исключения - являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль, прерывание по флагу TF (трассировка)) .

Аппаратные средства системы прерываний

Система прерываний - это совокупность программных и аппаратных средств, реализующих механизм прерываний.

К аппаратным средствам системы прерываний относятся:

  • выводы микропроцессора - на них формируются сигналы, извещающие микропроцессор либо о том, что некоторое внешнее устройство «просит уделить ему внимание» (INTR), либо о том, что требуется безотлагательная обработка некоторого события или катастрофическая ошибка (NMI)
  • INTR - вывод для входного сигнала запроса на прерывание,
  • NMI - вывод для входного сигнала немаскируемого прерывания
  • INTA - вывод для выходного сигнала подтверждения получения сигнала прерывания микропроцессором (этот сигнал поступает на одноименный вход микросхемы контроллера 8259А;
  • программируемый контроллер прерываний 8259А (предназначен для фиксирования сигналов прерываний от восьми различных внешних устройств; он выполнен в виде микросхемы; обычно используют две последовательно соединенные микросхемы, поэтому кол-во возможных источников внешних прерываний до 15 плюс одно немаскируемое прерываний; именно он формирует номер вектора прерывания и выдает его шину данных);
  • внешние устройства (таймер, клавиатура, магнитные диски и т.п.)

Обработка прерываний

Прерывание вызывает ряд событий, которые происходят как в аппаратном, так и в программном обеспечении. На рис. 1 показана типичная последовательность этих событий.

После завершения работы устройства ввода-вывода происходит следующее:

  • Устройство посылает процессору сигнал прерывания.
  • Перед тем как ответить на прерывание, процессор должен завершить исполнение текущей команды (см. рис. 1).
  • Процессор производит проверку наличия прерывания, обнаруживает его и посылает устройству, приславшему это прерывание, уведомляющий сигнал об успешном приеме. Этот сигнал позволяет устройству снять свой сигнал прерывания.
Рисунок 1. Временная диаграмма программы: медленный ввод-вывод

Теперь процессору нужно подготовиться к передаче управления обработчику прерываний. Сначала необходимо сохранить всю важную информацию, чтобы в дальнейшем можно было вернуться к тому месту текущей программы, где она была приостановлена. Минимальная требуемая информация - это слово состояния программы и адрес очередной выполняемой команды, который находится в программном счетчике. Эти данные заносятся в системный управляющий стек.

Рисунок 2. Обработка простого прерывания

Далее в программный счетчик процессора загружается адрес входа программы обработки прерываний, которая отвечает за обработку данного прерывания. В зависимости от архитектуры компьютера и устройства операционной системы может существовать как одна программа для обработки всех прерываний, так может быть и своя программа обработки для каждого устройства и каждого типа прерываний. Если для обработки прерываний имеется несколько программ, то процессор должен определить, к какой из них следует обратиться. Эта информация может содержаться в первоначальном сигнале прерывания; в противном случае для получения необходимой информации процессор должен по очереди опросить все устройства, чтобы определить, какое из них отправило прерывание.

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

Содержимое программного счетчика и слово состояния прерываемой программы уже хранятся в системном стеке. Однако это еще не вся информация, имеющая отношение к состоянию исполняемой программы. Например, нужно сохранить содержимое регистров процессора, так как эти регистры могут понадобиться обработчику прерываний. Поэтому необходимо сохранить всю информацию о состоянии программы. Обычно обработчик прерываний начинает свою работу с записи в стек содержимого всех регистров. Другая информация, которая должна быть сохранена, обсуждается в главе 3, "Описание процессов и управление ими". На рис. показан простой пример, в котором программа пользователя прерывается после выполнения команды из ячейки N. Содержимое всех регистров, а также адрес следующей команды (N+1), в сумме составляющие М слов, заносятся в стек. Указатель стека при этом обновляется, указывая на новую вершину стека. Обновляется и программный счетчик, указывая на начало программы обработки прерывания.

Теперь обработчик прерываний может начать свою работу. В процесс обработки прерывания входит проверка информации состояния, имеющая отношение к операциям ввода-вывода или другим событиям, вызвавшим прерывание. Сюда может также входить пересылка устройствам ввода-вывода дополнительных инструкций или уведомляющих сообщений.

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

Последний этап - восстановление из стека слова состояния программы и содержимого программного счетчика. В результате следующей будет выполняться команда прерванной программы.

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

Контроллер прерываний

Контроллер прерываний предназначен для обработки и арбитража поступающих запросов на обслуживание к центральному процессору от переферийных устройств. По аналогии функции контроллера прерываний можно сравнить с секретарём какого–нибудь начальника. Секретарь должен решить, кого из посетителей допустить к боссу в первую очередь, а кого и потом, исходя из приоритетов, отдаваемых боссом и статуса самого посетителя. Так и в компьютерной системе, возможна такая ситуация, когда несколько переферийных устройств послали сигнал прерывания или запрос на прерывание. В компьютерной литературе этот сигнал обозначается IRQ (Interrupt Request).

Как уже выше говорилось, прерывания имеют определённый приоритет, который позволяет контроллеры прерываний отдавать предпочтение в данный момент времени одному устройству, а не другому. В современном компьютере существует до 16 внешних и периферийных устройств, генерирующие прерывания. Вот эти устройства:
–IRQ 0, системный таймер; –IRQ 1, клавиатура; –IRQ 2, исползуется для запросов устройств, подключенных каскадом; –IRQ 8, часы реального времени; –IRQ 9, зарезервировано; –IRQ 10, зарезервировано; –IRQ 11, зарезервировано; –IRQ 12, ps/2–мышь; –IRQ 13, сопроцессор; –IRQ 14, контроллер «жёсткого» диска; –IRQ 15, зарезервировано; –IRQ 3, порты COM2,COM4; –IRQ 4, порты COM1,COM3; –IRQ 5, порт LPT2; –IRQ 6, контроллер дисковода; –IRQ 7, порт LPT1,принтер.

Здесь сигналы приведены в порядке убывания приоритетов. Можно заметить, что после IRQ 2, следует IRQ 8. Дело в том, что в своё время контроллер прерываний состоял из двух микросхем, одна была подключена к другой. Вот эта вторая микросхема и подключается к линии IRQ 2, образуя каскад. Она обслуживает линии IRQ8–IRQ 15. А затем следуют линии первой микросхемы .

Работа контроллера прерывания

Работа контроллеов прерываний рассматривается на основе микросхем фирмы Intel 8259A, которые применялись в теперь уже очень старых компьютерах с процессорами до 386 серии. В этих компьютерах обычно было 2 микросхемы 8259A, подключенных каскадно, то–есть одна к другой. Одна из микросхем, подключенная по линии запроса на прерывание непосредственно к процессору является ведущей или мастером. Остальные,подключаются к ведущей через аналогичные выводы, называются ведомыми.


Рисунок 3. Схема подключения контроллеров прерываний и их взаимодействие с центральным процессором

На рисунке 3 изображена схема подключения контроллеров прерываний и их взаимодействие с центральным процессором. Сигналы на прерывание от переферийных устройств или ведомых контроллеров поступают на входы IR0–IR7 ведущего контроллера. Внутренняя логика ведущего контроллера обрабатывает поступившие запросы с точки зрения приоритета. Если приоритет запроса устройства достаточен, то на выходе INT контроллера вырабатывается сигнал, поступающий на вход INTR процессора. В противном случае, запрос блокируется.

Если процессор разрешает прерывания, то после завершения выполнения текущей команды, он вырабатывает по линии INTA последовательность сигналов, которая переводит ведомый контроллер в состояние невосприимчивости к поступающим новым запросам на прерывание, а кроме того, на линию данных выводится информация из внутренних регистров контроллера по которой процессор распознаёт тип прерывания.

Разрешение на прерывание процессор передаёт контроллеру прерываний через контроллер шины. Сигнал RD предназначен для того, чтобы контроллер прерываний поместил на шину данных содержимое внутренних регистров. По сигналу WR контроллер прерываний, наоборот, принимает данные с одноимённой шины и записывает их во внутренние регистры. Соответственно, это влияет на режим работы контроллера прерываний.

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

Входы IR0–IR7 предназначены для приёма запросов на прерывание от переферийных устройств и ведомых контроллеров.

Выходы CAS0–CAS2 предназначены для идентификации конкретного ведомого контроллера .

В статье рассмотрены аппаратные прерывания и устройство, функции, работу контроллера прерываний. Данный контроллер прерываний появился ещё в первых PC–совместимых компьютерах. С тех пор, и процессоры, и сам компьютер во многом изменились, хотя некоторые моменты остались. Поэтому, для того, чтобы было понятней и была рассмотрена организация контроллера прерываний 8295A.

На приведенной выше схеме показаны сигналов приходящие не только на ведомый и ведущий контроллеры прерываний, но и на остальные ведомые. Однако на вашем компьютере или ноутбуке на самом деле 2 контроллера прерываний, как выше указывалось: ведущий и ведомый. Но можно создавать свои компьютерные системы, используя таким образом до 64 ведомых контроллеров прерываний.

В современных компьютерах уже давно функции контроллера прерываний выполняют не микросхемы 8259A, а южный мост. Однако, для всех программ и устройств всё остаётся по–прежнему. Более того, контроллер прерываний можно программировать, и обращаться к внутренним регистрам и портам необходимо точно также, как и к контроллеру 8259A .

Заключение

В данной работе были рассмотрены прерывания, а именно аппаратные средства обработки прерываний и принцип обработки прерываний. Также рассмотрены контроллеры прерываний и принцип их работы.

Прерывание означает временное прекращение основного процесса вычислений для выполнения некоторых запланированных или незапланированных действий, вызываемых работой аппаратуры или программы. Механизм прерываний поддерживается на аппаратном уровне. Аппаратные прерывания возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени.

Контроллер прерываний предназначен для обработки и арбитража поступающих запросов на обслуживание к центральному процессору от переферийных устройств. Прерывания имеют определённый приоритет, который позволяет контроллеру прерываний отдавать предпочтение в данный момент времени одному устройству, а не другому. В современном компьютере существует до 16 внешних и переферийных устройств, генерирующие прерывания.

Список литературы

  1. Лекция. Прерывания. Эл. Ресурс. http://hromatron.narod.ru/_lekcii/prerivania_lekcia_g2013.htm
  2. Системные прерывания | Аппаратное прерывание | Обработка прерываний http://life-prog.ru/view_os.php?id=16
  3. Контроллер прерываний. Эл. Ресурс http://sdelaycomputersam.ru/Controller_irq.php,
  4. Прерывания. Контроллер прерываний. Устройство, функции, работа. Эл. Ресурс http://sdelaycomputersam.ru/Controller_irq.php
  5. Структура и инициализация контроллера прерываний Intel 8259A Эл.ресурс https://dev64.wordpress.com/2012/05/30/8259-programming/

Вероятно, наиболее распространенный конфликт прерываний (IRQ) связан с интегрированным последовательным портом COM2, существующим в современных системных платах, и внутренним модемом (имеется в виду полноценный внутренний PC-модем, а не программный модем, который также называется WinModem). Дело в том, что в полноценном внутреннем модеме уже есть поддержка некоторого порта; по умолчанию этот порт назначается в COM2, при этом в системе также обычно включен второй последовательный порт. Таким образом, в системе оказывается два идентичных порта, использующих одни и те же ресурсы (прерывания и адреса порта ввода-вывода).

Решить эту проблему довольно просто: следует войти в BIOS Setup системы и отключить встроенный порт COM2. Кроме того, можно подумать об отключении порта COM1, который также используется крайне редко. Отключение неиспользуемых портов СОМх - один из лучших способов высвобождения прерываний (IRQ) для других устройств.

Еще один распространенный конфликт также связан с последовательными портами. В стандартной таблице распределения прерываний вы, наверное, заметили, что IRQ3 назначается порту COM2, а IRQ4 - порту COM1. Проблема возникает тогда, когда в систему добавляются дополнительные порты COM3 и/или COM4 и им не назначаются вручную свободные прерывания (по умолчанию они используют все те же IRQ3 и IRQ4).

Дополнительные сложности вносит то, что некоторые платы портов не допускают выбора прерываний, отличных от IRQ3 и IRQ4. В результате назначение IRQ3 порту COM4 и IRQ4 порту COM3 приводит к конфликту с портами COM1 и COM2, также использующими эти прерывания: два порта не могут одновременно использовать один и тот же канал управления прерываниями. При работе в DOS это допускалось, поскольку в ней одновременно могла выполняться только одна задача, но в Windows и OS/2 это совершенно невозможно. Для того чтобы в компьютере можно было применять более двух параллельных портов COM, необходима многопортовая плата, которая, помимо прерываний с номерами 3 и 4, позволяет использовать дополнительные прерывания. Совместное использование прерываний в принципе допустимо для устройств, которые в обычных условиях не работают одновременно (или постоянно). Порты не попадают в эту категорию устройств. Совместно можно применять прерывание для сканера и модема, однако и в этом случае, если они будут использоваться одновременно, возникнет конфликт. К счастью, большинство устройств, которые ранее использовали порты (например, мыши, принтеры этикеток и внешние модемы), теперь подключаются к портам USB , так что проблем с необходимостью поддержки множества портов у современных пользователей компьютеров возникать не должно.

Если все же необходимо использовать несколько последовательных портов, лучшим решением станет покупка многопортовой платы, которая либо предоставляет возможность установить неконфликтующие прерывания, либо содержит собственный процессор, позволяющий распределять одно системное прерывание между несколькими портами. Некоторые старые многопортовые карты имели интерфейс ISA, но сегодня их вытеснили карты PCI , которые к тому же имеют преимущества в быстродействии.

Если некоторое устройство, упомянутое в таблице, отсутствует (например, встроенный порт мыши (IRQ12) или второй параллельный порт (IRQ5)), их прерывания можно считать доступными. К примеру, второй параллельный порт можно встретить крайне редко, так что отведенное для него прерывание IRQ5 чаще всего используется для платы звукового адаптера. Аналогично прерывание IRQ15 используется для вторичного контроллера IDE . Если в системе к вторичному каналу IDE не подключены дисковые устройства, можно отключить этот контроллер в BIOS, тем самым освободив еще одно прерывание для других устройств.

Следует отметить, что проще всего проверить настройки прерыаний в диспетчере устройств Windows. В системе Windows 95b существует программа HWDIAG, а в Windows 98 и более поздних версиях - консоль Сведения о системе. Эти утилиты позволяют получить детальный отчет об использовании ресурсов в системе, а также об установленных драйверах устройств и записей реестра Windows для каждого из устройств. В системах Windows XP и Vista информацию о системе предоставляет программа Msinfo32.

Чтобы обеспечить максимально возможное количество совместных прерываний в современной системе без разъемов ISA, при работе с системной BIOS выполните следующие действия.

  1. Отключите все неиспользуемые порты в системной BIOS. Например, если вместо последовательного и параллельного портов используются порты USB, отключите их. В результате можно высвободить до трех прерываний.
  2. Укажите прерывание IRQ, освобожденное в п. 1, в списке доступных прерываний для устройств PCI/PnP. В зависимости от версии BIOS соответствующие параметры доступны в разделе PnP/PCI Resource Exclusion или PnP/PCI Configuration.
  3. Активизируйте параметр Reset Configuration Data, чтобы очистить таблицы маршрутизации IRQ в памяти CMOS.
  4. Сохраните изменения и завершите работу с программой настройки BIOS.

Здесь мы разберем такие важные темы, как: обработка прерываний, векторы прерываний, программные прерывания, IRQ , в общем поговорим на темы прерывания.

Идея прерывания была предложена в середине 50-х годов и основная цель введения прерываний – реализация синхронного режима работы и реализация параллельной работы отдельных устройств ЭВМ.

Прерывания и обработка прерываний зависят от типа ЭВМ, поэтому их реализацию относят к машинно-зависимым свойствам операционных систем.

Прерывание (interrupt) – это сигнал, заставляющий ЭВМ менять обычный порядок выполнения команд процессором.

Возникновение подобных сигналов обусловлено такими событиями , как:

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

Обработка прерывания

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

Например прерывание с номером 9 — прерывание от клавиатуры, которое генерируется при нажатии и при отжатии клавиши. Используется для чтения данных с клавиатуры. Обозначается в ОС как IRQ 1, где IRQ – обозначение прерывания, а 1 – приоритет прерывания. Данные о запросах на прерывание можно проанализировать в диспетчере устройств:

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

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

Векторы прерываний

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

Для микропроцессора требуется простой способ определения местоположения программы обработки прерывания и это осуществляется путем использования таблицы векторов прерываний .

Таблица векторов прерываний занимает первый килобайт оперативной памяти — адреса от 0000:0000 до 0000:03FF. Таблица состоит из 256 элементов — FAR-адресов обработчиков прерываний. Эти элементы называются векторами прерываний . В первом слове элемента таблицы записано смещение, а во втором — адрес сегмента обработчика прерывания. Векторами являются просто полные адреса памяти программы (в сегментированной форме), которая должна быть активизирована в случае возникновения прерывания.

Прерыванию с номером 0 соответствует адрес 0000:0000, прерыванию с номером 1 — 0000:0004 и т.д. Адрес такой состоит из пары 2-байтовых слов, поэтому каждый из векторов занимает четыре байта.

Можно просмотреть таблицу векторов прерываний в компьютере, если воспользоваться программой DEBUG. Используйте команду D для вывода содержимого начала памяти: D 0:0. Программа DEBUG покажет вам первые 128 байтов или 32 вектора, которые могут иметь вид наподобие следующего:

0000:0000 E8 4E 9A 01 00 00 00 00-C3 E2 00 F0 00 00 00 00
0000:0010 F0 01 70 00 54 FF 00 F0-05 18 00 F0 05 18 00 F0
0000:0020 2C 08 51 17 D0 0A 51 17-AD 08 54 08 E8 05 01 2F
0000:0030 FA 05 01 2F 05 18 00 F0-57 EF 00 F0 F0 01 70 00
0000:0040 90 13 C7 13 4D F8 00 F0-41 F8 00 F0 3E 0A 51 17
0000:0050 5C 00 B7 25 59 F8 00 F0-E2 0A 51 17 9C 00 B7 25
0000:0060 00 00 00 F6 8E 00 DE 09-6E FE 00 F0 F2 00 7B 09
0000:0070 27 08 51 17 A4 F0 00 F0-22 05 00 00 00 00 00 F0

Векторы хранятся как «слова наоборот»: сначала смещение, а потом сегмент. Например, первые четыре байта, которые программа DEBUG показала выше (E8 4E 9A 01) можно преобразовать в сегментированный адрес 019A:4EE8.

Можно встретить три вида адресов в таблице векторов . Это могут быть адреса, указывающие на ROM-BIOS, которые можно идентифицировать шестнадцатеричной цифрой F, которая предшествует номеру сегмента. Это могут быть адреса, которые указывают на главную память (как в примере: 019A:4EE8). Эти адреса могут указывать на подпрограммы ДОС или на резидентную программу (например, SideKick или Prokey), либо они могут указывать на саму программу DEBUG (поскольку DEBUG должна временно управлять прерыванием). Также векторы могут состоять из одних нулей, когда прерывание с данным номером не обрабатывается в текущий момент.

Инициализация таблицы происходит частично BIOS после тестирования аппаратуры и перед началом загрузки операционной системой, частично при загрузке операционной системы.

Ниже приведено назначение некоторых векторов:

Описание
0 Ошибка деления. Вызывается автоматически после выполнения команд DIV или IDIV, если в результате деления происходит переполнение (например, при делении на 0).
2 Аппаратное немаскируемое прерывание. Это прерывание может использоваться по-разному в разных машинах. Обычно вырабатывается при ошибке четности в оперативной памяти и при запросе прерывания от сопроцессора.
5 Печать копии экрана. Генерируется при нажатии на клавиатуре клавиши PrtScr. Обычно используется для печати образа экрана.
8 IRQ0 — прерывание интервального таймера, возникает 18,2 раза в секунду.
9 IRQ1 — прерывание от клавиатуры. Генерируется при нажатии и при отжатии клавиши. Используется для чтения данных от клавиатуры.
A IRQ2 — используется для каскадирования аппаратных прерываний в машинах класса AT
B IRQ3 — прерывание асинхронного порта COM2.
C IRQ4 — прерывание асинхронного порта COM1.
D IRQ5 — прерывание от контроллера жесткого диска для XT.
E IRQ6 — прерывание генерируется контроллером флоппи-диска после завершения операции.
F IRQ7 — прерывание принтера. Генерируется принтером, когда он готов к выполнению очередной операции. Многие адаптеры принтера не используют это прерывание.
10 Обслуживание видеоадаптера.
11 Определение конфигурации устройств в системе.
12 Определение размера оперативной памяти в системе.
13 Обслуживание дисковой системы.
14 Последовательный ввод/вывод.
1A Обслуживание часов.
1B Обработчик прерывания Ctrl-Break.
70 IRQ8 — прерывание от часов реального времени.
71 IRQ9 — прерывание от контроллера EGA.
75 IRQ13 — прерывание от математического сопроцессора.
76 IRQ14 — прерывание от контроллера жесткого диска.
77 IRQ15 — зарезервировано.

IRQ0 — IRQ15 — это аппаратные прерывания.

Механизм обработки прерываний

При обработке каждого прерывания должна выполняться следующая последовательность действий:

  • Восприятие запроса на прерывание: прием сигнала и идентификация прерывания.
  • Запоминание состояния прерванного процесса: определяется значением счетчика команд (адресом следующей команды) и содержимым регистров процессора.
  • Передача управления прерывающей программе (в счетчик команд заносится начальный адрес подпрограммы обработки прерываний, а в соответствующие регистры – информация из слова состояния процессора).
  • Обработка прерывания.
  • Восстановление прерванного процесса и возврат в прерванную программу.

Главные функции механизма прерывания:

  1. распознавание или классификация прерываний.
  2. передача управления соответственно обработчику прерываний.
  3. корректное возвращение к прерванной программе (перед передачей управления обработчику прерываний содержимое регистров процессора запоминается либо в памяти с прямым доступом либо в системном стеке).

Типы прерываний

Прерывания, возникающие при работе вычислительной системы, можно разделить на 4 группы:

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

Аппаратные прерывания не координируются c работой программного обеспечения. Когда вызывается прерывание, то процессор оставляет свою работу, выполняет прерывание, a затем возвращается на прежнее место.

Внешние прерывания возникают по сигналу какого-либо внешнего устройства например:

  • Прерывание, которое информирует систему о том, что требуемый сектор диска уже прочитан, его содержимое доступно программе.
  • Прерывание, которое информирует систему о том, что завершилась печать символа на принтере и необходимо выдать следующий символ.
  • Прерывания по нарушению питания.
  • Нормальное завершение некоторой операции ввода-вывода (нажатие клавиши на клавиатуре).
  • Прерывание по таймеру.

Прерывание по таймеру вызывается интервальным таймером. Этот таймер содержит регистр, которому может быть присвоено определенное начальное значение посредством специальной привилегированной команды. Значение этого регистра автоматически уменьшается на 1 по истечении каждой миллисекунды времени. Когда это значение становятся равным нулю, происходит прерывание по таймеру. Подобный интервальный таймер используется операционной системой для определения времени, в течение которого программа пользователя может оставаться под управлением машины.

Маскируемые и немаскируемые внешние прерывания

Существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (Non Mascable Interrupt, немаскируемое прерывани ) INTR (interrupt request, запрос на прерывание ).

Соответственно внешние прерывания подразделяются на два вида: немаскируемые и маскируемые.

Часто при выполнении критических участков программ, для того чтобы гарантировать выполнение определенной последовательности команд целиком, приходится запрещать прерывания (т.е. сделать систему нечувствительной ко всем или отдельным прерываниям). Это можно сделать командой CLI. Ее нужно поместить в начало критической последовательности команд, а в конце расположить команду STI, разрешающую процессору воспринимать прерывания. Команда CLI запрещает только маскируемые прерывания, немаскируемые всегда обрабатываются процессором.

Таким образом, наличие сигнала прерывания не обязательно должно вызывать прерывание исполняющейся программы. Процессор может обладать средствами защиты от прерываний: отключение системы прерываний, маскирование (запрет) отдельных сигналов прерываний. Прерывания, которые замаскировать нельзя — это немаскируемые прерывания.

Внутренние прерывания вызываются событиями, которые связаны с работой процессора и являются синхронными с его операциями, а именно прерывание происходит, когда:

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

Программные прерывания

Программы могут сами вызывать прерывания с заданным номером. Для этого они используют команду INT. По этой команде процессор осуществляет практически те же действия, что и при обычных прерываниях, но только это происходит в предсказуемой точке программы – там, где программист поместил данную команду. Поэтому программные прерывания не являются асинхронными (программа «знает», когда она вызывает прерывание).

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

Механизм программных прерываний был специально введен для того, чтобы:

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

Пример (программные прерывания):

  • привилегированная команда в режиме пользователя.
  • адрес вне диапазона.
  • нарушение защиты памяти.
  • арифметическое переполнение, отсутствует страница.
  • нарушение защиты сегмента.
  • выход за границу сегмента.

В упрощенном виде схему обработки различных видов прерываний можно представить следующим образом:

КП – контроллер прерываний, имеет несколько уровней (линий) для подключения контроллеров устройств (на схеме обозначены КУ). Возможно каскадное подключение контролеров, когда на один из его входов подключается еще одни контроллер прерываний. ЦП – центральный процессор.

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

Каждому прерыванию назначается свой уникальный приоритет. Если происходит одновременно несколько прерываний, то система отдает предпочтение самому высокоприоритетному, откладывая на время обработку остальных прерываний.

В случае о прерывании самой программы обработки прерывания говорят о вложенном прерывании . Уровни приоритетов обозначаются сокращенно IRQ0 — IRQ15 или IRQ0 – IRQ23 (в зависимости от микросхемой реализации).

Пpepывaнию вpeмeни cутoк дан мaкcимaльный пpиopитeт, пocкoльку ecли oнo будет пocтoяннo тepятьcя, то будут нeвepными пoкaзaния cиcтeмныx чacoв. Пpepывaниe от клaвиaтуpы вызывaeтcя при нaжaтии или oтпуcкaнии клавиши; oнo вызывaeт цепь coбытий, кoтopaя oбычнo зaкaнчивaeтcя тем, что код клавиши пoмeщaeтcя в буфep клaвиaтуpы (oткудa он зaтeм мoжeт быть пoлучeн пpoгpaммными пpepывaниями).

Ну и наконец реализация механизма обработки прерываний

В машине для каждого класса прерываний имеется соответствующая ему рабочая область прерываний . Например, имеется область, соответствующая прерыванию по таймеру. Когда происходит прерывание по таймеру, содержимое всех регистров сохраняется в этой области (например, пропустив первые несколько слов). Затем из этих пропущенных слов извлекаются заранее занесенные туда значения, которые перезаписываются в счетчик (указатель) команд машины и в слово состояния (или во флаговый регистр). Загрузка и сохранение регистров осуществляется аппаратными средствами машины автоматически.

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

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

Сохранение и восстановление состояния процессора и содержимого регистров называют операцией контекстного переключения .

У большинства машин имеется так называемое слово состояния, которое содержит часть информации, используемой при обработке прерываний. Одним из элементов этого слова (например, первый) является признак, определяющий, в каком режиме находится процессор: в пользовательском или супервизора .

Обычные программы находятся в пользовательском режиме (признак равен нулю). Когда происходит прерывание, новое загружаемое содержимое слово состояния имеет признак, равный 1, что автоматически переводит процессор в режим супервизора. В этом режиме становится возможным использование привилегированных команд. Перед тем, как значение слова состояния будет сохранено, в другом его элементе (например, втором) будет установлено значение, указывающее на причину прерывания:

  • при программном прерывании отражается тип вызвавшего его условия, например деление на нуль.
  • при прерывании по вводу-выводу заносится номер канала, вызвавший прерывание.

В третьем элементе указывается, выполняет ли процессор команды или простаивает. В четвертом элементе содержится указатель, идентифицирующий текущую выполняемую программу. В пятом элементе содержится маска прерываний, которая используется для контроля за разрешением прерываний (поле MASK).

Это поле используется, чтобы не допустить наступления прерываний определенного типа, пока первое из них не будет обработано. В MASK каждый бит соответствует некоторому классу прерываний. Если какой-то бит установлен в 1, то прерывания соответствующего класса разрешены, если в 0, то запрещены. В последнем случае говорят, что они маскированы (их также называют запрещенными или закрытыми ). Однако маскированные прерывания не теряются, потому что сигнал, вызвавший прерывание, сохраняется аппаратурой. Временно задержанное таким способом прерывание называется отложенным . Когда (вследствие того, что значение MASK сброшено) прерывания соответствующего класса вновь разрешаются, сигнал опознается и происходит прерывание.

Маскирование прерываний находится под контролем операционной системы и зависит от значения MASK в слове состояния, которое заранее сохраняется в рабочей области каждого прерывания. Можно запретить все прерывания, установив все биты MASK в нуль. В действительности поступать подобным образом нет необходимости.







2024 © uzbek-seks.ru.