Scrigroup - Documente si articole

Username / Parola inexistente      

Home Documente Upload Resurse Alte limbi doc  


AccessAdobe photoshopAlgoritmiAutocadBaze de dateC
C sharpCalculatoareCorel drawDot netExcelFox pro
FrontpageHardwareHtmlInternetJavaLinux
MatlabMs dosPascalPhpPower pointRetele calculatoare
SqlTutorialsWebdesignWindowsWordXml

PROIECT SOLTR - Tablou cu 10 numere reale si 3 task-uri

calculatoare

+ Font mai mare | - Font mai mic



PROIECT SOLTR




Tablou cu 10 numere reale si 3 task-uri

6. Tablou cu 10 numere reale si 3 task-uri

Exploatarea avantajelor aduse de considerarea unei aplicatii ca fiind compusá din mai multe taskuri ce se executá ín paralel sau concurent impune, asa cum a rezultat si din exemplele prezentate ín capitolul anterior, folosirea unor mecanisme care sá asigure interactiunea corectá a taskurilor pentru ca programul ín ansamblu sá aibá evolutia doritá. Dening P. (ín Operating Systems Theory) a arátat cá interactiunea taskurilor poate fi redusá la trei tipuri de operatii multitasking: comunicarea íntre taskuri, sincronizarea taskurilor si excluderea mutualá a taskurilor.

Comunicarea íntre taskuri este operatia multitasking prin care se permite taskurilor sá schimbe date íntre ele. Datele comune (utilizate de mai multe taskuri) sunt memorate ín memoria interná a calculatorului ín anumite zone declarate ca zone comune (pentru datele comune) si la care vor avea acces toate taskurile. Deoarece zonele de date comune organizate ín memoria interná au o capacitate micá si limiteazá la un volum mic datele comune, ín cazul unui volum mare de date, acestea se organizeazá ín fisiere plasate pe un suport de memorie externá (de obicei disc magnetic).

Majoritatea sistemelor de operare actuale oferá un sistem de lucru cu fisierele prin intermediul unui SGF (sistem de gestiune a fisierelor). Dezavantajul acestei metode este legat de timpii relativ mari pentru accesarea datelor din fisiere, dar metoda este utilizatá datoritá capacitátii mari de memorare a acestor sisteme.

Excluderea mutualá este operatia multitasking prin care se exclude accesul simultan al mai multor taskuri la una si aceeasi resursá (zona de date din memorie, fisier, periferic etc.). Restricþiile, ín acest caz, sunt de tipul: operaþiile A, B, C, , X nu pot avea loc simultan.

Definitie: Secventa de program a fiecárui task ín care se apeleazá o resursá comuná partajatá se numeste sectiune criticá a taskului. (Din aceastá cauzá, de multe ori, excluderea mutualá a taskurilor se mai íntälneste si sub denumirea de problema sectiunii critice).

Plecänd de la ipoteza cá intervalele de timp de executie ale taskurilor sunt diferite si necunoscute si cá orice task iese din sectiunea sa criticá dupá un interval finit de timp, solutia unei probleme de acest tip trebuie sá satisfacá urmátoarele conditii:

a) - utilizarea exclusivá: la un moment dat un singur task si numai unul se poate afla ín sectiunea sa criticá corespunzátoare unei resurse;

b) - evitarea blocajului reciproc: dacá mai multe taskuri sunt blocate ín asteptarea aceleiasi resurse critice si aceasta nu este ocupatá, atunci unul dintre aceste taskuri (de regulá cel mai prioritar), trebuie sá poatá sá intre ín sectiunea sa criticá la capátul unui interval finit de timp;

c) - evitarea dependentelor inutile: dacá un task este blocat ín afara sectiunii sale critice, acest blocaj nu trebuie sá ímpiedice intrarea unui alt task ín sectiunea sa criticá.

Considerám trei taskuri T1, T2, T3, primele douá urmárind índeplinirea a douá evenimente externe, asincrone, asociate cu variabilele EV1 si EV2, iar al treilea fiind conditionat ín executia lui, la un moment dat, de índeplinirea ambelor evenimente. Ca atare, la momentul critic, taskul T3 va fi obligat sá execute primitiva ASTEAPTÁ(EV1 si EV2) si se va bloca dacá cel putin una dintre variabile are valoarea FALS, ceea ce semnificá faptul cá cel putin unul dintre evenimente nu a avut loc. Pe másurá ce evenimentele au loc, taskul T1, respectiv T2 vor executa primitivele :DECLANSAZÁ(EV1)respectiv,DECLANSAZÁ (EV2) care vor avea ca efect deblocarea taskului T3 si aducerea lui ín situatia de asi putea continua executia. Structura programelor celor trei taskuri este prezentatá ín Figura 5.6

Variabilele tip eveniment pot fi utilizate si ín realizarea operatiilor multitasking de excludere mutualá. Pentru evitarea accesului simultan a douá sau mai multe taskuri la o resursá partajatá, acesteia i se asociazá o variabilá eveniment EVM cáreia i se atribuie initial valoarea ADEVÁRAT.Directiva DECLANSAZÁ(EVM) simuleazá primitiva V (de la semafoare), iar ansamblul de directive ASTEAPTÁ(EVM) urmatá imediat de CONSUMÁ(EVM) poate simula primitiva P, dacá secventa se executá neíntreruptibil, ceea ce nu este greu de realizat. Structura a



douá taskuri T1 si T2 ín situaþia de excludere mutualá este prezentatá ín Figura 5.7.

Primul task care intrá ín sectiunea criticá ajunge ín aceasta trecänd de primitiva ASTEAPTÁ(EVM) - posibil, deoarece initial EVM = ADEVÁRAT, executänd apoi primitiva CONSUMÁ(EVM) ceea ce duce la EVM = FALS. Ín acest moment orice alt task care doreste sá pátrundá ín propria sa sectiune criticá se va bloca pe primitiva ASTEAPTÁ(EVM) päná cänd taskul initial abandonänd resursa comuná executá primitiva DECLANSAZÁ(EVM) ín urma cáreia variabila eveniment EVM capátá valoarea ADEVÁRAT.

PROGRAMUL  IN C++

#include<iostream.h>

bool ev1; //evenimentul 1 controleaza task-ul 1

bool ev2; //evenimentul 2 controleaza task-ul 2

bool ev3; //evenimentul 3 controleaza task-ul 3

class Task1

void run(float tabel[], int n) //declararea functiei pentru task-//ul 1; primeste ca parametru un vector de numere reale si //dimensiunea lui

ev1=false; //consuma evenimentul 1

ev2=true; //declanseaza evenimentul 2

}

}

class Task2

void run(float tabel[],int n)

cout<<'Maximul este:'<<max<<' pe pozitia:'<<maxpos+1<<endl;

ev2=false;

ev3=true;

}

}

class Task3

void run(float tabel[],int n)

cout<<'Minimul este:'<<min<<' pe pozitia:'<<minpos+1<<endl;

ev3=false;

ev1=true;

}

}

void main()

int cont = 1; //stabileste daca se continua rularea programului

ev2 = true; //inceperea ciclului de executie se porneste cu //task-ul2

while(cont) // cat timp variabila cont=1 se exexuta ciclul






Politica de confidentialitate



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1199
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2021 . All rights reserved

Distribuie URL

Adauga cod HTML in site