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

 

5.4.3  Проблемът избор на заявка за прекъсване

 

 

А)  Същност на проблема избор

      Дизюнктивно обединените заявки за прекъсване (вижте фигура 5.4.1.4) формират един общ сигнал за прекъсване (ОСП), който се подава на входа INT на процесора. Сигналът ОСП по същество оповестява процесора само за наличие на заявки за прекъсване. Без допълнителни средства и действия от страна на процесора обаче, последният не ще може да определи кой точно е източникът на заявка или пък да избере една от тях, ако те са много.

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

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

      Ако източниците на заявки за прекъсване са подредени според степента им на значимост, то това подреждане следва да се пренесе и от към страната на процесора. От гледна точка на конструктора на процесора обаче бъдещото външно обкръжение е напълно неизвестно – то зависи от всяко индивидуално приложение на процесора. Ето защо пренасянето на степента на значимост на евентуалните източници на ЗП в процесора не е възможно да се осъществи непосредствено. Така конструкторът е принуден да извърши предварителна подготовка, или казано с други думи, да заложи в системата за прекъсване на процесора възможността за свързване с външните обекти по начин, който ще позволи тяхното правилно подреждане в неговото полезрение. Така естествено се стига до решението входовете за ЗП, изградени към системата за прекъсване, да не са абсолютно еднакви за процесора, а да притежават своя собствена характеристика, при това в същия смисъл – степен на значимост. Така процесорът би могъл да възприема някои от входовете си като “парадни”, а други като “странични”. Вероятно читателят разбира, че идеята е значимите ЗП да постъпват през парадните входове, а по-незначимите – през страничните. Така комутирането на източниците на ЗП към процесора, чрез неговата система за прекъсване, ще бъде напълно определено.

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

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

Б)  Системи за реализация на избора

Програмен полинг

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

      Микропрограмната процедура за осъществяване на прекъсването в подобни архитектури е крайно опростена. При решение за обслужване на ЗП МППОП съхранява текущото състояние на процесора и зарежда в програмния брояч фиксиран адрес. Логиката е подобна на представената на фигура 5.4.1.3. Така, прекъснал текущата програма, процесорът стартира винаги една и съща програма – програмата "Полинг". Тази програма трябва по чисто програмен път:

1.       Да обходи всички източници на ЗП ;

2.       Да избере най-приоритетния от тях ;

3.       И да стартира съответствуващата му обслужваща програма.

      Програмата "Полинг" може да се намира във фиксирана област от паметта, с известен начален адрес, който МППОП зарежда в програмния брояч, след приемане на сигнала ОСП (вижте логиката за прекъсване на фигура 5.4.1.2). По-голяма гъвкавост за програмиста обаче може да се осигури, ако фиксираният адрес не се зарежда в програмния брояч, а се извежда към паметта като косвен адрес, от който се извлича стартовия адрес на програмата “Полинг”. Това осигурява преместваемост на програмата по начина, който е показан на фигура 5.4.1.3. Общият алгоритъм, който реализира тази програма е показан по-долу:

 

Фиг. 5.4.3.1.  Алгоритъм на програма “Полинг”

 

      След стартиране на програмата “Полинг” започва последователна проверка на състоянието на устройствата, с цел установяване на източника подал ЗП. Веднага трябва да се отбележи, че редът за проверка, заложен в програмата всъщност изразява въведения приоритет, т.е. той е изразен чрез подреждането на условните преходи. Приоритетът може лесно да се променя чрез промяна на реда за проверка. Възможни са две стратегии в програмата "Полинг", а именно:

1.         Преход към обслужване на първата срещната ЗП по реда за проверка, с последващо връщане към потребителската програма. Това са изходите, означени с №1 в блок-схемата. При тази стратегия, от блок-схемата се вижда, че след всяко отделно обслужване и повторно влизане в програмата “Полинг”, проверката започва винаги от устройствата с висок приоритет. Логиката на тази стратегия отдава подчертано постоянно внимание на устройствата с висок приоритет. Устройствата с по-нисък приоритет се проверяват само ако няма заявки от тези с висок приоритет. Основният недостатък на тази стратегия се изразява в това, че при интензивна работа и висока честота на заявките от страна на приоритетните устройства, тези с нисък приоритет са обречени да остават дълго време в режим на очакване и практически стигат до загуба на внимание от страна на процесора.

2.         След обслужване на избраната (най-приоритетна) ЗП, се проверяват и при необходимост се обслужват последователно всички следващи ЗП с по-нисък приоритет. Така от програмата "Полинг" се излиза след пълна проверка на включените според списъчния състав външни устройства. Тази стратегия е изразена в блок-схемата по-горе, чрез изходите, означени с №2. Недостатъкът на тази стратегия се изразява в това, че при голям списъчен състав, последователното обслужване на заявките, включително до тази с най-нисък приоритет, ще доведе до голям интервал на очакване на внимание за бързите и високоприоритетни устройства. В повечето случаи това води до загуба на данни.

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

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

Многотактен апаратен полинг

      Ето защо алтернативата на програмния полинг е апаратният полинг. Апаратният полинг също реализира последователно обхождане на външните устройства, но без да ангажира за това процесора с действия по въвеждане на команди и тяхното изпълнение, което означава, че той ще функционира значително по-бързо. При този вариант, процесорът и всички външни устройства се свързват така, че управляващата апаратура да е в състояние да извърши автоматична проверка и избор с помощта на чисто апаратни средства. Съществуват два вида реализации на апаратния полинг - многотактен и еднотактен. И в двата случая, при изпълнение на МППОП (вижте фигура 5.4.1.2), адресът за преход е функция от някаква допълнително въвеждана в процесора информация. По-долу, на фигура 5.4.3.2, е показана примерна принципна схема за многотактен полинг.

 

Фиг. 5.4.3.2.  Схема за многотактен апаратен полинг

 

      Показаната схема работи под управлението на процесора по следния начин: когато завърши микропрограмата на текущата машинна команда и се затвори командния цикъл, следва проверката за постъпили заявки за прекъсване (вижте фигура 5.4.1.2). За тази цел управляващото устройство изпраща към схемата за апаратен полинг разрешаващия (потвърждаващия) сигнал (POLL=1). Този сигнал отваря тривходовата схема И разрешава преминаването през нея на серия импулси от тактовия генератор ТГ към входа на брояча Бр.ТИ. Формираните при това в брояча кодови комбинации, започвайки от 0 до k, се дешифрират от пълния дешифратор ДШ, на чиито изходи (0,1,2,...,k) се наблюдава ефектът на "бягащата единица". Бягащата единица "опипва" последователно изходите на тригерите на регистъра на заявките за прекъсване Рг.ЗП, като отваря схемите И, започвайки от тригер Т0 надолу, към тригер Тk.

      В случай, че в тези тригери има фиксирани ЗП, то първата срещната по хода на проверките ще премине през схемата ИЛИ като логическа единица и постъпвайки на входа S на тригер Тосп, ще го установи в единично състояние. Правият изход на този тригер подава сигнала ОСП до входа INT на процесора, с което го известява, че по време на процедурата полинг е установено, че в Рг.ЗП са фиксирани ЗП.

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

n = log2(k+1) .

      Ако процесорът приеме сигнала ОСП, той сваля сигнала POLL (POLL:=0) и прочита съдържанието на брояча Бр.ТИ, с което въвежда кода на избраната от схемата ЗП. Чрез този код може да се формира адресът за преход към обслужващата програма, с което МППОП може да завърши.

      С приемането на кода на ЗП и преди стартирането на обслужващата програма, МППОП трябва да изпрати управляващия сигнал "Clear", който нулира само фиксиращия тригер на избраната заявка в регистъра Рг.ЗП, брояча на тактовите импулси Бр.ТИ и тригера за формиране на сигнала ОСП. В това състояние схемата може да приема ЗП до следващия сигнал POLL. При следващото обхождана, проверката за постъпили ЗП започва отново от най-приоритетната, тъй като брояча е с начална стойност нула. Тъй като хода на бягащата единица зависи от кодовите комбинации на брояча, следва извода, че приоритетът се определя от вида на брояча. Ако той е двоичен, най-висок приоритет ще има онази заявка, на която съответствува комбинацията "00...0", а най-нисък приоритет ще има онази, на която съответствува комбинацията "11...1". Изменяйки режима на броене е възможна програмна промяна на приоритета на входовете за ЗП. А ако в допълнение се реализира и възможността за паралелно зареждане на брояча с начална стойност, то възможностите за управление на системата за прекъсване от страна на програмиста значително нарастват.

      Особено внимание за представената схема представлява случаят, при който няма постъпили заявки. Кодовите комбинации в брояча в този случай ще се изредят последователно от първата до последната. За да се преустанови многократното повторение на процеса “опипване”, след подаване на сигнала POLL, процесорът трябва да следи за появата на последната кодова комбинация. За тази цел k-тия изход на дешифратора формира сигнала КРАЙ. От тук следва, че снемането на сигнала POLL става по единичната стойност на дизюнкцията (ОСП)È(КРАЙ). Този случай е показателен за недостатъка на последователното обхождане - твърде бавното реализиране на проверката. Този недостатък е принципен и не може да бъде отстранен, но може да бъде компенсиран с подходяща схема, каквато е еднотактната.

Еднотактен апаратен полинг

      Еднотактната схема за апаратен полинг е показана на фигура 5.4.3.3. В тази схема всички заявки за прекъсване, освен че се обединяват чрез схема ИЛИ, като по този начин формират сигнала ОСП, се подават още в една комбинационна схема – схема за отделяне на най-лявата единица. Това e онази част от последователно включените логически елементи И, през които преминава линията INT_ACN.

      В схемата е прието, че най-приоритетен за процесора е най-левият вход, а с най-нисък приоритет е най-десният вход, затова при реализация на избора споменахме най-лявата единица, т.е. най-лявата заявка. Схемата за отделяне на най-лявата единица реализира своята функция след като процесорът потвърди чрез сигнала INT_ACK, че е приел сигнала ОСП. Сигналът за потвърждение се появява като активна единица, която се разпространява отляво надясно, отваряйки последователно срещаните логически елементи И, до срещане на първата единица, излизаща от регистъра за фиксиране на заявките Рг.ЗП.

      Всяка фиксирана в съответния тригер заявка, “мислейки се” за най-приоритетна, със своята инверсна стойност (вижте фиксиращите тригери) блокира с помощта на логически елемент И по-нататъшното разпространение надясно на сигнала потвърждение. Това означава, че сигналът потвърждение няма да може да се разпространи по-надясно след първата срещната фиксирана заявка. Тази именно заявка се счита за избрана. С други думи, изборът протича в съответствие с логиката “първата срещната”.

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

 

Фиг. 5.4.3.3.  Схема за еднотактен апаратен полинг

 

      За прочитане на кода на заявката върху изхода на шифратора се формира сигналът ОЕ (Output Enable). След приемане на кода на избраната за обслужване заявка се формира управляващият импулс “Clear”, който нулира фиксиращия тригер само на избраната заявка. Това се постига чрез конюнкцията му със съответните входни за шифратора стойности, означени в тоя смисъл, с името “Нулиране на заявката” – НЗ0, НЗ1, НЗ2 и т.н. до НЗk. Входовете R и S на тригерите в регистъра на заявките свързват конюнктивно сигналите съответно:

(НЗi) Ç (Clear) = R    и    (ЗПi) Ç (Блокировка) = S.

      Сигналът за потвърждение INT_CAN, който издава процесорът, се използва в схемата за избор за блокиране на възможността за фиксиране на нови заявки по време на избора, т.е. по време на неговото разпространение в схемата за избор.

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

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

 

 

 

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

 

5.4.3.1.  Хардуерна реализация на стратегии за обслужване на опашки