Proces (informatica)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 17 iunie 2020; verificările necesită 11 modificări .

Un proces este o abstractizare identificabilă a unei colecții de resurse de sistem interconectate bazată pe un spațiu de adrese virtual separat și independent în contextul căruia este organizată execuția firelor de execuție. Definițiile ISO 9000:2000 definesc un proces ca un set de activități interconectate și care interacționează care transformă intrările în ieșiri.

Programul de calculator în sine este doar o secvență pasivă de instrucțiuni. În timp ce procesul este execuția directă a acestor instrucțiuni.

De asemenea, un proces este un program care rulează și toate elementele sale: spațiu de adrese , variabile globale , registre , stivă , fișiere deschise și așa mai departe.

Vizualizare proces

De obicei, un proces dintr-un sistem de calcul este reprezentat de (de asemenea, se spune că „deține”) următoarele resurse:

Contextul procesului curent este schimbat în memorie atunci când este efectuată o trecere la alt proces [1] .

Sistemul de operare stochează majoritatea informațiilor despre procese în tabelul de procese.

Pe sistemele de operare care acceptă fire de execuție (threads), firele de execuție dețin și propriile resurse. Aceasta este de obicei doar starea procesorului, deși firele de execuție pot folosi și alte resurse.

Pentru a reduce probabilitatea ca procesele să interfereze între ele și probabilitatea defecțiunii sistemului (de exemplu, blocaje sau thrashing ), sistemul de operare asigură izolarea proceselor și alocă resursele de care au nevoie. Sistemul de operare oferă, de asemenea, mecanisme pentru ca procesele să comunice în moduri sigure și previzibile.

Reprezentarea unui proces în memorie

Această secțiune discută reprezentarea în memorie a unui proces în sistemul de operare Linux și arhitectura x86 . O astfel de reprezentare diferă puțin de multe alte sisteme de operare și arhitecturi multitasking. De exemplu, în amd64 , succesorul x86, stiva de apeluri crește de sus în jos în același mod, dar dimensiunea spațiului de adrese este mărită la 248 de octeți. [2]

Linux folosește un model de memorie plată și, prin urmare, 232 de octeți de memorie sunt disponibili pentru fiecare proces din această arhitectură. Toată memoria virtuală este împărțită în spațiu utilizator și spațiu kernel . Spațiul kernel ocupă un gigabyte de memorie, începând cu cea mai mare adresă. Restul spațiului, adică trei gigaocteți, este rezervat spațiului utilizatorului.

Diagrama din dreapta arată reprezentarea în spațiul utilizatorului a oricărui proces. Spațiul nucleului este același pentru toate procesele, deoarece în sistemul de operare poate exista o singură instanță a nucleului. După pornirea programului, instrucțiunile procesorului (codul mașinii) și datele inițializate sunt importate în RAM. În același timp, argumentele de pornire și variabilele de mediu sunt importate în adrese mai mari.

Zona de date inițializată stochează date numai în citire. Poate fi, de exemplu, literale șir.

Zona de date neinițializată stochează de obicei variabile globale.

Heap-ul este folosit pentru a aloca memorie în timp ce programul rulează. Pe Linux, există un apel de sistem pentru acest lucru mmap.

Zona stivei este folosită pentru a apela proceduri .

De asemenea, un detaliu important este prezența unei indentări aleatorii între stivă și zona de sus, precum și între zona de date inițializată și heap. Acest lucru se face din motive de securitate, cum ar fi prevenirea stivuirii altor funcții.

Bibliotecile de linkuri dinamice și mapările de fișiere se află între stivă și heap.

Ierarhia proceselor

În sistemele de operare multitasking, a devenit posibil să se lucreze simultan cu mai multe procese. Sistemele de operare multitasking preventive au făcut posibilă obținerea senzației de a rula mai multe procese în același timp. Acest lucru a necesitat mijloace de gestionare a mai multor procese.

Unix

Unix  este unul dintre primele sisteme de operare multitasking. Fiecare proces are un PID numeric unic. Procesele din acesta au o ierarhie arborescentă , unde rădăcina este procesul init cu PID 1. Un nou proces poate fi creat cu un apel de sistem fork, acesta va fi o copie exactă a procesului părinte . Orice proces, cu excepția init, are întotdeauna un proces părinte (atributul PPID ( PID părinte  )); procesele al căror părinte s-a încheiat devin procese copil ale init.

Procesele sunt, de asemenea, combinate în grupuri . setpgidSistemul apelează și este responsabil pentru gestionarea identificatorului de grup (PGID) getpgid. PGID este egal cu PID-ul liderului de grup. Procesul copil moștenește grupul de la părinte. Grupurile sunt folosite pentru a gestiona locurile de muncă .

Grupurile de procese sunt combinate în sesiuni . Apelul de sistem este responsabil pentru crearea unei noi sesiuni setsid. Procesele din același grup nu pot aparține unor sesiuni diferite. Prin urmare, liderul de grup nu poate deveni lider de sesiune: atunci când o sesiune este creată, procesul copil devine automat lider de sesiune și liderul noului grup. Sesiunile sunt folosite pentru a urmări toate procesele care rulează după ce un utilizator s-a conectat.

Fiecare sesiune poate avea cel mult un terminal de control . Emulatorul de terminal are un shell de comandă (cel mai adesea bash sau sh) ca un proces copil , care, înainte de a începe, devine liderul noii sesiuni și se stabilește singur terminalul de control.

Crearea unui proces

Cel mai simplu sistem de operare nu are nevoie să creeze noi procese, deoarece au un singur program care rulează în interiorul lor atunci când dispozitivul este pornit. În sistemele mai complexe, trebuie create noi procese. De obicei sunt create:

Stări de proces

Un proces, pe lângă starea de rulare principală, poate fi în alte stări, cum ar fi așteptarea.

Linux

Un proces Linux poate fi în una dintre următoarele stări:

Încheierea unui proces

Minim 2 etape de finalizare:

  1. Procesul este eliminat din toate cozile de programare , adică sistemul de operare nu mai programează nicio resursă care să fie alocată procesului,
  2. Colectarea de statistici despre resursele consumate de proces cu eliminarea ulterioară a acestuia din memorie .

Motive pentru incheierea procesului:

Vezi și

Note

  1. E. Tannenbaum. Modern Operating Systems = Modern Operating Systems. - Ed. a II-a. - Sankt Petersburg. : Petru, 2002. - S. 59, 97. - 1040 p. - ISBN 5-318-00299-4 .
  2. AMD Corporation. Volumul 2: Programarea sistemului (PDF). Manualul programatorului de arhitectură AMD64 . AMD Corporation (decembrie 2016). Preluat la 25 martie 2017. Arhivat din original la 13 iulie 2018.

Literatură