Выполнение программы и прерывания - PullRequest
1 голос
/ 07 декабря 2011

Хотелось бы узнать, как программа во время ее выполнения может видеть и использовать прерывания. Я читал об уровне прерываний, уровне фронта, гибридном типе и типе сообщения, а также о том, что устройство посылает импульс для подачи сигнала на прерывания, но как программа видит эти прерывания? Или прерывание вообще видно программе? Спасибо за любую помощь с этим

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

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

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

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

1 голос
/ 07 декабря 2011

Зависит от ОС, если есть. На универсальной «настольной» ОС, с которой мы больше всего знакомы, программам пользовательского режима никогда не приходится напрямую обрабатывать аппаратные прерывания. Прерывания от периферийных устройств, таких как клавиатуры, мыши, диски, сетевые карты и т. Д. Обрабатываются драйверами. Обычно поток в «программе» выполняет API-вызов запроса на чтение / запись, и этот вызов не возвращается до тех пор, пока запрос не будет завершен - это самое близкое, что программа получает к оборудованию. В ядре вызывающий поток блокируется до тех пор, пока адресированный драйвер не сообщит, что запрошенный ввод-вывод завершен.

...