logo

Разлика между ISR и повикване на функция

В тази статия ще научите за разликата между ISR и извикване на функция , но преди да обсъдите разликите, трябва да знаете накратко за ISR и извикването на функция.

java примерни програми

Какво е ISR?

Рутинна услуга за прекъсване (ISR) е софтуерна рутина, която хардуерът извиква в отговор на прекъсване. ISR изследва прекъсване, определя как да се справи с него, изпълнява го и връща логическа стойност на прекъсването. Ако не е необходима допълнителна обработка, ISR уведомява ядрото с върната стойност. ISR трябва да се изпълнява много бързо, за да се избегне забавянето на работата на устройството и работата на всички ISR с по-нисък приоритет.

Въпреки че ISR може да премести данни от регистър на процесора или хардуерен порт в буфер на паметта, като цяло той разчита на специална нишка за прекъсване (или задача), наречена нишка за услуга за прекъсване (IST), за извършване на по-голямата част от необходимата обработка. Ако е необходима допълнителна обработка, ISR връща стойност за логическо прекъсване на ядрото. След това преобразува номер на физическо прекъсване към стойност на логическо прекъсване.

Механизъм за обработка на прекъсвания

По-долу е механизмът за обработка на прекъсванията в следните стъпки, като например:

  • Прекъсването е състояние, което кара процесора да спре текущата програма и да изпълни ISR. ISR е специално написана програма за обслужване на състоянието, което е причинило прекъсването.
  • След като бъде обслужено прекъсване, процесорът се връща към основната програма, точно при следващата инструкция, откъдето е тръгнал.
  • При пренос на данни, управляван от прекъсване, когато I/O устройството е готово за прехвърляне на данни, то ще прекъсне процесора. В ISR процесорът ще извърши прехвърлянето на данни.
  • Този метод е по-добър от запитването, защото процесорът не трябва да губи време в проверка на състоянието на I/O устройството. Клавиатурата е добър пример за I/O достъп, управляван от прекъсване.
  • Вместо да проверява процесора, клавиатурата трябва да прекъсва процесора при натискане на клавиш. Така няма да се губи време в многократна проверка на клавиатурата, когато потребителят изобщо не пише.
  • I/O устройството иска прекъсване, като изпраща $overline{INTR}$ сигнал към процесора.
  • Всеки път, когато процесорът получи $overline{INTR}$ сигнал, той завършва изпълнението на текущата инструкция и след това изпълнява ISR. Когато процесорът е готов, той изпраща сигнал за потвърждение през ДОКАТО линия.
  • ISR се изпълнява и процесорът се връща към основната програма.
  • I/O устройствата изключват $overline{INTR}$ сигнал след изпълнение.
Разлика между ISR и повикване на функция

Например: В примера по-долу I/O трансфер чрез I/O, управляван от прекъсване.

  • Ако I/O устройство, което иска да извърши трансфер на данни с процесора, трябва да прекъсне процесора.
  • Прекъсването е състояние, което кара процесора да изпълни рутинна услуга за прекъсване.
  • В ISR процесорът ще извърши трансфер на данни с I/O устройството.

В този пример прекъснете заявката, като натиснете клавиша на клавиатурата,

  • Вместо процесорът да проверява дали е натиснат клавиш, клавиатурата прекъсва процесора при натискане на клавиш.
  • В ISR на клавиатурата, която е част от софтуера на драйвера на клавиатурата, процесорът ще прочете данните от клавиатурата.
Разлика между ISR и повикване на функция

Предимства на ISR

По-долу са следните предимства на ISR, като например:

  • Асинхронните събития на ISR могат да възникнат по всяко време по време на изпълнението на програмата.
  • ISR запазва компютъра, флаговете и се регистрира в стека, забранява всички прекъсвания и зарежда адреса на ISR.
  • ISR не може да има аргументи, които могат да му бъдат предадени.
  • ISR не може да върне стойности.
  • ISR разрешава прекъсванията.
  • Като цяло ISR е малък, тъй като отнема време на друг процес.
  • Някои от ISR имат собствен стек.

Какво е извикване на функция?

Извикването на функция се нарича още извикване на подпрограма. Подпрограмата е набор от инструкции, необходими многократно на програмата. Това е част от по-голяма програма, която отговаря за изпълнението на конкретна задача. По-голямата програма може да изпълни голямо натоварване и подпрограмата може да изпълнява просто проста задача, която също е независима от оставащото програмно кодиране.

Една функция е кодирана по такъв начин, че да може да бъде извикана многократно и от различни места (дори от други функции). Когато се извика функция, процесорът може да отиде до мястото, където се намира кодът на функцията, и да изпълни инструкциите на функцията една по една. След завършване на функциите, процесорът ще се върне точно там, където е спрял и ще продължи изпълнението, започвайки от следващата инструкция.

Функциите са чудесен инструмент за повторно използване на код. Много съвременни езици за програмиране поддържат функции. Колекция от функции се нарича a библиотека . Библиотеките често се използват като средство за споделяне и търгуване на софтуер. В някои случаи цялата програма може да бъде последователност от подпрограми.

В случай на процесор 8086, подпрограмата се извиква от a ОБАДЕТЕ СЕ инструкция и управлението се връща от a ДЯСНО инструкция. Намалява размера на програмата.

мрежов слой в компютърните мрежи

Разлика между ISR и повикване на функция

Функцията трябва да бъде изрично извикана и е част от същия контекст и нишка на изпълнение като нейния извикващ. Хардуерният ISR не се извиква изрично, а по-скоро се извиква от някакво външно събитие. Контекстът на текущия поток се запазва автоматично, когато се извика прекъсване преди превключване на контекста към ISR.

В замяна на това се случва обратното превключване на контекста, което възстановява състоянието на процесора преди прекъсването, така че изпълнението да продължи от точката на прекъсване. По-долу са още някои разлики между ISR и извикване на функция.

ISR Извикване на функция
Прекъсването обикновено се инициира от вътрешен или външен сигнален микропроцесор, а не от изпълнение на инструкции. ISR се изпълнява след съхраняване на текущия статус на програмата в стека.
ISR изпълнява различни задачи в зависимост от прекъснато устройство или инструкции, написани от програмист.
Извикването на функцията се извиква чрез изпълнение на инструкции, които изпълняват специфичните задачи и намаляват размера на програмата.
Хардуерът определя адреса на ISR.
ISR адресът е записан в векторната таблица на прекъсванията и ISR адресът за всяко прекъсване е фиксиран.
Адресът на подпрограмата е написан вътре в инструкцията, която е написана вътре в основния програмен код.
ISR се използва за всички задачи с общо предназначение. Извикванията на функции се правят за специфични за програмата задачи.
Когато възникне прекъсване по време на изпълнение на текуща програма, следователно, след изпълнение на текущата инструкция, процесорът изпълнява ISR. След изпълнението на ISR, процесорът трябва да възобнови програмата точно както преди прекъсването.
За тази цел се съхраняват съдържанието на компютъра, µP регистрите и някои условия за състояние. Съвкупността от всички битови състояния на състоянието в микропроцесор се нарича PSW (дума за състоянието на програмата).
  • По време на цикъла на прекъсване, съдържанието на PC и PSW се изтласква в стека. След това адресът на разклонението за конкретното прекъсване се предава на компютъра и нов PSW се зарежда в регистъра на състоянието.
  • Последната инструкция в ISR е връщане от прекъсната инструкция. Когато тази инструкция се изпълни, старият PSW и адресът за връщане се изваждат от стека.
Тук само компютър се съхранява в стека, за да получи адреса на следващата инструкция в главната програма.
Подпрограмата трябва да има достъп до данни от извикващата подпрограма и да връща резултати към тази подпрограма. Поради това се извършват параметри на подпрограмата и свързване на данни.
Това може да стане чрез
  • AC регистърът може да се използва за единичен входен параметър и единичен изходен параметър. В компютри с множество процесорни регистри по този начин могат да се предават повече параметри.
  • Друг начин за предаване на данни към подпрограма е чрез паметта.