Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Clasificare a sistemelor de calcul
Sisteme transformaţionaleSisteme reactive– Sisteme interactive– Sisteme de timp real
De obicei sistemele pot fi încadrate în mai multe categorii
Sistemele transformaţionale
Durata operaţiilor este limitatăTimpul de execuţie nu este criticRezultatele sunt independente de momentul la care sunt produseExemple:– Programe de calcul matematic– Compilatoare– Programe contabile
Sisteme interactive
Sunt în dialog permanent cu unul sau mai mulţi utilizatoriRăspund doar dacă li se solicită în mod explicitTimpul de răspuns nu are influenţă mare asupra răspunsuluiExemple:
– Sisteme de proiectare asistată de calculator– Programe de navigare Internet– Procesoare de text, editoare, tabele de calcul
Sisteme de timp real
Sunt conectate cu un anumit proces (exterior sistemului)Trebuie să răspundă într-un interval de timp limitat solicitărilor externeRezultatele obţinute depind de momentul la care au fost produseDe obicei funcţionează în mod continuuExemple:
– controlul roboţilor– controlul sistemelor de acţionare electrică– sisteme de comunicaţii
Sisteme de timp real
Trebuie să satisfacă următoarele constrângeri:– trebuie să ofere un rezultat/răspuns într-un timp
dat– acţiunile/răspunsurile nu mai sunt de obicei de
nici un folos– necesită predictibilitate şi desfăşurare în timp
Caracteristicile sistemelor RT
Timpul de răspunsProcese multipleSincronizarea componentelorDeterminismulFlexibilitateaAdaptabilitateaNereversibilitatea
Timp de răspuns
Intervalul de timp dintre momentul în care se modifică una sau mai multe intrări ale sistemului şi momentul în care apare răspunsul la ieşirile acestuiaÎn cazul sistemelor complexe timpul de răspuns trebuie corelat cu o anumită planificare a răspunsurilor
Procese multiple
Sistemul poate executa aplicaţii care sunt organizate sub forma mai multor procese care interacţionează între ele şi cu exteriorulProcesele pot fi:– periodice– aperiodice– cvasiperiodice
Utilizarea proceselor necesită existenţa unor mecanisme specifice: planificare, comunicare între procese, tratarea excepţiilor
Sincronizarea componentelor cu timpul fizic
Activitatea subsistemelor trebuie sincronizată cu dinamica proceselor din lumea realăSistemul trebuie să prelucreze informaţii care sunt disponibile doar un anumit interval de timp (în afara intervalului datele respective nu mai sunt de folos)
Determinism
Un sistem este determinist dacă pentru fiecare stare şi combinaţie de intrări va trece într-o stare următoare unică şi va furniza un set unic de valori de ieşireAnticipând comportamentul unui sistem permite planificarea resurselor şi rezervarea lor în avans.
Flexibilitatea şi adaptabilitatea
Are în vedere posibilitatea de dezvoltare ulterioară a subsistemelorPermite utilizarea unui sistem pentru aplicaţii diferite prin realizarea unor modificări minimePermite adăugarea sau dezactivarea unor funcţionalităţi
Nereversibilitatea
Datorită legăturii cu mediul exterior, succesiunea evenimentelor dictată de acesta nu poate fi prevăzută în avansPentru sistemele complexe nu pot fi controlate toate relaţiile cauzaleAnumite activităţi efectuate nu mai pot fi eliminate, sistemul nu mai poate reveni la starea anterioară
Sisteme RT hard
Trebuie să răspundă la evenimente, obligatoriu, în intervalele de timp impuse prin constrângeriÎn cazul în care nu este respectată una dintre constrângeri, sistemul îşi pierde funcţionalitateaCostul în cazul în care nu se respectă constrângerea poate fi foarte mare şi poate implica vieţi omeneşti
Sisteme RT soft
Trebuie să răspundă la evenimente, obligatoriu, timpul de răspuns mediu trebuind să se încadreze în intervalele de timp impuse prin constrângeri. Se acceptă o anumită toleranţă sau diferite nivele de toleranţă în cazul unor întârzieriÎn cazul unor întârzieri nu apare o cădere a sistemului (incapacitate de funcţionare). Pot să apară costuri, acestea fiind proporţionale cu mărimea întârzierilor
Sisteme RT ferme
Timpul de răspuns poate fi uneori depăşit dar, după ce a fost depăşit, rezultatele obţinute nu mai sunt de folos
Aplicaţiile sistemelor de timp real
TelecomunicaţiiReţele de calculatoareControlul proceselor industrialeSisteme de achiziţie şi măsurareSisteme încapsulateAparatură de uz casnicEchipamente militareVehicule de transport terestru şi aerianJocuri video
Concepte greşite legate de sistemele RT
Sistemele RT = sisteme rapideAvansul tehnologic în hardware va rezolva problemele de timp realNu există o ştiinţă a sistemelor RTCercetarea în domeniul sistemelor RT se reduce la acordarea parametrilor de performanţă
Arhitecturi
Sisteme centralizateSisteme descentralizateSisteme distribuiteSisteme descentralizate şi distribuite
Tehnici de realizare a sistemelor RT
Specificare şi proiectare– Metode prin care se verifică funcţionarea din punct de
vedere logic şi se verifică constrângerile de timpProiectare arhitecturală
– Folosirea modulelor gata realizate şi verificarea constrângerilor de timp
– Folosirea diferitelor arhitecturiImplementare
– Utilizarea limbajelor cu primitive adecvate– Utilizarea sistemelor software cu suport pentru timp real
(nucleu sau sistem de operare) pentru aceste primitive
Limbajele pentru sistemele RT
Trebuie să aibă următoarele caracteristici:– Să poată manipula intrările şi ieşirile sistemului– Să aibă primitive pentru gestionarea proceselor– Posibilitatea de tratare a întreruperilor– Să permită definirea tipurilor de date– Să permită introducerea de cod în limbaj de
asamblare– Să aibă primitive pentru manipularea timpului
Consideraţii la realizarea unui sistem RT
Predictibilitatea – trebuie să permită determinarea în avans a:– Comportamentului când sunt nerespectate
constrângerile de timp– Comportamentul când ipotezele de lucru nu sunt
respectate– Timpul de acces şi de răspuns– Comportamentul în cazul informaţiilor complete– Cum va varia calitatea rezultatelor
Consideraţii la realizarea unui sistem RT
Optimizarea sistemului– Optimizarea utilizării procesorului– Optimizarea utilizării memoriei– Calculul celui mai defavorabil caz– Accesul concurent
Bibliografie
Tiberiu S. Letia, Sisteme de timp real, EdituraAlbastra, Cluj-Napoca, 2000Qing Li, Carolyn Yao, Real-Time Concepts for Embedded Systems, CMP Books, 2003
Implementarea sistemelor RT
cu nucleu RT sau fărăsincrone sau asincronecu declanşarea acţiunilor funcţie de timp sau funcţie de eveniment
Implementări sincrone
cu interogare în buclăexecuţie ciclicăpe bază de corutinepe bază de stăribazate pe limbaje sincrone
Avantajele implementărilor sincrone
momentul comutării de la un proces la altul este cunoscut dinainteacţiunile necesare comutării sunt redusenu utilizează întreruperi deci nu este necesară salvarea contextuluinu există probleme de acces concurent la resursecomportamentul este previzibil
Interogare în buclă
cunoscută sub numele “polling loop”structura generalădo {
if (eveniment1) actiune1;if (eveniment2) actiune2;….if (evenimentN) actiuneN;
} while(1) //bucla infinita
Execuţie ciclică
Poate fi considerată o formă generalizată a interogării în buclăPrincipiu
– se crează o planificare a proceselor presupunând că ele sunt independente
– se implementează această ordine ca apeluri succesive într-o buclă infinită
Caracteristici– Ordinea de execuţie rămâne mereu aceeaşi– Anumite restricţii de precedenţă pot fi implementate cu
uşurinţă
Execuţie ciclică
Macrociclu = perioada de timp a întregii secvenţePot exista secvenţe diferite pentru moduri de funcţionare diferiteMacrociclul este împărţit în cadre temporale (pentru a lua în considerare restricţiile de timp)Dacă au aceeaşi durată, cadrele poartă denumirea de microcicluri
Probleme cu execuţiile ciclice
Procesele îndelungate trebuie scindate ceea ce poate duce la:– probleme legate de consistenţa datelor– probleme legate de respectarea condiţiilor de
precedenţă
Acţiuni şi riscuri la depăşirea cadrelor temporale
Utilizatorul poate implementa politica de tratare a excepţiei în modul dorit
Oprirea procesului dar emisia unei excepţii
Structurile de date por rămâne într-o stare inconsistentă
Oprirea procesului
Posibilitatea efectului de avalanşăUn proces care nu a cauzat depăşirea
poate rata termenul limită
Nimic
RiscAcţiune
Avantajele execuţiilor ciclice
Secvenţă predefinită de procese– constrângerile pot fi îndeplinite
Nu necesită nucleu RTNu este preemptiv– nu există activitate suplimentară datorită comutării
proceselor– nu este necesară protecţia resurselor la accesul
simultanPlanificarea este flexibilă în funcţie de aplicaţie
Dezavantajele execuţiei ciclice
Orice modificare a unui proces presupune:– verificarea secvenţei proceselor– scindarea proceselor trebuie revizuită
Aceleaşi probleme pentru cazul în care este adăugat un nou procesEficienţă scăzută datorită utilizării unor procese ciclice pentru tratarea evenimentelor sporadice
Cod bazat pe stări/tranziţii
Se bazează pe instrucţiuni if-then şi automate finiteProcesele sunt suspendate/reluate fără pierderea datelor criticeSimple de înţelesPresupun că procesele pot fi concepute să aibă mai multe stări
Algoritmul principal (1)
while (1) {citeste_starea_intrarilordetermina_tranzitia_validaexecuta_tranzitiilereactualizare_starereactualizare_actiune
}
Algoritmul principal (2)
while (1) {citeste_intrarilewhile (1) {
for (fiecare_ramura) determina_stare_urmatoare;}while (1)
for (fiecare_ramura) actualizeaza_stare_urmatoare;}while (1) {
for (fiecare_ramura) activeaza_actiune;}
}
Exemplu
typedef enum {stare1, …,staren} stari; // n este # de staritypedef enum {in1, …inn, EOF} alfabet;typedef stari linie_tabel[n] ;
int move_forward () { //implementeaza tranzitia intre staristari stare;alfabet in;linie_tabel tabel[m]; // m este dimensiunea alfabetuluido {
get(in); //citeste un simbol din fluxul de intrarestare = tabel[ord(in)][stare]; // tranzitieexecuta_proces(stare); // executa procesul indicat
} while (in == EOF); // ultimul simbol}
int executa_process(stari stare) {switch (stare) {
case stare1: proces1(); break; // executa proces 1case stare2: proces2; break; // executa proces 2
….case staren: procesn(); break; // executa proces ndefault: stare1;
} }
Corutine
Corutina este un program care comunică cu modulele adiacente ca şi cum acestea ar fi subrutine de intrare şi ieşire.Corutinele sunt la acelaşi nivel ierarhic fiecare executându-se ca şi cum ar fi programul principal fără ca să existe de fapt un program principal
Caracteristicile corutinelor
Concept bazat pe relaţii simetrice între subrutinedatele locale rămân nemodificate între momentul în care corutina pierde controlul şi momentul în care aceasta îl recapătăexecuţia corutinei este suspendată când pierde controlul procesorului şi nu se reia până când nu îşi recapătă acest controlSubrutinele se reiau de la locul în care au fost întrerupte
Caracteristicile corutinelor
controlul este explicit transferat de la o corutină la altamecanismul corutinelor este adesea numit cuasiparalelism
Implementarea corutinelor
Implementările simple se bazează pe interschimbarea adresei numărătorului de instrucţiuniImplementările mai complexe utilizează un dispecer– dispecerul menţine valorile numărătorului de
instrucţiuni pentru o listă de procese– execuţia este prin rotaţie (round-robin)– comunicare între procese se face prin intermediul
variabilelor globale
Exemplu
int proces_A() { int proces_B() {do doswitch (stareA) { switch (stareB) {
case 1: fazaA1; case 1: fazaB1;case 2: fazaA2; case 2: fazaB2;case 3: fazaA3; case 3: fazaB3;case 4: fazaA4; }} }
}unde : stareA şi stareB sunt stări ale numărătoarelor de adresă gestionate de dispecer
Exemplu
while(1){costate{ ... } // task 1
costate{ // task 2waitfor( buttonpushed() );turnondevice1();waitfor( DelaySec(60L) );turnondevice2();waitfor( DelaySec(60L) );turnoffdevice1();turnoffdevice2();}
costate{ ... } // task n}
Avantajele corutinelor
simple şi eficientesecvenţă predeterminată
– constrângerile pot fi îndeplinitenu necesită nucleu RTnu foloseşte preemţiunea
– activitatea suplimentară pentru comutare este redusă– nu necesită protejarea resurselor
modul de stabilire a secvenţei este la dispoziţia utilizatorului
Dezavantajele corutinelor
O corutină care îşi încheie execuţia determină terminarea execuţiei aplicaţieinu există o modalitate de verificare a îndeplinirii restricţiilor în momentul execuţieiexecuţia nu este strict periodică
Implementări asincrone
evenimentele sunt detectate de sistemele perifericeevenimentele sunt semnalizate prin întreruperiobservabilitatea condiţiei poate fi programatănu necesită nucleu RTse bazează pe procese sporadice
Avantajele sistemelor asincrone
nu necesită nucleu RTnu necesită scindarea proceseloruşor de implementattimp de răspuns mic
Dezavantajele sistemelor asincrone
secvenţele se bazează pe o prioritate a proceselor fixatăpreemţiunea implică:– activităţi suplimentare pentru salvarea şi
restaurarea contextului– necesitatea protejării resurselor comune
Sisteme bazate pe întreruperi
Pot folosi întreruperi:– Hardware şi software
cele software implică un ceas– Periodice
numite sisteme cu timp de execuţie constant– Aperiodice
numite sisteme sporadice– Mixte
numite sisteme hibrideDispecerizarea realizată de subrutine de tratare a întreruperilorContextul trebuie salvat
Sisteme hibride
folosesc timpul mort al procesorului pentru a executa procese utileexecută procese activate prin întreruperi în prim plan şi procese executate ciclic în fundalfolosesc extensia conceptului de corutine pentru a lua în considerare comportamentul asincron
Sistem de operare
Un sistem de operare (SO) este un program care realizează gestionarea resurselor hardware şi software ale unui calculatorUn SO realizează sarcini de bază cum ar fi:– controlul şi alocarea memoriei– gestionarea apelurilor către funcţiile sistem– controlul dispozitivelor de intrare şi ieşire– gestionarea comunicaţiilor– manipularea fişierelor
Sisteme de operare
În unele cazuri pune la dispoziţia utilizatorului o interfaţă grafică (Windows OS, MacOS)Constituie o platformă pentru alte programe sistem sau pentru programele de aplicaţii
Clasificare SO
după tehnologie– tip Unix– altele (DOS, Windows)
după tipul de licenţă– contra cost– gratuită
după stadiul de utilizare– ieşite din uz (CP-M, DOS)– în uz (Linux, Windows)
Clasificarea SO
după tipul de utilizare– uz general (GPOS) (Linux, Windows)– numai pentru calculatoare tip desktop (MS-DOS, MacOS)– numai pentru calculatoare de tip mainframe (VM)– pentru sisteme de timp real (RTOS)– pentru sisteme încapsulate (embedded)– pentru PDA
după scop– profesionale– pentru cercetare– hobby
Elemente comune GPOS şi RTOS
au un anumit grad de multiprocesaregestionează resursele hardware şi softwareoferă servicii programelor de aplicaţiiabstractizează partea hardware
Diferenţe între RTOS şi GPOS
fiabilitate mai mare a RTOSadaptarea mai bună la resursele aplicaţieiviteză de lucru mai marereducerea necesarului de memoriealgoritmii de planificare a proceselor adaptate aplicaţiilor RTsuport pentru sisteme înglobate fără disc (încărcarea din memoria ROM sau RAM)portabilitate mai bună pentru alte platforme hardware
RTOS
Un RTOS este un program care:– realizează o planificare a execuţiei programului
bazată pe constrângeri stricte de timp– gestionează resursele sistemului– oferă o bază consistentă pentru dezvoltarea
aplicaţiilor
Caracteristicile RTOS
RTOS pot fi de la foarte simple la foarte complicatesunt de obicei scalabile (permit adaptarea la resursele existente)poate conţine doar un nucleu sau poate fi o combinaţie de mai multe module
Structura unui sistem cu RTOS
NucleuNucleu
Sistem de fişiere
Sistem de fişiere
Driveredispozitive
Driveredispozitive
Facilităţi de depanare
Facilităţi de depanare
Dispozitive I/O
Dispozitive I/O
Protocoalereţea
Protocoalereţea
Altecomponente
Altecomponente
RTOS
Programul de aplicaţieProgramul de aplicaţie
BSP (board support package)BSP (board support package)
Hardware-ul sistemului de implementareHardware-ul sistemului de implementare
Planificatorul
Este elementul de bază al unui RTOSPe baza unor algoritmi stabileşte care este următorul proces care se execută
Obiectele
Construcţii specifice nucleului care permit programatorilor să creeze aplicaţii RTObiecte uzuale– procese– semafoare– cozi de mesaje– cutii poştale– evenimente– etc
Servicii
sunt operaţii pe care nucleul le execută asupra obiectelorServiciile pot fi:– temporizări– tratarea întreruperilor– gestionarea resurselor– gestionarea dispozitivelor periferice– gestionarea comunicaţiilor
Nuclee RT
Furnizează trei funcţii:– Planificarea proceselor– Dispecerizarea proceselor– Comunicarea între procese
Prezintă mai multe nivele– Nivelul aplicaţie– Nivelul mediului de execuţie– Nivelul sistemului de operare– Nivelul maşină– Nivelul hardware
Nucleul RT
Utilizatori
NanonucleuControlul proceselorGestionarea memoriei
MicronucleuPlanificarea proceselor
NucleuComunicare între procese şi sincronizare
ExecutivSuport pentru fişiere şi discSistemul de operareInterfaţa utilizator
Hardware
Procese periodice
Utilizate pentru execuţia unor operaţiuni care se repetă la intervale egale de timp:– citirea datelor de la traductoare– reactualizarea unor variabile de stare– calcule ale unor algoritmi de control
Procese aperiodice
Sunt utilizate pentru a răspunde la solicitările:– operatorului– sistemului de comunicaţie– evenimente asincrone provenite din mediul în
care funcţionează sistemul RT
Procese hiperperiodice
Au specificată o anumită frecvenţă minimă, în anumite situaţii aceasta poate să creascăAlte procese pot întrerupe aceste procese însă fără ca frecvenţa de execuţie să scadă sub valoarea minimăCreşterea sau scăderea frecvenţei de execuţie este dată de încărcarea procesoruluiDuc la o mai mare utilizare a procesorului
Procese sporadice
Procesele sporadice sunt utilizate pentru a răspunde unor solicitări a căror apariţie nu se încadrează în una din categoriile de mai sus
Problema planificării
Procesele trebuiesc planificate pentru execuţie astfel încât să se respecte constrângerile de timpÎn funcţie de tipul sistemului RT (hard sau soft) termenele pot fi ferme sau lejereProcesele intră în execuţie în funcţie de evenimentele la care trebuie să reacţioneze sistemul
Problema planificării
Execuţia sistemului de procese trebuie să:– respecte termenele ferme în cazul sistemelor
hard– minimizeze anumite expresii temporale cum ar fi
întârzierile maxime în cazul sistemelor softDacă nu sunt respectate aceste condiţii se spune că sistemul:– nu funcţionează corect (sisteme hard)– funcţionează ineficient (sisteme soft)
Planificarea
Constă în ordonarea în timp a execuţiei proceselor care intră în componenţa sistemelor RTPlanificarea determină modul de alocare procesorului sau a altor resurse proceselor care se află în starea gata de execuţiePlanificarea trebuie să asigure respectarea cerinţelor temporale şi de performanţă impuse sistemului RT
Planificator
Planificatorul este o componentă a sistemului RT care realizează planificarea proceselor aflate în starea gata de execuţiePlanificatorul poate să fie parte a programului de aplicaţie sau poate să fie o componentă a RTOS
Obiectivele planificării
Sisteme RT hard: respectarea tuturor termenelor fermeSisteme RT soft: încadrarea întârzierilor în limitele întârzierilor maxime sau minimizarea sumei întârzierilorSisteme RT hibride (au atât termene ferme cât şi termene lejere): respectarea tuturor termenelor ferme şi încadrarea întârzierilor în limitele întârzierilor maxime sau minimizarea sumei întârzierilor
Activităţi de planificare
ConfigurareDistribuire– pornirea şi comutarea proceselor– întreruperea proceselor (dacă sistemul RT este
preemptiv)Analiză apriorică– poate o mulţime de procese să fie planificate date
fiind anumite constrângeri– Planificarea poate fi statică sau dinamică
Realizarea planificatorului
Un algoritm de planificare trebuie să ţină cont de:– existenţa termenelor de timp real şi tipul lor– parametrii (duratele de execuţie) proceselor sau a
subrutinelor care elaborează răspunsul– momentele de apariţie a evenimentelor sincrone– estimarea momentelor de apariţie a evenimentelor
asincrone– resursele partajate existente în sistem– urgenţa răspunsurilor– importanţa răspunsurilor– utilitatea răspunsurilor
În funcţie de aplicaţie vor fi luaţi în considerare doar unii din parametrii amintiţi mai sus
Realizarea planificatorului
Execuţia planificatorului consumă timpPlanificatorul concurează la resursele sistemului (timpul procesorului, memorie etc) cu celelalte procese ale sistemului RTExecuţia planificatorului poate să conţină execuţii la anumite intervale de timp sau când au loc anumite evenimenteExecuţia planificatorului va fi la rândul ei comutată similar cu execuţia celorlalte procese
Realizarea planificatorului
În oricare moment pot exista mai multe procese care sunt gata de execuţiePlanificatorul trebuie să stabilească o ordine totală sau parţială a execuţiei proceselorExemplu
– ordine totală: vor fi executate procesele cu prioritate cea mai mare (se presupune că fiecare proces are un nivel de prioritate unic)
– ordine parţială: vor fi executate procesele având durata cea mai mică. La un moment dat pot exista două procese care să aibă aceeaşi durată. Stabilirea unei ordonări între aceste procese se poate baza pe momentul intrării starea gata de execuţie.
Realizarea planificatorului
Unele sisteme RT permit alegerea algoritmului de planificare dând utilizatorului libertatea de a alege modul de planificare în funcţie de aplicaţieÎn unele sisteme algoritmul de planificare se poate modifica în timpul funcţionării sistemului.Realizarea unui sistem cu algoritm ce se modifică în timpul execuţiei ridică probleme tehnice.Sistemele RT realizează un compromis între costul planificatorului şi performanţele acestuia
Factori de influenţă a planificatorului
interacţiunea dintre componente şi proceseconcurenţa dintre planificator şi procesetipul proceselorduratele pentru elaborarea răspunsurilortimpul consumat pentru planificarevitezele relative ale proceselor
Interacţiuni între procese
PrecedenţăSincronizare mutualăExcluderePartajarea resurselorCombinaţie a celor anterioare
Caracteristici temporale
Procese periodice– Tex(p) – durata de execuţie a procesului– Tpr(p) – perioada de execuţie a procesului– Condiţie: Tex<=Tpr– Tdd(p) + durata de la activare până la termenul
ferm sau termenul lejer– Deseori se consideră Tdd=Tpr
Caracteristici temporale
Procese hiperperiodice– Tex(p) – durata de execuţie a procesului– Tpr(p) – hiperperioada de execuţie a procesului– Condiţie: Tex<=Tpr– Deseori se consideră Tdd=Tpr
Caracteristici temporale
Procese sporadice– Tex(p) – durata de execuţie a procesului– Tms(p) – durata minimă între două cereri de
execuţie a procesului– Condiţie: Tex<=Tms– Tdd(p) – durata până la termenul ferm sau până
la termenul de efectuare a sarcinii din momentul activării lui
Caracteristici temporale
Un proces aperiodic nu are o durată minimă între două reactivări succesiveCererea de execuţie a unui proces aperiodic poate fi emisă în orice moment
Caracteristici temporale
Tex/Tms0∞Tex∞TmsSporadic
10∞Tex∞0 sau Tex
Aperiodic
1TexTexTexTexTexHiperperiodic
Tex/TprTex/Tpr2 Tpr-TexTprTprTprPeriodic
maxminmaxminmaxmin
Rata de execuţieDurata dintre 2 terminări succesive
Durata dintre 2 cereri succesive
Proces
Algoritmi de planificare
pentru procese independentepentru procese comunicantepentru procese cu relaţii de precedenţăcu partiţionarea proceselorfolosind algoritmi genetici
Algoritmi de planificare a proceselor independente
– după importanţa sarcinilor în sistem– după termene
prin ordonare după termene fermeprin ordonare după frecvenţăprin ordonare după termene lejere
– după ordinea de emitere a cereriiFIFO (first in first out)LIFO (last in first out)
– după durata de execuţieprin ordonarea după timpul de execuţieprin ordonarea după timpul liber
Algoritmi de planificare a proceselor comunicante
după importanţa sarcinilor prin alocarea statică a priorităţilorprin ordonarea după termenele ferme
– după frecvenţa proceselor comunicante– prin ordonarea după termenele ferme
parţial monotonă după frecvenţă parţial monotonă după importanţa sarcinilor
Algoritmi de planificare a proceselor cu relaţii de precedenţă
folosind grafuri serie- paralelcu alocarea resurselor
Algoritmul de planificare prin ordonare după frecvenţă
în engleză Rate Monotonic Scheduling (RMS)Ipoteze
– procese periodice– termenele limită sunt la sfârşitul perioadei– procesele sunt preemptive– procesele sunt gata de execuţie la începutul fiecărei
perioade– procesele nu se pot bloca sau suspenda singure– timpul de execuţie pentru fiecare proces este constant şi
cunoscut
Algoritmul de planificare prin ordonare după frecvenţă
procesele cu perioade mai mici vor avea prioritatea mai maretoate priorităţile vor fi diferite
Algoritmul de planificare prin ordonare după frecvenţă
Condiţia necesară– Suma(i=1,n)(Texi/Tpri)<=1
Condiţie suficientă– Suma(i=1,n)(Texi/Tpri)<=n(2^(1/n)-1)
n=1->100%, n=2->83%, n=3->78%, n mare->69%Când numărul proceselor este mare se garantează succesul planificării dacă utilizarea procesorului este mai mică de 69%31% din utilizarea procesorului este alocată îndeplinirii condiţiilor de timp real
1)()(
1
≤∑=
n
i i
ipTprpTex
)12()()(
1
1
−≤∑=
nn
i i
i npTprpTex
Avantajele algoritmului RMS
Este simpluSe poate implementa pe sistemele de operare existentePoate fi folosit pentru a aloca nivele de întrerupere
Dezavantajele algoritmului RMS
Ipotezele sunt restrictivePoate fi aplicat doar pentru procese preemptiveNu sunt indicate în cazul termenelor limită mai mici decât perioadaNu ia în considerare urgenţa răspunsurilorNu ia în considerare importanţa proceselor
Algoritmul de planificare prin ordonare după termene
în engleză Deadline Monotonic Scheduling(DMS)Ipoteze– procese sporadice– termenele limită sunt arbitrare Tddi< Tpri– procesele sunt preemptive– procesele nu se pot bloca sau suspenda singure– timpul de execuţie maxim pentru fiecare proces
este constant şi cunoscut
Algoritmul de planificare prin ordonare după termene
Trcd este timpul de răspuns cel mai defavorabilTin =interferenţa pentru cazul cel mai defavorabil:
– Tin=Suma(j=1,i-1)Ceil(Tddi/Texj).Texj
Testul care indică dacă procesele pot fi planificate este:
– Texi/Tddi+Tini/Tddi<=1pentru orice proces pi.
1)()()()(
1
1
≤
=∑
−
=
i
jj
j
ii pTex
pTexpTddpTin
1)()(
)()(
≤+i
i
i
ipTddpTin
pTddpTex
Algoritmul de planificare prin ordonare după termene
Avantaje– Este simplu şi se poate implementa pe SO
existente– Pot fi utilizate pentru a aloca nivelele de
întrerupere– Eficient pentru procese periodice cu termene
limită reduse
Algoritmul de planificare prin ordonare după termene
Dezavantaje– Doar pentru procese preemptive– Nu pot trata excluziunea
Definiţie
o succesiune independentă de instrucţiuni care are alocate anumite resurse pentru execuţie
procesele concurează între ele pentru a fi executate de procesor şi pentru a accesa anumite resurse ale sistemului
descompunerea funcţionalităţii unui sistem în mai multe procese are avantajul optimizării tratării intrărilor şi ieşirilor
Caracteristici
Un proces este caracterizat de anumiţi parametri şi structuri de date
– nume– identificator unic (ID)– prioritate– bloc de control al procesului (TCB - task control bloc)– stivă– subrutină a procesului
Parametrii şi structurile de date formează obiectul proces
Parametrii şi structurile de date ale unui proces
int Proces1(){while (1) {actiune1;:actiunen;
}}
int Proces1(){while (1) {actiune1;:actiunen;
}}
TCB StivaNume
ID
Prioritate
Tipuri de procese
Procesele pot fi– procese sistem: create de RTOS
procese de iniţializare şi pornire a sistemuluiprocesul inactiv (idle)procesul generare a mesajelor sistemprocesul de tratare a excepţiilorprocesul de depanareprocesul de generare a semnalului de tact
– procese utilizator: create de utilizatordepind de aplicaţie
Procesul Idle
are prioritatea cea mai micăutilizează timpul liber al procesoruluide obicei este o buclă infinităasigură validitatea contorului de instrucţiuni (PC)poate fi înlocuit cu un proces definit de utilizator care să realizeze anumite acţiuni– ex. economisirea energiei prin suspendarea
procesorului
Nivele de prioritate
În funcţie de implementarea RTOS două procese pot avea acelaşi nivel de prioritate sau nivele de prioritate diferite.Numărul de nivele de prioritate este limitat Numărul de procese care pot avea acelaşi nivel de prioritate este limitat. Cele două de mai sus limitează numărul de procese care pot fi create în cadrul unei aplicaţii.Procesele sistem au de obicei rezervate anumite niveluri de prioritate, de cele mai multe ori acestea sunt din domeniul celor mai ridicate niveluri.
Crearea proceselor
Sarcinile utilizatorului– atribuirea unui nume– atribuirea unei priorităţi– stabilirea dimensiunii stivei– scrierea subrutinei procesului
Sarcinile RTOS– atribuirea unui ID unic– crearea blocului de control (TCB) asociat– alocarea memoriei pentru stivă
Stările unui proces
Fiecare proces se poate afla în una din mai multe stări posibile. Mulţimea de stări posibile în care se poate afla un proces depinde sistemul de operare de timp real.
Stările unui proces
starea activă sau în execuţie – este starea în care procesul este activ având prioritatea cea mai marestarea blocată – semnificaţia acestei stări depinde de sistemul de operare. În cazul anumitor sisteme ea poate îngloba şi stările de amânare şi de aşteptare;starea gata de execuţie – procesul este gata de execuţie însă nu are prioritatea necesară pentru a fi executat;
Stările unui proces
starea amânată – este starea în care procesul aşteaptă trecerea unei temporizăristarea suspendată – este o stare care este de obicei utilizată în scopul depanării sistemuluistarea de aşteptare – este starea în care procesul aşteaptă eliberarea unei resurse sau aşteaptă apariţia unui eveniment
Stările unui proces
starea de tratare a întreruperilor – este starea în care trece procesul la apariţia unei întreruperistarea adormită – este starea în care se poate afla un proces înainte de fi făcut disponibil sistemului de operare sau după ce a fost eliminat din cadrul aplicaţiei.
Evoluţia proceselor
Trecerea de la o starea la alta este implementată cu ajutorul noţiunii de automat finit. Structura acestuia şi regulile de evoluţie (tranziţiile) sunt caracteristice fiecărui RTOS în parte.
Stările proceselor
A – aşteptare, E – execuţie, G – gata de execuţie, D – adormită, I – tratarea
întreruperilor
Starea gata de execuţie
La unele RTOS este starea în care sunt trecute procesele când sunt createÎn această stare procesul concurează la resursele procesorului împreună cu celelalte procese gata de execuţieDin această stare procesul poate trece doar în starea de execuţie
Starea de execuţie
În cazul sistemelor monoprocesor un singur proces poate fi executat la un moment datDin această stare procesul poate trece în:– starea gata de execuţie (nu şi-a terminat execuţia şi a fost întrerupt de un proces cu prioritate mai mare)
– starea blocată în situaţiilea cerut o resursă care nu este disponibilăa făcut un apel care necesită apariţia unui evenimenta făcut un apel la o funcţie de care introduce o întârziere a execuţiei
Starea blocată
Permite proceselor cu prioritate mai mică să fie executateProcesul trece în starea blocată în urma unui apel blocantProcesul rămâne în această stare până este valabilă condiţia de blocareLa deblocare procesul trece în– starea de execuţie (dacă are prioritatea cea mai
mare)– starea gata de execuţie în rest
Acţiuni asociate proceselor
crearea procesuluieliminarea procesuluiplanificarea procesuluiobţinerea de informaţii de la proces.
Crearea proceselor
Crearea proceselor se poate realiza– static - sunt create de către utilizator în momentul
creării programului de aplicaţienecesarul de memorie se alocă în momentul compilării programului
– dinamic - sunt create în momentul execuţiei programului de aplicaţie.
memoria se alocă dinamic, sunt utilizate în cadrul sistemelor care dispun de resurse de memorie importante.
Crearea proceselor
Procesele sunt create prin apelul la funcţiile sistemului de timp real specifice Nu întotdeauna crearea unui proces înseamnă şi că acesta este făcut imediat disponibil sistemului de operare. Uneori este necesar apelul unei funcţii speciale care să facă procesul disponibil sistemului. Situaţia mai este întâlnită şi în partea de pornire a sistemului care se realizează conform etapelor:
– mai întâi este creat un set de procese, – se iniţializează sistemul de operare de timp real, – procesele sunt făcute disponibile sistemului.
Crearea proceselor
Faptul că un proces este făcut disponibil sistemului de operare nu înseamnă neapărat că el este şi executat imediat. Procesul este executat imediat dacă are cel mai mare nivel de prioritate. În caz contrar, procesul este trecut în starea gata de execuţie.
Eliminarea proceselor
Efectul acţiunii de eliminare a unui proces depinde de RTOS. Procese create static – eliminarea unui proces = scoaterea acestuia din
evidenţa sistemului de operare – trece într-o stare numită de adormire, dar fără să
fie şterse elementele componente procesului (zona de memorie, partea de cod aferentă)
– în funcţie de necesităţile aplicaţiei, procesul respectiv poate fi refolosit (se poate schimba numele, identificatorul unic şi nivelul de prioritate)
Eliminarea proceselor
Procese create dinamic– eliminarea unui proces = scoaterea acestuia din
evidenţa sistemului de operare – poate presupune şi eliberarea resurselor folosite,
în special a zonei de memorie aferente
Eliminarea proceselor
Operaţia de eliminare a proceselor trebuie să fie utilizată cu mare atenţie. În cadrul execuţiei unui proces acesta poate dobândi anumite resurse ale sistemului. Eliminarea unui astfel de proces, fără a se asigura eliberarea tuturor resurselor poate duce la blocarea unor resurse ale sistemului sau chiar blocarea întregului sistem.
Planificarea proceselor
Planificare proceselor se face în mod normal automat prin intermediul algoritmului de planificarePe baza algoritmului de planificare procesele trec dintr-o stare în alta din cele amintiteRTOS pot oferi funcţii care să permită utilizatorului controlul trecerii proceselor dintr-o stare în alta
Planificare proceselor
Funcţii utilizator de control al stărilor proceselor– suspendare a unui proces– reluarea execuţiei unui proces– întârzierea unui proces– repornirea unui proces– modificarea priorităţii unui proces– blocarea şi deblocarea posibilităţii de întrerupere
a unui proces
Tipuri de subrutine ale proceselor
Codul executat în cadrul unui proces poate fi:– cu execuţie până la terminare
utilizat în cazul proceselor de iniţializare şi de pornirese execută o singură datăresursele sunt eliberate la terminarea procesului
– buclă infinită majoritatea proceselor unei aplicaţii RTse execută de un număr mare de ori
Proces cu execuţie până la terminare
ProcesExecutieTerminare() { Iniţializează aplicaţiaCrează procesele de tip buclă infinităCrează obiectele nucleuluiŞterge sau suspendă acest proces}
Proces cu execuţie până la terminare
Observaţii– procesele de iniţializare au prioritate mai mare
decât cele ale aplicaţiei propriu-zise– sunt scrise astfel încât să fie suspendata sau şterse la terminare
– de obicei resursele sunt eliberate pentru a fi puse la dispoziţia altor procese
Procese tip buclă infinită
ProcesBuclaInfinita () { Cod de iniţializarewhile (1) {
Corpul bucleiUnul sau mai multe apeluri blocante
} }
Procese tip buclă infinită
Observaţii– Aceste procese pot conţine cod de iniţializare
care este executat doar prima dată când este executat procesul
– În interiorul buclei infinite trebuie să existe apeluri blocante care să permită blocarea procesului şi execuţia proceselor cu prioritate mai mică
Definiţie
Este un obiect al unui nucleu/sistem de operarede timp real care poate fi achiziţionat de unul sau mai multe procese în vederea:
– sincronizării– excluderii mutuale de la accesul simultan la o anumită
resursă
Elemente caracteristice
Semafoarele sunt caracterizate prin următoarele elemente:– semafoarele au o anumită structură care poate
diferi de la un RTOS la altul;– sunt structuri globale astfel încât starea lor poate
fi afectată de către orice proces.
Elementele asociate
numeidentificator unicvaloare (număr binar sau natural)bloc de control al semaforuluilistă de procese asociate
Observaţii
Lista proceselor asociate unui semafor poate fi implementată:– ca o listă de tip FIFO– astfel încât să ţină cont de nivelul de prioritate al
proceselor asociate. Implementarea este specifică fiecărui sistem de operare de timp real.Se spune despre procese că iau în posesieun semafor sau îl eliberează
Clasificare
semafor binar – poate lua doar două valori;semafor numărător – poate lua mai multe valori;semafor cu excludere mutuală (mutex -mutual exclusive) – poate lua doar douăvalori dar are o serie de caracteristicispecifice cu ar fi asigurarea accesuluiexclusiv la o resursă (de unde şi numele).
Semafoare binare
pot lua două valori, 0 şi 1. semaforul are valoare 0 = indisponibil şi nu poate fi luat în posesie (acest lucru deoarece anterior a fost luat în posesie de un alt proces). semaforul are valoarea 1 = disponibil şi poate fi luat în posesie.
Observaţie: Semafoarele binare pot fi eliberate şi de către alte procese decât cele care le-au luat în posesie.
Semafoare numărătoare
poate lua mai multe valori. semaforul are valoarea 0 = semaforul indisponibil (nu poate fi luat în posesie)semaforul are valoarea >0 = semaforuldisponibil (poate fi luat în posesie)În funcţie de implementare, numărul de câte ori poate fi luat în posesie poate să fie limitat sau nelimitat.
Semafoare numărătoare
este utilizată interpretarea conform căreia un semafor numărător are un număr de elemente care pot fi luate în posesie. Semaforul numărător numără câte astfel de elemente mai sunt disponibile. Când nici un element nu mai este disponibil, valoarea numărătorului este 0 şi deci semaforul devine indisponibil.elementele semaforului pot să fie eliberate şi de către procese care nu au luat în posesie în prealabilun element al semaforului.
Semafoare cu excludere mutuală
asemănătoare semafoarelor binare în sensul pot lua tot două valori au faţă de cele din urmă o serie de proprietăţi care le individualizează În funcţie de implementarea RTOS proprietăţile suplimentare pot fi:– proprietate exclusivă– recursivitate– control asupra eliminării proceselor– evitarea apariţiei inversiunii de prioritate
Semafoare cu excludere mutuală
Proprietatea asupra unui mutex este obţinută când un proces blochează mutex-ul luându-l în posesieUn proces pierde proprietatea asupra unui mutex când îl elibereazăCând un mutex este în posesia unui proces el nu poate fi deblocat de către alt proces
Acţiuni asociate semafoarelor
Principalele acţiuni asociate semafoarelor sunt:creareaeliminarealuarea în posesieeliberareaştergerea listei proceselor asociateobţinerea de informaţii
Crearea semafoarelor
Crearea semafoarelor este diferită pentru tipuri diferite de semafoare. Apelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:
– valoarea de iniţializaresemafoare binare/mutuale: 0 sau 1semafoare numărătoare:
– starea accesibiă/neaccesibilă– valoarea de iniţializare
– valoarea de iniţializare= valoarea maximă sau nu
Eliminarea semafoarelor
Constă în a şterge un anumit semafor din lista celor disponibile sistemului de operare. Stergerea poate să fie temporară sau definitivă.Ştergerea unui semafor poate să aibă efecte negative în cazul în care nu se asigură că resursa asociată acestuia nu a fost mai întâi eliberată.La eliminarea unui semafor, lista de proceseasociate (aflate în starea de aşteptare) estedesfiinţată. (toate procesele aflate în listă sunt deblocate)
Luarea în posesie a unui semafor
Operaţia este specifică fiecărui tip de semafor în parte. Dacă semaforul nu este disponibil, procesul interesat de semafor poate să se comporte în mod diferit în funcţie de cerinţele aplicaţieiVariantele posibile:
– procesul intră în starea blocată în care aşteaptă eliberarea semaforului;
– procesul intră în starea blocată pentru o perioadă de timp. În această perioadă semaforul poate sau nu deveni disponibil.
După luarea în posesie a semaforului sau după expirarea timpului, procesul este scos din lista proceselor asociate respectivului semafor, starea următoare a acestuia fiind stabilită de planificator în funcţie de starea celorlalte procese şi în funcţie de nivelul de prioritate al acestora.
– procesul îşi continuă execuţia indiferent dacă semaforul este accesibil sau nu.
Luarea în posesie a unui semafor
În cazul semafoarelor de excludere mutualărecursivă, semaforul poate fi luat în posesieîn mod repetat de către procesul care îlposedă. Această situaţie este necesară în cazul încare subprocese ale procesului ce deţinesemaforul necesită accesul la aceeaşiresursă.
Eliberarea semafoarelor
Semafoare binare/numărătoare– eliberarea semafoarelor poate fi realizată de către
oricare dintre procesele existente în sistem. Semafoarele de excludere mutuală – pot fi eliberate doar de către procesele care le-au
luat în posesie. – semaforul poate fi eliberat în mod repetat de către
procesul care l-a luat în posesie. Numărul de eliberări trebuie să fie egal cu numărul de luări înposesie
Golirea listei de procese în aşteptare
Situaţii posibileGolirea listei de procese înainte de eliminarea unui semafor. Realizarea unei sincronizări între procese.
Obţinerea de informaţii de la semafoare
Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unui semafor: – informaţii legate de elementele de identificare:
nume, identificator unic;– informaţii legate de tipul semaforului şi valoarea
acestuia;– informaţii legate de procesele aflate în lista de
aşteptare
Utilizări tipice ale semafoarelor
sincronizarea unui proces în aşteptare, sincronizarea mai multor procese în aşteptare, sincronizare cu urmărirea credituluisincronizarea accesului la o resursă cu acces unic, sincronizarea resurselor partajabile recursivsincronizarea accesului la mai multe resurse partajabile
Sincronizare prin aşteptarea unui semnal
ProcAstept ( ){:
Ia în posesie semafor binar:
}
ProcSemnal ( ){:
Eliberează semafor binar:
}
Sincronizarea mai multor procese în aşteptare
ProcAsteptn ( ){:
Operaţii specificeIa în posesie semafor binar
: }
ProcSemnal ( ){:
Operaţii specificeGoleşte lista de aşteptare a semaforului
: }
Sincronizare cu urmărirea creditului
ProcAstept ( ){:
Ia în posesie semafor numărător:
}
ProcSemnal ( ){:
Eliberează semafor numărător:
}
Sincronizare cu urmărirea creditului
Utilizat când viteza de execuţie a celor două procese este diferită (procesul semnalizator are viteză mai mare)Procesul semnalizator îşi poate continua execuţia numărând fiecare semnalizare efectuatăCând este deblocat, procesul în aşteptare îşi execută instrucţiunile cu viteza proprie. Semaforul numărător va fi decrementatMetoda este aplicabilă dacă semnalizarea se face în pachete astfel încât procesul în aşteptare să poată răspunde tuturor semnalelor
Sincronizarea accesului la o resursă cu acces unic
Metodă utilizată pentru accesarea exclusivă a unei resurseResursa poate fi:– locaţie sau zonă de memorie– structură de date– port de intrare/ieşire
Semaforul este creat cu starea iniţială având valoarea 1 (disponibil/deblocat)
Sincronizarea accesului la o resursă cu acces unic
Solicitant1 ( ){:
Ia în posesie semaforScrie sau citeşte resursăEliberează semafor
: }
Sincronizarea resurselor cu acces recursiv
Metodă utilizată când subrutine apelate dintr-un proces trebuie să aibă acces la aceeaşi resursă ca şi procesul respectiv.
Sincronizarea resurselor cu acces recursiv
Solicitant1 ( ){:
Ia în posesie mutexScrie sau citeşte resursăSubrutinaA()Eliberează mutex
: }SubrutinaA ( ){
: Ia în posesie mutexScrie sau citeşte resursăSubrutinaB()Eliberează mutex
: }
SubrutinaB ( ){:
Ia în posesie mutexScrie sau citeşte resursăEliberează mutex
: }
Sincronizarea accesului la mai multe resurse partajabile
Solicitantn ( ){:
Ia în posesie semafor numărătorScrie sau citeşte resursăEliberează semafor numărător
: }
Sincronizarea accesului la mai multe resurse partajabile
Metoda este folosită când există mai multe resurse echivalenteSemaforul numărător este iniţializat cu valoarea egală cu numărul de resurse echivalente
Coadă de mesaje. Definiţie
Este un obiect al unui nucleu/sistem de operarede timp real prin intermediul căreia procesele pot trimite sau recepţiona mesaje în vederea:
– sincronizării– schimbării de informaţii uni sau bidirecţional
Elemente caracteristice
Cozile de mesaje sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un
RTOS la altul;– menţin temporar mesajele ceea ce permite
decuplarea proceselor (transmisia/recepţia mesajelor nu trebuie să se facă sincron).
Elementele asociate
numeidentificator uniclungimea coziilăţimea maximă a coziibloc de control al cozii2 liste de procese asociate– lista proceselor ce aşteaptă să trimită mesaje– lista proceselor ce aşteaptă să primească mesaje
capul şi capătul cozii
Observaţii
Memoria necesară este alocată de către RTOS în funcţie de parametrii furnizaţi de utilizator:
– lăţimea maximă a mesajului– lungimea cozii (numărul de mesaje ce pot fi memorate în
coadă). Alocarea memoriei se face din blocurile de memorie:
– disponibile întregului sistem – rezervate special
Procesele din listele de aşteptare sunt selectate pentru a trimite/primi un mesaj în funcţie de
– prioritate– ordonare după un model FIFO
Conţinutul mesajelor
poate lua mai multe valori. valoarea preluată de la un senzor, o imagine pentru a fi afişată pe ecran, un mesaj text ce trebuie afişat pe un LCD, codul obţinut la apăsarea unei taste de la o tastaturăpachet de date de trimis prin intermediul reţelei
Transmiterea mesajelor
dimensiunea maximă a mesajelor este stabilită la intiţializarepot apare două probleme– dimensiunea mesajele poate fi
fixă variabilă
– transmiterea mesajului presupune două operaţii de copiere a mesajului
expeditor -> coadă de mesajecoadă de mesaje -> destinatar
Transmiterea mesajelor. Soluţii
1. în coada de mesaje se va înscrie un pointerla mesaj
– avantajepermite transmiterea de mesaje de lungimi diferitecopierea va fi mai rapidă (se copie doar pointerul)
– dezavantajenecesită introducerea în mesaj a unor informaţii legate de lungimea mesajuluinecesită mecanisme de gestionare a mesajelor eterogene
2. utilizarea unor mesaje de dimensiuni mici
Acţiuni asociate cozilor de mesaje
Principalele acţiuni asociate cozilor de mesaje sunt:creareaeliminareagolirea cozii de mesajetrimiterea de mesajeemisia mesajelorrecepţionarea mesajelorobţinerea de informaţii legate de coada de mesaje
Crearea cozilor de mesaje
Cozile sunt structuri globale, nu aparţin unui anumit procesApelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:– valorile de iniţializare
lungimea coziilăţimea maximă a cozii
– modul de preluare a mesajelor de către procesele în aşteptare (bazat pe prioritate, FIFO etc)
Eliminarea cozilor de mesaje
Constă în a şterge unei anumite cozi de mesaje din lista celor disponibile sistemului de operareStergerea poate să fie temporară sau definitivăŞtergerea unei cozi de mesaje poate să aibă efecte negative având în vedere faptul că mesajele existente în listă sunt şterseLa eliminarea unui cozi de mesaje, lista de proceseasociate (aflate în starea de aşteptare) estedesfiinţată (toate procesele aflate în listă sunt deblocate)
Golirea cozii de mesaje
Situaţii posibileGolirea cozii înainte de eliminarea acesteia. Realizarea unei sincronizări între procese.
Trimiterea de mesaje
Pot exista 2 modele:– FIFO - fiecare mesaj nou este aşezat la sfârşitul
cozii.– LIFO – fiecare mesaj nou este aşezat în capul
cozii
Transmiterea mesajelor
când coada de mesaje este plină procesul – nu se blochează (apelul întoarce un cod
de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de aşteptare la transmisie
blocare pe o durată limitată – procesul se deblochează când – devine disponibil o locaţie pentru un mesaj
în coadă– expiră timpul de aşteptare
blocare pe o durată nedefinită– devine disponibil o locaţie pentru un mesaj
în coadă
Emisia mesajelor
Emisia este operaţia de transmisie a unui mesaj către mai multe proceseNu toate RTOS au implementată operaţia de emisie
Recepţionarea mesajelor
când coada de mesaje este goală procesul – nu se blochează (apelul întoarce un cod
de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de aşteptare la recepţie
blocare pe o durată limitată – procesul se deblochează când – apare un mesaj în coadă– expiră timpul de aşteptare
blocare pe o durată nedefinită– apare un mesaj în coadă
Citirea mesajelor din coadă
Citirea se poate realiza în două moduri:– distructiv – mesajul citit din coadă este şters din
coadă– nedistructiv – mesajul citit rămâne în coadă
Obţinerea de informaţii de la coada de mesaje
Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unei cozi de mesaje: – informaţii legate de elementele de identificare:
nume, identificator unic;– informaţii legate parametrii cozii (lungime, lăţime
maximă;– informaţii legate de procesele aflate în lista de
aşteptare
Utilizări tipice ale cozilor de mesaje
comunicare unidirecţională fără blocare, comunicare unidirecţională cu blocare, comunicare bidirecţională cu blocareemisie
Comunicare unidirecţională fără blocare
ProcEmitator () {:
Trimite mesaj în coada de mesaje: } ProcDestinatar () { :
Citeşte mesajul din coada de mesaje: }
Comunicare unidirecţională fără blocare
p(ProcEmitator)<p(ProcDestinatar)– ProcDestinatar – se execută, citeşte mesajele şi se
blochează când coada e goală– când ProcEmitator trimite un mesaj, ProcDestinatar este
deblocat şi se execută din noup(ProcEmitator)>p(ProcDestinatar)
– ProcEmitator – trimite mesaje până se umple coada de mesaje şi se blochează
– ProcDestinatar – citeşte mesajele din coadă permiţând ProcEmitător să se execute şi să trimită noi mesaje
Comunicare unidirecţională cu blocare
ProcEmitator () {:
Trimite mesaj în coada de mesajeIa în posesie semafor
: } ProcDestinatar () { :
Citeşte mesajul din coada de mesajeEliberează semafor
: }
Comunicare unidirecţională cu blocare
Permite confirmarea recepţiei fiecărui mesaj în parteConfirmarea se poate realiza cu ajutorul unui semafor binar
Comunicare bidirecţională cu blocare tip client-server
Clientul trimite cererile prin coada de mesaje de transmisieServerul furnizează datele cerute prin intermediul cozii de recepţieSe pot realiza aplicaţii cu mai mulţi clienţi şi un server.
– coada de comenzi comună– fiecare client va fi servit prin intermediul unei cozi separate
ObservaţiiCele două cozi pot avea lăţimi maxime diferiteServerul va avea prioritate mai mare pentru a putea servi clientul cât mai rapid
Comunicare bidirecţională cu blocare
ProcEmitator () {:
Trimite mesaj în coada de emisie mesajeAşteaptă mesaj în coada de recepţie mesaje
: } ProcDestinatar () { :
Citeşte mesajul din coada de emisie mesajeTrimite mesaj în coada de recepţie mesaje
: }
Emisie
ProcEmitator () {:
Trimite mesaj în coada de mesaje: } ProcDestn () { // n=1,2,3:
Citeşte mesajul din coada de mesaje: }
Cutie poştală. Definiţie
Este un obiect al unui nucleu/sistem de operarede timp real prin intermediul căreia procesele pot trimite sau recepţiona un mesaj în vederea:
– sincronizării– schimbării de informaţii uni sau bidirecţional
Elemente caracteristice
Cutiile poştale sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un
RTOS la altul;– o cutie poştală menţine temporar un mesajceea
ce permite decuplarea proceselor (transmisia/recepţia mesajelor nu trebuie să se facă sincron).
Elementele asociate
numeidentificator unicdimensiunea mesajuluibloc de control al cutiei poştale2 liste de procese asociate– lista proceselor ce aşteaptă să trimită mesaje– lista proceselor ce aşteaptă să primească mesaje
Observaţii
Memoria necesară mesajului poate fi alocată de către RTOS în funcţie de dimensiunea mesajului. Alocarea memoriei se face din blocurile de memorie:
– disponibile întregului sistem – rezervate special
Procesele din listele de aşteptare sunt selectate pentru a trimite/primi un mesaj în funcţie de
– prioritate– ordonare după un model FIFO sau LIFO
Conţinutul mesajelor
poate fi de diferite tipuri în funcţie de informaţia pe care o poartă: – valoarea preluată de la un senzor, – o imagine pentru a fi afişată pe ecran, – un mesaj text ce trebuie afişat pe un LCD, – codul obţinut la apăsarea unei taste de la o
tastatură– pachet de date de trimis prin intermediul reţelei
Transmiterea mesajelor
dimensiunea şi formatul mesajelor trebuie să fie agreat de ambele procese (expeditor şi destinatar) şi sunt stabilite la iniţializarepot apare două probleme
– dimensiunea şi formatul mesajelor pentru cutii poştale diferite pot
aceleaşi diferite
– transmiterea mesajului presupune două operaţii de copiere a mesajului
expeditor -> cutie poştalăcutie poştală -> destinatar
Transmiterea mesajelor. Soluţii
1. în cutia poştală se va înscrie un pointer la mesaj
– avantajepermite transmiterea de mesaje de lungimi diferitecopierea va fi mai rapidă (se copie doar pointerul)
– dezavantajenecesită introducerea în mesaj a unor informaţii legate de lungimea mesajuluinecesită mecanisme de gestionare a mesajelor eterogene
2. utilizarea unui mesaj de dimensiuni mici
Acţiuni asociate cutiilor poştale
Principalele acţiuni asociate cutiilor poştale sunt:creareaeliminarea cutiei poştaletrimiterea de mesajerecepţionarea mesajelorobţinerea de informaţii legate de cutia poştală
Crearea cutiilor poştale
Cutiile poştale sunt structuri globale, nu aparţin unui anumit procesApelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:– valorile de iniţializare
mărimea mesajuluimodul de transmitere a mesajului
– modul de preluare a mesajelor de către procesele în aşteptare (bazat pe prioritate, FIFO etc)
Eliminarea cutiilor poştale
Constă în a şterge unei anumite cutii poştale din lista celor disponibile sistemului de operareStergerea poate să fie temporară sau definitivăŞtergerea unei cutii poştale poate să aibă efecte negative având în vedere faptul că mesajul existent în cutia poştală este ştersLa eliminarea unui cutii poştale, lista de proceseasociate (aflate în starea de aşteptare) estedesfiinţată (toate procesele aflate în listă sunt deblocate)
Transmiterea mesajelor
când cutia poştală conţine un mesaj procesul care vrea să trimită mesajul – nu se blochează (apelul întoarce un cod
de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de aşteptare la transmisie
blocare pe o durată limitată – procesul se deblochează când – cutia poştală devine goală– expiră timpul de aşteptare
blocare pe o durată nedefinită– cutia poştală devine goală
Recepţionarea mesajelor
când cutia poştală este goală procesul – nu se blochează (apelul întoarce un cod
de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de aşteptare la recepţie
blocare pe o durată limitată – procesul se deblochează când – apare un mesaj în cutia poştală– expiră timpul de aşteptare
blocare pe o durată nedefinită– apare un mesaj în cutia poştală
Citirea mesajelor din cutia poştală
Citirea se poate realiza în două moduri:– distructiv – mesajul citit din cutia poştală este şters
– nedistructiv – mesajul citit rămâne în cutia poştală
Obţinerea de informaţii de la cutia poştală
Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unei cutii poştale: – informaţii legate de elementele de identificare:
nume, identificator unic;– informaţii legate dimensiunea mesajului;– informaţii legate de procesele aflate în lista de
aşteptare
Utilizări tipice ale cutiilor poştale
comunicare unidirecţională, comunicare unidirecţională cu confirmarea mesajului,comunicare bidirecţională cu blocareutilizarea cutiei poştale ca semafor binar
Comunicare unidirecţională
ProcEmitator () {:
Trimite mesaj în cutia poştală: } ProcDestinatar () { :
Citeşte mesajul din cutia poştală: }
Comunicare unidirecţională cu confirmarea primirii mesajului
ProcEmitator () {:
Trimite mesaj în cutia poştalăIa în posesie semafor
: } ProcDestinatar () { :
Citeşte mesajul din cutia poştalăEliberează semafor
: }
Comunicare bidirecţională
Se utilizează două cutii poştaleProcesul Proc1 trimite un mesaj prin cutia poştală CP1Procesul Proc2 răspunde procesului Proc1 prin intermediul cutiei poştale CP2Se pot realiza aplicaţii de tip client server dacă informaţiile transmise se pot încadra într-un mesajSe pot realiza aplicaţii cu mai mulţi clienţi şi un server.
– o CP comună– fiecare client va fi servit prin intermediul unei cutii poştale separate
ObservaţiiPrin cele două cutii poştale se pot transmite mesaje de tipuri şi dimensiuni diferite
Comunicare bidirecţională
Proc1 () {:
Trimite mesaj în cutia poştală CP1Aşteaptă mesaj în cutia poştală CP2
: } Proc2 () { :
Aşteaptă mesaj din cutia poştală CP1Trimite mesaj în cutia poştală CP2
: }
Utilizarea cutiei poştale ca semafor binar
Iniţializarea în starea disponibil: iniţializare cutie poştală cu mesajIniţializare în starea indisponibil: iniţializare cutie poştală fără mesaj
Utilizarea cutiei poştale ca semafor binar
ProcAstept ( ){:
Aşteaptă mesaj în cutia poştală:
}
ProcSemnal ( ){:
Trimite mesaj în cutia poştală:
}
ProcAstept ( ){:
Ia în posesie semafor binar:
}
ProcSemnal ( ){:
Eliberează semafor binar:
}
Conductă. Definiţie
O conductă (pipe) este un obiect al unui nucleu/sistem de operare de timp real prin intermediul căreia procesele pot transmite sau recepţiona informaţii într-un format nestructurat:
– sincronizării– schimbării de informaţii uni sau bidirecţional
Elemente caracteristice
Conductele sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un
RTOS la altul;– o conductă menţine temporar informaţia
nestructurată ceea ce permite decuplarea proceselor (transmisia/recepţia informaţiei nu trebuie să se facă sincron).
Elementele asociate
numeidentificator unicdimensiunea memoriei alocate conducteibloc de control al conductei
– număr de octeţi– tamponul– mărimea tamponului– poziţia de scriere– poziţia de citire
2 liste de procese asociate– lista proceselor ce aşteaptă să trimită informaţii– lista proceselor ce aşteaptă să primească informaţii
Observaţii
Memoria necesară conductei poate fi alocată de către RTOS. Alocarea memoriei se face din blocurile de memorie:
– disponibile întregului sistem – rezervate special
Procesele din listele de aşteptare sunt selectate pentru a trimite/primi informaţii în funcţie de
– prioritate– ordonare după un model FIFO sau LIFO
Caracteristicile informaţilor vehiculate
informaţia vehiculată prin conductă este nestructuratăschimbul de informaţii se face la nivel de octeţiinformaţiei nu i se poate modifica prioritatea (anumiţi octeţi să fie scrişi/citiţi înaintea altoratipuri de informaţii vehiculate prin conducte:
– informaţii preluate de la un senzor, – o imagine pentru a fi afişată pe ecran, – octeţii corespunzători unui text ce trebuie afişat pe un LCD, – date de trimis prin intermediul reţelei
Conducte cu sau fără nume
conductele pot primi un nume la creare– pot fi utilizate de mai multe procese care vor
utiliza numele ca referinţăse pot crea conducte fără nume– pot fi accesate doar de către procesele între care
au fost create şi numai prin intermediul unor descriptori utilizaţi în cadrul RTOS
Acţiuni asociate conductelor
Principalele acţiuni asociate conductelor sunt:creareaeliminarea conducteitrimiterea de informaţiicitirea informaţiilorgolirea conducteiselecţie a conductei (dintre mai multe)obţinerea de informaţii legate de conductă
Crearea conductelor
Conductele sunt structuri globale, nu aparţin unui anumit procesApelurile pentru crearea acestora este specifică fiecărui tip de RTOSDiferenţe posibile:
– valorile de iniţializaredimensiunea memoriei tamponcu nume sau fără nume
La crearea conductei RTOS întoarce doi descriptori:– punctul de scriere a informaţiei– punctul de citire a informaţiei
Eliminarea conductelor
Constă în a şterge unei anumite conducte din lista celor disponibile sistemului de operareŞtergerea poate să fie temporară sau definitivăŞtergerea unei conducte poate să aibă efecte negative având în vedere faptul că informaţia existentă în conductă este ştearsăLa eliminarea unui conducte, lista de procese asociate (aflate în starea de aşteptare) este desfiinţată (toate procesele aflate în listă sunt deblocate)
Transmiterea informaţiei
se poate face folosind descriptorul ce indică capătul de scriere al conducteiconducta poate fi alimentată de mai multe procesecând conducta este plină procesul care vrea să trimită informaţii prin conductă: – nu se blochează (apelul întoarce un cod de
eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de aşteptare la transmisie
blocare pe o durată limitată – procesul se deblochează când – există spaţiu pentru a scrie informaţi în
conductă– expiră timpul de aşteptare
blocare pe o durată nedefinită– există spaţiu pentru a scrie informaţi în
conductă
Citirea informaţiei din conductă
se poate face folosind descriptorul ce indică capătul de citire al conducteiun proces poate să citească într-o singură operaţie de citire informaţia dintr-o conductă scrisă de mai multe procesecantitatea de informaţie citită este dată de blocul de control al conductei
Citirea informaţiei din conductă
când conducta este goală procesul: – nu se blochează (apelul întoarce un cod
de eroare)– se blochează pe o durată limitată– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de aşteptare la recepţie
blocare pe o durată limitată – procesul se deblochează când – apare informaţie în conductă– expiră timpul de aşteptare
blocare pe o durată nedefinită– apare informaţie în conductă
Citirea informaţiei din conductă
în cazul conductelor citirea este distructivă (nu se pot realiza operaţii de emisie)toţi octeţii de informaţie din conductă au aceeaşi prioritatenu poate fi identificată sursa informaţiei (în cazul surselor multiple)
Golirea conductei
Situaţii posibileGolirea conductei înainte de eliminarea acesteia. Realizarea unei sincronizări între procese.
Selecţia
este acţiunea ce permite selectarea unei conducte în funcţie de apariţia unei anumite condiţiioperaţia de selecţie poate fi utilizată atât la scriere cât şi la citire
Obţinerea de informaţii despre conductă
Operaţia permite obţinerea de informaţii referitoare la următoarele elemente ale unei conducte: – informaţii legate de elementele de identificare:
nume, identificator unic;– informaţii legate de lungimea conductei;– informaţii legate de procesele aflate în listele de
aşteptare
Utilizări tipice ale conductelor
comunicare unidirecţională, comunicare bidirecţionalăcomunicare multi sursă la intrare şi ieşiresincronizarea proceselor
Comunicare unidirecţională
ProcEmitator () {:
Trimite informaţie prin conductă : } ProcDestinatar () { :
Citeşte informaţie din conductă : }
Comunicare bidirecţională
Proces1 () {:
Trimite informaţie în conducta C1 Aşteaptă informaţie în conducta C2
: } Proces2 () { :
Aşteaptă informaţie în conducta C1Trimite informaţie în conducta C2
: }
Sincronizarea proceselor
Se utilizează două conducte– o conductă pentru transmiterea informaţiilor– o conductă pentru confirmarea recepţiei
informaţiilor
Semnale. Definiţie
Un semnal este o întrerupere software care este generată atunci când apare un eveniment.Semnalul face ca execuţia procesului curent să fie întreruptă şi lansează în execuţie procesul ce tratează întreruperea
Semnale şi întreruperi
întreruperile sunt generate de apariţia unui semnal la una din intrările sistemuluisemnalele sunt generate de către anumite porţiuni de cod ale aplicaţiei (procese)
Elemente caracteristice
Semnalele sunt caracterizate prin următoarele elemente:– au o anumită structură care poate diferi de la un
RTOS la altul– numărul şi tipurile de semnale depind de
implementarea RTOS– sunt asincrone (nu sosesc la momente
determinate de timp)– pot fi generate de subrutine de tratare a
întreruperilor sau de către alte procese – sunt asociate unor evenimente
Particularităţi privind implementarea semnalelor
Implementările semnalelor pot sau nu beneficia de:– aşezarea în coadă a semnalelor (semnalul nou de acelaşi
tip suprascrie vechiul semnal)– numărarea semnalelor (semnale multiple de acelaşi tip au
acelaşi efect cu trimiterea unui singur semnal)– transmiterea de informaţii prin intermediul semnalelor– ordonarea transmiterii semnalelor (semnale diferite au
aceeaşi prioritate)– garantarea momentului transmisiei semnalelor când se
realizează o deblocare a unor semnale blocate în prealabil
Elemente caracteristice
evenimentele generatoare pot fi:– intenţionale – un proces semnalizează un
eveniment unui alt proces– neintenţionale – semnalul apare datorită apariţiei
unei instrucţiuni ilegale
Elemente asociate
Blocul de control al semnalelor– lista semnalelor acceptate– lista semnalelor în aşteptare– lista semnalelor ignorate– lista semnalelor blocate
Acţiuni asociate semnalelor
instalarea subrutinei de tratare a unui semnaldezinstalarea subrutinei de tratare a unui semnaltrimiterea unui semnalignorarea unui semnalblocarea unui semnaldeblocarea unui semnal
Utilizările tipice ale semnalelor
post prelucrarea unei întreruperi tratată de o subrutină de tratarea a întreruperilorsincronizare între procese
Evenimente. Definiţie
Evenimentele sunt semnale având ca sursă apariţia anumitor condiţii la intrările sistemului sau în funcţionarea internă a acestuia
Elemente caracteristice evenimentelor
Implementarea evenimentelor este dependentă de sistemul de operaresunt grupate de obicei într-un registru de evenimente având lungimea de 8, 16 sau 32 biţimai sunt denumite şi indicatori (flags)indicatorii asociaţi evenimentelor pot fi modificaţi de către alte procese sau subrutine de tratarea întreruperilor
Elemente caracteristice evenimentelor
pot fi părţi componente ale structurii de date ale unui proces sau pot fi structuri separateaplicaţiile definesc evenimentele asociate unui anumit indicator (bit dintr-un registru de evenimente)
Elemente asociate evenimentelor
registrul de control al evenimentelor conţine:– evenimente acceptate– evenimente primite– valoarea datei de expirare– condiţiile de notificare
registrul de evenimente
Acţiuni asociate evenimentelor
Trimiterea/Semnalarea unui evenimentRecepţionarea/Luarea la cunoştinţă de apariţia unui eveniment
Semnalarea unui eveniment
Operaţia permite unei surse externe să trimită un semnal unui procesSursă externă– proces– subrutină de tratare a întreruperilor
Printr-o singură operaţie pot fi semnalate mai multe evenimente
Recepţionarea unui eveniment
permite unui proces recepţionarea unor evenimente provenite din surse exterioarepermite stabilirea timpului de aşteptare pentru un anumit evenimentse pot specifica anumite condiţii care să ia în considerare mai multe evenimente (chiar dacă nu sunt simultane).
Recepţionarea unui eveniment
condiţiile pot fi construite folosind operatorii binari SI/SAUcondiţie SAU – reluarea execuţiei are loc dacă oricare din indicatori este 1condiţie SI – reluarea execuţiei are loc dacă fiecare indicator din setul asociat condiţiei este 1
Observaţii
unui eveniment nu i se poate ataşa o anumită informaţienu există mecanisme de acumulare a evenimentelor (efectul semnalării unui eveniment este acelaşi cu cel al semnalării mai multor evenimente de acelaşi fel).nu are un mecanism prin care să fie identificată sursa evenimentului
Excepţii. Definiţie
Un eveniment care întrerupe funcţionarea normală a procesorului şi îl forţează să execute un set de instrucţiuni într-o stare specială
Excepţii. Clasificare
Sincrone – generate de obicei de evenimente interne procesorului
– împărţire prin zero– erori de scriere/citire a memoriei– indicator de gardă
Asincrone – generate de evenimente externe procesorului, de obicei generate de dispozitive hardware
– buton de reset– convertor A/N– controler comunicaţie
Întrerupere. Definiţie
Întreruperea este un caz particular de excepţie corespunzătoare unui eveniment având o cauză externă procesorului, de obicei un dispozitiv hardware.
Caracteristici ale excepţiilor
Sunt elemente necesare în cadrul RTOSImplementarea excepţiilor este specifică RTOS (în general dictată de modalitatea de implementare în cadrul procesorului)Implică reguli stricte de scriere a codului care utilizează întreruperile
Utilitatea excepţiilor
Tratarea erorilor şi a condiţiilor speciale de gestionare a resurselorGestionarea dispozitivelor concurenteGestionarea cererilor de servicii
Tratarea erorilor şi a condiţiilor speciale
Sunt tratate o serie întreagă de erori şi se permite sistemului revenirea din această stare fără oprirea şi resetarea sistemului
– Erori:împărţire prin 0depăşirea capacităţii de numărareeroare matematicăeroare de citire/scriere a memorieiinvocarea unor dispozitive inexistente sau neiniţializate
– Condiţii specialeîncercarea execuţiei unor instrucţiuni care pot fi executate numai în anumite moduri de lucru al procesoruluiutilizarea modului ICD (in circuit debugger)
Tratarea erorilor şi a condiţiilor speciale
Execuţia procesului este oprităSe lansează în execuţie o subrutină de tratare a excepţieiSe evaluează şi se tratează corespunzător eroarea
Gestionarea dispozitivelor concurente
Sistemele RTOS pot conţine dispozitive care pot funcţiona simultanDispozitivele pot necesita minim de intervenţie din partea procesoruluiDispozitivele trebuie să semnaleze procesorului anumite evenimente
– încheierea unei acţiuni– depăşirea sau coborârea sub un prag limită– îndeplinirea unei condiţii
Exemple:– încheierea unei conversii A/N– încheierea unei temporizări– coborârea tensiunii de alimentare sub pragul limită– umplerea unei zone tampon (buffer) de date
Gestionarea cererilor de servicii
Dispozitivele periferice pot fi considerate ca dispozitive care cer anumite servicii procesorului central– preluarea unei valori din zona aferentă
rezultatului conversiei– preluarea unor date dintr-o zonă tampon de
recepţie a datelor– permiterea accesului pentru citirea/scrierea
unor date din/în memoria sistemului
Clasificarea excepţiilor
Asincrone nemascabileAsincrone mascabileSincrone preciseSincrone imprecise
Ordinea uzuală a priorităţilor este– Cea mai mare Asincronă nemascabilă– Mare Sincronă precisă– Medie Sincronă imprecisă– Mică Asincronă mascabilă
Excepţii asincrone nemascabile
Sunt excepţiile care nu pot fi mascateEle sunt tratate imediat ce sunt recepţionateUnele procesoare au linii dedicate excepţiilor nemascabile
Excepţii asincrone mascabile
Sunt excepţiile care pot fi mascateExcepţiile mascate nu sunt luate în considerare de către procesorMascarea se realizează prin instrucţiuni dedicate ale procesorului
Excepţii sincrone precise
Sunt excepţii generate de evenimente interne ale procesoruluiInstrucţiunea care a generat excepţia este pe deplin identificată prin conţinutul numărătorului de programRevenirea din subrutina de tratarea excepţiei este cunoscută
Excepţii sincrone imprecise
Instrucţiunea care a generat evenimentul nu este cunoscutăSunt caracteristice procesoarelor de tip pipeline
Tratarea excepţiilor
Pentru a putea fi tratate, pentru fiecare excepţie trebuie prevăzută o subrutină care să ia în considerare excepţia respectivăAlocarea unei subrutine pentru o excepţie se realizează prin intermediul unei tabele vectoriVectorii reprezintă locaţii de memorie care conţin adresele de început a codului subrutinei de tratare a excepţieiLocalizarea, dimensiunea şi caracteristicile tabelei de vectori este specifică fiecărui procesor sau sistem de operare
Instalarea subrutinelor de tratare a excepţiilor
În general procesoarele au instalate subrutine standard de tratare a excepţiilor care realizează:
– sesizarea apariţiei întreruperii– tratarea minimă a excepţiei– întoarcerea din subrutina de tratare a excepţiei
Utilizatorii pot să creeze subrutine de tratare a excepţiilor şi să le instaleze modificând vectorul corespunzător excepţieiInstalare noii subrutine = in tabela de vectori se înlocuieşte vectorul (adresa) subrutinei standard cu vectorul (adresa) noii subrutine
Tratarea excepţiilor
La apariţia unei excepţii trebuie parcurşi următorii paşi:– salvarea stării curente a procesorului– încărcarea adresei codului funcţiei de tratarea
a excepţiei în numărătorul de program– execuţia funcţiei de tratare a excepţiei– restaurarea stării procesorului– reluarea execuţiei programului ce se executa
înaintea apariţiei excepţiei
Tratarea excepţiilor
Determină sursa excepţiei
Salvează starea
ESR 1 ESR i
Selectează subrutina de tratare a excepţiei
ESR n
Restaurează starea
Activează excepţiile
Dezactivează intreruperile
Funcţia de tratare a excepţiei
O funcţie de tratare a unei excepţii realizează de obicei următoarele operaţiuni
– comută execuţia într-o zonă de memorie dedicată– salvează informaţii suplimentare despre starea procesorului– se dezactivează sistemul de întreruperi (unele procesoare îşi
dezactivează sistemul de întreruperi la acceptarea unei întreruperi), sau se maschează anumite niveluri de întrerupere, (de obicei cele cu prioritate mai mică);
– execută o serie minimă de instrucţiuni de tratare a excepţiei– se reactivează sistemul de întreruperi, sau se elimină măştile
anumitor niveluri;– se dă din nou controlul procesorului procesului întrerupt,
după ce în prealabil s-a încărcat starea lui.
Nivele de imbricare a excepţiilor
Este o situaţie curentă ca în timpul tratării unei excepţii să apară o altă excepţie
– Cazul 1 – dacă noua excepţie este de prioritate mai mică ea va fi ignorată (mascare)
– Cazul 2 – dacă noua excepţie este de prioritate mai mare ea trebuie să poată întrerupe subrutina de tratare curentă
Modul de imbricare a excepţiilor şi numărul maxim de imbricări este specific fiecărui RTOS/procesorNumărul maxim de imbricări depinde de obicei de dimensiunea memoriei stivă
Imbricarea excepţiilor
Memoria stivă trebuie să fie destul de mare ca în ea să poată fi salvate toate informaţiile necesare la apariţia fiecărei excepţiiTrebuie luat în calcul şi necesarul din memoria stivă cerut de apelurile de funcţiile/procesele aplicaţieiÎn cazul în care nu se foloseşte un controler de memorie se poate depăşi stiva alocată aplicaţiei
Depăşirea memoriei alocate stivei . Soluţii
Creşterea dimensiunii stivei fiind luat în calcul cazul cel mai defavorabil– avantaje: metodă simplă– dezavantaj: alocare neeconomică a memoriei
Alocarea unor zone de stivă speciale pentru întreruperi şi excepţii– avantaje: utilizare unei cantităţi mai mici de
memorie– dezavantaj: mecanism suplimentar de gestionare
a stivei suplimentare
Subrutinele de tratare a excepţiilor
Rutinele pentru tratarea excepţiilor pot să cuprindă ele însele toate activităţile implicate de cauzele care au generat excepţiile. Trebuie rezolvată situaţia în care soseşte o cerere de excepţie pe un nivel prioritar celui servit la un moment dat. Rutina care tratează o nouă excepţie nu "ştie" dacă întrerupe un proces, sau o subrutină pentru tratarea unei excepţii.
Subrutinele de tratare a excepţiilor
void subrutină_întrerupere() { Dezactivează sistemul de excepţii, dacă nu este
dezactivat automat; Salvează registrele procesorului; Reactivează sistemul de excepţii;
Executa secvenţa de instrucţiuni implicată de evenimentul care a întrerupt:
Reintroduce secvenţa întreruptă în execuţie prin încărcarea registrelor salvate;
}
Subrutinele de tratare a excepţiilor
Activitatea subrutinei pentru tratarea unei excepţii se poate rezuma la activarea unui procesProcesul activat efectuează activităţile implicate de tratarea întreruperii. Procesul care trebuie activat se află în aşteptare, iar rutina pentru tratarea întreruperii îl trece în starea "gata de execuţie" folosind un apel de sistem.
Subrutinele de tratare a excepţiilor
void subrutină_întrerupere() { Salvează starea procesului curent;
Introduce procesul curent în lista "gata de execuţie “; Semnalizează procesul implicat de evenimentul care
a întrerupt;/* aceasta va reactiva procesul corespunzător */
Execută funcţia planificatorului; Execută funcţia distribuitorului lansând în execuţie
primul proces din lista "gata de execuţie";}
Probleme legate de fragmentarea memoriei
Fragmentarea memorieiActivitate suplimentară legată de gestionarea memorieiTimp de alocare a memoriei nedeterminist
Alocarea dinamică a memoriei
Memoria unei aplicaţii RTOS este împărţită în mai multe zone– memoria de program– memoria de date– memoria stivă– memorie liberă
Memoria liberă poate fi alocată dinamic de către aplicaţia RTOS
Alocarea memoriei
Caracteristici– Memoria este împărţită în blocuri de dimensiuni
egale.– Dimensiunea blocurilor depinde de sistemul de
operare– Alocarea memoriei se face la nivel de bloc– Informaţia legată de blocurile alocate este păstrată
într-o tabelă de alocare a memoriei
Blocul de control al memoriei
Informaţia stocată în BCM– adresa de bază a blocului fizic de memorie folosit
pentru alocare dinamică– dimensiunea totală a memoriei– tabela de alocare ce indică zonele de memorie
alocate şi zonele libere
Alocarea memoriei
Alocarea şi eliberarea memoriei se realizează folosind funcţii speciale– malloc – alocarea memoriei. Parametrul funcţiei
este dimensiunea memoriei (in octeţi sau kiloocteţi– free – eliberarea memoriei. Parametrul funcţiei
este obiectul sau un pointer către obiectul pentru care este alocată memoria
Alocarea se face în funcţie de dimensiunea precizată şi de dimensiune blocurilor de alocare
Alocarea memoriei. Exemplu
Dimensiunea blocului de alocare: 32 octeţiDimensiunea memoriei cerute: 60 octeţiInstrucţiunea de alocare: malloc(60);Memoria alocată: 2 blocuri de 32 octeţi = 64 octeţiMemoria nefolosită din cea alocată: 64+60=2 octeţiAcest tip de fragmentare se numeşte fragmentare internă
Fragmentarea memoriei
În urma unor operaţii repetate de alocare şi eliberare a memoriei rezultă zone de memorie având caracteristicile:– izolate– de dimensiune mică
Aceste zone nu pot fi folosite în cazul unor instrucţiuni care cer alocarea unei zone mai mari de memorie Acest tip de fragmentare se numeşte fragmentare externă
Defragmentarea memoriei
Blocurile de memorie izolate sunt mutate astfel încât să alcătuiască o zonă contiguăEficienţa operaţiei de defragmentare depinde de:– viteza de mutare a blocurilor– încărcarea sistemului (numărul de procese ale
aplicaţiei)– dimensiunea blocurilor de memorie
Defragmentarea memoriei
Operaţia de defragmentare se realizează în mai mulţi paşiDupă mutarea a două blocuri, blocul rezultat poate fi de asemeni prea mic pentru un apel de alocarePe timpul fragmentării procesele nu pot accesa zonele de memorie alocate lor (acestea se pot afla în operaţia de mutare)Procesul de defragmentare concurează şi el la resursele sistemului ca şi orice alt procesPrioritatea procesului de defragmentare este de obicei mai mică decât a proceselor aplicaţiei
Defragmentarea memoriei
Restricţii impuse defragmentării:– blocurile care sunt accesate prin intermediul
adreselor fizice nu pot fi mutate– trebuie să fie respectate condiţiile de aliniere a
adreselor de memorie
Gestionarea memoriei
Un gestionar de memorie trebuie să realizeze cu rapiditate operaţiile
– determinarea un bloc liber de memorie de dimensiunea cerută sau mai mare (parte a funcţiei malloc)
– actualizarea informaţiei legate de memorie (parte a funcţiilor malloc şi free)
– determinarea posibilităţii de a combina blocul eliberat cu altele pentru a obţine o zonă contiguă de dimensiune mai mare
– să minimizeze activitatea suplimentară legată de gestioareamemoriei
Eficienţa gestionarului de memorie este determinată de structura tabelei de alocare a memoriei
Utilizarea blocurilor de memorie de dimensiune fixă
Zona de memorie este împărţită în grupuri (pools) de blocuri de memoriefiecare bloc de memorie dintr-un grup are aceeaşi dimensiunegrupurile conţin blocuri de dimensiuni diferiteFiecare grup este controlat de un bloc de control care deţine informaţiile:– dimensiunea unui bloc– numărul total de blocuri disponibile– numărul de blocuri libere
Structura memoriei
Fiecare grup este constituit dintr-o număr de blocuri de memorie organizate într-o listăLa o operaţie de alocare reuşită, blocul de memorie este eliminat din listăLa eliberarea unui bloc de memorie acesta este adăugat în lista grupului corespunzător dimensiunii luiO operaţie de alocare sau de eliberare poate elimina sau adăuga mai multe blocuri în listele grupurilor
Alocarea blocurilor de memorie
Alocarea blocurilor de memorie– grupurile sunt ordonate în funcţie de dimensiunea
blocurilor– la cererea unei zone de memorie de o anumită
dimensiune se caută blocul de dimensiunea cea mai mică dar mai mare sau egală cu dimensiunea cerută
Acţiuni:– se caută grupul cu dimensiunea cea mai mică– se caută primul bloc liber din listă
Alocarea blocurilor de memorie
Avantaje:– reduce fragmentarea internă a memoriei– îmbunătăţeşte performanţele aplicaţiilor cu
caracteristici statice:lucrează în medii predictibilenumăr cunoscut de procese createcunoaşterea de la început dimensiunii blocurilor de memorie
– are un comportament determinist (timpul de alocare este constant)
– nu necesită restructurare (defragmentare)
Sisteme RTOS cu memorie redusă
Dimensiunea memoriei impusă de restricţii de– preţ dispozitivelor de memorie– gabarit– consum de energie– cost suplimentar dat de gestionarul de memorie
Memoria este partajată între procesele sistemuluiPot apare momente când nu există memorie disponibilă (disponibilitate temporară)Unele procese vor aştepta eliberarea unor blocuri de memorie ca să poată continua execuţia
Sisteme RTOS cu memorie redusă
Acţiunea executată de un proces când cererea de memorie nu poate fi alocată depinde de implementarea RTOSAcţiuni– procesul se blochează pe o durată limitată– procesul se blochează pe un timp nedefinit– procesul îşi continuă execuţia
Implementarea alocării memoriei cu blocare
Implementarea foloseşte obiecte RTOS– semafor numărător– mutex
Obiectele permit sincronizarea operaţiei de alocare a memorieiÎn cazul alocării cu blocuri de dimensiune fixă, se utilizează câte un semafor numărător şi câte un mutex pentru fiecare grup de blocuri de memorie
Implementarea alocării memoriei cu blocare
Semaforul numărător – este iniţializat cu valoarea numărului de blocuri de
memorie existente în grup– valoarea lui va indica numărul de blocuri de
memorie disponibile în grupul respectiv– blocurile de memorie sunt alocate şi eliberate de
la/la începutul listeiBlocurile de control sunt actualizate după fiecare operaţie de alocare sau eliberare de memorie
Alocarea memoriei
Pentru o operaţie de alocare de memorie reuşită un proces trebuie– să ia în posesie semaforul numărător (rezervă
blocurile de memorie necesare)– să ia în posesie mutex-ul (blochează operarea
simultană asupra grupului de memorie a altor procese)
Alocarea memoriei
Luarea în posesie a semaforului– reuşită – se rezervă un bloc de memorie. Valoarea
semaforului numărător este scăzută cu o unitate– nereuşită – înseamnă că nu mai sunt blocuri de
memorie liberă în grupul respectiv. Procesul se blochează şi aşteaptă eliberarea unui bloc de memorie
Alocarea memoriei
Luarea în posesie a mutex-ului– reuşită – se alocă un bloc de memorie şi se
actualizează blocul de control al grupului– nereuşită – înseamnă că grupul de blocuri
respectiv este accesat de alt proces pentru o operaţie de alocare sau eliberare a memoriei. Procesul se blochează şi aşteaptă încheierea operaţiei în curs
Alocarea memorie. Codul sursă
:Ia în posesie semafor(semafor_numărător)Ia în posesie mutexAlocă bloc de memorieEliberează mutex:
Eliberarea memoriei. Codul sursă
:Ia în posesie mutexEliberează bloc de memorieEliberează mutexEliberază semafor(semafor_numărător):
Avantaje
Sunt eliminate problemele de inversiune de prioritateAlocarea şi eliberarea memoriei este realizată în siguranţă
Etapele proiectării
Specificarea cerinţelor aplicaţieiStabilirea cerinţelor sistemului– cerinţe hardware– cerinţe software
Scrierea programelor aplicaţieiCodificarea şi depanarea programelorInstalarea aplicaţieiTestarea, evaluarea şi măsurarea performanţelorÎntreţinerea programelor
Alte etape ale proiectării
Realizarea prototipuluiConceperea interfeţei om-maşinăElaborarea criteriilor de evaluare a sistemului
Specificarea cerinţelor aplicaţiei
Este realizată de către beneficiar– de multe ori este specifică acestuia– de obicei defineşte funcţionarea aplicaţiei în linii
mariEste detaliată prin discuţii şi precizări între beneficiar şi dezvoltator
Specificarea
La nivel informal– utilizează limbajul natural şi alte forme de reprezentare
imprecise (diagrame, grafice, scheme bloc)Nivel structural
– utilizează elemente de reprezentare grafică bine definite– au la bază componente elementare predefinite care sunt
conectate de o manieră bine determinatăNivel formal
– se bazează pe metode având proprietăţi matematice– pot fi concepute descrieri precise– proprietăţile acestora pot fi demonstrate (matematic)
Metode de specificare
Trebuie să prezinte funcţionalitatea sistemului folosind termeni expliciţi care să precizeze:– elementele de timp real specifice aplicaţiei– comportamentul în timp a sistemului– specificaţiile legate de siguranţa şi fiabilitatea
sistemului– funcţionarea sistemului la apariţia unui defect
Nu există o singură metodă de specificare a funcţionalităţii sistemuluiFiecare utilizează tehnica pe care o cunoaşte cel mai bine
Metode de specificare
Limbajul naturalSpecificaţiile matematiceOrganigrameDiagrame structuralePseudocod, limbaje de programare şi specificareDiagrame cu fluxuri de dateReţele PetriMetode bazate pe sisteme reactiveAutomate finiteMetode/Limbaje orientate obiectUML (Universal Modelling Language)SDL (System Description Language)
Limbajele naturale
Sunt ambigue şi nu există un sistem care să producă cod executabil pornind de la o descriere făcută doar într-un astfel de limbajPot fi utilizate pentru
– descrierea sistemelor simple– a constitui un punct de plecare pentru o descriere mai
detaliată– a sublinia anumite aspecte cărora trebuie să li se acorde o
atenţie sporităExemplu
Un simulator pentru automobil constă dintr-o cutie de viteze, un sistem de frânare, un sistem de afişare şi unul de accelerare. Fiecare sistem se execută sporadic cu excepţia sistemului de afişare care se execută la fiecare 100 ms. Viteza vehiculului la orice moment t este egală cu ...
Specificaţiile matematice
Sunt precise, lipsite de ambiguitate şi eficaceOptimizări ale sistemului pot fi obţinute prin optimizarea modelului matematicSe pot utiliza metode formale pentru demonstrarea funcţionării corecteExemplu
Un simulator pentru automobil constă dintr-o cutie de viteze, un sistem de frânare, un sistem de afişare şi unul de accelerare. Fiecare sistem... Poziţia automobilului faţă de planurile x şi z se modifică coform relaţiilor
dx=v(t) Tθ cos θdx=v(t) Tθ sin θ ...
Organigrame
Nu sunt recomandate deoarece produc instrucţiuni care nu sunt recomandate în cadrul unei programări structurate (ex. goto)În sistemele multiprocespot fi utilizate pentru a descriere funcţionarea fiecărui proces în parte
Citeşte cuvânt de stare
Start
Stop
Bit 1 =0? Bit 2 =0?
Indicator eşec
Da
NuNu
…
Diagrame structurale
Utilizate pentru a descriere descompunerea structurală a sistemuluiSe pot utiliza metode pentru optimizarea acestei descompuneri
Acceptăcomanda
Telefonie
Selectează beneficiar
Selectează bon
Acceptăalegerea
GazElectricitate
Vodafone Orange
Pseudocod, limbaje de programare
Permit realizarea descrierilor într-o manieră apropiată de limbajul naturalExemplu
Beginacceptă comandaafişează “Doriţi bon”
if (DA) setează tipăreşteBonelse
afişează “Alegeţi operaţiune”......
Diagrame bazate pe fluxuri de date
Se bazează pe utilizarea simbolurilor grafice care reprezintă procesele şi fluxurile de date dintre acestea
Controler
AfişorReceptor
Emiţător
Liber
Liber
Buffergol
Tranferdate
Preluare date Buffer
plin
Comenzi operator
Rapoarte pt. operator
Reţele Petri
Constituie un model matematic ce poate fi utilizat pentru specificarea unor sisteme multiprocesElemente de bază:– Stări/procese– Tranziţii
Tranziţie
2
Stare
Contor
P1
1
P2
T1
Reţele Petri
– Stările şi tranziţiile sunt etichetate– Graful iniţial are o serie de marcaje care
corespunde stării iniţiale– Evoluţia sistemului se face prin tranziţii dintr-o
stare în alta în funcţie de îndeplinirea condiţiilor de tranziţie
UML
Este un ansamblu de notaţii orientate obiecteste un standardpermite modelarea unor tipuri de sisteme diferite cu sau fără parte softwareeste un limbaj grafic, intuitivutilizat pentru comunicarea specificaţiilor între echipedezavantaje:
– nu are semantică formală– are numeroase variante în funcţie de pachetul de programe
folosit– nu permite generarea de cod de bună calitate
UML
Utilizează diagrame pentru identificarea funcţionalităţilor– exprimă comportamentul sistemului din punctul de
vedere al utilizatorului sub formă de acţiuni/reacţiuni
– descrie sistemul şi relaţiile între sistem şi mediul înconjurător
– constituie un mijloc de a determina necesităţile sistemului
– folosit de utilizatorii finali pentru a exprima aşteptările lor
UML
Pornind de la cazurile de utilizare se identifică structura sistemuluiRezultă obiectele care participă la fiecare funcţie
UML
Pornind de la identificarea obiectelor se identifică:– clasele (se generalizează obiectele)– grupurile de clase (în pachete, biblioteci)– asocierea unei activităţi fecărui pachet, biblioteci– introducerea părţii hardware sub formă de
componente– asocierea activităţilor componentelor hardware
SDL
Conceput iniţial pentru specificarea şi realizarea protocoaleloradaptat descrierilor formalese bazează pe principiul că un sistem este un ansamblu structurat de procese care se execută în paralel ce comunică prin intermediul mesajelor
SDL
SDL se bazează pe principiul structurării care permite descompunerea sistemului în părţi care pot fi definite, proiectate şi realizate în ordinea care convine proiectantuluiExistă 3 niveluri de structurare:
– nivel sistem: blocuri + canale de comunicaţie– nivel bloc: procese + linii de semnal– nivel proces
interfaţămediul înconjurător
sistem
bloc bloc
bloc
Verificarea specificaţiei
Înainte de a trece la etapa următoare trebuiesc verificate următoarele:– consistenţa specificaţiei– corectitudinea specificaţiei– completitudinea specificaţiei
Consistenţa specificaţiilor
Specificaţiile nu conţin erori privind– cerinţele funcţionale– cerinţele temporale– atributele– cerinţele de implementare
Consistenţa specificaţiilor
Se verifică să nu existe contradicţii între elemente sau funcţionalităţile specificate– nu există elemente care se anulează reciproc– nu există elemente care nu sunt compatibile– pentru aceleaşi mărimi se utilizează tipuri de date
diferite
Corectitudinea specificaţiilor
se verifică corectitudinea afirmaţiilor din specificaţiese verifică faptul că anumite specificaţii pot fi realizate în practică
Completitudinea specificaţiilor
se verifică să nu existe:– componente nespecificate– funcţionalităţi neprecizate– componente sau funcţionalităţi redundante
Stabilirea cerinţelor sistemuluicerinţe hardware
Numărul de intrări şi ieşiriNumărul de elemente de procesareNumărul de componente cu funcţii speciale:– temporizatoare– convertoare– module de comunicaţie pentru diferite protocoale– elemente de afişare– elemente de comandă (butoane, comutatoare,
senzori etc.
Cerinţe software
Sistemul de operare (RTOS) folositLimbajul de programare folositObiectele RTOS necesareAlte componente software– interfeţe utilizator– biblioteci de funcţii (matematice, comunicaţie,
aplicaţii specifice)
Etapele proiectării
Specificarea cerinţelor aplicaţieiStabilirea cerinţelor sistemului– cerinţe hardware– cerinţe software
Scrierea programelor aplicaţieiCodificarea şi depanarea programelorInstalarea aplicaţieiTestarea, evaluarea şi măsurarea performanţelorÎntreţinerea programelor
Alte etape ale proiectării
Realizarea prototipuluiConceperea interfeţei om-maşinăElaborarea criteriilor de evaluare a sistemului
Arhitectura sistemului
Utilizator
WebServer
Internet
Bazăde date
Plăci dedezvoltare
PC
Placă cumicrocontroler
XS40-005XL XS40-010E XS95-108 XSA-50
Conexiuniparalele Conexiune
serială
Resurse oferite de sistemele de dezvoltare XESS
NuNuDaDaSoclu EEPROM serial
DaNuNuNuMicrobutonDaDaDaDaAfişor 7-segmente
DaDaDaDaOscilatorProgramabil
DaDaDaDaPort PS/2DaDaDaDaVGA portDaDaDaDaPort paralel256kBNuNuNuFlash16MB128kB128Kb32KbRAMNu803180318031Microcontroler
XC9572XLXC95108NuNuCPLDXC2S50NuXC 4010EXC 4005XLFPGAXSA-50XS95-108XS40-10EXS40-005XLCaracteristici
Sarcinile sistemului
Monitorizarea ieşirii plăcilor de dezvoltareComunicarea cu calculatorul prin portul serialGestionarea alimentării plăcilor de dezvoltareAfişarea pe ecranul LCDMonitorizarea temperaturii mediului ambiant
Monitorizarea ieşirii plăcilor de dezvoltare
Pentru fiecare placă de dezvoltare se monitorizează starea a 8 ieşiriCitirea ieşirilor se realizează la primirea comenzii de citire
Comunicarea cu calculatorul prin portul serial
Comunicarea este bidirecţionalăPrin intermediul conexiunii seriale se transmit– comenzi de la calculator la microcontroler– mesaje de validare a transmisiei– valorile citite la ieşirile plăcilor de dezvoltare– valoarea temperaturii mediului ambiant
Comunicarea se realizează prin intermediul unui protocol de comunicare
Protocol de comunicare
Comenzile sunt de forma[STX] [Comanda] [Lungime] [Date] [CRC] [ETX]
Comanda este reprezentată printr-un caracterLungime este o valoare pe 8 biţi care indică numărul de octeţi de date la care se adaugă 3 pentru
– octetul comenzii– octetul lungimii– octetul CRC
STX = start transmisieETX = sfârşit de transmisie
Protocolul de comunicaţie
Microcontrolerul va răspunde cu următoarele tipuri de mesaje– Mesaj de confirmare a recepţiei comenzii
[STX] [ACQ] [ETX]– Mesaj pentru comunicare de date
[STX] [Comanda] [Lungime] [Date] [CRC] [ETX]În mesajul de răspuns al doilea câmp reprezintă comanda căreia i se răspunde.
Protocolul de comunicaţie
Conform protocolului de comunicaţie, calculatorul trebuie să primească confirmarea recepţiei comenzii din partea microcontrolerului înainte de a trimite un nou mesajDacă nu este confirmată primirea comenzii în 5 secunde, comanda este retransmisă automatDupă cinci tentative nereuşite, calculatorul va afişa un mesaj de eroare
Comenzile sistemului
Comandă setarea rezoluţiei senzorului de temperatură la 12 biţi
0107Setează rezoluţia temperaturii la 12 biţi
Comandă oprirea alimentării plăcii 10205Opreşte placa 2
07
05
03
01
01Cod
Comandă oprirea alimentării plăcii 101Opreşte placa 1
Comandă citirea temperaturii mediului ambiant-Citeşte temperatură
Comandă citirea valorilor ieşirilor celei de a doua plăci de dezvoltare
02Citeşte placă 2
Comandă setarea rezoluţiei senzorului de temperatură la 14 biţi
02Setează rezoluţia temperaturii la 14 biţi
Comandă citirea valorilor ieşirilor primei plăci de dezvoltare
01Citeşte placă 1DescriereDataComandă
Comenzile sistemului
10
09
08
08Cod
Se iniţializează ambele plăci de dezvoltare şi senzorul de temperatură
-Iniţializare generală
Se iniţializează senzorul de temperatură-Iniţializare senzor de temperatură
Se iniţializează a doua placă de dezvoltare prin întreruperea tensiunii de alimentare şi apoi realimentarea plăcii
02Iniţializare placă 2
Se iniţializează prima placă de dezvoltare prin întreruperea tensiunii de alimentare şi apoi realimentarea plăcii
01Iniţializare placă 1DescriereDataComandă
Gestionarea alimentării plăcilor de dezvoltare
Plăcile de dezvoltare nu vor fi alimentate când– nu sunt folosite– tensiunea de alimentare depăşeşte valoarea
nominalăÎntreruperea alimentării se face prin intermediul unor relee comandate de microcontrolerAlimentarea şi întreruperea celor două plăci se realizează separat
Afişarea pe ecranul LCD
Ecranul LCD este folosit pentru afişarea diferitelor informaţii existente în sistem– Numărul plăcii– Valoarea ieşirilor plăcilor de dezvoltare– Valoarea temperaturii mediului ambiant
Modul de afişare– Afişarea se face alternant, când pentru prima
placă, când pentru cea de a doua cu o durată de 10s.
– Afişarea poate fi îngheţată prin activarea uneia din intrările microontrolerului (apăsarea unui buton).
Monitorizarea temperaturii mediului ambiant
Temperatura mediului este monitorizată prin intermediul unui senzor inteligent de tip SHT11Comunicarea între microcontroler şi senzor se realizează pe baza protocolului specific senzoruluiSenzorul poate fi configurat astfel încât temperatura să fie dată cu o rezoluţie de 12 sau 14 biţi. Temperatura este citită la fiecare 60 secunde
Funcţiile sistemului
Citire ieşiri plăci de dezvoltareRecepţionare comenzi de la calculator prin portul serialConfirmare primire comandăTrimitere răspunsOprirea tensiunii de alimentare a plăcilor de dezvoltareAlimentarea plăcilor de dezvoltareMăsurarea tensiunii de alimentare a plăcilor de dezvoltareAfişarea pe ecranul LCD date despre placa de dezvoltareMăsurarea temperaturii mediului ambiant
Determinarea caracteristicilor de timp
Pentru fiecare dintre acţiuni trebuie stabilit dacă sunt de tip– periodică– aperiodică– sporadică
Trebuie stabilit cine iniţiază acţiunile, deci dacă sunt:– declanşate de un eveniment– declanşate în funcţie de timp
Determinarea caracteristicilor de timp
EvenimentaperiodicăCitire ieşiri plăci de dezvoltare
EvenimentaperiodicăOprirea tensiunii de alimentare a plăcilor de dezvoltare
EvenimentaperiodicăTrimitere răspuns
EvenimentaperiodicăConfirmare primire comandă
EvenimentaperiodicăRecepţionare comenzi de la calculator prin portul serial
Tip declanşareTip acţiuneFuncţie
Determinarea caracteristicilor de timp
TimpperiodicăMăsurarea temperaturii mediului ambiant
TimpperiodicăAfişarea pe ecranul LCD date despre placa de dezvoltare
TimpperiodicăMăsurarea tensiunii de alimentare a plăcilor de dezvoltare
EvenimentaperiodicăAlimentarea plăcilor de dezvoltare
Tip declanşareTip acţiuneFuncţie
Determinarea caracteristicilor de timp
Trebuie ţinut cont de– relaţiile de precedenţă– relaţiile de excludere mutuală– alte constrângeri temporale
Determinarea caracteristicilor de timp
Depinde de recepţionarea comenziiCitire ieşiri plăci de dezvoltare
După recepţionarea comenzii sau la sesizarea supratensiunii
Oprirea tensiunii de alimentare a plăcilor de dezvoltare
După confirmarea comenzii şi când este disponibil răspunsul
Trimitere răspuns
Imediat după recepţionarea comenziiConfirmare primire comandă
-Recepţionare comenzi de la calculator prin portul serial
Relaţie/Constrângere de timpFuncţie
Determinarea caracteristicilor de timp
La fiecare 60sMăsurarea temperaturii mediului ambiant
Excludere mutuală între procesele care afişează datele celor două plăciAlternant 10s
Afişarea pe ecranul LCD a datelor despre placa de dezvoltare
La fiecare 10sMăsurarea tensiunii de alimentare a plăcilor de dezvoltare
După recepţionarea comenziiAlimentarea plăcilor de dezvoltareRelaţie/Constrângere de timpFuncţie
Determinarea intrărilor şi ieşirilor
Pe baza analizei specificaţiilor s-au identificat următoarele intrări
– intrările corespunzătoare plăcii 1– intrările corespunzătoare plăcii 2– intrarea comunicaţiei seriale– intrarea de măsurare a tensiunii de alimentare a plăcii 1– intrarea de măsurare a tensiunii de alimentare a plăcii 2– intrarea comunicaţiei seriale cu calculatorul– intrarea comunicaţiei seriale cu senzorul de temperatură – intrarea de comandă a afişării continue
Determinarea intrărilor şi ieşirilor
Pe baza analizei specificaţiilor s-au identificat următoarele ieşiri– ieşirea de comandă a alimentării plăcii 1– ieşirea de comandă a alimentării plăcii 2– ieşirea comunicaţiei seriale– ieşirea de afişare pe LCD– ieşirea comunicaţiei seriale cu calculatorul– ieşirea comunicaţiei seriale cu senzorul de
temperatură
Determinarea necesarului de resurse pentru intrări şi ieşiri
1 intrare digitală
1 intrare digitală
1 intrare analogică
1 intrare analogică
1 intrare8 intrări digitale8 intrări digitale
Necesar
8 terminale port Bintrările corespunzătoare plăcii 1
RA4intrarea de comandă a afişării continue
RA2 *intrarea comunicaţiei seriale cu senzorul de temperatură
RA1 (AN1)intrarea de măsurare a tensiunii de alimentare a plăcii 2
RA0 (AN0)intrarea de măsurare a tensiunii de alimentare a plăcii 1
RC7 (RX)intrarea comunicaţiei seriale cu calculatorul
8 terminale port Dintrările corespunzătoare plăcii 2
AlocareIntrare
* În cazul senzorului SHT11 transmisia se face pe 2 fire, 1 este pentru semnalul de ceas (unidirecţional) şi al doilea pentru semnalul de date (bidirecţional)
Determinarea necesarului de resurse pentru intrări şi ieşiri
6 ieşiri digitale
1 ieşire digitală
1 ieşire digitală
1 ieşire digitală
1 ieşire digitală
Necesar
RC4ieşirea de comandă a alimentării plăcii 1
RE0-RE1,RC0-RC3ieşirea de afişare pe LCD
RA3 *ieşirea comunicaţiei seriale cu senzorul de temperatură
RC6 (TX)ieşirea comunicaţiei seriale
RC5ieşirea de comandă a alimentării plăcii 2
AlocareIntrare
* În cazul senzorului SHT11 transmisia se face pe 2 fire, 1 este pentru semnalul de ceas (unidirecţional) şi al doilea pentru semnalul de date (bidirecţional)
Determinarea funcţiilor concurente
Fiecare funcţie poate implica o anumită resursă a sistemuluiResursele sunt:– unitatea centrală– unităţile periferice– memoria– terminale
Caracterul dispozitivelor
Dispozitivele cu care sistemul interacţionează pot fi– de intrare (ieşirile plăcilor de dezvoltare)– de ieşire (dispozitivul de afişare LCD)– de intrare/ieşire (senzorul de temperatură)
Resursele pot fi– pasive (nu produc întreruperi)
sincroneasincrone
– active (produc întreruperi)sincroneasincrone
Caracterul dispozitivelor
Dispozitivele pasive– nu produc întreruperi– sistemul este cel care trebuie să iniţieze comunicarea cu
dispozitivul– produc un răspuns doar dacă acest lucru le-a fost cerut– cererea poate fi
periodică – program implementat sub forma unei bucle infinite în care cererea este iniţiată la fiecare trecere prin buclăaperiodică – cererea este făcută doar atunci când sunt necesare anumite date
– frecvenţa cererilor trebuie să fie în concordanţă cu dispozitivul interogat
Caracterul dispozitivelor
Frecvenţa prea mică, este posibil ca anumite date să fie pierduteFrecvenţa prea mare, microcontrolerul este încărcat pe o perioadă mai mare cu sarcini mai puţin importante
Identificarea dispozitivelor active
Sunt dispozitivele care generează întreruperiÎn funcţie de aplicaţie unele dispozitive pot fi pasive sau activeEx: CAN
– pasiv – se comandă conversia, se testează sfârşitul conversiei citind bitul
– activ – se utilizează ADIF (Analog/Digital Interrupt Flag) pentru a anunţa microcontrolerul de încheierea conversiei
– Ex: USART – se utilizează RCIF sau TXIF pentru semnalarea golirii sau umplere a memoriei tampon pentru recepţie sau transmisie
Identificarea dispozitivelor pasive
Dispozitive care nu generează întreruperi– USART– CAN– afişor LCD– senzor de temperatură– plăci de dezvoltare– relee electromagnetice
1
Programarea sistemelor de timp real
Elemente de proiectare a aplicaţiilor RT. Studiu de caz
(partea a II-a)
Etapele proiectării
Specificarea cerinţelor aplicaţieiStabilirea cerinţelor sistemului– cerinţe hardware– cerinţe software
Scrierea programelor aplicaţieiCodificarea şi depanarea programelorInstalarea aplicaţieiTestarea, evaluarea şi măsurarea performanţelorÎntreţinerea programelor
Identificarea dispozitivelor pasive
Dispozitive care nu generează întreruperi– USART– CAN– afişor LCD– senzor de temperatură– plăci de dezvoltare– relee electromagnetice
Determinarea resurselor software
Selectarea modului de implementare– folosind tehnici uzuale de programare
interogarea în buclăutilizarea întreruperilor
– folosind nucleu/sistem de operare de timp realSelectarea limbajului de programareAlegere:– sistem de operare de timp real– uCOS-II– limbajul C
Determinarea resurselor software
Stabilirea obiectelor RT folosite pentru– partiţionarea aplicaţiei şi realizarea concurenţei– mecanisme de sincronizare– mecanisme de temporizare– mecanisme pentru schimb de informaţii între
procese– mecanisme pentru accesul partajat la resursele
sistemuluicomunicaţia serială cu calculatorulconvertorul analog numericdispozitivul de afişare LCD
Partiţionarea aplicaţiei şi realizarea concurenţei
În cazul folosirii unui RTOS, partiţionarea este realizată prin intermediul proceselorSe stabilesc câte procese vor exista ţinând cont de– numărul maxim de procese permis de RTOS– numărul maxim de procese permis de resursele
sistemului (memoria disponibilă)– complexitatea funcţiilor pe care le implementează
fiecare proces
Partiţionarea aplicaţiei şi realizarea concurenţei
Se porneşte de la funcţiile îndeplinite de sistemSe alocă aceste funcţii diverselor proceseSe determină interacţiunile dintre procese
Alocarea proceselor şi a priorităţilor
77Măsurarea temperaturii mediului ambiant
66Afişarea pe ecranul LCD date despre placa de dezvoltare
44Măsurarea tensiunii de alimentare a plăcilor de dezvoltare
22Alimentarea plăcilor de dezvoltare
22Oprirea tensiunii de alimentare a plăcilor de dezvoltare
55Trimitere răspuns
11Confirmare primire comandă
11Recepţionare comenzi de la calculator prin portul serial
33Citire ieşiri plăci de dezvoltare
PrioritateProcesFuncţii
Alocarea proceselor şi a priorităţilor (varianta 2)
99Măsurarea temperaturii mediului ambiant
88Afişarea pe ecranul LCD date despre placa de dezvoltare
77Măsurarea tensiunii de alimentare a plăcii 2
66Măsurarea tensiunii de alimentare a plăcii 1
22Alimentarea plăcilor de dezvoltare
22Oprirea tensiunii de alimentare a plăcilor de dezvoltare
55Trimitere răspuns
11Confirmare primire comandă
11Recepţionare comenzi de la calculator prin portul serial
44Citire ieşiri placă 2
33Citire ieşiri plăcă 1
PrioritateProcesFuncţii
Alocarea proceselor şi a priorităţilor
Observaţii:Partiţionarea nu este unicăMai multe funcţii pot fi alocate aceluiaşi procesÎn cadrul uCOS-II procesele au priorităţi unice
Procesele şi interacţiunile dintre ele
CitPlaca1CitPlaca1
AfisLCDAfisLCD
MasTempMasTemp
AlimAlim
ComPCComPC
MasTensMasTens
CitPlaca2CitPlaca2
Procesele şi interacţiunile dintre ele (varianta 2)
CitPlaca1CitPlaca1
AfisLCDAfisLCD
MasTempMasTemp
AlimAlim
ComPCComPC
MasTens2MasTens2
CitPlaca2CitPlaca2
MasTens1MasTens1
Mecanisme de sincronizare
Procesele de măsurare vor fi declanşate de către procesul de ComPC la primirea comenzii corespunzătoareObiecte RT ce pot fi folosite:– semafoare– cutii poştale– semnale
Cutiile poştale au avantajul că permit transmiterea unei valori (valoarea măsurată)
Mecanisme de temporizare
Permit introducerea unor temporizări între două execuţii consecutiveImplementarea poate fi realizată folosind– apeluri blocante de tip Delay– apeluri blocante cu aşteptare pe un timp definit
Vor fi utilizate pentru – măsurarea periodică a temperaturii şi tensiunii– afişarea alternantă a informaţiilor pe LCD despre
cele 2 plăci de dezvoltare
Mecanisme pentru schimb de informaţii între procese
Se aleg obiectele RT care răspund cel mai bine necesităţilor aplicaţieiSe pot utiliza
– cozi de mesaje– cutii poştale– conducte
Vor fi utilizate pentru transmiterea valorilor mărimilor măsurate (temperatură, tensiuni de alimentare) şi a valorilor ieşirilor plăcilor de dezvoltareÎn cazul implementării se vor utiliza cutii poştale fiind vorba de transmiterea unei singure valori
Mecanisme pentru accesul partajat la resursele sistemului
Rezultatul măsurătorilor sunt transmise către calculator folosind aceeaşi legătură serialăConvertorul analog numeric este folosit pentru măsurarea ambelor tensiuni de alimentare a plăcilorDispozitivul LCD este folosit pentru afişarea datelor de la procesele de măsurare. Afişarea datelor se va face pe rând
Mecanisme pentru accesul partajat la resursele sistemului
Partajarea canalului de comunicare serială va fi asigurată de procesul ComPCPentru realizarea accesului partajat la convertorul analog/numeric şi la dispozitivul de afişare se vor utiliza semafoare cu excludere mutuală (mutex).
Scrierea programelor de aplicaţie
Se va folosi pseudocodul şi alte reprezentări grafice care pot fi apoi transpuse cu uşurinţă într-un limbaj de programarePentru pseudocod se vor utiliza:– instrucţiuni de atribuire– instrucţiuni de buclare (for, while, loop)– instrucţiuni de bifurcare (if then else)– instrucţiuni de selecţie (case, switch)– simboluri sau cuvinte cheie de delimitare a
blocurilor (begin, end, {,})
Citirea semnalelor de ieşire la placa 1
process CitPlaca1(){
Ia în posesie SemCitPlaca1;Citeşte port B ;Trimite valP1 în CP_Placa1; Ia în posesie MutexLCD;Scrie valP1 la LCD;Eliberează MutexLCD;
}
Citirea semnalelor de ieşire la placa 2
process CitPlaca2(){
ia în posesie SemCitPlaca2;citeşte port D;trimite valP2 în CP_Placa2; ia în posesie MutexLCD;scrie valP2 la LCD;eliberează MutexLCD;
}
Măsurarea temperaturii
process MasTemp(){
aşteaptă 60s mesaj în CP_MasTemp();switch (mesaj)
case temp_12b) {configurează senzor pe 12 biţi;măsoară temperatura;trimite valTemp în CP_ValTemp;ia în posesie MutexLCD;scrie valTemp la LCD;eliberează MutexLCD;}
Măsurarea temperaturii
case temp_14b: { configurează senzor pe 14 biţi;măsoară temperatura;trimite valTemp în CP_valTemp;ia în posesie MutexLCD;scrie valTemp la LCD;eliberează MutexLCD;}
case init: initializează senzor temperatură;}
}
Măsurarea tensiunii plăcii 1
process MasTens1() {ia în posesie 10s SemTens1;ia în posesie MutexCAN;configurează CAN pentru placa 1; // AN0citeşte valoarea tensiunii placă 1;trimite valTens1 în CP_valTens1;if (valTens1< valMin || valTens1> valMax) {
seteaza indicator Alim1Stop; }eliberează MutexCAN;ia în posesie MutexLCD;scrie valTens1 la LCD;eliberează MutexLCD;
}
Măsurarea tensiunii plăcii 2
process MasTens2() {ia în posesie 10s SemTens2;ia în posesie MutexCAN;configurează CAN pentru placa 2; // AN1citeşte valoarea tensiunii placă 2;trimite valTens2 în CP_valTens2;if (valTens2< valMin || valTens2> valMax) {
seteaza indicator Alim2Stop; }eliberează MutexCAN; ia în posesie MutexLCD;scrie valTens2 la LCD;eliberează MutexLCD;
}
Gestionarea alimentării
process Alim() {Eliberează SemTens1;Aşteaptă mesaj 10s în CP_valTens1;if (mesaj== Tens1_0 || Alim1Stop) {
Opreste alimentarea placii 1;} else {
Alimentează placa 1;}Eliberează SemTens2Aşteaptă mesaj 10s în CP_valTens2;if (mesaj== Tens2_0 || Alim2Stop) {
Opreste alimentarea placii 2;} else {
Alimentează placa 2;}}
Comunicaţia cu PC-ul
process ComPC(){if (msg_comanda!=0)
trimite confirmare;switch (comanda)
case (citeste placa 1): {eliberează SemCitPlaca1;aşteaptă mesaj în CP_Placa1;trimite val dinCP_Placa1 la PC;}
Comunicaţia cu PC-ul
case (citeste placa 2); {eliberează SemCitPlaca2;aşteaptă mesaj în CP_Placa2;trimite val dinCP_Placa2 la PC;}
case (citeste temperatura): {if (rez=temp_12b) trimite mesaj temp_12b în
CP_MasTemp;else trimite mesaj temp_14b în CP_MasTemp;asteaptă mesaj în CP_ValTemp; trimite CP_ValTemp la PC;
}
Comunicaţia cu PC-ul
case (seteaza rezolutia): if (data==01) rez=temp_12b;else rez=temp_14b;
case (opreşte placa 1): trimite mesaj Tens1_0 înCP_valTens1;
case (opreşte placa 2): trimite mesaj Tens2_0 înCP_valTens2;
case (iniţializare placa1); {trimite mesaj Tens1_0 în CP_valTens1;trimite mesaj Tens1_1 în CP_valTens1;
}
Comunicaţia cu PC-ul
case (iniţializare placa2): {trimite mesaj Tens2_0 în CP_valTens2;trimite mesaj Tens2_1 în CP_valTens2;}
case (initializare generală): {trimite mesaj Tens1_0 în CP_valTens1;trimite mesaj Tens1_1 în CP_valTens1;trimite mesaj Tens2_0 în CP_valTens2;trimite mesaj Tens2_1 în CP_valTens2;trimite mesaj init în CP_MasTemp;}
} }