7

Я хочу понять разницу между ISR (Interrupt Service Routine) и вызовом функции.Разница между ISR и функциональным вызовом?

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

ISR:

  • асинхронное событие, которое может произойти в любое время во время выполнения Программа

  • Сохраняет ПК, флаги и регистры в стеке и отключает все прерывания и загружает адрес ISR

  • ISR не может иметь аргументы, которые могут быть переданы ему

  • не могут возвращать значения
  • Включает прерывания
  • Вообще малые, как они принимают время какого-либо другого процесса
  • Некоторые из ISR имеют имеют свои собственные стек

Функция:

  • Происходит, когда-либо есть вызов функции

  • Сохраняет ПК и регистры в стеке

  • может иметь аргументы

  • могут возвращать значения

  • Нет ограничения на размер и продолжительность исполнения

Есть ли другая разница, кроме этого? Пожалуйста, дайте мне знать. Я также прочитал о вызове функции из ISR, как это происходит. Пожалуйста, обратите внимание на это.

ответ

1

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

Например, давайте посмотрим на этот MIPS код украшенной с адресами, которые не делают ничего полезного:

4000.  add $1, $2, $3 
4004.  sw $ra, 0($sp) 
4008.  jal subr # function call, sets $ra to 4012 and jumps to 4024 
4012.  lw $ra, 0($sp) 
4016.  jr $ra 
4020. 
4024. subr: sub $2, $1, $3 
4028.  jr $ra 

Этот код может быть handeled от основного процессора: арифметические операции (строки 1, 7) выполняются арифметическим устройством, доступом к памяти (строки 2, 4) контроллером памяти, а переходы (строки 3, 5, 8) выполняются также основным процессором. (Фактический адрес jal установлен во время связывания объектного файла.)

Это для вызовов функций.В любое время определяется, где код прямо сейчас и какой код выполняется в следующий момент времени (т. Е. Когда счетчик программ увеличивается: ПК + = 4).

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

Подумайте, процессор находится в вычислении выше, но в то же время вы хотите сохранить количество нажатий клавиш по адресу keys. Затем вы пишете программка, начиная с адреса 0x80000180 (это определяется как адрес Exeption обработчика в MIPS):

lw $at, keys 
addi $at, $at, 1 
sw $at, keys 
eret 

Теперь, что происходит при нажатии клавиши?

  1. сопроцессора получает в курсе нажатий клавиш
  2. В настоящее время ПК основного PROCESOR сохраняется
  3. ПК основного процессора устанавливается на 0x80000180, код прерывания исполняется
  4. На eret в ПК установлен на ПК основного процессора до того, как произошло прерывание.
  5. Выполнение основной прогаммы продолжается.

Здесь есть переход от нормального выполнения, чтобы прервать обработку между шагами 2 и 3 и обратно от 4 до 5.

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

+0

К сожалению, я не могу предложить онлайн ресурсы, что, так как это зависит от письменного сценария для компьютерных систем;) – contradictioned

+0

Так же это означает, что для микропроцессор типа 8051 или микроконтроллер 8091, который не имеет сопроцессора, будет иметь прерывания и вызовы функций как одинаковые? Пожалуйста, помогите мне, я действительно смущен –

+1

Я не эксперт по микроконтроллерам, но на этом сайте представлена ​​блок-схема 8051: http://aninditadhikary.wordpress.com/tag/intel-8051/, где вы можете увидеть «Контроль прерываний», который расположен рядом с процессором, аналогично сопроцессору mips. – contradictioned

2

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

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

Часто обработчик прерываний выполняет прямое прерывание, поэтому позволяет выполнить прерванный код для продолжения каких-либо дальнейших помех. На более простых контроллерах, таких как yopur 8051, которые часто запускают встроенный код без ОС compex, это единственный доступный курс. С упреждающей многопоточной ОС обработчик прерывания имеет дополнительную возможность выполнения своего прерывания-возврата через код ОС и, таким образом, приводит к запуску планировщика. Это позволяет обработчикам прерываний создавать потоки, ожидающие завершения прерывания и, возможно, работающие (и, возможно, вытеснение потока, который был первоначально прерван). Это позволяет таким системам иметь хорошую производительность ввода-вывода без каких-либо опросов.

Аппаратные источники прерывания - это периферийные устройства, встроенные в процессорную микросхему - сетевые контроллеры, контроллеры дисков, контроллеры дисплея, контроллеры DMA, контроллеры USB, контроллеры intercore-comms (на процессорах с несколькими ядрами), таймеры и т. Д. Или прерывания -request pin/s на пакете можно использовать для генерации прерывания от внешнего аппаратного источника (возможно, кнопочной панели, клавиатуры, клавиатуры или аппаратного обеспечения сенсорного экрана).

2

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

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

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

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

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

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

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

1

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

Единственное дополнение, которое я бы сделал, это. Контекст регистров, хранящийся в вызове функции, определяется Конвенцией о вызове процедур для архитектуры ЦП. Обычно это означает, что вызывающий пользователь сохраняет что-то в стеке, и вызывающий абонент спасает некоторые вещи и в значительной степени статичный. Исключение: IA64, который имеет динамическое окно регистра, сохраняет/восстанавливает.

В ISR сохраняется единственный регистр, который будет использоваться в ISR. Если используется один регистр, сохраняется только этот регистр.

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

0

Функциональный вызов обычно сгенерирован программой.

Прерывание обычно генерируется аппаратным обеспечением.

например: Если вы программируете на C, вы вызываете функцию, выполняя функцию. Существует основная функция и подфункции. Субфункции программируются программистом.

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

Лучший способ подвести итоги? 1. Функции создаются программистами. 2. перебивает физически разработаны в аппаратные средства и используются другими аппаратными https://www.youtube.com/SaqibJaved