Sunteți pe pagina 1din 30

PROGRAMAREA APLICA|IILOR {N TIMP REAL

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)

Probleme caracteristice ale proiectarii aplicatiilor software in timp-real:

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)

Probleme caracteristice ale proiectarii aplicatiilor software in timp-real:


sincronizarea taskurilor excluderea mutuala (pentru acces la resurse partajate) comunicatia intre taskuri

aspecte colaterale:

deadlock starvation

Sincronizarea taskurilor - definitie:

Sincronizarea = abilitatea mai multor taskuri de a-si coordona activitatile prin interschimbarea informatiei

doua taskuri, Ti si Tj Pi, respectiv Pj, definesc punctul de sincronizare

mecanisme pentru realizarea sincronizarii: semafoarele (binare, generalizate), mutex-uri (caz particular de semafor binar) monitoare transmiterea de mesaje

caz particular: sincronizarea prin planificare pe conditie de timp

Excluderea mutuala - definitie:

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

acceseaza resursele partajate imprimanta, zone de date comune, etc)

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

Comunicatia intre taskuri (procese si fire de executie):


se refera la un set de mecanisme specifice prin care programele care formeaza o aplicatie multitasking pot face transfer de date intre ele si isi pot sincroniza astfel activitatile transmiterea de date implica si sincronizare in mod frecvent, cele doua cerinte sunt combinate - un proces necesita date de la alt proces si trebuie sa astepte pana cand aceste date sunt disponibile anumite comunicatii intre procese pot fi private - intre procese care stiu unul de existenta celuilalt si doresc sa comunice direct intre ele publice procesul emitator transmite informatia (engl. broadcasting), iar alte procese receptioneaza ceea ce a fost transmis se utilizeaza mecanisme de transmitere de mesaje (cutii postale, canale de comunicatie, etc)

Sisteme de operare in timp-real:

aspecte generice ale sistemelor de operare in timp-real cerinte clasificare abordari studiu de caz - QNX

Sisteme de operare in timp-real (cont.):

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

Sisteme de operare in timp-real - clasificare:

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

Sisteme de operare in timp-real - nuclee (kernel) proprietary comerciale:


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

de fiecare data implica trei aspecte movement work time

... adica: a process performs actions over some interval of time in order to achieve, or to progess to, some objective

Procese si fire de executie:

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

Fire de executie - procese usoare' (engl. light weight processes):


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)

comutare de context rapida - light weight processes !

Sincronizarea taskurilor (procese sau fire de executie):

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();

dorim ca ordinea de afisare a mesajelor sa fie urmatoarea:


$ Mesaj 1 Task 1 $ Mesaj 1 Task 2 $ Mesaj 2 Task 1

cum facem ? sincronizam activitatile

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

Sincronizarea taskurilor - sistem de activitati:

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 <

Sincronizarea taskurilor - sistem de activitati (exemplu):

exemplu un sistem de activitati asociat unei aplicatii format din 7 activitati


A1 A1 A2 A3 A4

A2

A3

A4

A5 A5 A6

A6

A7 A7

A1 Task 1 A2 A3 Task 2 A5 A4

Executia secventiala realizeaza implicit sincronizari

A6 Task 3

Punem in evidenta sincronizari explicite care vor fi rezolvate prin intermediul apelurilor de sistem

A7

Sincronizarea taskurilor - sistem de activitati (exemplu):

Punem in evidenta sincronizari explicite care vor fi rezolvate prin intermediul apelurilor de sistem

A1 Task 1 A2 A1 A3 Task 2 A5 A4 Task 1 A2 A6 Task 3 A5 A7 A7 A6 Task 3

A3 Task 2

S13

S14
A4

S67

Sincronizarea taskurilor - sistem de activitati (exemplu):

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

Mecanisme pentru realizarea sincronizarii - semafoare:

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)

Mecanisme pentru realizarea sincronizarii - semafoare:

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)

Mecanisme pentru realizarea sincronizarii - semafoare:

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

Mecanisme pentru realizarea sincronizarii - semafoare:

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;

operatia de tip V(SB) are urmatoarele efecte:

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.

Semafoare binare (cont.):

exemplu:

folosim un semafor binar, SB, cu valoare initiala val(SB) = 0

Task 1 .... PS1: ....

Task 2 .... PS2: ... DEVINE

Task 1 ... V(SB) ...

Task 2 ... P(SB) ...

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

Semafoare binare - exemplu:


Task 1 A1 A2 A5 A7 A3 A4 A6 Task 2 Task 3

Task 1 A1 V(S13) V(S14) A2 A5 P(S67) A7 initial: S13 = 0, S14 = 0, S67 =0

Task 2 P(S13) A3

Task 3 P(S14) A4 A6 V(S67)

Semafoare binare - exemplu:

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:

atentie: valoarea initiala a semafoarelor (sa nu blocam taskurile reciproc)