Prezența unui semnal de întrerupere nu trebuie să întrerupă programul de funcționare. Procesorul are capacități de protecție de întrerupere: dezactivarea sistemului de întrerupere sau mascarea (dezactivarea) semnalelor individuale de întrerupere. Gestiunea de software a acestor facilități permite sistemului de operare să regleze procesarea semnalelor de întrerupere: procesează-le imediat după sosire, amâna procesarea pentru o perioadă sau ignoră complet. În mod obișnuit, operația de întrerupere se efectuează după terminarea comenzii actuale. Deoarece semnalele de întrerupere apar în momente arbitrare, la momentul primirii următoarei întreruperi, pot exista mai multe semnale de întrerupere, care pot fi procesate numai secvențial. Pentru a procesa semnalele de întrerupere într-o ordine rezonabilă, acestea sunt atribuite priorități.
Toate sursele de întrerupere sunt împărțite în clase și fiecare clasă este atribuită nivelului de prioritate al cererii de întrerupere. Un semnal cu o prioritate mai mare este procesat în primul rând, procesarea semnalelor rămase este amânată.
Ordonarea în ordine a cererilor de întrerupere, împreună cu schemele de procesare prioritară, poate fi efectuată de un mecanism de mascare a interogărilor. Controlul software al registrelor speciale de mască - semnale de întrerupere a mascării, indiferent de nivelul de prioritate - permite implementarea diferitelor discipline de întreținere:
§ cu priorități relative. și anume Serviciul nu este întrerupt chiar dacă cererile sunt primite cu priorități mai mari. Numai după terminarea service-ului acestei solicitări este o nouă solicitare cu cea mai mare prioritate de întreținere. Pentru a organiza o astfel de disciplină, este necesar să mascați (interzice) toate celelalte semnale de întrerupere din programul de întreținere al acestei solicitări sau pur și simplu să dezactivați sistemul de întrerupere;
§ cu priorități absolute - întreruperea cu cea mai mare prioritate este întotdeauna întreținută. Pentru a implementa acest mod, este necesar să se ascundă toate cererile cu o prioritate mai mică în timpul procesării întreruperilor. Este posibilă o întrerupere pe mai multe niveluri, i. E. întrerupe programele de manipulare a întreruperii. Numărul de nivele de întrerupere în acest mod variază și depinde de prioritatea solicitării. Dacă procesorul funcționează în acest fel, atunci într-unul din registrele sale interne suportă o variabilă care fixează nivelul de prioritate al întreruperii întreținute.
§ pe baza stiva (conform disciplinei LCFS - ultimul venit primul servit) - cererile cu o prioritate mai mică pot întrerupe procesarea unei întreruperi cu o prioritate mai mare. Pentru a implementa o astfel de disciplină, nu este nevoie să mascați semnalul de întrerupere și să nu opriți sistemul de întrerupere.
Rețineți că pentru implementarea corectă a ultimelor două discipline, trebuie să asigurați o mascare completă a sistemului de întrerupere în etapele 1-4 și 6-7, pentru a nu pierde solicitarea și pentru a o deservi corespunzător. În acest caz, o întrerupere pe mai multe nivele ar trebui să apară la etapa efectivă de procesare a întreruperii și nu în stadiul de tranziție de la un proces la altul.
Dispecerarea întreruperilor este o funcție importantă a sistemului de operare, care este implementată în toate sistemele de operare multiprogram. Puteți observa că, în general, în sistemul de operare este implementat un mecanism de planificare a muncii pe două niveluri. Nivelul superior de programare este realizat de dispecerul de întrerupere, care distribuie timpul procesorului între fluxul de întreruperi de intrare de diferite tipuri. Timpul rămas al procesorului este alocat de un alt dispecer, managerul de fir, pe baza diferitelor discipline care vor fi discutate mai jos.
După cum am văzut în schema considerată mai devreme, în procesarea întreruperilor, putem distinge în mod condiționat trei etape. În sistemul de multiprogramare, acești pași vor părea ușor diferiți. Mai jos este o diagramă care ilustrează aceste diferențe.
În prima etapă, atunci când apare o solicitare de întrerupere, identificarea semnalului se realizează printr-un modul special al programului de sistem numit supervizor (sau manager de întrerupere). Dezactivează pe scurt toate întreruperile, salvează contextul procesului întrerupt și determină cauza întreruperii.
După aceea, controlerul compară prioritatea atribuită acestei surse de întrerupere cu prioritatea curentă a fluxului de comandă executat de procesor. În acest moment, procesorul poate executa deja instrucțiunile unui alt handler de întrerupere, care are și o prioritate. În funcție de prioritatea noii solicitări, manipulatorul său este fie plasat în coada de manipulare, fie (dacă prioritatea sa este mai mare) începe să lucreze și manipulatorul executat anterior este suspendat și plasat în coada de așteptare (a doua etapă).
Notă. Funcția de tratare a întreruperii (indiferent de prioritatea acesteia) are întotdeauna prioritate față de firul executat în ordinea normală determinată de programatorul de fire.
După executarea programului de procesare a întreruperii, comanda este din nou trimisă supraveghetorului (a treia etapă), de data aceasta deja în modulul care este responsabil pentru programarea sarcinilor. Și deja managerul de sarcini, în conformitate cu modul adoptat de alocare a timpului de procesor, va restabili contextul sarcinii pe care procesatorul va decide să o aloce.
1. Ce este o întrerupere? Când a fost pus în aplicare și în ce scop?
2. Care sunt etapele mecanismului de manipulare a întreruperii?
3. Este posibil să dezactivați toate întreruperile în timpul funcționării dispozitivului de întrerupere? De ce?
4. Ce tip de întrerupere este întreruperea tastaturii? Întreruperi temporale? Apariția divizării la zero în cursul programului? Accesați pagina interzisă din memoria ocupată de codul OS?
5. Dați exemple de întreruperi hardware.
6. Pot exista situații excepționale în timpul funcționării normale a programului? De ce?
7. Care sunt modalitățile de implementare a mecanismului de întrerupere hardware? Care este diferența lor?
8. Care este mascarea întreruperilor și pentru ce pot fi aplicate?
9. Cum pot fi implementate diferite discipline de servicii de întrerupere prin mascare?
10. Care sunt diferențele dintre disciplina serviciului de întrerupere cu priorități relative și priorități absolute?
11. Unde sunt informațiile despre nivelul de prioritate al dispozitivului de tratare a întreruperilor actuale?
12. Care sunt funcțiile supervizorului de întrerupere?
13. Care este diferența dintre implementarea mecanismului de întrerupere într-un sistem de multiprogramare dintr-un sistem cu un singur program?
14. Când se întoarce programul la programul executat înainte ca semnalul de întrerupere să sosească în sistemul de multiprogramare?
Pagina generata in 0.046 secunde.