Controler de întrerupere programabil

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Un controler de întrerupere programabil (PIC, Programmable Interrupt Controller) este un dispozitiv hardware care vă permite să gestionați întreruperile vectorizate cu prioritate în numele unui procesor (numit și CPU , și anume unitatea centrală de procesare).

Operațiune

Nevoie

Pentru a înțelege mai bine cum funcționează, să presupunem că PIC nu este acolo și că procesorul trebuie să își asume sarcina de a gestiona întreruperile. Când un dispozitiv, cum ar fi un hard disk , dischetă , port serial , port paralel , tastatură , mouse etc. solicită un serviciu în timp real , declanșează un semnal de întrerupere. Procesorul are în mod normal o singură intrare pentru a auzi dacă cineva îl sună, „întrerupându-l” în funcționarea sa normală: prin urmare, toate dispozitivele care doresc să-l întrerupă, „converg” pe singura intrare pe care procesorul le pune la dispoziție. pentru acel scop. Odată întrerupt, procesorul trebuie să interogheze diferitele dispozitive pentru a identifica cine a declanșat întreruperea: toate acestea, evident, necesită timp, mai ales dacă există mulți candidați. Situația se agravează dacă mai multe dispozitive, „simultan”, solicită întreruperea: în acest caz procesorul trebuie să furnizeze un mecanism prioritar pentru a determina care dintre mai multe întreruperi în așteptare trebuie să servească mai întâi.

Funcția PIC

PIC se află între toate dispozitivele care necesită întrerupere și procesor: prin urmare, se ocupă de auz dacă există dispozitive care întrerup și dacă există mai multe, adoptă un mecanism de prioritate predeterminat, pentru a alege cea mai mare prioritate. În acest moment, PIC activează singura linie de întrerupere a procesorului, oferindu-i, de asemenea, „vectorul” întreruperii, din care se obține, datorită unui tabel, adresa programului ( ISR , sau rutină de servicii de întrerupere ) care procesorul în sine va trebui să efectueze pentru a satisface cererea dispozitivului cu cea mai mare prioritate. După cum puteți vedea, procesorul nu va mai trebui să se îngrijoreze să circule și să stabilească ce întrerupere va servi mai întâi: singurul lucru pe care trebuie să-l facă este să execute programul de întrerupere (ISR) care va fi indicat de PIC.

Prioritate

PIC oferă un număr de intrări de picioare (pin) (de exemplu, IRQ0, IRQ1, ..., IRQ7), fiecare dintre care „simte” un anumit dispozitiv care dorește să se oprească. Dacă se activează mai mult de un pin în același timp, se declanșează un mecanism de prioritate care poate fi de diferite tipuri: se poate avea, de exemplu, cel cu priorități fixe (IRQ0 are mai multă prioritate decât IRQ1, care la rândul său are mai multă prioritate decât IRQ2 , care la rândul său are prioritate mai mare decât IRQ3 și așa mai departe până la IRQ7), sau cea cu prioritate rotativă (dacă IRQ4 tocmai a fost servit, atunci IRQ5 devine cea mai mare prioritate urmată în ordine de IRQ6, IRQ7, IRQ0, ... până la IRQ4, care a devenit cea mai mică prioritate, deoarece procesorul tocmai a terminat de servit și, prin urmare, trebuie să lase loc celorlalți).

Conexiune în cascadă

PIC-urile permit adesea cascadarea, astfel încât să poată fi auzite întreruperile de la o multitudine de dispozitive. De exemplu, puteți găsi PIC-uri care utilizează individual pot auzi doar 8 dispozitive de întrerupere diferite: pentru a putea auzi până la 64 în schimb, este posibil să utilizați 9 în mod colectiv, cu 8 dintre ele (numite sclavi) care aud fiecare 8 dispozitive de întrerupere pentru un total precis de 64 și cu un al nouălea PIC (numit master) care aude întreruperile provenite de la cei 8 sclavi PIC. Apoi, PIC Master va întrerupe procesorul oferindu-i unul dintre cei 64 de vectori posibili, astfel încât să poată fi deservit cel dintre cele 64 de dispozitive cu cea mai mare prioritate de întrerupere.

Aspecte comune

PIC-urile au de obicei un set de registre comune: Registrul de cerere de întrerupere (IRR), Registrul de service (ISR), Registrul de mască de întrerupere (IMR). Registrul cererii de întrerupere, IRR, specifică ce întreruperi au fost declanșate de dispozitivele de întrerupere: este un registru simbolic care nu este accesibil direct programatorilor. Întreruperea aflată în prezent în jurnalul de service, ISR, specifică care întrerupere procesează în prezent serviciul, executând ISR-ul său, dar nu a fost încă finalizată. Registrul de mască de întrerupere, IMR, specifică ce întreruperi trebuie ignorate.

După cum sa menționat deja, există mai multe mecanisme prioritare furnizate de PIC, inclusiv cele cu prioritate fixă, prioritate prestabilită sau prioritate rotativă.

Întreruperile pot fi fie de tip declanșat la nivel, fie de tip declanșat de margine .

Pauze la nivel

În cazul unei întreruperi a nivelului, semnalul de la un dispozitiv de întrerupere trebuie să fie adus de la scăzut la înalt și menținut sus (sau de la înalt la scăzut și menținut scăzut) de către același dispozitiv de întrerupere până când se spune că îl poate readuce scăzut ( sau ridicat) din nou.

Versiunea originală a magistralei PCI oferă întreruperi la nivel: versiunile mai noi permit, de asemenea, utilizarea mesajelor de întrerupere, care au devenit singurul mod permis în PCI Express .

Partajarea întreruperilor

Multe dispozitive pot partaja o linie de întrerupere la nivel dacă sunt proiectate corespunzător. Linia trebuie să aibă un rezistor care trage în jos sau trage în sus semnalul, astfel încât să se mențină, în condiții de repaus, respectiv scăzut sau ridicat (deci nu a fost activ, adică nu există cerere de întrerupere). Când unul sau mai multe dispozitive doresc să întrerupă, activează linia, adică o aduc la nivelul înalt sau scăzut și o păstrează astfel, așa cum sa menționat deja, tot timpul, până când dispozitivul de întrerupere este informat că ISR-ul său a fost efectuat și, prin urmare, poate opri menținerea liniei active.

Când linia de întrerupere partajată de mai multe dispozitive este activată, trebuie să aflați cine a făcut-o. Odată ce dispozitivul de întrerupere a fost deservit și îi cereți să nu mai mențină linia activă, se poate întâmpla ca acesta din urmă să revină la starea sa inactivă, de repaus sau să rămână activ. În primul caz, înseamnă că, odată ce dispozitivul de întrerupere a fost servit, nu au existat altele care să necesite atenție. În cel de-al doilea caz, înseamnă că un alt dispozitiv a început să solicite atenție, dar dispozitivul anterior a fost servit: este necesar să aflăm din nou cine a mai solicitat întreruperea. Odată servit, vorbirea se repetă.

Este important să adoptați o strategie bună atunci când descoperiți cine a întrerupt-o pe o linie partajată: poate că unele dispozitive tind să o facă mai frecvent, dar servirea lor este ieftină (adică sunt gestionate rapid), în timp ce altele o fac mai puțin frecvent.dar servirea lor este costisitoare (ISR-ul lor este foarte greu). Pentru a crește eficiența, va fi mai bine să le deservim mai întâi celor care sunt mulțumiți de puțin și apoi să trecem la cei care monopolizează procesorul.

Avantaje și dezavantaje

Un avantaj al întreruperilor de nivel este acela că un impuls fals este împiedicat să fie interpretat din greșeală ca o cerere de întrerupere: dacă acest impuls este, așa cum se întâmplă de obicei, de scurtă durată, atunci nu este „simțit”. Prin urmare, întreruperile de la nivel sunt mai robuste decât cele din față în prezența liniilor zgomotoase datorită capacității lor de a filtra semnale false.

Există unele dezavantaje la nivelurile de pauză. Dacă linia este partajată și un dispozitiv este servit, nu este posibil să înțelegem dacă există altul care a început să solicite întreruperea la scurt timp după aceea: trebuie să terminați cu prima și să-i spuneți să nu mai mențină linia activă și apoi descoperă-l pe celălalt care cere și atenție. Din acest motiv, nu este recomandabil să deserviți un dispozitiv mai puțin prioritar dacă pe aceeași linie există unul mai prioritar, deoarece există riscul ca acesta din urmă să aștepte prea mult pentru finalizarea ISR a primului dispozitiv și a celui de-al doilea dispozitivul poate intra în depășirea bufferului, pierzând datele de intrare. Un alt dezavantaj se datorează faptului că, dacă nu știți cum să faceți față întreruperii unui dispozitiv de întrerupere, acesta din urmă ar putea menține linia activă la nesfârșit, împiedicând alții să semnaleze propria cerere de întrerupere.

Întreruperi pe front

În cazul unei întreruperi pe partea frontală, este suficient ca dispozitivul de întrerupere să poarte semnalul de la scăzut la înalt sau de la scăzut la scăzut pentru un anumit interval de timp pentru ca acesta să fie auzit automat: de fapt, marginea ascendentă sau descendentă a semnalului se aude., adică trecerea de la un nivel la altul. Dispozitivul care întrerupe va raporta apoi linia joasă sau înaltă (stare de repaus), fără a fi ordonat să facă acest lucru, spre deosebire de înainte: va rămâne apoi încrezător în așteptarea efectuării ISR-ului său.

Și aici se poate repeta discursul rezistențelor pull-down sau pull-up și a liniei partajate de mai multe dispozitive.

Primele versiuni ale autobuzului ISA prevedeau întreruperi pe partea din față, dar nu necesitau partajarea liniilor. Cu toate acestea, cardurile ISA montează rezistențe de tragere pe liniile de rupere pentru a permite partajarea.

Avantaje și dezavantaje

Un avantaj al întreruperilor frontale este că, în timp ce un dispozitiv este deservit, deoarece linia a fost activată scurt, dar imediat dezactivată (este deci „gratuită”), se poate auzi un al doilea dispozitiv care între timp necesită atenție: acest lucru nu este posibil cu pauze la nivel. Astfel, este posibil să se înțeleagă dacă un dispozitiv cu prioritate superioară solicită o întrerupere și îl servește, întrerupând serviciul dispozitivului cu prioritate inferioară care era, de asemenea, în desfășurare. Un alt avantaj este că puteți decide, de asemenea, să luați cu ușurință serviciul unui dispozitiv cu prioritate mai mică, deoarece linia partajată este gratuită și nu există riscul de a nu auzi întreruperea pe care între timp necesită cel mai prioritar dispozitiv.

Un dezavantaj al întreruperilor frontale este că o activare a liniei poate să nu fie resimțită: în timp ce odată cu întreruperea la nivel, acest lucru nu se poate întâmpla deoarece linia este menținută activă pentru tot timpul necesar pentru a finaliza ISR, aici riscul de a pierde o activare este acolo și poate duce la situații neașteptate. Un blocaj poate apărea pe măsură ce dispozitivul de întrerupere așteaptă cu încredere să fie servit, dar ISR pe care a solicitat să îl execute nu se efectuează niciodată, deoarece activarea liniei nu a fost auzită.

Controlere de întrerupere programabile cunoscute

Unul dintre cele mai cunoscute PIC-uri, Intel 8259 , a fost, pe vremuri, inclus în computerele x86 . Astăzi, nu mai este un dispozitiv propriu: funcția sa a fost inclusă în chipset-ul Southbridge al plăcii de bază . În alte cazuri, PIC a fost complet înlocuit de cele mai noi controlere de întrerupere programabile , care acceptă mai multe întreruperi și au mecanisme de prioritate mai flexibile.

Mai multe informații despre PIC 8259 Intel pot fi găsite în IA-32 Intel Architecture Software Developer's Manual, Volume 3A: System Programming Guide, Part 1 , disponibil gratuit pe site-ul Intel .

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT