Proces (computer)

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

Procesul în informatică este o entitate dinamică încărcată pe memoria RAM generată de un program : identificată printr-un cod unic numit PID, mai exact, este o secvență de activități ( sarcină ) controlată de un program ( programator ) care are loc pe un procesor de obicei sub administrarea sau supravegherea sistemului de operare respectiv.

Poate fi vizibil pentru utilizator , ca în cazul unei aplicații în timp ce rulează sau poate rula în fundal ; un manager de sarcini poate fi utilizat pentru a vizualiza lista proceselor executate pe un computer și resursele relative utilizate, în timp ce gestionarea proceselor de către sistemul de operare este încredințată planificatorului prin algoritmi de planificare corespunzători.

Descriere

Programe

Un program constă din codul obiect generat prin compilarea codului sursă și este de obicei salvat sub forma unuia sau mai multor fișiere. Este o entitate statică, care rămâne neschimbată în timpul execuției.

Procesul este entitatea utilizată de sistemul de operare pentru a reprezenta o execuție specifică a unui program. Practic un proces este un program atunci când rulează. Prin urmare, este o entitate dinamică, care depinde de datele procesate și de operațiunile efectuate asupra acestora în ciclul de preluare-executare de către procesor . Prin urmare, procesul se caracterizează, pe lângă codul executabil , prin setul tuturor informațiilor care definesc starea acestuia, precum conținutul memoriei adresate, firele , descriptorii fișierelor și dispozitivelor utilizate.

Utilizarea abstracției hardware este necesară pentru ca sistemul de operare să realizeze multiprogramarea .

Procese și fire

Pictogramă lupă mgx2.svg Același subiect în detaliu: Thread (calcul) .

Conceptul de proces este asociat, dar în orice caz distinct de cel de fir (prescurtare pentru firul de execuție ) cu care ne referim la unitatea granulară în care poate fi împărțit un proces ( subproces ) și care poate fi executată împărțirea timpului sau paralel cu alte fire de procesor. Cu alte cuvinte, un fir este o parte a procesului care rulează simultan și independent de starea generală a procesului în sine. Termenul englezesc oferă o idee bună, deoarece se referă vizual la conceptul unei frânghii compuse din diverse fire răsucite: dacă frânghia este procesul în desfășurare, atunci firele individuale care o compun sunt firele.

Un proces are întotdeauna cel puțin un fir (el însuși), dar în unele cazuri un proces poate avea mai multe fire care rulează în paralel. O diferență substanțială între fire și procese constă în modul în care acestea împărtășesc resursele: în timp ce procesele sunt de obicei independente unele de altele, folosind diferite zone ale memoriei și interacționând doar prin mecanisme speciale de comunicare puse la dispoziție de sistem, dimpotrivă firele unui proces partajează de obicei aceleași informații de stare, memorie și alte resurse de sistem .

Cealaltă diferență substanțială este inerentă mecanismului de activare: crearea unui nou proces este întotdeauna împovărătoare pentru sistem, deoarece resursele necesare pentru executarea acestuia trebuie alocate sau alocate (alocarea memoriei, referințe la periferice și așa mai departe, operațiuni de obicei scumpe ); firul, pe de altă parte, face parte dintr-un proces și, prin urmare, noua sa activare se efectuează într-un timp foarte scurt la costuri minime.

Definițiile sunt după cum urmează:

  • Procesul este obiectul sistemului de operare căruia îi sunt alocate toate resursele sistemului pentru rularea unui program, cu excepția procesorului .
  • Firul este obiectul sistemului de operare sau al aplicației căruia i se atribuie CPU pentru execuție.

Pe un sistem care nu acceptă fire, dacă doriți să rulați același program de mai multe ori în același timp, trebuie să creați mai multe procese bazate pe același program. Această tehnică funcționează, dar este intensivă în resurse, atât pentru că fiecare proces trebuie să-și aloce propriile resurse, cât și pentru că apelurile de sistem relativ lente trebuie făcute pentru a comunica între diferitele procese și pentru că schimbarea contextului între firele aceluiași proces este mai rapidă decât între firele de proces separate.

Având mai multe fire în același proces, același rezultat poate fi obținut prin alocarea resurselor necesare o dată și prin schimbul de date între fire prin memoria procesului, care este accesibilă tuturor threadurilor sale. Un exemplu de aplicație care poate folosi mai multe fire este un browser web , care folosește un fir separat pentru a descărca fiecare imagine într-o pagină web care conține mai multe imagini. Un alt exemplu sunt procesele de server , deseori numite servicii sau demoni , care pot răspunde simultan la cererile de la mai mulți utilizatori.

Într-un sistem multiprocesor ( SMP ), puteți obține îmbunătățiri de performanță, datorită paralelismului fizic al firelor. Cu toate acestea, aplicația trebuie proiectată în așa fel încât să împartă sarcina de procesare între fire. O astfel de proiectare este dificilă și predispusă la erori, iar programul rezultat, dacă este rulat pe un sistem cu un singur procesor, poate fi mai lent decât unul cu un singur fir; prin urmare, astăzi există încă puține programe software care utilizează fire pentru a exploata sistemele SMP.

Suport sistem de operare

Sistemele de operare sunt clasificate după cum urmează, în funcție de suportul pe care îl oferă proceselor și firelor:

  • Monotare : nici procesele, nici firele nu sunt acceptate; nu puteți rula decât un singur program odată.
  • Multitasking :
    • Multitasking cooperativ : procesele sunt acceptate, dar firele nu sunt, și fiecare proces reține CPU până când îl eliberează spontan.
    • Multitasking preventiv : procesele sunt acceptate, dar firele nu sunt, și fiecare proces reține CPU până când îl eliberează spontan sau până când sistemul de operare suspendă procesul pentru a trece CPU la un alt proces.
  • Multithreading : Sunt acceptate atât procesele, cât și firele.
  • Multitasking încorporat : thread-urile sunt acceptate, dar nu procesele, ceea ce înseamnă că puteți rula doar un singur program odată, dar acest program poate avea mai multe fire (numite de obicei sarcini).

Rețineți, de asemenea, că sistemul de operare lipsă de suport pentru fire nu împiedică programarea paralelă. De fapt, paralelismul dintre fire poate fi simulat prin biblioteci de programare sau chiar prin suportul în timp de execuție al limbajului de programare. În acest sens, vorbim de „thread kernel” pentru a indica un thread gestionat de sistemul de operare și de „thread utilizator” pentru a indica un thread gestionat de o bibliotecă de aplicații. De exemplu, unele versiuni de Unix nu acceptă fire, de aceea sunt utilizate fire de utilizator, altele (de exemplu Linux ) acceptă direct fire de la nivelul kernel - ului .

Fir și mâner

În sistemul de operare , fiecare proces este identificat printr-un număr, numit PID ( P rocess ID entifier) ​​sau „proces handle”.

Următoarele structuri de date sunt asociate unui proces:

  • Unul sau mai multe segmente de cod .
  • Unul sau mai multe segmente de memorie de date.
  • Descriptorii oricăror resurse utilizate (fișiere, ferestre, periferice etc.)
  • Unul sau mai multe fire.

Toate aceste informații sunt colectate sau indexate de o structură, unică pentru fiecare proces, numită bloc de control al procesului (prescurtat în PCB ). La rândul lor, toate PCB-urile sunt listate într-o structură numită tabel de proces .

Dacă sistemul de operare gestionează thread-uri, fiecare thread este, de asemenea, identificat printr-un număr, numit TID ( T hread ID entifier) ​​sau „thread handle”. Un handle (lit. „handle”) este o referință codificată care permite unui fir să acceseze entități (obiecte) ale sistemului de operare. În practică, mânerele sunt identificatori abstracte care facilitează manipularea (prin firele diferitelor procese) a componentelor sistemului (în primul rând nucleul): sunt ca ID-urile biletelor. Numărul de mânere active (adică cele utilizate de fire), într-un moment dat, poate fi vizualizat împreună cu numărul de fire și procese care rulează.

Următoarele structuri de date sunt asociate cu un fir:

Dacă sistemul de operare nu gestionează fire, informațiile de mai sus fac parte din starea procesului.

Statele unui proces

Statele unui proces

Într-un sistem de operare multitasking , există mai multe procese care rulează în același timp. Dintre acestea, cel mult un număr egal cu numărul de procesoare poate avea de fapt controlul unui procesor la un moment dat. Prin urmare, diferitele procese pot utiliza procesorul pentru o perioadă limitată de timp, adică o divizare a timpului, din acest motiv procesele sunt întrerupte, întrerupte și reamintite în conformitate cu algoritmii de planificare cunoscuți, oferind utilizatorului impresia unei prelucrări. .

Stările în care poate fi găsit un proces sunt:

  • executare (rulare): procesul are controlul unui procesor;
  • gata ( gata ): procesul este gata de executare și așteaptă ca programatorul să-l pună în executare;
  • în așteptare sau este suspendat sau blocat (suspendat sau blocat): procesul a efectuat un apel de sistem și încă așteaptă rezultatul;

Cu comutarea contextuală (Context Switch) este indicat mecanismul prin care un proces în execuție este oprit (pentru că a efectuat un apel de sistem sau pentru că planificatorul a decis să efectueze un alt proces), iar un alt gata este pus în execuție.

Geneza proceselor și firelor

La bootstrap- ul sistemului de operare, rulează unul sau mai multe procese create chiar de sistemul de operare. În timpul pornirii sistemului, în funcție de configurație, pot fi create mai multe procese. În timpul funcționării normale, pe baza cererilor utilizatorilor, pot fi create noi procese, iar altele se pot termina. Când sistemul de operare începe să execute un program, acesta creează un proces cu un singur fir. În timp ce acel thread, numit thread principal, rulează, codul dvs. poate crea alte fire sau alte procese cu apeluri de sistem speciale.

Crearea unui proces diferă între diferite sisteme de operare. Într-un mediu Windows , se folosește apelul de sistem „CreateProcess”, cu care este specificat numele fișierului care conține programul executabil; acest fișier este încărcat în memorie și executat. În mediul Unix , apelul de sistem „ furcă ” este utilizat pentru a crea un nou proces copil identic cu apelantul ( procesul părinte ), cu excepția valorii returnate de apelul în sine; și apoi utilizați apelul „exec” în oricare dintre ele pentru a încărca codul executabil al unui nou program în procesul curent și a-l rula.

Crearea unui fir, pe de altă parte, este mai uniformă. De fapt, atât apelul de sistem Windows "CreateThread", cât și apelul de sistem Solaris "thr_create" (o variantă a Unix) necesită trecerea adresei unei rutine și a dimensiunii noii stive, precum și a altor parametri. Apelul de sistem face ca corpul procedurii specificate să fie executat concomitent cu codul pe care îl execută apelantul.

În sistemele de tip Unix , când un proces se termină, sistemul de operare eliberează resursele ocupate, cu excepția PID și a procesului de control al blocului (PCB). PCB rămâne în tabelul de proces pentru a permite procesului părinte al procesului terminat să citească starea de ieșire prin wait() sistem wait() . În urma acestui apel, PID și PCB sunt, de asemenea, eliberate pentru a fi reutilizate prin alte procese. Până la apariția unui astfel de apel, procesul rămâne în starea zombie .

Atunci când un proces se termină înainte de propriul proces copil , acesta din urmă devine așa - numitul proces orfan și, în sistemele de tip Unix , este adoptat automat de inițierea procesului de sistem special.

Bibliografie

  • Architecture of Processing Systems, volumul 1 (F. Baiardi, A. Tomasi și Marco Vanneschi, 1988, Franco Angeli Edizioni , ISBN 882042746X ). Fundamente, firmware, arhitecturi paralele.
  • Architecture of Processing Systems, volumul 2 (F. Baiardi, A. Tomasi, Marco Vanneschi, 1987, Franco Angeli Edizioni, ISBN 882042746X ) Sisteme de operare, multiprocesor și distribuite.
  • A.Tanenbaum, The modern operating systems (ediția a doua) , Jackson Milano, 2002, pp. 66-144
  • A.Tanenbaum, Sisteme de operare moderne (ediția a treia) , Pearson Paravia, 2009

Elemente conexe

Controlul autorității GND ( DE ) 4235427-4
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT