Прекъсване в компютърните системи: дефиниция, причини и примери
Научете какво е прекъсване в компютърните системи: дефиниция, основни причини, примери и практични сценарии за бързо реагиране на хардуерни и софтуерни събития.
Прекъсване е, когато микропроцесорът прави нещо, което не му е казано да прави, поради неща, които се случват извън това, което програмата трябва да прави. Прекъсванията се случват най-често, защото процесорът получава сигнал от хардуера, но те могат да дойдат и от софтуер, който работи заедно с програмата. Сред многото неща, които могат да предизвикат прекъсвания, са натискането на клавиши на клавиатурата, задействането на вградения таймер, прехвърлянето на данни или всяко друго събитие, което изисква незабавно действие от страна на процесора. Прекъсванията могат да се случат по всяко време, докато процесорът изпълнява дадена програма, без значение къде в изходния код на програмата се намират.
Какво представляват прекъсванията и защо са нужни
Прекъсванията позволяват на компютърната система да реагира незабавно на външни и вътрешни събития, без да е необходимо програмата постоянно да проверява (polling) за тях. Това е по-ефективен и енергийно-икономичен начин за управление на периферия, таймери и критични грешки.
Видове прекъсвания
- Хардуерни прекъсвания — генерирани от външни устройства (например клавиатура, мрежова карта, диск), които информират процесора за готовност или събитие.
- Софтуерни прекъсвания — породени от програми (например системни повиквания или преднамерени софтуерни сигнали).
- Исключения (exceptions) — синхронни прекъсвания, причинени от изпълнение на инструкция (например деление на нула, странична грешка на страница — page fault, нелегална инструкция).
- Немаскируеми прекъсвания (NMI) — критични сигнали, които не могат да бъдат игнорирани и изискват незабавна реакция (напр. хардуерен дефект).
Как се обработват прекъсванията (основен поток)
- Процесорът получава сигнал и завършва текущата инструкция.
- Автоматично се запазва състоянието на процесора (регистри, програмен брояч и т.н.).
- Процесорът отива на адреса на подходящата рутинa за прекъсване (interrupt service routine — ISR), който се намира чрез таблица на векторите или контролер за прекъсвания.
- ISR извършва нужните действия: признава/занулява прекъсването в устройството, прочита/записва данни, поставя по-нататъшна задача в опашка за фонова обработка.
- Връща се запазеното състояние и се изпълнява възобновяването на прекъснатата програма (return from interrupt).
Основни концепции и термини
- Вектор на прекъсването — таблица, която свързва всеки тип прекъсване с неговата обработваща рутина.
- Контролер за прекъсвания — хардуерен компонент (включително APIC/IOAPIC в съвременните системи), който управлява приоритети и маршрутизира сигнали към процесора.
- Маскиране — способност да се забавя или игнорира дадено прекъсване (полезно за кратки критични секции).
- Дълбочина и приоритети — системите поддържат приоритети и/или вгнездяване (nested interrupts), така че по-критични прекъсвания да имат предимство.
Примери
- Натискане на клавиш — хардуерно прекъсване от клавиатурата, което позволява на операционната система да прочете символа без постоянно опрашване.
- Таймер (tick) — периодично прекъсване, използвано за планировката на задачи и измерване на времето.
- Край на I/O операция — устройство като диск или мрежова карта изпраща сигнал, когато прехвърлянето на данни е приключило.
- Системно повикване — софтуерно прекъсване, чрез което потребителски процес иска услуги от ядрото.
- Page fault или деление на нула — примери за синхронни изключения, водещи до специализирано обработване или прекъсване на програмата.
Практически съображения
- ISR трябва да бъде възможно най-кратък — тежката работа да се отлага към фонова задача (bottom half, work queue), за да се намали латентността.
- Прекъсванията във вградени и реално-времеви системи изискват детерминизъм и ниска латентност; чести прекъсвания или „interrupt storm“ могат да нарушат производителността.
- Техники като дебаунсинг (при хардуерни бутони) и coalescing (обединяване на много събития) намаляват броя на прекъсванията и спестяват ресурси.
Кратко обобщение
Прекъсванията са ключов механизъм за асинхронна комуникация между хардуер, софтуер и процесора. Те правят системите гъвкави и реактивни, но изискват внимателно управление на приоритети, кратки обработващи рутини и стратегии за намаляване на нежеланите ефекти върху производителността.
Тази диаграма показва какво се случва, когато се извика прекъсване
Как работят прекъсванията
Хардуерното или софтуерното повикване за прекъсване (известно като заявка за прекъсване или IRQ) се поема от "обработчик на прекъсвания" или "рутинна програма за обслужване на прекъсвания" (ISR) в процесора. Тя поставя това, което прави в момента, върху стека и след това следва определени инструкции, които изпълняват дадена задача от името на системата, която не е задължително да бъде част от програмата, която изпълнява. След като приключи с изпълнението на инструкциите, ISR връща обратно това, което е поставил на стека, и продължава с това, което е правил, преди да се случи прекъсването.
Много контролери за прекъсвания от съвременните процесори използват вектор на прекъсване, за да сортират прекъсванията въз основа на това откъде са дошли, наред с други начини. Векторът обикновено съдържа кода, който трябва да се изпълни, когато прекъсването се случи. Обикновено ISR отговарят за справянето или "обслужването" на прекъсването, заедно с поддържането на самия него в работно състояние.
Използване на прекъсванията
- Задействане на задачи на редовни интервали
- Обслужване на външно устройство, което може да се случи по всяко време
- Премахване на необходимостта от синхронно допитване
- задействане на операционна система (ОС) за предприемане на действие
Въпроси и отговори
В: Какво е прекъсване?
О: Прекъсването е действие, предприето от микропроцесора, което не е част от изпълняваната програма поради външни събития.
В: Кое е причината прекъсванията да се появяват най-често в един процесор?
О: Прекъсванията се появяват най-често в процесора поради получаването на сигнали от хардуера.
В: Могат ли прекъсванията да бъдат причинени от софтуер?
О: Да, прекъсванията могат да бъдат причинени и от софтуер, който работи паралелно с изпълняваната програма.
В: Избройте няколко примера за събития, които могат да предизвикат прекъсване.
О: Примери за събития, които могат да предизвикат прекъсване, са натискане на клавиши на клавиатурата, задействане на таймер и прехвърляне на данни.
В: Зависи ли прекъсването от това къде се изпълнява програмата?
О: Не, прекъсвания могат да възникнат по всяко време на изпълнението на програмата, независимо от това къде се намира програмата в изходния си код.
В: Прекъсването желано събитие ли е за микропроцесора?
О: Прекъсванията обикновено са нежелани събития за микропроцесора, тъй като прекъсват изпълнението на програмата и изискват незабавно внимание.
В: Как реагира микропроцесорът на прекъсване?
О: Микропроцесорът временно спира изпълняваната програма и изпълнява процедура за обслужване на прекъсването (ISR), за да се справи с прекъсването, преди да се върне към изпълняваната програма.
обискирам