Sunteți pe pagina 1din 34

PROGRAMAREA APLICA|IILOR {N TIMP REAL

Curs 11 Sisteme de operare in timp-real Planificarea in sisteme in timp-real

Sumar curs PATR:

Notiuni introductive: sistem in timp real si sisteme embedded in timpreal, sisteme de operare in timp real, limbaje de programare pentru aplicatii in timp-real, programare concurenta, definitii (proces, fir de executie, task, preemptiune); Aspecte concurentiale ale aplicatiilor in timp-real - mecanisme pentru sincronizarea si comunicarea intre taskuri (sincronizare, excludere mutuala, mesaje, etc); Aspecte temporale ale aplicatiilor in timp-real caracteristici de limbaj pentru specificarea, implementarea si analiza deadline-urilor; Mecanisme de planificare pentru aplicatii in timp-real algoritmi de planificare, evitarea inversiunii de prioritate. Tehnici de specificare si proiectare a aplicatiilor software in timp-real. Metode de proiectare. Standarde pentru dezvoltarea aplicatiilor in timpreal; Organizarea aplicatiilor in timp-real. Proiectare de sistem UML si OMG SysML. Metodologii de proiectare si implementare a aplicatiilor in timp-real MDD (Model driven Development).

Sisteme de operare in timp-real - Nuclee proprietary:

comerciale QNX, pSOS, VxWorks, Nucleus, ERCOS, EMERALDS, Windows CE,... caracteristici: dimensiune redusa (~ zeci K) rapide comutare de context rapida si raspuns rapid la intreruperi multitasking si IPC prin intermediul cutiilor postale, evenimentelor, semnalelor, semafoarelor, etc management special al memoriei cum suporta constrangerile de timp ceas de timp-real (e.g. QNX - CLOCK_REALTIME) planificare pe baza de prioritati (in continuare ...) alarme speciale si timeouts (e.g. QNX - cu timere) standardizare prin extensii POSIX Real-Time

Extensii RT ale UNIX:


e.g. RT-UNIX,RT-LINUX, RT-MACH, RT-POSIX caracteristici: mai lente, mai putin predictibile in functionare au medii de dezvoltare mai bune adopta din RT-POSIX timere, planificare pe baza de prioritati, semafoare, IPC, notificare prin evenimente asincrone, procese mem locking, threads, operatii sincrone si asincrone de I/O probleme: coarse timers, raspuns lent la intreruperi (engl. latency), cozi FIFO, no locking pages in memory, no predictable IPC

OBSERVATIE:

Evenimente (events) = aparitii externe care vin din lumea reala ("things that happen") evenimentele pot fi: sincrone: sunt tratate in ordinea in care apar (cronologic) - de exemplu, mesajele asincrone: de obicei sunt evenimente critice care trebuie procesate imediat, si este necesar sa intrerupa activitatea care se executa in mod curent (se trateaza cu ajutorul semnalelor) evenimentele reprezinta tranzitii care provoaca (engl. trigger) o modificare in starea sistemului

Diagrama generala a tranzitiilor de stare ale unui proces / thread:


NEW (creat)
fork, exec spawn

TERMINAT READY (gata de executie)

dispatch

tratare intrerupere (I/O) sau aparitie eveniment/ indeplinire conditie timp

RUNNING (in de executie)

BLOCKED (blocat, suspendat pe conditie)

intrerupere (I/O) sau asteptare pe eveniment / timp

Coada procese READY PROCESOR

Coada procese BLOCKED

Tranzitii de stare ale proceselor / firelor de executie:

instalat (creat NEW) exista din punct de vedere al nucleului (are create structurile de date: bloc de control task, descriptor de task, etc. gata de executie (READY)

are ndeplinite toate conditiile si poate prelua unitatea centrala; planificatorul de task-uri ia n considerare doar task-urile aflate n aceasta stare; un task intra in starea gata de executie daca se afla in executie (la expirarea time slice-ului) sau daca a fost scos din executie de catre alt task mai prioritar (preempted). Daca era in starea BLOCKED / SUSPENDED, taskul poate intra in starea READY daca apare evenimentul care a determinat trecerea taskului in starea SUSPENDED;

Tranzitii de stare ale proceselor / firelor de executie (cont.):


in executie (RUNNING) task-ul care este executat efectiv de c`tre procesor; un task poate intra in executie atunci cind este creat (daca nici un alt task nu este gata de executie), sau prin tranzitie din starea gata de executie (daca este eligibil pentru a fi executat pe baza prioritatii sale sau in functie de pozitia sa in coada round-robin); blocat (BLOCKED / SUSPENDED) blocat pe o operatie de I/O; blocat pe o conditie de timp (sleep t); blocat nedefinit (sleep(0), suspend, etc.); taskurile care asteapta pe o anumita resursa, deci nu sunt gata de executie, se afla in starea suspendat sau blocat (pe conditie de timp sau pe eveniment).

Tranzitii de stare ale proceselor / firelor de executie (cont.):

pentru starile READY si BLOCKED, nucleul organizeaza cozi de asteptare (coada de procese READY si coada de procese BLOCKED). un task blocat este scos din oricare dintre aceste doua stari atunci cnd este ndeplinita conditia pentru care asteapta si este trecut n coada READY

Nuclee de RT pentru cercetare:

suport pentru algoritmi de planificare in RT (in continuare ...) suport pentru timing analysis RT sync primitives, e.g., priority ceiling (in continuare ...) algoritmi de evitare a inversunii de prioritate predictability over avg perf support for fault-tolerance and I/O exemple: Spring, Mars, HARTOS, MARUTI, ARTS, CHAOS, EMERALDS

Sisteme de operare:

sistem de operare general de tip monolit

sistem de operare minimal cu un nucleu minimal (kernel)

Structura unui sistem de operare in timp-real:

exemplu QNX

Bibliografie studiu individual: QNX Momentics Development Suite Documentation Set http://www.qnx.com/developers/docs/

QNX Momentics (v.6.3.2 Documentation) QNX Neutrino System Architecture arhitectura microkernel planificare (scheduling), etc ... QNX Neutrino Programmer's Guide etc ... Real Time and Embedded Guide (Herman Bruyninckx, K.U.Leuven, Belgium) http://people.mech.kuleuven.be/~brunyninc/rthowto/

Planificarea in sisteme in timp-real:


planificarea (engl. scheduling) reprezinta un concept asociat sistemelor de operare, prin care se asigura mecanismele necesare pentru a face posibila concurenta un context de planificare include un motor de executie denumit planificator (engl. scheduler) care executa o anumita politica (strategie) de planificare (engl. scheduling algorithm) dispune de un numar de resurse care sunt planificate in functie de politica de planificare resursele includ (au) actiuni care se executa cu o anumita prioritate in raport cu alte actiuni sistemul de operare furnizeaza motorul de executie (planificatorul) si politicile de planificare utilizatorul furnizeaza resursele planificabile (taskuri sau resurse care trebuie sa fie (sau nu) protejate de accesul simultan prin mecanisme de tipul semafoarelor (de exemplu)

Planificarea taskurilor in sisteme in timp-real:


Politicile de planificare pot fi de tip:

fair. Planifica in asa fel incat toate taskurile progreseaza mai mult sau mai putin uniform (in acelasi fel evenly).

exemple: executivul de tip ciclic, executiv ciclic de tip time-triggered, roundrobin, round-robin preemptiv (cu diviziunea timpului)

priority-driven (unfair policies). Anumite taskuri (cele cu prioritate mai mare) sunt planificate preferential fata de celelalte.

cand mai multe taskuri sunt gata de executie, selectia se va face in functie de prioritati in cazul unui planificator preeemptiv cu prioritati, taskul care se executa va fi scos din executie de un task cu prioritate mai mare care este gata de executie planificatoarele bazate pe prioritati sunt responsive atita timp cat prioritatea taskului activat de evenimentul exterior (incoming event) este mai mare decat cea a taskului care se executa in momentul aparitiei evenimentului. Din aceasta cauza, in astfel de sisteme intreruperile au cea mai mare prioritate. exemple: Rate Monotonic Scheduling (RMS), Deadline Monotonic Scheduling (DMS), Maximum Urgency First (MUF), Earliest Deadline First (EDF), Least Laxaty (LL)

Planificarea taskurilor in sisteme in timp-real (cont):

OBSERVATIE: multe dintre sistemele in timp real actuale nu pot face fata direct deadline-urilor. De aceea, ele sunt proiectate sa raspunda cat mai bine cerintelor taskurilor de timp real, astfel incat, atunci cand se apropie un deadline, sa poata fi planificat rapid un task

relativ la momentele semnificative la care se pune problema alegerii unui task pentru a fi lansat in executie, apar deosebiri in functie de implementarea nucleului momentele semnificative sunt momentele la care se apeleaza planificatorul de task-uri. In general, aceste momente sunt de tipul: terminarea unei operatii de I/O expirarea unei perioade fixe de timp (ceas de timp real) - se fixeaza o baza de timp, iar la fiecare astfel de interval de timp se apeleaza planificatorul de task-uri executia (apelul) unor functii de sistem specifice

Planificarea taskurilor in sisteme in timp-real (cont):

principalele notiuni asociate in cazul planificarii taskurilor sunt:


mecanismul de tip round-robin preemptiunea / nonpreemptiunea taskurilor

in functie de combinatiile acestor notiuni in cadrul unei metode de planificare putem clasifica algoritmii de planificare ai taskurilor

Planificarea taskurilor in sisteme in timp-real (cont):

planificarea de tip round-robin se refera la o metoda de planificare a taskurilor care presupune organizarea unor taskuri intr-o coada circulara, taskul care se executa in mod curent fiind primul task din coada. Dupa ce isi termina executia (sau si-o intrerupe in mod temporar) el va fi pus la sfirsitul cozii, deci in mod relativ va deveni cel mai putin prioritar. taskurile se executa secvential, pina la final, intr-o ordine de tip FIFO de multe ori aceasta maniera de planificare se utilizeaza in conjunctie cu un executiv de tip ciclic.

Mecanismul de planificare de tip round robin

Planificarea taskurilor in sisteme in timp-real (cont):

preemptiunea taskurilor este o procedura prin care este posibila intreruperea executiei unui task mai putin prioritar de catre un task cu prioritate mai mare

prioritatile atasate fiecarei intreruperi se bazeaza pe urgenta taskului asociat intreruperii respective

Metode de planificare a taskurilor:

planificator preemptiv cu planificare simpla de tip roundrobin planificator non-preemptiv cu prioritati combinarea prioritatilor cu intreruperile de ceas situatii intermediare de alocare a task-urilor (mixte)

Planificator preemptiv cu planificare simpla de tip round-robin:

planificarea de tip round-robin este o planificare de tip FIFO (primul task sosit este servit primul) la planificatoarele de tip round-robin cu time-slicing, fiecarui task executabil ii este atasat un cuanta fixa de timp, denumita time slice, in care taskul se poate executa. Taskul se executa pina cind isi termina complet executia sau ii expira timpul de executie, timp specificat de intreruperea de ceas daca taskul nu reuseste sa-si termine executia intr-un time slice, contextul sau trebuie salvat, dupa care va fi plasat la coada listei de taskuri executabile. Va fi refacut apoi contextul urmatorului task din lista si executia sa va fi reluata taskul care si-a intrerupt temporar executia devine in mod relativ cel mai putin prioritar taskul TR va fi adaugat la coada de procese gata de executie (engl. READY) si va astepta urmatoarea felie de timp (engl. time slice)
Se activeaza procesul de timp-real

Proces 1

Proces 2

Proces n

Proces de Timp-Real

Puncte de preemptiune (tact ceas)

Interval de planificare al taskului de timp-real

in general, nu este o solutie acceptabila pentru aplicatii in timp-real

Planificator non-preemptiv cu prioritati:

in cazul unui planificator non-preemptiv, taskul care se executa in mod curent nu poate fi intrerupt pina cind nu isi intrerupe el singur executia se poate utiliza totusi un mecanism de planificare bazat pe prioritati, dndu-i-se task-ului de timp real prioritatea cea mai mare, astfel incat un task TR aflat in stare gata de executie (engl. READY) poate fi planificat imediat ce procesul curent se blocheaza sau isi termina normal executia taskul TR este adaugat la inceputul cozii de procese gata de executie.
Se activeaza procesul de timp-real

Proces 1

(se executa)

Proces de Timp-Real

Interval de planificare al taskului de timp-real

Aici se blocheaza procesul care se executa la momentul curent sau isi termina executia

acest mod de planificare poate conduce la delay-uri de ordinul a cateva secunde daca procesul care se executa in mod curent este lent si de prioritate scazuta nici aceasta solutie nu este acceptabila din punct de vedere al considerentelor de procesare in timp real.

Combinarea prioritatilor cu intreruperile de ceas (planificator preemptiv cu prioritati si puncte de preemptiune):

punctele de preemptiune apar la intervale de timp egale. Cand apare un punct de preemptiune, taskul care se executa in mod curent va fi scos din executie (engl. preempted) daca in coada asteapta un task cu prioritate mai mare
Se activeaza procesul de timp-real

Proces 1

(se executa)

Proces de Timp-Real

Puncte de preemptiune (tact ceas)

Interval de planificare al taskului de timp-real

Aici taskul de timp-real scoate din executie procesul care se executa la momentul curent si se executa imediat

in acest caz delay-ul poate fi de ordinul a cateva ms totusi, nu este o solutie optima pentru aplicatiile de timp real critice.

Politici de planificare de tip fair:

executivul de tip ciclic executiv ciclic de tip time-triggered round-robin round-robin cu diviziunea timpului

Politici de planificare de tip fair executiv de tip ciclic:

se foloseste atunci cand exista un numar fix de procese periodice si putem dezvolta o schema completa de planificare, a carei executie repetata va forta procesele sa se execute la momentul dorit un executiv de tip ciclic este de fapt o tabela de apeluri de proceduri, fiecare procedura reprezentand o parte a codului corespunzator unui proces (task) executivul ruleaza setul de proceduri (taskuri), complet fiecare dintre ele, intr-un ciclu infinit lista de taskuri este stabilita la inceput, inainte de rularea aplicatiei. avantajul: foarte simplu, are o predictibilitate mare dezavantaj: nonresponsive, unstable, non-optimal, non-robust, necesita tuning, bun pentru taskuri scurte (fiecare task trebuie sa se execute intr-un interval de timp scurt, pentru ca politica sa fie de tip fair). daca un task e mai lung, programatorul trebuie sa-l sparga in taskuri mai mici (scurte).

Politici de planificare de tip fair executiv de tip ciclic (cont):

tabela de taskuri, care se repeta periodic, este denumita frame major. Fiecare frame major (principal) este format dintr-un anumit numar de felii mai mici de timp, denumite frame-uri minore, care au durate fixe, in care sunt planificate taskurile pentru executie, cu ajutorul unui timer operatiile sunt implementate sub forma unor proceduri, organizate intr-o lista predefinita pentru fiecare frame major. La inceputul fiecarui ciclu (frame) minor, taskul timer va apela fiecare procedura din lista de exemplu, pentru 5 procese / taskuri):

while(1){ asteapta_intrerupere(); procedura_pentru_a(); procedura_pentru_b(); procedura_pentru_c(); asteapta_intrerupere(); procedura_pentru_a(); procedura_pentru_b(); procedura_pentru_d(); procedura_pentru_e(); // etc ... }

Politici de planificare de tip fair executiv de tip ciclic (cont):

spre exemplificare se considera 4 proceduri care se repeta intr-un frame major presupunem ca durata unui frame minor este 10 ms. se considera ca cele 4 proceduri trebuie sa se execute cu o frecventa de 50 Hz, 25 Hz, 12.5 Hz si 6.25 Hz, respectiv cu perioada de 20 ms, 40 ms, 80 ms si 160 ms
Frame major Frame major

Procedura 1 (executie la fiecare 2 frame-uri minore)

Procedura 3 (executie la fiecare 8 frame-uri minore)

Procedura 2 (executie la fiecare 4 frame-uri minore)

Procedura 4 (executie la fiecare 16 frame-uri minore)

Politici de planificare de tip fair - round-robin cu diviziunea timpului (preemptiv):

este o planificare de tip round-robin pentru care, daca un task nu elibereaza procesorul de buna voie, va fi intrerupt de planificator dupa un interval de timp specificat denumit time slice Avantaj: mai flexibil decat executivul de tip ciclic si round-robin simplu, este simplu, robust. Dezavantaj: nonresponsive, unstable, non-optimal

Politici de planificare bazate pe prioritati (unfair):

Rate Monotonic Scheduling (RMS) Deadline Monotonic Scheduling (DMS) Earliest Deadline First (EDF) Least Laxity (LL) Maximum Urgency First (MUF)

Rate Monotonic Scheduling (RMS):

toate taskurile se presupun a fi periodice, cu deadline-ul la sfarsitul perioadei prioritatile se ataseaza in momentul proiectarii, astfel incat taskurile cu perioadele cele mai scurte au prioritatea cea mai mare. avantaj: stabil, optimal, robust. dezavantaj: unfair, poate sa nu corespunda sistemelor mai complexe.
T T

Timp C D=T
RUNNING

C D=T

C = timpul de executie al taskului T= perioada de executie a taskului D = deadline

Rate Monotonic Scheduling (RMS) - cont.:


OBSERVATIE: daca un task periodic este executat intotdeauna pina la finalizare (adica nu exista situatii in care o instanta a taskului nu se poate executa din lipsa de resurse), atunci utilizarea procesorului de catre acest task este specificata de o relatie de tipul
U= C T

CUM SETAM PRIORITATEA TASKURILOR: toate schemele de planificare pe baza de prioritati se bazeaza pe urgenta este posibil sa se pondereze pe baza importantei prin multiplicarea cu un factor de importanta, wj, setandu-se apoi prioritatea taskului ca fiind egala cu produsul dintre unweighted priority si factorul de importanta e.g. prioritatea taskului la planificarea RMS va fi setata la:
p j= wj Tj

unde pj este prioritatea taskului, wj este o masura a importantei finalizarii taskului (completion), iar Tj este perioada de executie a taskului

Rate Monotonic Scheduling (RMS) - cont.:

in cazul planificarii de tip RMS, taskul cu prioritatea cea mai mare este taskul cu cea mai mica perioada T, al doilea in ordinea prioritatii este cel cu a doua cea mai mica perioada, etc ... daca mai multe taskuri sunt gata de executie, va fi servit primul cel cu cea mai mica perioada, adica: P1 > P2 (prioritate) = T1 < T2 (perioada)

daca afisam grafic prioritatea unui task functie de frecventa sa de executie (rate) rezulta o functie monoton crescatoare (de aici numele rate monotonic scheduling)

Rate Monotonic Scheduling (RMS) - cont.:

Prioritate

Mare
Cea mare frecventa, cel mai prioritar task

Mica

Cea mai mica frecventa, cel mai putin prioritar task

Frecventa (HZ)

Observatie:

ca masura a eficientei (effectiveness) a unui algoritm cu planificare periodica trebuie specificat daca acesta garanteaza sau nu indeplinirea deadline-urilor hard. presupunem ca avem n taskuri, fiecare avand o perioada de executie fixa si un anumit timp de executie, pentru a fi posibil ca toate deadline-urile sa fie indeplinite, trebuie sa fie indeplinita urmatoarea inegalitate:
C1 C2 C ... n 1 T1 T2 Tn

adica suma indicilor de utilizare a procesorului pentru toate taskurile nu poate depasi valoarea 1 (utilizare totala a procesorului). aceasta ecuatie estimeaza o limita superioara a numarului de taskuri pe care algoritmul le poate planifica cu succes.