Documente Academic
Documente Profesional
Documente Cultură
Curs 2 PATR Probleme caracteristice ale proiect`rii aplica\iilor software [n timp-real - concurenta -
Cuprinsul cursului:
probleme caracteristice ale proiectarii aplicatiilor software in timpreal - concurenta sisteme de operare in timp-real - caracteristici procese si fire de executie sistem de activitati si taskuri sincronizarea taskurilor mecanisme de sincronizare a taskurilor semafoare (binare si generalizate)
in aplicatiile in timp-real -> concurenta -> transfer de date -> sincronizare si comunicatie intre taskuri (procese si fire de executie) - engl. Interprocess Communication sa asigure accesul la resurse partajate (engl. shared resources) excludere mutuala sa permita transmiterea corecta a informatiilor intre componentele software ale aplicatiei in timp-real sa permita executia corecta a taskurilor prin alocarea procesorului rezolvam cu mecanisme specifice programarii concurente (e.g. semafoare, zone comune de memorie, transmitere de mesaje, etc)
sincronizarea taskurilor excluderea mutuala (pentru acces la resurse partajate) comunicatia intre taskuri
aspecte colaterale:
deadlock starvation
Sincronizarea = abilitatea mai multor taskuri de a-si coordona activitatile prin interschimbarea informatiei
mecanisme pentru realizarea sincronizarii: semafoarele (binare, generalizate), mutex-uri (caz particular de semafor binar) monitoare transmiterea de mesaje
Excluderea mutuala = abilitatea mai multor taskuri de a imparti resurse sau date in asa fel incat un singur proces sa aiba acces la o resursa partajata (engl. shared resource) la un moment dat
fiecare dintre taskurile care acceseaza resursa partajata executa o sectiune (zona) critica (adica o secventa de instructiuni cu care se
un singur task poate executa sectiunea critica la un moment dat, restul fiind blocate mecanisme pentru implementarea excluderii mutuale semafoare binare, mutex-uri (caz particular de semafor binar) monitoare transmitere de mesaje
aspecte generice ale sistemelor de operare in timp-real cerinte clasificare abordari studiu de caz - QNX
indeplinesc patru functii principale: managementul si sincronizarea proceselor gestiunea memoriei comunicatia intre procese (engl. IPC Interprocess Communication) gestiunea operatiilor I/O de asemenea, trebuie sa asigure indeplinirea constrangerilor de timp (deadlines) si predictibilitatea executiei actiunilor
nuclee (kernel) proprietary comerciale QNX, pSOS, VxWorks, Nucleus, ERCOS, EMERALDS, Windows CE,... extensii de timp-real bazate pe UNIX RT-UNIX,RT-LINUX, RT-MACH, RT-POSIX, Timesys Linux nuclee RT pentru cercetare Spring, Mars, HARTOS,MARUTI, ARTS, CHAOS, EMERALDS
mici ca dimensiune, rapide comutare rapida de context si functionare in intreruperi multitasking si IPC prin utilizarea cutiilor postale, evenimentelor, semnalelor, semafoarelor cum suporta constrangerile RT ceas de timp-real planificare pe baza de prioritati alarme speciale si timeouts standardizare prin extensii POSIX Real-Time
POSIX - Portable Operating System Interface reprezinta o familie de standarde care definesc principii de baza pentru portabilitatea aplicatiilor software pe diverse platforme hardware si diverse sisteme de operare de tip UNIX standardele POSIX 1003.1b (extensiile de timp-real) si POSIX 1003.1c (extensii pentru thread-uri)
PROCES
ca verb: to handle, as in processing an error, or processing a message ca substantiv: a program running in an operating system, sau a procedure, sau a set of procedures, for accomplishing a goal
... adica: a process performs actions over some interval of time in order to achieve, or to progess to, some objective
in multe sisteme de operare moderne, conceptul traditional de proces a fost impartit in doua concepte separate unul se refera la acapararea resurselor (engl. resource / process ownership) al doilea se refera la fluxul (engl. stream) de executie a instructiunilor (engl. thread) exemple: procnto, sh astfel, se face distinctia intre proces si fir de executie (engl. thread)
un proces poate contine mai multe fire de executie diferenta: modul de gestionare a memoriei
Procese:
prin proces intelegem un un cod program care se afla intr-o anumit stare de executie (e.g. RUNNING, READY, BLOCKED, etc) are propriul sau spatiu de adresa si un singur fir de executie logica a operatiilor (engl. flow of control) contorul program al procesului contine adresa urmatoarei instructiuni care trebuie executata gestiunea memoriei in cazul unui proces:
Adresa low Zona de cod Heap Date (globale) Adresa high Stiva
la un moment dat pot fi incarcate in memorie mai multe procese, partajand CPU si resursele fiecare proces are propriul sau spatiu de adresa, nu se pot suprapune spatiul de adresa al unui proces este invizibilpentru celelalte procese incarcate in memorie
Procese:
sistemul de operare tine evidenta starii proceselor prin intermediul tabelei de procese descrierea detaliata a starii unui proces (context de executie):
continutul registrilor CPU asociat ultimului moment in care procesul a detinut CPU memoria alocata procesului lista fisierelor deschise
atunci cand procesul este scos din executie se face o comutare de context, adica se salveaza contextul de executie sa fie rapida, pentru a pastra timing-ul aplicatiei
se face o gestiune diferita a spatiului de adresa alocat procesului firele de executie se creeaza in cadrul unui proces firele de executie ale unui proces impart spatiul de adresa al procesului, dar fiecare are propriul contor program, stiva pentru apelul procedurilor si registri
Spatiul de adresa al procesului
Variabile globale (shared) Thread 1 CP Registri Thread 2 CP Registri Thread n CP Registri
Stiva
Stiva
Stiva
Cod (shared)
Exemplu: Task 1
face_ceva_1(); afiseaza(Mesaj1 Task 1); face_altceva(); afiseaza(Mesaj 2 Task 1); exit();
Task 2
face_ceva_2(); afiseaza(Mesaj 1 Task 2); face_altceva_3(); exit();
Sincronizarea taskurilor:
un task contine una sau mai multe activitati activitatile alocate taskurilor care compun o aplicatie pot fi independente sau dependente de executia altor activitati pot fi descrise prin intermediul sistemelor de activitati o activitate independenta intr-un sistem de activitati reprezinta o secventa de instructiuni in care nu exista sincronizari (interactiuni cu alte task-uri). regiunile care nu interactioneaza se grupeaza in blocuri A11, A21, A12 sunt activitati independente A22 activitate dependenta PS punct de sincronizare
intr-un sistem de activitati se poate introduce o relatie de ordine partiala pe multimea activitatilor, si anume, scriem Ai < Aj pentru a specifica faptul ca activitatea Aj poate avea loc numai dupa terminarea activitatii Ai astfel, o aplicatie in care exista relatii de sincronizare intre activitatile componente se poate descrie prin intermediul unui un graf de precedenta, in care nodurile reprezinta activitati, iar arcele reprezinta relatia de precedenta <
A2
A3
A4
A5 A5 A6
A6
A7 A7
A1 Task 1 A2 A3 Task 2 A5 A4
A6 Task 3
Punem in evidenta sincronizari explicite care vor fi rezolvate prin intermediul apelurilor de sistem
A7
Punem in evidenta sincronizari explicite care vor fi rezolvate prin intermediul apelurilor de sistem
A3 Task 2
S13
S14
A4
S67
se incearca sa se minimizeze apelurile de sistem (sincronizari explicite) pentru exemplul anterior definim taskurile si sincronizarile explicite Task 1 A1 A2 A5 A7 A3 A4 A6 Task 2 Task 3
introduse de Dijkstra in 1965 protejeaza accesul la resursele critice (dispozitive periferice, memorie partajata, etc furnizeaza un mecanism pentru sincronizarea taskurilor (procese si fire de executie) ideea: doua sau mai multe taskuri pot coopera, receptionand sau transmitand anumite semnale, in functie de care isi pot coordona activitatile pentru semnalizare se utilizeaza variabile speciale = semafoare pentru a transmite un semnal prin intermediul semaforului s, taskul executa o primitiva signal(s) pentru a receptiona un semnal prin intermediul semaforului s, taskul executa primitiva wait(s) notatii (Dijkstra) pentru wait se foloseste notatia P proberen (to test) / passeren (to pass) pentru signal se foloseste notatia V verhogen (to increment) / vrygeven (to release)
un semafor s poate fi considerat a fi o variabila de tip intreg asupra careia se executa cele doua primitive, P si V, astfel: primitiva P (operatia de tip wait) decrementeaza valoarea semaforului. Daca valoarea semaforului devine < 0, taskul care a executat P(s) se blocheaza primitiva V (operatia de tip signal) incrementeaza valoarea semaforului. Daca valoarea este > 0, este deblocat procesul care sa blocat in P(s) un semafor poate fi initializat cu o valoare > 0 doar aceste trei operatii pot fi executate pe un semafor, adica: initializare primitiva P, P(s) primitiva V, V(s)
primitivele P si V sunt atomice nu pot si intrerupte, fiecare rutina este tratata ca un pas indivizibil sunt de tip test-and-set primitiva P intr-un singur pas: testeaza, decrementeaza si trece daca valoarea semaforului ramane > 0 primitiva V intr-un singur pas: incrementeaza si deblocheaza taskul care asteapta pe valoare semafor > 0
observatie: semafor liber daca valoarea > 0 semafor ocupat daca valoare = 0 exista doua tipuri de semafoare binare (pot lua valoarea 0 sau 1) liber, daca valoare 1 ocupat, daca valoare 0 generalizate (pot lua orice valoare intreaga pozitiva, > 0) liber, daca valoare > 0 ocupat, daca valoare 0
se utilizeaza o coada de taskuri (procese) care asteapta pe semaforul respectiv de obicei ordinea de acces este de tip FIFO
Semafoare binare:
Notam SB = {valB, q}, unde valB= {0,1} operatia de tip P(SB) are urmatoarele efecte:
daca valoarea SB = 1, atunci task-ul apelant isi continua executia, facand in acelasi timp ca val(SB) = 0; daca initial val(SB) = 0, atunci task-ul apelant este trecut n asteptare (este inserat in q(SB)) si se da controlul planificatorului de task-uri;
se face val(SB) = 1. Daca exista task-uri n coada q, unul si numai unul este scos din coada si este trecut n starea gata de executie (READY). Se da controlul planificatorului de task-uri.
exemplu:
garanteaza faptul ca blocul A22 se executa intotdeauna dupa blocurile A11 si A21 ordinea exacta stabilita de planificatorul de taskuri, in functie de prioritatile taskurilor
Task 2 P(S13) A3
sincronizare simetrica (taskurile se asteapta reciproc) initial S1 = 0, S2 = 0 Task 1 .... V(S2) P(S1) ... Task 2 .... PS2: P(S2) V(S1) ...
PS1: