Întrerupe

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 27 aprilie 2022; verificarea necesită 1 editare .

Întreruperea este unul dintre conceptele de bază ale tehnologiei informatice , care constă în faptul că, atunci când are loc un eveniment, controlul este transferat către o procedură specială numită manipulator de întreruperi (ISR, ing.  Rutina de servicii de întrerupere ) [1] . Spre deosebire de salturile condiționate și necondiționate, o întrerupere poate fi apelată oriunde în program, inclusiv dacă execuția programului este suspendată și este de obicei cauzată de evenimente externe programului. După efectuarea acțiunilor necesare, manipulatorul de întreruperi, de regulă, readuce controlul programului întrerupt [2] .

Numire

De regulă, întreruperile sunt folosite pentru a lucra cu dispozitive periferice. De exemplu, trebuie să trimiteți o solicitare de încărcare a datelor de pe disc în memorie și, în timp ce încărcarea este în desfășurare, să efectuați alte operațiuni sau să opriți execuția până când se primește o întrerupere și, după finalizarea descărcării, mergeți la handlerul de întreruperi. care va începe procesarea datelor primite [1] . Cu ajutorul întreruperilor, se pot implementa și multitasking , depanarea programelor , emularea anumitor dispozitive etc.

Specie

În funcție de sursa semnalului de întrerupere, acestea sunt împărțite în:

Termenul „capcană” ( în engleză  trap ) este uneori folosit ca sinonim pentru termenul „întrerupere” sau „întrerupere internă”. De regulă, utilizarea este stabilită în documentația producătorului unei anumite arhitecturi de procesor.

Mascare

Întreruperile externe, în funcție de posibilitatea de interzicere, sunt împărțite în:

Operatorii de întrerupere sunt de obicei scrisi în așa fel încât timpul lor de procesare să fie cât mai scurt posibil, deoarece alte întreruperi nu pot fi procesate în timpul funcționării lor și, dacă sunt multe dintre ele (în special dintr-o singură sursă), atunci se pot pierde. Windows folosește mecanismul de apelare a procedurii întârziate pentru a face acest lucru .

Prioritizare

Până la sfârșitul procesării întreruperii, se stabilește de obicei o interdicție privind procesarea acestui tip de întrerupere, astfel încât procesorul să nu intre în ciclul de procesare a unei întreruperi. Prioritizarea înseamnă că toate sursele de întrerupere sunt împărțite în clase și fiecărei clase i se atribuie propriul nivel de prioritate a cererii de întrerupere [3] .

Tabelul de întreruperi

Un vector de întrerupere  este un număr alocat dispozitivului care identifică operatorul de întrerupere corespunzător. Vectorii de întrerupere sunt combinați într- un tabel de vectori de întrerupere care conține adresele manipulatorilor de întreruperi [4] . Locația tabelului depinde de tipul și modul de funcționare al procesorului.

Transparență

Se presupune că întreruperea trebuie să ofere transparență - adică cu excepția datelor care trebuie modificate în funcție de scopul întreruperii, după terminarea procesării întreruperii, procesorul trebuie să fie readus în aceeași stare în care era la momentul chemării sale [5] . În cel mai simplu caz, este suficient să salvați starea tuturor registrelor procesorului în stivă.

Întreruperea software-ului

O întrerupere software este o întrerupere sincronă care poate fi implementată de un program folosind o instrucțiune specială.

În procesoarele x86, pentru a apela în mod explicit o întrerupere sincronă, există o instrucțiuneInt , al cărei argument este numărul de întrerupere (de la 0 la 255). Pe computerele compatibile cu PC IBM , unele întreruperi sunt procesate de rutinele BIOS stocate în ROM , iar întreruperea servește ca interfață pentru a accesa un serviciu furnizat de BIOS. De asemenea, întreruperile pot fi deservite de BIOS-ul plăcilor de expansiune (de exemplu, plăci de rețea sau video ), de sistemul de operare și chiar de programe obișnuite (aplicații) care se află în mod constant în memorie în timp ce alte programe rulează (așa-numitele programe rezidente ). ). Spre deosebire de modul real , în modul protejat al procesoarelor x86, programele obișnuite nu pot deservi întreruperile, această funcție este disponibilă doar pentru codul de sistem (sistemul de operare).

MS-DOS folosește întreruperi numerotate de la 20h la 3Fh pentru a interacționa cu modulele și programele de aplicație (numerele sunt date în notație hexazecimală , așa cum se obișnuiește atunci când se programează în limbajul de asamblare x86 ). De exemplu, accesul la setul principal de funcții MS-DOS se realizează prin executarea unei instrucțiuni Int 21h(în acest caz, numărul funcției și argumentele sale sunt transferate în registre ). Această alocare a numerelor de întrerupere nu este conectată, iar alte programe își pot instala propriile lor handlere de întrerupere în locul sau pe deasupra handlerelor existente instalate de MS-DOS sau alte programe, care este de obicei folosit pentru a schimba funcționalitatea sau a extinde lista de funcții de sistem. Virușii profită și de această oportunitate .

Note

  1. 1 2 Tanenbaum, 2018 , p. 452.
  2. Pogorely, 1989 , p. 56.
  3. Tanenbaum, 2018 , p. 454=456.
  4. Tanenbaum, 2018 , p. 453.
  5. Tanenbaum, 2018 , p. 454.

Literatură