Последната актуализация на този раздел е от 2020 година.

 

§ 5.4  Система за прекъсване – общи разбирания и положения

 

 

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

      Влияние върху хода на изчислителния процес могат да упражнят както вътрешни така и външни фактори. Това е така, защото една компютърна система, възприемана като сложен автомат, не е изолирана от външния за нея свят, напротив, нейното съществуване и функциониране има смисъл единствено заради отношението й към него. Ето защо следва добре да се разбира, че намесата и влиянието върху изчислителния процес, може да се каже даже, управлението му, се постига с външна намеса, ето защо всеки процесор трябва да бъде снабден със средства, чрез които да е възможно да му се влияе. Това, което следва да се подчертае тук е, че процесорът е в състояние да отреагира на такава намеса не в произволен момент, а само в момент, съответстващ на границата между два структурни елемента, т.е. между две машинни команди, тъй като основният алгоритъм за управление на изчислителния процес е командният цикъл. В този смисъл, възможността на процесора за ответна реакция е заложена дълбоко (изначално, първично) в него, чрез условния блок за проверка на заявките за прекъсване (виж определенията, свързани с фигура 5.1.3 и фигура 5.1.4). Освен това, процесорът е снабден и с други средства, за които ще стане дума по-долу.

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

      Каква може да бъде реакцията на процесора, който в даден момент изпълнява дадена програма, на външно, въздействащо му събитие? Следва добре да разбираме, че ако той следва да отреагира, това не би било възможно по друг начин, освен чрез превключването му към друга програма. В смисъла на казаното вече по-горе, говорим, че изчислителният процес, съответстващ на текущата програма, се прекъсва (по външна и не свързана с него причина). В отговор на съответното външно събитие апаратните средства за управление на процесора осъществяват стартиране на друга програма, съответстваща по смисъл на тава събитие. Именно в това съответствие следва да разбираме адекватността на поведението на процесора и компютърната система като цяло. На този етап от поясненията е логично да приемаме прекъсването на текущо изпълняваната програма като временно. С други думи, прекъсването на изпълнението й следва да се осъществи по такъв начин, щото да бъде възможно възстановяване на изпълнението й след отминаване на причинилите го събития и свързаните с тях действия, при това от точката на прекъсването й нататък.

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

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

·         Съдържанието на адресните регистри, съхраняващи базови, косвени и индексни адреси ;

·         Съдържанието на регистрите с общо предназначение, съдържащи междинните резултати ;

·         Съдържанието на регистъра на признаците ;

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

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

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

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

 

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

 

      Концептуалният подход на системите за прекъсване дава отражение върху цялостната архитектура на даден процесор. Същата концепция се прилага при разработване на операционните системи и при разработването на различни приложения, свързани с управлението на реални обекти. В тези последни случаи прекъсванията играят роля на сигнали за синхронизация на изчислителния процес, протичащ в компютърната система, с външните за нея събития. Такова синхронизирано програмно приложение се нарича приложение за работа в реално време.

      Основните функции на системата за прекъсване са:

·         Регистрация на заявките за прекъсване и избор на заявка за прекъсване ;

·         Запомняне на състоянието на прекъсваната програма и автоматичен преход към програма, обслужваща източника на заявката за прекъсване ;

·         Възстановяване на състоянието на прекъснатата програма, ако обслужващата програма вземе решение за това.

      Развитието на процеса на прекъсване може удобно да се представи и изясни във времето, както е показано чрез времедиаграмата на фигура 5.4.1.

 

Фиг. 5.4.1.  Времедиаграма за процеса прекъсване и връщане от прекъсване

 

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

      В момента, в който процесорът вземе решение да обслужи подадената заявка и пристъпи към изпълнение на МППОП (микропрограмна процедура за осъществяване на прекъсването), показана на фигура 5.1.4, тригерът, фиксирал заявката, може да бъде нулиран. Това се прави с цел да се подготви колкото се може по-рано процесорният вход за приемане на нова ЗП. Бързото освобождаване на този вход осигурява възможността за непрекъсната последователна регистрация на ЗП, следващи във времето през малки интервали, т.е. постъпващи с висока честота. Активността на МППОП в описвания процес е изразена на четвъртата абсциса в горната времедиаграма.

      Времевият интервал (Тр), който се формира от момента на поява на ЗП до момента на стартиране на МППОП представлява един от основните технически параметри на системата за прекъсване и се нарича време за реакция на системата. Времето за реакция не е константа. Формира се като сума от няколко възможни заетости на процесора. В най-лошият случай заявката за прекъсване може да се появи малко след като командният цикъл е бил затворен и след проверката за регистрирана ЗП. Така на новата ЗП ще й се наложи да изчака извличането на следващата команда както и нейното изпълнение. В случай, че това е достатъчно дълга команда и с достатъчно продължителна микропрограма, реакцията на процесора ще бъде забавена.

      След като централното управляващо устройство вземе решение да осъществи прекъсване, по същество се стартира МППОП. Действията, които изпълнява тази микропрограмна процедура, се делят грубо на две части – съхранение на текущото състояние на процесора и осъществяване на прехода. Както вече беше казано, текущото състояние трябва да се съхрани, защото така се осигурява възможността за възобновяване изпълнението на прекъснатата програма. Съхраняваната информация попада най-често в така наречения програмен стек. В много елементарни архитектури за целта се използва специален регистър. Съществуват процесори, които дефинират така нареченото бързо прекъсване. В този случай прекъсването се осъществява в регистров прозорец. В много сложните процесорни архитектури с паралелно изпълнение на машинните команди прекъсването е сложен процес. В такива процесори се говори за точно прекъсване, което ние ще разгледаме подробно в следващи раздели.

      Все пак в преобладаващото множество разнообразни процесори програмният стек е основно средство за реализация на прекъсването. Стекът се реализира като LIFO-памет, чийто адресен регистър се нарича стеков указател (SP – Stack Pointer), а запомнящият масив на това запомнящо устройство се реализира като се “арендува” част (област) от основната RAM-памет на системата.

 

Фиг. 5.4.2.  Илюстрация на организацията на програмен стек

 

      Определяне на мястото (началния адрес) и обема на стека е задача на операционната система. Началният адрес на областта, избрана за стека, се нарича дъно на стека. Зареждането (НЗ – начално зареждане, инициализация) на стековия указател с начален адрес е задача отново на операционната система. Това тя прави при зареждане на ново програмно задание. Модификацията на съдържанието на стековия указател с (+1) (инкрементна) или с (-1) (декрементна) променя обема на пълната и съответно на празната област в стека (вижте фигурата по-горе). Програмният стек обикновено е стек винаги готов за запис. Това означава, че във всеки момент, съдържанието на SP сочи първата празна клетка, разположена над пълната област.

      След бързото съхранение на текущото състояние на процесора, управляващата апаратура може да проведе своеобразен диалог с източниците на ЗП. Като за начало процесорът изпраща сигнал, че е приел подадената му заявка, като установи на специален изход активна логическа стойност, обикновено именована "Потвърждение". Този сигнал не е адресиран конкретно, освен това той не е и задължителен. Сигналът се отнася по принцип за всякакви по вид външни за процесора устройства, които могат да бъдат източници на ЗП, давайки им да разберат по този начин какво е неговото състояние. В отговор на сигнала "Потвърждение", управляващата апаратура очаква да получи съответстваща на приетата заявка допълнителна информация. С помощта на тази информация централното управляващо устройство трябва да разбере кой точно е източникът, обезпокоил процесора и да се насочи към онази програма, която е предназначена за неговото обслужване. Така въз основа на допълнителната информация се формира адрес, който се зарежда като ново съдържание на програмния брояч, с което прекъсването може да се счита за реализирано, след което МППОП връща управлението в командния цикъл, така както е показано на фигура 5.1.4. Според командният цикъл, следва извличане на машинна команда и това е първата команда на обслужващата програма. В реални условия, когато заявките за прекъсване са много и различни, всяка една от тях е свързана с подобен отделен и точно определен начален (стартов) адрес на отделна и самостоятелна обслужваща програма. Обикновено тези адреси по характер са косвени и фиксирани (константни) за компютърните системи.

      Временният интервал, в който се изпълняват горе описаните действия, е означен във времедиаграмата по-горе (фигура 5.4.1) с Тпр и се нарича време за преход. Въпреки, че многократно споменахме, читателят добре трябва да разбира, че действията, които се изпълняват до момента, се управляват от ЦУУ, т.е. те са резултат от специалната микропрограма МППОП, стояща в утвърдителния клон на условния преход в командния цикъл (фигура 5.1.4). Със зареждането на програмния брояч завършва преходът към обслужващата програма. За този преход се говори, че се осъществява апаратно. Тъй като микрооперациите в МППОП са едни и същи при всяко прекъсване, може да се твърди, че времето за преход Тпр е константа за един процесор.

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

1.       Съхранение (при нужда) на допълнителна информация за прекъсваната програма и определяне на новото състояние на процесора чрез зареждане на собствените параметри на обслужващата програма ;

2.       Анализиране на състоянието на източника подал ЗП и вземане на решение за конкретни действия ;

3.       Изпълнение на конкретните действия ;

4.       Възстановяване на параметрите на прекъснатата програма ;

5.       Изпълнение на операция "връщане от прекъсване".

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

      Последният, пети етап от действията на обслужващата програма, има самостоятелно значение, поради високата му отговорност. Съвкупността от микрооперации, чрез които се връща управлението на прекъснатата програма, представлява самостоятелна микропрограма на изпълнима операция, т.е. на специална машинна команда, която се нарича "Връщане от прекъсване" (КВП). Тази машинна команда (КВП) има структура на безадресна команда и в типично даваните като пример архитектури на Intel се нарича IRET (Interrupt Return). По същество тя извлича от програмния стек съдържанието на съхранените при прекъсването възли. Последен възстановява съдържанието си програмният брояч. С това действието на тази команда завършва и командният цикъл се затваря. Изпълнението на потребителската програма продължава. Командата КВП може да се отнесе към командите за безусловен преход. Независимо колко богата е командната система на даден процесор, в нея най-често има само една такава команда. Следва добре да се разбира, че командата за връщане от прекъсване е част от обслужващата програма и е последна по ред на изпълнение в тази програма. С нейното изпълнение завършва изпълнението на обслужването и се възстановява изпълнението на прекъснатата програма.

      Времето за изпълнение на микропрограмата на командата за връщане от прекъсване е последният времеви параметър от фигура 5.4.1, който и се нарича време за възстановяванеТв. Този параметър за даден процесор е константен, тъй като се формира от едни и същи действия.

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

      Съвременната компютърна система представлява сложен комплекс от автономни устройства, всяко от които изпълнява своите функции независимо от другите, под управлението на свое местно управляващо устройство. Функционалното устройство се активира (стартира) за работа от централния процесор, който му предава своята команда и всички параметри, които са необходими за нейното изпълнение. Общата съвместна организация за управление е асинхронна. Така след стартиране на функционалното устройство, централният процесор се отключва от него и преминава към обслужване на други устройства или изпълнява други свои функции. Може да се приеме, че централният процесор превключва своето внимание от устройство на устройство и от функция на функция. На какво точно следва да отдели внимание централния процесор във всеки един момент, се определя от текущо изпълняваната програма. Асинхронният принцип на организация е невъзможен без система от диалогови сигнали и изначално предполага възможността за прекъсване на различни нива в системата.

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

 

 

 

Следващият раздел е:

 

5.4.1.  Видове прекъсвания и условия за обслужване