Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Cerinte soft ale structurii din punct de vedere al structurii limbajului (transmiterea parametrilor si tipizarea)
CERINTE DIN PUNCTUL DE VEDERE AL STRUCTURII LIMBAJULUI
Din punctul de vedere al limbajelor utilizate in aplicatii timp real, structura acestora poate fi privita prin prisma a doua dimensiuni: spatiala si temporala:
dimensiunea spatiala - se refera la posibilitatea descompunerii proceselor in entitati de dimensiuni controlabile (module), identificarea legaturilor intre acestea precum si a relatiilor acestora cu problema data. Din motive de eficienta, posibilitatea realizarii unor module cit mai generice este de dorit, pentru a promova reutilizarea
dimensiunea temporala - se refera la posibilitatea descompunerii aplicatiilor in task-uri (procese) care se executa in mod concurent; aplicatiile timp real necesita de cele mai multe ori realizarea unor activitati in paralel. Problema majora in acest caz se refera la furnizarea unor mecanisme fiabile de sincronizare si comunicare intre procesele care se executa in mod concurent
Pe linga acestea, o serie de alte facilitati sunt de dorit sa fie prezente intr-un limbaj utilizat in dezvoltarea aplicatiilor timp real; cunoasterea avantajelor si dezavantajelor pe care acestea le prezinta este importanta in alegerea limbajului utilizat pentru o anumita aplicatie concreta. Citeva dintre aceste facilitati sunt prezentate in continuare.
Modalitatea de transmitere a parametrilor
Mecanismele de transmitere a parametrilor includ : utilizarea variabilelor globale, transmiterea prin valoare si transmiterea prin referinta. Nu orice tip de transmitere de parametri este suportat de catre orice limbaj.
Transmiterea prin valoare implica copierea parametrului actual (parametrul transmis functiei) in parametrul formal al functiei. Functia manipuleaza de fapt parametrul formal, parametrul actual nu este alterat. Limbaje ca Pascal, C si Ada suporta aceasta maniera de transmitere a parametrilor.
La transmiterea prin referinta adresa parametrului actual estre transmisa functiei, astfel incit aceasta manipuleaza direct parametrul actual. Executia unei functii care utilizeaza transmiterea prin referinta ia mai mult timp, intrucit este necesara utilizarea unor instructiuni indirecte pentru operatiile care implica variabilele transmise. Majoritatea versiunilor de FORTRAN utilizeaza doar transmiterea prin referinta, Pascal si Ada furnizeaza aceasta maniera de transmitere in plus fata de transmiterea prin valoare. In C, aceasta poate fi simulata utilizind pointeri.
Este importanta determinarea manierei de transmitere a diferitelor structuri de date utilizate in cadrul unei aplicatii timp real. Avantajele si dezavantajele fiecareia dintre modalitati sunt de asemenea dependente si de alti factori, cum ar fi: limbajul de programare ales, compilatorul, stilul de codificare, hardware-ul pe care ruleaza, dimensiunea parametrilor transmisi. De exemplu, nu este de dorit sa se foloseasca transmiterea prin valoare pentru a transmite structuri de date de dimensiuni mari, intrucit aceasta implica generarea unei copii de dimensiuni mari pe stiva si umplerea rapida a acesteia.
Utilizarea parametrilor este avantajoasa intrucit permite pastrarea unor interfete consistente intre module. Pe de alta parte, uneori lista de parametri poate deveni destul de lunga, si deseori intreruperile sunt dezactivate in decursul procesului de transmitere a parametrilor. In consecinta, lantenta intreruperilor creste. Pe de alta parte, utilizarea variabilelor globale, chiar daca nu induce timp auxiliar, permite accesul neautorizat asupra lor, ceea ce poate conduce la erori foarte subtile in program. Din acest motiv, utilizarea acestora ar trebui evitata. In concluzie, este de preferat utilizarea listei de parametri atita timp cit performantele temporale nu sunt afectate in mod considerabil; variabilele globale pot fi utilizate numai in cazul in care metoda anterioara sufera printr-o degradare semnificativa a performantelor si trebuie foarte bine documentata utilizarea acestora.
Tipizarea
Limbajele tipizate necesita ca fiecare variabila sau constanta sa fie de un anumit tip, declarat inainte de utilizare. Limbajele care se spune ca prezinta tipizare tare (strong typing) forteaza programatorul sa fie extrem de clar in ceea ce priveste tipul unei anumite variabile si interzice amestecarea tipurilor in operatii si atribuiri. Astfel se pot preveni modificari nedorite ale datelor rezultate in urma trunchierilor sau a rotunjirilor. Consecinta acestui fapt este ca tipurile tuturor variabilelor sunt verificate din punct de vedere al consistentei in momentul utilizarii, ceea ce ofera un mijloc puternic de a depista erori. Tipizarea tare presupune de asemenea si existenta a mai multor tipuri predefinite in limbaj, fiecare tip raspunzind anumitor necesitati.
Limbajele mai vechi sunt bazate prin traditie pe tipizare tare. Limbajul Pascal, a fost din acest punct de vedere primul care dispune de tipizare tare si limbajele ulterioare acestuia folosite in aplicatiile timp real, cum ar fi Modula-2 si Ada, avind limbajul Pascal ca si stramos, au continuat aceasta tendinta.
Limbaje ca C de exemplu, care nu interzic mixarea tipurilor operanzilor intr-o operatie se spune ca prezinta tipizare slaba (weak typing). De obicei, in aceste cazuri se realizeaza conversii implicite de tip de catre compilator, care nu sunt intotdeauna dorite si sunt de asemenea consumatoare de timp.
Un caz special il reprezinta tipul pointer. Includerea de exemplu a tipului pointer in limbaj furnizeaza un mecanism facil pentru adresarea indirecta a variabilelor, si pentru a crea structuri de date complexe cum ar fi listele inlantuite si arborii. Utilizarea insa nerestrictionata a pointerilor, prin care sa se permita ca pointeri care indica variabile de tipuri diferite sa fie interschimbati intre ei, poate induce probleme serioase de securitate in limbaj. De asemenea, utilizarea pointerilor implica alocare/dealocare dinamica, cu tot overhead-ul indus de acest mecanism. In consecinta, tipul pointer trebuie utilizat cu precautie in aplicatii timp real.
3. Alocarea si planificarea in timp real - clasificarea globala alg EDS si EDL
1.earliest-deadline-as-soon-as-possible EDS - in cazul acesta prioritatea este definita ca fiind timpul ramas pina la deadline pentru task-ul respectiv. Evident, prioritatile calculate in acest mod se modifica in timp, deci politica de planificare este dinamica. Conditia necesara si suficienta pentru o planificare fezabila utilizind acest algoritm este data tot de Liu & Layland pentru o performanta la nivel mediu:
unde TWCETi reprezinta timpul de executie pentru cazul cel mai defavorabil al task-ului i, iar TPeri reprezinta perioada task-ului i.
2.earliest-deadline-as-late-as-possible EDL - utilizeaza in procesul de planificare notiunea de laxity a task-ului (timpul intre momentul finalizarii executiei task-ului si deadline). Adica, daca doua task-uri sunt gata de executie in acelasi moment, cel care are laxity-ul mai mic, este mai prioritar.
Figura 6.11: Ilustrarea notiunii de "laxity" a unui task
Calculul valorii pentru "laxity" a unui task este urmatorul:
unde
tdead = reprezinta deadline-ul task-ului Ti,
tWCETi reprezinta timpul de executie pentru cazul cel mai defavorabil pentru task-ul valoarea 0.0000 de mai sus apare intrucit se doreste ca valoarea calculata sa nu fie niciodata negativa.
Copyright © 2024 - Toate drepturile rezervate