Принцип действия такого способа показан на слайде. Когда программа выдает команду, например, чтения УВВ

Второй способ использует прерывания. Принцип действия такого способа показан на слайде. Когда программа выдает команду, например, чтения УВВ, дальше она занимается «своими делами», а команда чтения поступает специальному контроллеру прерываний, который следит  за готовностью устройства, и посылает сигнал прерывания процессору, когда устройство будет готово. Программа в ответ на сигнал прерывания, считывает данные из регистра данных. То есть в тот момент времени – между командой на чтение и реальной подачей данных на чтение, программа не должна постоянно сканировать готовность устройства, и процессор в это время может выполнять другие команды. Затем по логике действия программы, если нужно снова считать данные с УВВ, посылаем команду, и снова можем выполнять другие команды до сигнала прерывания. Когда в процессор поступает сигнал прерывания, действия процессора следующие – вызывается специальная программа обработчик прерывания (ISR). Например, она может передавать считанные данные с УВВ вашей программе. В конце обработчика прерывания стоит специальная команда возврата iret, в отличии от команды возврата для процедур ret. По команде iretуправление возвращается в то место, из которого вы попали в обработчик прерываний, и выполнение программы продолжается дальше. Теперь запишем определение прерывания. Итак, Прерывание – это внешний сигнал от УВВ, сообщающий, что устройству требуется обработка центральным процессором, по этому сигналу процессор прерывает выполнение текущей программы, и вызывает обработчик прерываний, который выполняет необходимые действия по обработке прерывания, и возвращает управление в прерванную программу. С помощью прерывания УВВ вызывает подпрограмму обработки прерывания. Сигнал прерывания может прервать работу программы в любом месте, то есть на любой команде, между любыми двумя командами. Когда приходит сигнал прерывания, процессор завершает выполнение текущей команды, и выполняется обработка прерывания.

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

  1. Невекторные прерывания. Прерывание в процессор поступают по специальной линии прерываний, которая представляет собой простой провод, то есть если поступило прерывание от какого-то устройства, процессор не знает, от какого именно, поэтому он должен опросить все УВВ, чтобы понять, кто послал прерывание. Для этого у устройств есть специальный бит в регистре состояний, называемый IRQ, который показывает, нужна ли ему обработка в данный момент. Анализируя эти биты всех УВВ, процессор анализирует устройство, которое послало прерывание. Если таких устройств оказалось несколько, то процессор обрабатывает первое из них. Такая схема очень медленная, потому что надо опросить все устройства. Поэтому часто используется другая схема обработки прерываний:
  2. Векторные прерывания.  В этой схеме устройство само идентифицирует себя для процессора, выставляя на шине данных специальный номер, номер прерывания. Таким образом, когда в процессор поступает сигнал прерывания, он может понять, что это было за устройство.
Ссылка на основную публикацию
Adblock detector