Întreruperi sau IRQ: modul în care procesorul dvs. gestionează solicitările de pe computer

CPU-urile nu fac altceva decât să proceseze programele secvențial, dar suntem atât de intruzivi încât îi facem să înceteze continuu să ruleze programul și să-i întrerupă. Cum? Ei bine, când apăsați o tastă, mutați mouse-ul. În acest articol vom explica cum funcționează solicitările de întrerupere sau IRQ.

O cerere de întrerupere sau mai bine cunoscută sub numele de IRQ, care înseamnă Interrupt ReQuest, este un mecanism indispensabil în fiecare Procesor pentru a putea interacționa cu acesta la toate nivelurile, atât de către utilizatori, cât și de restul hardware-ului.

Întreruperi sau IRQ

Ce sunt cererile de întrerupere sau IRQ-urile?

Ceea ce face un CPU este să execute un program secvențial, dar dintr-o dată apăsăm o tastă și o vedem tipărită pe ecran. Într-un timp foarte scurt, CPU a trebuit să oprească programul principal și să asiste la solicitarea tastaturii de a imprima litera menționată pe ecran, deci a existat o întrerupere a firului principal de execuție. Acest fenomen de întrerupere a unui CPU se numește cerere de întrerupere sau IRQ.

Render CPU Code

Cererile de întrerupere sau IRQ-urile sunt în general semnale trimise de CPU de către dispozitive externe, în special periferice conectate la porturile I / O. Modul în care sunt gestionate întreruperile depinde de sursa lor, dar din punct de vedere hardware apar atunci când un periferic sau o componentă necesită atenția procesorului. Este posibil să fie nevoie să facă schimb de date cu CPU prin spațiul de memorie comun și coerent sau să avertizeze că o sarcină pe care o făceau a fost deja finalizată.

Solicitările de întrerupere hardware sunt împărțite în două tipuri diferite:

  • Întreruperi mascabile: În cazul cererilor de întrerupere multiple, acestea sunt cele care au cea mai mică preferință atunci când vine vorba de soluționare.
  • Întreruperi care nu pot fi mascate: Când există mai multe întreruperi în același timp, acestea sunt cele care au cea mai mare preferință atunci când vine vorba de rezolvare.

Întrerupeți solicitările sau IRQ prin intermediul software-ului

software de petiție de întrerupere

Software-ul poate genera, de asemenea, întreruperi prin rutina sistemului de operare, acest lucru se face printr-un „apel de sistem”. Pe orice computer care rulează un sistem de operare avansat, sistemul de operare trebuie să poată invoca sistemul de întrerupere a procesorului, dacă este necesar.

Motivul pentru aceasta este că acest lucru este necesar pentru a gestiona accesul la programele de multitasking, deoarece fiecare program este un fir diferit care ar putea fi executat într-un kernel diferit. Acum, numărați numărul de aplicații deschise și nucleele procesorului dvs. și veți vedea că nu toate pot fi gestionate în același timp, de aceea sistemul de operare întrerupe un fir de execuție al unui program pentru a porni altul.

În cazul aplicațiilor de fundal, acestea își lasă starea curentă în sistem RAM, dar sunt întotdeauna gata să fie invocate din nou printr-un apel de sistem. Cu SSD-uri și unificarea adresării între SSD și memorie, va fi posibil să trimiteți aplicațiile în fundal către SSD și să le invocați așa cum erau.

Cum gestionează un procesor o cerere de întrerupere sau IRQ?

Întrerupții mecanice

Pentru a gestiona o solicitare de întrerupere, CPU-ul trebuie să oprească ciclul de instrucțiuni în urmele sale. De fiecare dată când o instrucțiune este finalizată, CPU-ul în sine va verifica dacă există o cerere de întrerupere. În cazul în care nu există, va executa următoarea linie de cod de program. Dacă există, ceea ce va face este să stocheze starea programului într-un registru special. Starea fiind valoarea următoarei instrucțiuni din contorul de programe.

În funcție de tipul de instrucțiune, CPU va încărca în contorul de programe o adresă de memorie specială care indică instrucțiunea ROM, un program într-o memorie în afară de procesorul care a codat modul în care CPU trebuie să gestioneze instrucțiunile respective. Instrucțiunile care nu pot fi mascate au prioritate și odată ce procesul de întrerupere a fost executat din registrul în care este stocată valoarea contorului de program, acesta este copiat în acesta pentru a continua cu execuția obișnuită.

FLAGURILE unui CPU

DRAPEURI x86

Fiecare procesor are o serie de registre cu un singur bit care indică momentul în care apar anumite fenomene, FLAGURILE din procesoare cu ISA x86 pot fi văzute în imaginea de mai sus bine descrisă. Toate acestea sunt rezumate într-un registru lat de 32 de biți, în care fiecare bit reprezintă o stare diferită a procesorului.

În cazul x86 este necesar ca un dispozitiv hardware numit PIC, controler de întrerupere programabil, la care sunt conectate diferitele periferice, să fie responsabil pentru efectuarea cererilor de întrerupere. Acest intermediar a fost inițial un cip separat și a fost conceput pentru a reduce numărul de interfețe către CPU, dar odată cu adoptarea controlerului I / O în procesoarele moderne a devenit parte a SoC.

Prin urmare, PIC este responsabil de la distanță pentru trimiterea cererilor de întrerupere către CPU, pentru aceasta are nevoie doar de semnalul care activează unul dintre biții din registrul FLAGS al procesorului. Dar dacă ne uităm cu atenție, vom vedea că există trei biți care gestionează întreruperile: Întrerupere activare semnal în bitul 9, Întrerupere virtuală în bitul 19 și Întrerupere virtuală în așteptare în bitul 20.

Întreruperi virtuale

întrerupere IRQ Virtual

Multe sisteme contemporane folosesc mașini virtuale, ceea ce înseamnă că sistemul de operare nu este cel mai apropiat și mai privilegiat software de procesor, ci hipervizorul pe care rulează. Acest lucru provoacă un conflict atunci când vine vorba de gestionarea întreruperilor la nivel de software. Soluția? Oferiți hipervizorului o ierarhie superioară și creați FLAGURI suplimentare. Indicatorul de activare a întreruperii este activat atunci când un sistem de operare este executat fără un hipervizor dedesubt și deci singur. În cazul în care există un hipervizor, este însuși hipervizorul care are prioritate asupra semnalizării de activare a întreruperii.

Dacă un sistem de operare este virtualizat, atunci bitul care va fi setat este Virtual Enable Flag. Motivul acestei separări este că, în orice moment, diferitele sisteme de operare care rulează văd perifericele diferit și, prin urmare, necesitatea unui management separat al întreruperilor. Practic, la activarea semnalizării de activare virtuală, ceea ce face este să reamintească procesorului că firele de execuție legate de mașina virtuală trebuie oprite pentru a gestiona întreruperea și nu altele.