Proces (calcul) - Process (computing)

În calcul , un proces este instanța unui program de computer care este executat de unul sau mai multe fire . Conține codul programului și activitatea acestuia. În funcție de sistemul de operare (SO), un proces poate fi alcătuit din mai multe fire de execuție care execută instrucțiuni simultan .

În timp ce un program de computer este o colecție pasivă de instrucțiuni stocate de obicei într-un fișier pe disc, un proces este executarea acestor instrucțiuni după ce a fost încărcat de pe disc în memorie. Mai multe procese pot fi asociate cu același program; de exemplu, deschiderea mai multor instanțe ale aceluiași program duce adesea la executarea mai multor procese.

Multitasking-ul este o metodă care permite mai multor procese să partajeze procesoare (procesoare) și alte resurse de sistem. Fiecare procesor (nucleu) execută o singură sarcină la un moment dat. Cu toate acestea, multitaskingul permite fiecărui procesor să comute între sarcinile care sunt executate fără a fi nevoie să aștepte finalizarea fiecărei sarcini ( preempțiune ). În funcție de implementarea sistemului de operare, comutatoarele ar putea fi efectuate atunci când sarcinile inițiază și așteaptă finalizarea operațiunilor de intrare / ieșire , când o sarcină cedează în mod voluntar CPU, la întreruperile hardware și când programatorul sistemului de operare decide că un proces a expirat corect cota de timp a procesorului (de exemplu, de către programatorul complet echitabil al kernel-ului Linux ).

O formă obișnuită de multitasking este oferită de partajarea timpului procesorului, care este o metodă de intercalare a execuției proceselor și thread-urilor utilizatorilor, și chiar a sarcinilor independente ale nucleului - deși această din urmă caracteristică este fezabilă doar în nucleele preventive, cum ar fi Linux . Prevenirea are un efect secundar important pentru procesele interactive cărora li se acordă o prioritate mai mare în ceea ce privește procesele legate de CPU, prin urmare, utilizatorilor li se alocă imediat resurse de calcul la simpla apăsare a unei taste sau la mutarea mouse-ului. Mai mult, aplicațiilor precum reproducerea de videoclipuri și muzică li se acordă un fel de prioritate în timp real, împiedicând orice alt proces cu prioritate inferioară. În sistemele de partajare a timpului, comutatoarele de context sunt efectuate rapid, ceea ce face să pară că mai multe procese sunt executate simultan pe același procesor. Această execuție simultană a mai multor procese se numește concurență .

Pentru securitate și fiabilitate, majoritatea sistemelor de operare moderne împiedică comunicarea directă între procese independente, oferind funcționalitate de comunicare inter-proces strict mediată și controlată.

Reprezentare

O listă de procese afișate de htop
Un tabel de proces așa cum este afișat de KDE System Guard
Un tabel de proces așa cum este afișat de KDE System Guard

În general, un proces de sistem informatic constă din (sau se spune că deține ) următoarele resurse:

  • O imagine a codului mașinii executabile asociate unui program.
  • Memorie (de obicei, o anumită regiune a memoriei virtuale ); care include codul executabil, date specifice procesului (intrare și ieșire), o stivă de apeluri (pentru a ține evidența subrutinelor active și / sau a altor evenimente) și o grămadă pentru a deține date de calcul intermediare generate în timpul rulării.
  • Descriptorii sistemului de operare a resurselor care sunt alocate procesului, cum ar fi descriptorii de fișiere ( terminologia Unix ) sau mânerele ( Windows ) și sursele de date și chiuvete.
  • Atribute de securitate , cum ar fi proprietarul procesului și setul de permisiuni al procesului (operațiuni permise).
  • Starea procesorului ( context ), cum ar fi conținutul registrelor și adresarea memoriei fizice. Statul este stocat în mod obișnuit în registrele de calculator , atunci când procesul este de executare, și în memorie în alt mod.

Sistemul de operare deține majoritatea acestor informații despre procesele active în structuri de date numite blocuri de control al proceselor . Orice subgrup al resurselor, de obicei , cel puțin starea procesorului, poate fi asociat cu fiecare proces fire în sistemele care firele de sprijin sau de operare pentru copii procese.

Sistemul de operare își păstrează procesele separate și alocă resursele de care au nevoie, astfel încât acestea sunt mai puțin susceptibile să se interfereze unele cu altele și să provoace eșecuri ale sistemului (de exemplu, blocare sau eliminare ). Sistemul de operare poate oferi, de asemenea, mecanisme pentru comunicarea între procese pentru a permite proceselor să interacționeze în moduri sigure și previzibile.

Multitasking și gestionarea proceselor

Un sistem de operare multitasking poate comuta doar între procese pentru a da apariția multor procese care se execută simultan (adică în paralel ), deși, de fapt, un singur proces poate fi executat în același timp pe un singur CPU (cu excepția cazului în care CPU are mai multe nuclee , apoi pot fi utilizate multithreading sau alte tehnologii similare).

Este obișnuit să asociați un singur proces cu un program principal și procesele secundare cu orice proces paralel, care se comportă ca subrutine asincrone . Se spune că un proces are resurse proprii , dintre care o imagine a programului său (în memorie) este o astfel de resursă. Cu toate acestea, în sistemele multiprocesare, multe procese pot rula sau partaja același program reentrant în aceeași locație din memorie, dar se spune că fiecare proces deține propria imagine a programului.

Procesele sunt deseori numite „sarcini” în sistemele de operare încorporate . Sensul de „proces” (sau sarcină) este „ceva care ocupă timp”, spre deosebire de „memorie”, care este „ceva care ocupă spațiu”.

Descrierea de mai sus se aplică atât proceselor gestionate de un sistem de operare, cât și proceselor definite de calculele proceselor .

Dacă un proces solicită ceva pentru care trebuie să aștepte, acesta va fi blocat. Când procesul este în starea blocată , este eligibil pentru schimbarea pe disc, dar acest lucru este transparent într-un sistem de memorie virtuală , unde regiunile memoriei unui proces pot fi cu adevărat pe disc și nu în memoria principală în orice moment. Rețineți că chiar și porțiuni din procese / sarcini active (executarea programelor) sunt eligibile pentru schimbarea pe disc, dacă porțiunile nu au fost utilizate recent. Nu toate părțile unui program de executare și datele sale trebuie să fie în memoria fizică pentru ca procesul asociat să fie activ.

Stările procesului

Diferitele stări de proces, afișate într-o diagramă de stare , cu săgeți care indică posibile tranziții între stări.

Un kernel de sistem de operare care permite multitasking-ului are nevoie ca procesele să aibă anumite stări . Numele pentru aceste stări nu sunt standardizate, dar au funcționalități similare.

  • În primul rând, procesul este „creat” prin încărcarea de pe un dispozitiv de stocare secundar ( hard disk , CD-ROM etc.) în memoria principală . După aceea, planificatorul de proces îi atribuie starea „în așteptare”.
  • În timp ce procesul „așteaptă”, așteaptă ca programatorul să facă așa-numitul comutator de context . Comutatorul contextual încarcă procesul în procesor și schimbă starea în „rulare”, în timp ce procesul „în execuție” anterior este stocat într-o stare „în așteptare”.
  • Dacă un proces aflat în starea „în curs de executare” trebuie să aștepte o resursă (așteptați, de exemplu, introducerea utilizatorului sau fișierul să se deschidă, de exemplu), i se atribuie starea „blocat”. Starea procesului este schimbată înapoi la „așteptare” când procesul nu mai trebuie să aștepte (într-o stare blocată).
  • Odată ce procesul termină execuția sau este încheiat de sistemul de operare, nu mai este necesar. Procesul este eliminat instantaneu sau este mutat în starea „terminat”. Când este eliminat, așteaptă să fie eliminat din memoria principală.

Comunicarea intraprocesuala

Când procesele trebuie să comunice între ele, trebuie să partajeze părți din spațiile lor de adresă sau să utilizeze alte forme de comunicare inter-proces (IPC). De exemplu, într-o conductă shell, ieșirea primului proces trebuie să treacă la al doilea și așa mai departe; un alt exemplu este o sarcină care poate fi descompusă în procese care cooperează, dar parțial independente, care pot rula simultan (adică, folosind simultanitate, sau adevărat paralelism - ultimul model este un caz particular de execuție concurentă și este fezabil ori de câte ori sunt disponibile suficiente nuclee CPU pentru toate procesele care sunt gata să ruleze).

Este chiar posibil ca două sau mai multe procese să ruleze pe mașini diferite care pot rula sisteme de operare (SO) diferite, de aceea sunt necesare unele mecanisme de comunicare și sincronizare (numite protocoale de comunicații pentru calcul distribuit) (de exemplu, interfața de trecere a mesajelor, adesea numit simplu MPI ).

Istorie

La începutul anilor 1960, software-ul de control al computerului a evoluat de la software-ul de control al monitorului , de exemplu IBSYS , la software-ul de control executiv . De-a lungul timpului, computerele au devenit mai rapide, în timp ce timpul computerului nu era nici nici ieftin, nici pe deplin utilizat; un astfel de mediu a făcut posibilă și necesară multiprogramarea . Multiprogramarea înseamnă că mai multe programe rulează simultan . La început, mai multe programe funcționau pe un singur procesor, ca urmare a arhitecturii uniprocesorului de bază și împărțeau resurse hardware limitate și limitate; în consecință, concurența era de natură serială . Pe sistemele ulterioare cu procesoare multiple , mai multe programe pot rula simultan în paralel .

Programele constau în secvențe de instrucțiuni pentru procesoare. Un singur procesor poate rula o singură instrucțiune odată: este imposibil să rulați mai multe programe în același timp. Un program ar putea avea nevoie de o anumită resursă , cum ar fi un dispozitiv de intrare, care are o întârziere mare, sau un program ar putea începe o operare lentă, cum ar fi trimiterea ieșirii către o imprimantă. Acest lucru ar duce la procesarea „inactivă” (nefolosită). Pentru a menține procesorul ocupat tot timpul, executarea unui astfel de program este oprită și sistemul de operare comută procesorul pentru a rula un alt program. Pentru utilizator, se va părea că programele rulează în același timp (de unde și termenul „paralel”).

La scurt timp după aceea, noțiunea de „program” a fost extinsă la noțiunea de „program de executare și contextul său”. S-a născut conceptul de proces, care a devenit, de asemenea, necesar odată cu inventarea codului de reintrare . Fire au venit ceva mai târziu. Cu toate acestea, odată cu apariția unor concepte precum partajarea timpului , rețelele de calculatoare și calculatoarele cu memorie partajată cu mai multe procesoare , vechea „multiprogramare” a dat locul adevăratului multitasking , multiprocesare și, mai târziu, multithreading .

Vezi si

Note

Referințe

Lecturi suplimentare

linkuri externe