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.
De obicei, un proces dintr-un sistem de calcul este reprezentat de (de asemenea, se spune că „deține”) următoarele resurse:
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.
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.
Î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 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.
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:
Un proces, pe lângă starea de rulare principală, poate fi în alte stări, cum ar fi așteptarea.
Un proces Linux poate fi în una dintre următoarele stări:
Minim 2 etape de finalizare:
Motive pentru incheierea procesului:
ale sistemelor de operare | Aspecte|||||
---|---|---|---|---|---|
| |||||
Tipuri |
| ||||
Nucleu |
| ||||
Managementul proceselor |
| ||||
Gestionarea și adresarea memoriei |
| ||||
Instrumente de încărcare și inițializare | |||||
coajă | |||||
Alte | |||||
Categorie Wikimedia Commons Wikibooks Wiktionar |