Pentru ca OS să gestioneze procesele, trebuie să aibă toate informațiile necesare pentru aceasta. În acest scop, pentru fiecare proces este creată o structură specială de informații, numită descriptor de proces (descriptor de sarcină, bloc de control al sarcinilor). În general, descriptorul de proces conține următoarele informații:
identificator de proces (așa-numitul PID este un identificator de proces);
tipul (sau clasa) procesului, care definește pentru supraveghetor anumite reguli de furnizare a resurselor;
prioritatea procesului, conform căreia supraveghetorul furnizează resurse. Într-o clasă de procese, procesele prioritare sunt în primul rând întreținute;
o variabilă de stare care determină starea procesului (gata de funcționare, în timp de execuție, așteptare pentru dispozitivul I / O etc.);
Informații despre resursele pe care procesul le deține și / sau care au dreptul de a le utiliza (pointeri pentru deschiderea fișierelor, informații despre operații de I / O incomplete etc.);
parametrii de pornire (momentul în care procesul ar trebui să fie activat și frecvența acestei proceduri);
Descriptorii sarcinilor sunt, de regulă, localizați în mod constant în memoria RAM pentru a accelera activitatea supervizorului, care le organizează în liste (cozi) și afișează schimbarea stării procesului prin mutarea descriptorului corespunzător dintr-o listă în alta. Pentru fiecare stat (cu excepția stării de execuție pentru un sistem uniprocesor), sistemul de operare menține o listă corespunzătoare de sarcini în această stare. Cu toate acestea, pot exista mai multe liste pentru starea de așteptare, dar deoarece multe tipuri diferite de resurse pot provoca starea de așteptare. De exemplu, statele așteptați finalizarea operațiunilor de I / O pot fi la fel de multe dispozitive de intrare / ieșire prezente în sistem.
În unele sisteme numărul de descriptori este determinat în mod fix în avans (pentru generarea de versiunea sistemului de operare sau într-un fișier de configurare, care este utilizat atunci când se încarcă sistemul de operare), în altele - în măsura în care este necesar, sistemul poate aloca zone de memorie pentru noi descriptori. De exemplu, în OS / 2, numărul maxim posibil de descriptori de sarcină este definit în fișierul de configurare CONFIG.SYS. Trebuie remarcat faptul că în acest fișier specifică numărul de procese nu, și anume sarcini și pusă în discuție în acest caz este înțeleasă ca un proces, iar fluxul de același proces. De exemplu, o linie în fișierul CONFIG.SYS
indică faptul că, în total, până la 1024 de sarcini pot exista în paralel și pot fi executate în sistem, inclusiv procesele computaționale și fluxurile acestora.
În RTOS, de multe ori numărul de procese este fix și este recomandabil să se determine în avans (în stadiul de generare sau configurare a OS) numărul lor. Deoarece descriptorii de proces sunt localizați în mod constant în memoria principală (pentru a accelera munca dispecerului), numărul lor nu ar trebui să fie mare. Dacă este necesar, au un număr mare de sarcini același mâner pot fi furnizate la momente diferite pentru diferite scopuri, dar reduce semnificativ viteza de răspuns a sistemului.
Pentru o prelucrare mai eficientă a datelor în RTOS, este recomandabil să aveți sarcini permanente, integral sau parțial, întotdeauna existente în sistem, indiferent dacă cererea a fost primită sau nu. Fiecare sarcină constantă are o anumită zonă RAM (sarcini RAM-rezidentă), indiferent dacă sarcina este executată în acest moment sau nu. Această zonă, în special, poate fi utilizată pentru stocarea mai devreme a datelor primite de sarcină. Datele pot fi stocate în el, chiar dacă sarcina este într-o stare de așteptare sau chiar într-o stare de inactivitate.
Conceptul procesului a fost introdus pentru a implementa ideile de multiprogramare.
Modul de operare multiprogram al sistemului informatic este acela că, în timp ce un program (proces, sarcină) așteaptă finalizarea următoarei operații I / O, poate fi pus în execuție un alt program (sarcină). Cu multiprogramare, capacitatea sistemului este mărită, dar un proces separat nu poate fi efectuat mai repede decât dacă ar fi executat în modul cu un singur program.
Dacă modulele de program care efectuează operațiuni îndelungate sunt proiectate sub formă de "subprocese" independente care vor fi executate în paralel cu alte "subprocese", utilizatorul va putea executa mai multe operații în paralel în cadrul aceleiași aplicații (proces). "Subprocesele" sunt firele sau, așa cum se întâmplă în literatură, firul. Un alt sinonim găsit în literatură este fluxul. Ele sunt numite ușoare, deoarece sistemul de operare nu ar trebui să organizeze o mașină virtuală completă pentru ei. Aceste sarcini:
nu au resurse proprii;
pot folosi aceleași fișiere, dispozitive virtuale și alte resurse ca acest proces.
Singurul lucru pe care trebuie să îl aibă este o resursă de procesor. Într-un sistem uniprocesor, firele (firele) împărtășesc timpul procesorului în același mod ca și procesele normale, iar într-un sistem multiprocesor pot funcționa simultan dacă nu întrunesc concurența din cauza accesului la alte resurse.
Este eficientă în special utilizarea multithreading pentru executarea aplicațiilor distribuite; de exemplu, un server multithread poate executa simultan cereri de la mai mulți clienți în același timp.
Deci, avantajele multithreading în programare includ următoarele:
Costuri de proces mai puțin consumatoare de timp pentru crearea fluxului;
creșterea performanței procesului prin paralelizarea calculelor procesorului și a operațiilor I / O.