Implementarea conceptului de proces secvențial în sistemele de operare

Pentru ca sistemul de operare să gestioneze procesele, acesta 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, de regulă, următoarele informații:







- Identificator de proces (PID)

- tipul (sau clasa) procesului, care definește pentru supraveghetor anumite reguli de acordare a resurselor;

- prioritatea procesului, conform căreia supraveghetorul furnizează resurse (într-o clasă de procese, procesele prioritare sunt în principal întreținute);

- o variabilă de stare care determină starea procesului (gata de funcționare, funcționare, așteptare pentru un dispozitiv 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.);

Conceptele procesului și resursei computaționale _______________________________ 35

- parametrii de pornire (punctul în care trebuie activat procesul și frecvența acestei proceduri);

descriptorii de sarcină sunt de obicei situate în permanență în memoria RAM la locul de muncă supervizor de viteză care le organizează în liste (cozile), și afișează schimbarea de stare a procesului prin mutarea satelit-descriu corespunzător dintr-o listă la 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, pentru starea de așteptare, există, de obicei, mai mult de o singură listă, dar multe tipuri de resurse pot provoca starea de așteptare. De exemplu, pot exista atât de multe stări de așteptare pentru o operație I / O, deoarece există dispozitive I / O în sistem.

În unele sisteme de operare, numărul de descriptori este determinată de gestul și de a avansa (generarea de versiunea sistemului de operare sau în fișierul de configurare al dietei, care este utilizat atunci când se încarcă sistemul de operare), în altele, după cum este necesar, sistemul poate aloca porțiuni de memorie pentru noi descriptori. Pe-exemplu, în deja puțin cunoscut OS / 2, care în urmă cu câțiva ani, mulți experți considerat a fi unul dintre cel mai bun sistem de operare pentru calculatoare personale, numărul maxim posibil de descriptori de sarcini specificate în CONFIG.SYS fișier de configurare. De exemplu, filetele string = 1024 fișier CONFIG.SYS înseamnă că întregul sistem poate exista în paralel și te-umplere până la 1024 de sarcini, inclusiv procesele de calcul și fire lor.

În sistemele de operare în timp real, numărul de procese este de obicei fixat și, prin urmare, este recomandabil să se determine în avans (în stadiul de generare sau configurare a sistemului de operare) numărul de descriptori. Pentru a utiliza astfel de sisteme de operare ca sistemele cu scop general (care este acum neobișnuit), de obicei numărul de descriptori a fost luat cu o anumită marjă,

1 În trecutul recent, destul de des, și calitatea sistemelor de calcul cu scop general au fost minicomputerele și au instalat pe ele un sistem de operare în timp real.

Capitolul 1. Concepte de bază

iar apariția unei noi sarcini a fost asociată cu umplerea acestei structuri de informații. Deoarece descriptorii de proces sunt în mod constant localizați în memoria principală (pentru a accelera munca dispecerului), numărul lor nu ar trebui să fie foarte mare.

Pentru o prelucrare mai eficientă a datelor în sistemele în timp real, este recomandabil să existe sarcini permanente, care în întregime sau parțial există întotdeauna în sistem, indiferent dacă cerința a fost primită de la ei sau nu. Fiecare sarcină permanentă are o anumită zonă de RAM (sarcină RAM-rezidentă, sau pur și simplu o sarcină rezidentă), indiferent dacă sarcina este în prezent executată 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.

suport hardware pentru sistemele de operare a lucra cu aceste structuri în loc pentru informare (sarcini mâner) mecanisme adecvate pot fi puse în aplicare în cadrul procesorului. De exemplu, în microprocesor Intel 80x86 (a se vedea capitolul 4) Există un registru TR special (task Register), indicând o lună tonahozhdenie structura de informații speciale. - segmentul de stat sarcina (Segment de stat Sarcină, TSS), în care atunci când trecerea de la baza obiectivelor de sarcină conținutul registrelor procesorului este salvat automat [1,8, 48].

Întrucât există o diferență semnificativă între termenii "proces" și "sarcină" în timp, vom examina acum această problemă în detaliu.

Deși noțiunile de moduri de multiprogramare și multitasking sunt suficient de apropiate, nu este același lucru. Din păcate, există încă o anumită confuzie aici. Principalele motive pentru aceasta - nu numai că terminologia nu sa stabilit încă și că multe companii de software au preferat în mod diferit să se refere la aceleași entități, ci și complexitatea și ambiguitatea situației.

Modul multi-program presupune că sistemul de operare organizează executarea paralelă a mai multor procese de calcul pe un singur computer. Și fiecare proces de calcul poate, în principiu, să nu depindă de alte procese de calcul. Cu excepția cazului în care acestea pot întârzia executarea reciprocă din cauza necesității de a partaja alternativ resursele sau întârzie puternic punerea în aplicare a reciproc, care dețin o resursă nedivizată. Este posibil să nu aibă nici fișiere partajate, nici variabile partajate. În general, aceștia pot veni cu diferiți utilizatori. Pur și simplu, aceste procese, din poziția unui observator extern, sunt efectuate simultan pe același computer. Deși pot fi executate în momente diferite și pe computere diferite. Principalul lucru este că modul de multiprogramare asigură independența acestor procese. Pentru fiecare proces, sistemul de operare alocă resursele solicitate, este executat ca într-o mașină virtuală separată. Mijloacele de securitate a sistemului trebuie să se asigure că un proces de calcul nu interferează cu un alt proces de calcul. Și dacă o astfel de protecție nu poate fi asigurată,







Concepte ale procesului și resursei computaționale _______________________________ 37

atunci sistemul nu poate fi considerat fiabil. Multe metode și metode specifice au fost inventate de către dezvoltatori pentru a asigura calcule fiabile și pentru a preveni posibilitatea de a afecta deliberat sau în mod eronat rezultatele calculelor într-un alt proces.

Cu toate acestea, există un alt nu trebuie să împartă calcul de proces-SY unul de altul, ci mai degrabă să le combine, pentru a oferi posibilitatea de aproape Interac-interacțiune între Execută calcule. De exemplu, rezultatele procesării unui proces de calcul pot fi necesare pentru a începe sau a continua activitatea altui. Există un număr foarte mare de situații în care este necesar să se asigure o interacțiune activă între procesele computaționale care rulează. Dacă nu puteți obține acces la variabilele de alt proces, deoarece sistemul de operare este construit în condiții de siguranță și de a proteja al-esting spațiu al procesului de calcul de a interfera cu alte procese de calcul, există obstacole serioase în transmiterea oricăror date a fost între procese.

Termenul de funcționare multitasking a început să fie aplicat doar pentru acele cazuri când este necesar să se asigure interacțiunea dintre calcule. Modul multi-hop înseamnă că sistemul de operare vă permite să organizați executarea paralelă a calculelor și există mecanisme speciale pentru transferul de date, semnalele de sincronizare, mesajele dintre aceste calcule interacționate. Acest lucru se poate face datorită faptului că astfel de calcule nu ar trebui să fie izolate unele de altele de sistem. Sistemul de operare nu ar trebui să implice în mod obligatoriu toate mecanismele de protecție a calculelor de neintervenție unul în celălalt. În modul multitasking, dezvoltatorul programului trebuie să aibă grijă să împartă resursele între sarcinile sale. Sistemul de operare va împărți doar timpul procesorului între sarcini.

Conceptul procesului a fost introdus pentru a implementa ideile de multiprogramare. Termenul de problemă, de asemenea, din păcate, în majoritatea cazurilor a fost aplicat pentru același lucru. La un moment dat au distins termenii "multitasking" și "multiprogramare", dar apoi au început să se înlocuiască reciproc, ceea ce a dus la o mulțime de confuzie. Astfel, pentru a implementa multitasking în interpretarea sa inițială, a fost necesar să se introducă entitatea corespunzătoare. O astfel de entitate a devenit procese subțiri sau, așa cum se numește în prezent, fire de execuție, fire sau fire.

"Firele nu trebuie confundate cu fluxul de date.

Capitolul 1. Concepte de bază

Cu alte cuvinte, în cazul proceselor, sistemul de operare le consideră complet independente și independente. În același timp, sistemul de operare își asumă rolul de arbitru în litigiile proceselor concurente pentru resurse. De asemenea, oferă protecție pentru calculul de funcționare.

Concepte ale procesului și resurselor de calcul _______________________________ 39

Este deosebit de eficient să se utilizeze multithreading pentru a efectua aplicații distribuite. De exemplu, un server multithread poate executa simultan cereri de la mai mulți clienți în același timp. După cum știți, sistemul de operare OS / 2 a fost unul dintre primele sisteme utilizate în computerele personale, care au suportat multithreading. La mijlocul anilor 1990, au fost create un număr mare de aplicații pentru acest sistem de operare, în care prezența mecanismelor de multithreading a dus, de fapt, la o creștere semnificativă a vitezei de calcul. Pentru sistemele Windows cu care ne confruntăm cu toții, produse precum SQL Server, Oracle au un multithreading pronunțat. Și, deși același Word, Excel, Internet Explorer formează și fluxuri în munca lor, nu există aproape nici o concurență aparentă în aceste programe. Prin urmare, pe măsură ce numărul de procesoare din computer crește, astfel de programe nu pornesc mai repede.

Astfel, esența „firului de execuție“ a fost introdus pentru a-zoaie schyu aceste unități să aloce timp CPU între posibile de lucru-mi. Esența „procesul“ sugerează că necesitatea de a lua în considerare programarea TVA toate resursele alocate acestora. In timp ce manipulare se poate schimba numai contextul sarcinii de activitate-flux, dacă vom trece de la o sarcina la alta într-un singur proces. Toate celelalte resurse de calcul nu sunt afectate. Fiecare proces întotdeauna constă din cel puțin unul dintre primul fir de execuție și numai dacă există paralelism intern, cald-ceață poate „părți“ un flux în mai multe paralele. A apărut necesitatea fluxurilor în sistemele informatice uniprocesor, deoarece acestea permit să organizeze calculele mai eficient. Pentru a folosi avantajele sistemelor multiprocesor cu flux de memorie partajată este pur și simplu un eventual-go, deoarece acestea permit nu numai să accelereze într-adevăr până la executarea sarcinilor de co-torye permite paralelismul lor natural, dar, de asemenea, pentru a descărca elementele procesor-Nye ale lucrării, astfel încât acestea nu sunt inactive. Rețineți, totuși, că este de dorit să fie în măsură să minimizeze interacțiunea dintre fluxurile face este, pentru accelerarea atât a fluxurilor paralele pot fi minimizate din cauza întârzierilor de sincronizare și a schimbului de date.

Fiecare fir este strict secvențial și are propriul contor de software și stivă. Firele, ca și procesele, pot provoca copiii thread-ului, deoarece orice proces constă din cel puțin un fir. Ca procesele tradiționale (adică procesele care constau dintr-un singur flux), fiecare fir poate fi în una dintre stările active. În timp ce un fir este blocat (sau doar în coada de sarcini gata de execuție), poate fi executat un alt fir al aceluiași proces. Curenții împărtășesc timp procesiv în același mod ca și procesele normale, în funcție de diferitele opțiuni de expediere.

Capitolul 1. Concepte de bază

Concepte ale procesului și resursei computaționale _______________________________ 41

Acum, dacă te duci înapoi la fișierul CONFIG.SYS deja menționat, în care la sistem opera translațională OS / 2 specifică cei mai importanți parametri care definesc munca ei, este de remarcat faptul că, în această linie de fire de fișier = 1024 indică o nu co-lichestvo procese și anume sarcini. Și sarcina în acest caz este înțeleasă ca procesul și fluxul acestui proces.

În concluzie, există câteva sfaturi pentru utilizarea firelor de execuție atunci când creați aplicații care sunt împrumutate de la [28].

- În cazul unui sistem uniprocesor o multitudine de fluxuri paralele accelerează adesea de lucru de aplicare, deoarece timpul fiecare promo individ zhutok posibil să se efectueze un singur flux. În plus, cu cât sunt mai multe fire pe care le aveți, cu atât este mai mare încărcarea sistemului care se referă la comutarea între ele. Multitasking de mai mult de două fluxuri permanente-ing de lucru în proiectul dumneavoastră nu face programul mai rapid, în cazul în care fiecare dintre fluxurile care nu vor necesita frecvente de intrare-ieșire.

- În primul rând, trebuie să înțelegeți ceea ce este necesar de debit. Subiect că tratamentul poate preveni ca sistemul să răspundă rapid la solicitările de intrare-te-apă. Fire permite programului să răspundă la solicitările utilizatorilor și gura-roystv, dar în același timp (inclusiv) este extrem de CPU intensive. Fluxurile-permit calculatorului pentru a servi simultan mai multe dispozitive, și ați creat un flux, responsabil pentru manipularea anumite dispozitive, cum ar fi mini-MUM poate necesita la fel de mult timp este necesar pentru sistem interogările on-rabotki de la toate dispozitivele.

- Firele pot fi atribuite priorități diferite pentru ca cele mai puțin importante procese să ruleze în fundal. Aceasta este modalitatea de a împărtăși onest resursele procesorului. Cu toate acestea, este necesar să se înțeleagă faptul că procesorul este unul absolut, și există multe fire. Dacă în programul dvs. procedura principală transferă ceva pentru procesare într-un flux cu prioritate scăzută, atunci programul în sine devine pur și simplu incontrolabil.

- Firele funcționează bine atunci când sunt independente. Dar încep să lucreze neproductiv, când sunt adesea forțați să se sincronizeze pentru a accesa resursele comune. Blocajele și secțiuni critice nu lyayut sistem ADD viteză, dar fără utilizarea acestor mecanisme de calcul care interacționează cu Interac nu poate rula.

Capitolul 1. Concepte de bază

- Ori de câte ori oricare dintre thread încearcă să profite de procesul de calcul a resurselor partajate de care aparține, trebuie să legalizeze într-un fel și de a proteja afacerea. Un instrument bun pentru aceasta este secțiunile critice, semafoarele și cozile de mesaje (vezi Capitolul 7). Dacă ați testat aplicația dvs. și nu ați detectat erorile de sincronizare, aceasta nu înseamnă că acestea nu sunt acolo. Utilizatorul poate crea situațiile cele mai imprevizibile. Acesta este un moment foarte important în dezvoltarea aplicațiilor multi-filetate.

- Nu atribuiți mai multe funcții fluxului. Relațiile funcționale complexe fac dificilă înțelegerea structurii generale a aplicației, a algoritmului acesteia. Cu cât este mai simplu și mai unic fiecare dintre situațiile în cauză, cu atât este mai mare probabilitatea ca erorile să fie evitate.







Articole similare

Trimiteți-le prietenilor: