Beruflich Dokumente
Kultur Dokumente
\
|
=
N
N
i i
i
N
T
C
.
- Treba uoiti da suma sa leve strane nejednakosti zapravo predstavlja sumu svih
iskorienja procesa, odnosno ukupno iskorienje procesora U.
Programiranje u realnom vremenu 193
- Izraz sa desne strane nejednakosti predstavlja graninu vrednost iskorienja procesora za
N procesa preko koje ovaj uslov vie ne vai. Ova granina vrednost prikazana je u donjoj
tabeli i tei ka 69.3% kada N tei beskonanosti. Zbog toga svaki skup procesa koji ima
ukupno iskorienje manje od 69.3% sigurno jeste rasporediv pomou preemtpive RMPO
eme.
N Granino U
1 100.0%
2 82.8%
3 78.0%
4 75.7%
5 74.3%
10 71.8%
- Ovaj uslov je dovoljan za rasporedivost, to znai da e svi procesi sigurno ispotovati
svoje rokove ukoliko je uslov zadovoljen. Meutim, on nije i neophodan: ukoliko uslov
nije zadovoljen, moe, ali ne mora da se desi da neki proces prekorai svoj rok u vreme
izvravanja. Zbog toga ovaj test nije sasvim taan, ali je siguran ukoliko je ispunjen.
- Primer 1 pokazuje skup od tri procesa koji imaju ukupno iskorienje 0.82 (ili 82%). Kako
je ova vrednost iznad granine za tri procesa (0.78), ovaj test ukazuje da se dati skup
procesa moda ne moe rasporediti. Na slici je prikazana vremenska osa (engl. time-line)
koja ilustruje ponaanje ovih procesa u vreme izvravanja, ukoliko su sva tri poela u
trenutku 0. U trenutku 50 je proces a iskoristio samo 10 jedinica vremena, a potrebno mu
je 12, pa je on prekoraio svoj prvi rok.
Proces T C P U
a 50 12 1 0.24
b 40 10 2 0.25
c 30 10 3 0.33
0
c
b
a
10 20 30 40 50
Process release time
Process completion time - deadline met
Process completion time - deadline missed
Executing
Preempted
Programiranje u realnom vremenu 194
- Primer 2 pokazuje skup od tri procesa ije ukupno iskorienje iznosi 0.775, to je ispod
granine vrednosti, pa je garantovano da su ovi procesi rasporedivi.
Proces T C P U
a 80 32 1 0.4
b 40 5 2 0.125
c 16 4 3 0.25
- Crtanje vremenskih osa moe da poslui kao test provere rasporedivosti. Meutim,
postavlja se pitanje koliko dugo mora da se konstruite raspored u vremenu da bi bilo
garantovano da se u budunosti nee dogoditi iznenaenje i neki proces prekoraiti svoj
rok? Za procese koji poinju u istom trenutku (kritini trenutak) moe se pokazati da je
dovoljno posmatrati vreme do isteka prve najdue periode procesa (Liu & Layland, 1973).
To znai da je dovoljno pokazati da svi procesi zadovoljavaju svoj prvi rok, pa je sigurno
da e zadovoljiti i svaki naredni.
- Primer 3 pokazuje skup od tri procesa ije ukupno iskorienje iznosi 100%, pa oigledno
ne prolazi ovaj test rasporedivosti. Meutim, na vremenskoj osi se moe pokazati da svi
procesi zadovoljavaju svoj prvi rok, sve do trenutka 80, pa je ovaj skup ipak rasporediv.
Proces T C P U
a 80 40 1 0.5
b 40 10 2 0.25
c 20 5 3 0.25
0
c
b
a
10 20 30 40 50
60 70 80
Test rasporedivosti za EDF zasnovan na iskorienju
- U istom antologijskom radu, Liu i Layland (1973) su formulisali i test rasporedivosti za
EDF zasnovan na iskorienju:
Teorema: (EDF test rasporedivosti, Liu & Layland, 1973) Ako i samo ako je sledei uslov
ispunjen, onda je dati skup periodinih procesa (za koje vai D = T) rasporediv pomou EDF
eme:
1
1
s |
.
|
\
|
=
N
i i
i
T
C
.
- Kao to se vidi, ovaj test je najpre znatno jednostavniji nego za FPS. Osim toga, on je
sasvim taan, jer predstavlja potreban i dovoljan uslov rasporedivosti (oigledno je
Programiranje u realnom vremenu 195
potreban, jer je jasno da skup procesa sa ukupnim iskorienjem veim od 1 nije
rasporediv).
- Prema tome, EDF ema se u ovom smislu ini superiornijom u odnosu na FPS, jer
dozvoljava znatno vea iskorienja procesora. Drugim reima, EDF moe rasporediti
svaki skup procesa koji moe rasporediti FPS, ali obrnuto ne vai.
- I pored ovih prednosti EDF eme, FPS se ipak ee primenjuje iz sledeih razloga:
o FPS je znatno lake implementirati jer je prioritet (kao atribut procesa) statian i
izraunava se pre izvravanja, a ne tokom izvravanja kao kod EDF. EDF zato ima
vee reijske trokove tokom izvravanja.
o Lake je inkorporirati procese bez vremenskog roka u FPS nego u EDF, jer
davanje proizvoljnog roka takvom procesu nije prirodno.
o Vremenski rok ponekad nije jedini parametar od vanosti. Opet je lake
inkorporirati druge parametre rasporeivanja u pojam prioriteta (FPS) nego u
pojam vremenskog roka (EDF).
o Tokom perioda preoptereenja (engl. overload) koji su uzrokovani otkazima,
ponaanje FPS je predvidljivije (procesi nieg prioriteta e najpre prekoraiti svoje
rokove) nego ponaanje EDF. EDF je nepredvidljiv u tim sluajevima i moe da
dovede do domino efekta kada veliki broj procesa prekorauje svoje rokove.
o Test rasporedivosti ponekad vodi do pogrenog zakljuka, jer je kod FPS on samo
dovoljan, a ne i potreban, dok je za EDF on i potreban i dovoljan. Zbog toga se i za
FPS mogu postizati vea iskorienja u nekim sluajevima.
Test rasporedivosti za FPS zasnovan na vremenu odziva
- Test zasnovan na iskorienju ima dva bitna nedostatka: nije uvek taan i nije primenjiv
na optije modele procesa. Optiji pristup je zasnovan na analizi vremena odziva procesa
(engl. response-time analysis, RTA).
- Ovaj pristup ima dve faze. U prvoj fazi se analitikim putem izraunava vreme odziva u
najgorem sluaju za svaki proces. Vreme odziva je vreme koje protekne od trenutka
aktiviranja (engl. release time) periodinog procesa (trenutak poetka periode) ili
sporadinog procesa (spoljanji dogaaj), do trenutka zavretka njegovog izvravanja. U
drugoj fazi se jednostavno proverava da li je to vreme odziva u najgorem sluaju krae od
zadatog vremenskog roka (R s D).
- Kod FPS rasporeivanja, vreme odziva najprioritetnijeg procesa jednako je njegovom
vremenu izvravanja (R = C). Svi ostali procesi e trpeti interferenciju (engl. interference)
procesa vieg prioriteta. Interferencija predstavlja vreme provedeno u izvravanju procesa
vieg prioriteta dok je posmatrani proces spreman za izvravanje. U optem sluaju, za
proces i tako vai:
R
i
= C
i
+ I
i
,
gde je I
i
maksimalna interferencija koju trpi proces i u bilo kom vremenskom intervalu
[t, t+R
i
). Maksimalna interferencija oigledno nastupa kada se svi procesi vieg prioriteta
aktiviraju istovremeno sa procesom i. Bez gubitka optosti, ovaj kritini trenutak moe se
oznaiti kao trenutak 0.
- Posmatrajmo neki proces j koji je vieg prioriteta od procesa i. Tokom intervala [t, t+R
i
),
proces j bie aktiviran bar jednom (jer njegova perioda sigurno nije vea od T
i
), a moda i
vie puta. Jednostavan izraz za broj njegovih aktivacija je:
(
(
(
(
=
T
R
releases of Number
j
i
j
_ _
Programiranje u realnom vremenu 196
- Na primer, ako je R
i
jednako 15 a T
j
jednako 6, onda e proces j biti aktiviran 3 puta (u
trenucima 0, 6 i 12).
- Svaka aktivacija procesa j uzrokovae interferenciju duine C
j
. Zbog toga je:
C
T
R
ce Interferen Maximum
j
j
i
j
(
(
(
(
=
_
- Kako svaki proces vieg prioriteta uzrokuje interferenciju, onda je ukupna interferencija:
e (
(
(
(
=
) (i hp j
j
j
i
i C
T
R
I
gde je hp(i) skup svih procesa vieg prioriteta od procesa i.
- Konana jednaina izgleda ovako:
e (
(
(
(
+ =
) (i hp j
j
j
i
i i C
T
R
C R
- Iako je ova formula tana, vrednost interferencije se ne zna, jer se ne zna ni R
i
. Ova
jednaina ima R
i
na obe svoje strane, ali ju je teko reiti zbog funkcije gornjeg
zaokruivanja. U optem sluaju, moe postojati mnogo vrednosti R
i
koje zadovoljavaju
ovu jednainu. Najmanja takva vrednost predstavlja vreme odziva procesa u najgorem
sluaju.
- Najjednostavniji nain za reavanje navedene jednaine jeste formiranje rekurentne
relacije:
e (
(
(
(
+ =
+
) (
1
i hp j
j
j
n
i
i C
T
w
C w
n
i
- Niz ovako dobijenih vrednosti {w
i
0
,
w
i
1
,
w
i
2
, ...,
w
i
n
, ...} je monotono neopadajui. Kada se
postigne da je w
i
n+1
= w
i
n
, reenje jednaine je naeno. Ako je w
i
0
< R
i
(za w
i
0
se moe
uzeti C
i
), onda je w
i
n
najmanje rereenje, a time i traena vrednost. Ako jednaina nema
reenja, onda e niz w nastaviti da raste. To se deava za proces niskog prioriteta ukoliko
je ukupno iskorienje vee od 100%. Ako se u nekom trenutku dobije vrednost vea od
T
i
, moe se smatrati da proces nee ispotovati svoj rok.
- Odavde se moe formulisati algoritam za izraunavanje R
i
:
for each process do
W_old:=C
i
;
loop
Calculate W_new from W_old using the given equation;
if W_new = W_old then
R
i
:= W_new;
exit {Value found};
end if;
if W_new > T
i
then
exit {Value not found};
endif;
W_old:=W_new;
end loop;
end for;
- Ukoliko ovaj algoritam da reenje, ono e biti manje od T
i
, pa time i od D
i
, to znai da e
proces zadovoljiti svoj rok (D
i
= T
i
).
- Primer:
Proces T C P
a 7 3 3
b 12 3 2
Programiranje u realnom vremenu 197
c 20 5 1
Proces a: R
a
= 3
Proces b:
6
6 3
7
6
3
6 3
7
3
3
3
2
1
0
=
=
(
(
(
+ =
=
(
(
(
+ =
=
b
b
b
b
R
w
w
w
Proces c:
17 3
12
14
3
7
14
5
14 3
12
11
3
7
11
5
11 3
12
5
3
7
5
5
5
3
2
1
0
=
(
(
(
+
(
(
(
+ =
=
(
(
(
+
(
(
(
+ =
=
(
(
(
+
(
(
(
+ =
=
c
c
c
c
w
w
w
w
20
20 3
12
20
3
7
20
5
20 3
12
17
3
7
17
5
5
4
=
=
(
(
(
+
(
(
(
+ =
=
(
(
(
+
(
(
(
+ =
c
c
c
R
w
w
Kako za sve procese u najgorem sluaju vai R s T = D, svi procesi e zadovoljiti svoje
rokove. Proces c e taj rok zadovoljiti "tesno".
- Za primer koji nije proao test zasnovan na iskorienju, ovaj test daje pozitivan ishod:
Proces T C P U R
a 80 40 1 0.5 80
b 40 10 2 0.25 15
c 20 5 3 0.25 5
- Zbog toga je ovaj test superiorniji, ali i sloeniji od testa za FPS zasnovanog na
iskorienju. On je, naime, i potreban i dovoljan: ako skup procesa proe ovaj test, onda
e svi procesi zadovoljiti svoje rokove; ako skup procesa ne proe ovaj test, neki proces e
prekoraiti svoj rok, osim ako procena WCET (C) nije bila previe pesimistika i
neprecizna.
Procena WCET
- Sve opisane eme rasporeivanja, kao i testovi raporedivosti, pretpostavljaju da je unapred
poznato vreme izvravanja u najgorem sluaju (WCET) svakog procesa.
- Procena WCET se moe izvesti na dva naina, merenjem i analizom koda. Problem sa
merenjem je to se ne moe uvek biti siguran da je u probnom izvravanju postignut ba
Programiranje u realnom vremenu 198
najgori sluaj. Problem sa analizom koda je to je potrebno poznavati model procesora
(ukljuujui ke memoriju, protonu obraduengl. pipeline, predikciju grananja, ekanje
na pristup memoriji itd.).
- Veina tehnika analize koda ukljuuje sledee aktivnosti. Najpre se kod procesa
dekomponuje na delove sekvencijalnog koda (bez skokova) koji se nazivaju bazinim
blokovima (engl. basic block). Povezivanjem bazinih blokova (kao vorova) granama
koje predstavljaju tok kontrole programa formira se usmereni graf izvravanja. Zatim se
analizira mainski kod pridruen svakom bazinom bloku i model procesora, i pokuava
da predvidi najdue vreme izvravanja bazinog bloka. Kada su vremena izvravanja
bazinih blokova poznata, vri se redukcija grafa tako to se vie vorova zamenjuje
jednim sa najduim vremenom; na primer, dva bloka koji ine if-then-else konstrukt
zamenjuju se onim koji ima due vreme izvravanja.
- Naprednije tehnike analize koriste informaciju o semantici programa da bi dale precizniju
procenu. Na primer, posmatrajmo sledei deo koda:
for i in 1..10 loop
if cond then
-- Basic block of cost 100
else
-- Basic block of cost 10
end if;
end loop;
Bez ikakve posebne dodatne informacije, procena WCET za ovaj kod bila bi 10x100 + vreme
potrebno za reiju petlje, neka je to npr. 1005 vremenskih jedinica. Meutim, mogue je
zakljuiti (pomou statike analize koda) da uslov cond moe biti taan samo u tri iteracije.
Tako se dobija mnogo manje pesimistina i preciznija procena od 375 jedinica.
- Oigledno je da kod koji se eli analizirati na WCET mora biti ogranien; na primer,
petlje i rekurzije moraju biti ograniene.
- Poseban problem kod procene WCET je postojanje modernih elemenata u arhitekturi
procesora i raunara, kao to je ke memorija, protona obrada, prediktor grananja itd.
Ako se uticaj ovih elemenata zanemari, dobijaju se suvie pesimistine i neprecizne
procene, dok je uticaj ovih elemenata veoma teko precizno modelovati.
- Zbog toga se u praksi uglavnom upotrebljavaju kombinovane tehnike analize (uglavnom
pesimistine, koje zanemaruju uticaj optimizacija u hardveru i softveru) i detaljnog
testiranja.
Optiji model procesa
Sporadini procesi
- Da bi se jednostavni model procesa proirio tako da ukljuuje i sporadine procese,
veliina T se za sporadine procese uzima tako da predstavlja njihovo minimalno vreme
izmeu susednih pojavljivanja. Na primer, za neki sporadini proces za koji se zna da se
ne moe pojaviti vie od jednom u svakih 20 ms, uzima se da je T = 20 ms u opisanim
modelima. Iako sporadian proces u stvarnosti moe da se pojavi znatno ree, analiza
vremena odziva e dati rezultat za najgori sluaj.
- Drugi element vezan za sporadine procese jeste definicija pojma vremenskog roka D. U
jednostavnom modelu procesa uzima se da je D=T. Meutim, ovo je za sporadine
procese esto neprihvatljivo, jer oni esto predstavljaju obradu otkaza ili nekih vanrednih
Programiranje u realnom vremenu 199
situacija. Oni se moda izvravaju retko, ali su tada veoma hitni. Zato model mora da
dozvoli postojanje D<T.
- Test rasporedivosti zasnovan na vremenu odziva, meutim, sasvim dobro funkcionie i za
D<T, sve dok je uslov zaustavljanja w
i
n+1
< D
i
. On takoe radi i za bilo koji redosled
prioriteta, jer hp(i) uvek predstavlja skup procesa vieg prioriteta od procesa i.
Hard i soft procesi
- Na alost, veoma esto je vreme izvravanja sporadinih procesa u najgorem sluaju
mnogo vee od prosenog vremena izvravanja. Prekidi esto dolaze u naletima, a
nenormalno oitavanje senzora moe da dovede do znaajnog vanrednog izraunavanja.
Zbog svega toga, provera rasporedivosti koja uzima u obzir vrednosti za najgori sluaj
moe da dovede do znatno slabijeg iskorienja procesora u stvarnom izvravanju sistema.
- Kao opti princip za projektovanje RT sistema se zato primenjuju sledea pravila:
o Svi procesi moraju da budu rasporedivi uzimajui u obzir prosene vrednosti C i T
svih procesa.
o Svi hard procesi moraju biti rasporedivi uzimajui u obzir vrednosti C i T svih
procesa u najgorem sluaju.
- Posledica prvog pravila je da se mogu pojaviti situacije u kojima nee biti mogue
ispotovati sve vremenske rokove. Ova situacija naziva se tranzijentno preoptereenje
(engl. transient overload).
- Drugo pravilo, meutim, obezbeuje da nijedan hard proces nee prekoraiti svoj rok.
Ukoliko ovo pravilo ukae na izuzetno malo iskorienje procesora u regularnim
situacijama, treba preduzeti mere za smanjenje WCET.
Aperiodini procesi
- Jedan jednostavan pristup za rasporeivanje aperiodinih procesa (koji nemaju definisano
minimalno vreme izmeu susednih pojava) po FPS emi jeste da se oni izvravaju sa
prioritetom ispod svih hard procesa. To obezbeuje da hard procesi ne mogu biti ugroeni
od strane aperiodinih procesa. Iako je ovaj pristup siguran, on moe da ugrozi izvravanje
soft procesa jer oni mogu esto da prekorauju rokove zbog pojave aperiodinih procesa.
- Da bi se ovaj problem reio, moe se primeniti tehnika servera. Server je koncept koji
uva resurse za hard procese, ali i obezbeuje da se soft procesi izvravaju to je pre
mogue. POSIX podrava jednu varijantu servera.
- Jedan pristup za realizaciju servera je sledei. Analiza rasporedivosti uzima u obzir i jedan
poseban proces, tzv. server, koji ima definisan T
s
i C
s
tako svi hard procesi ostanu
rasporedivi ak i ako se server izvrava sa periodom T
s
i vremenom izvravanja C
s
. C
s
predstavlja "kapacitet" dodeljen aperiodinim procesima. U vreme izvravanja, kada se
pojavi aperiodini proces i pod uslovom da ima preostalog kapaciteta, on se izvrava sve
dok se ne zavri ili dok ne potroi kapacitet. Kapacitet se dopunjuje svakih T
s
jedinica
vremena.
Sistem procesa sa D < T
- Kao to je ranije pokazano, za sistem procesa sa D = T i FPS emom rasporeivanja,
RMPO je optimalan. Sa duge strane, u sluaju postojanja sporadinih procesa, potrebno je
dopustiti i sluaj da je D < T.
Programiranje u realnom vremenu 200
- Za sistem procesa sa D < T postoji slian pristup koji je takoe optimalan monotono
ureenje prioriteta prema vremenskom roku (engl. Deadline-Monotonic Priority
Ordering, DMPO). Kod ove eme, fiksni, statiki prioriteti dodeljuju se procesima prema
njihovom vremenskom roku, tako da vai: D
i
< D
j
P
i
> P
j
.
- Na primer, sledea tabela prikazuje skup procesa sa D < T, kojima su pridrueni prioriteti
prema DMPO emi i za koje je izvrena analiza vremena odziva u najgorem sluaju
(primetiti da bi DMPO dodelio prioritete drugaije):
Proces Period, T Rok, D WCET, C Prioritet, P Vreme odziva, R
a 20 5 3 4 3
b 15 7 3 3 6
c 10 10 4 2 10
d 20 20 3 1 20
- Treba naglasiti da test rasporedivosti baziran na iskorienju za EDF emu (ukupno
iskorienje manje od jedan) ne vai za sistem sa D < T. Meutim, i dalje vai da je EDF
efikasnija ema u smislu da svaki sistem koji je rasporediv po FPS emi jeste rasporediv i
po EDF emi, tako da se uslov za rasporedivost po FPS emi moe smatrati dovoljnim i za
rasporedivost po EDF emi.
- Optimalnost DMPO eme iskazuje sledea teorema:
Teorema: (O optimalnosti DMPO, Leung & Whitehead, 1982) Ako je dati skup periodinih
procesa rasporediv pomou neke (bilo koje) preemptive FPS eme, onda je on sigurno
rasporediv i pomou DMPO eme.
Dokaz: Dokaz e pokazati sledee: ukoliko je neki skup procesa Q rasporediv po nekoj emi
W, onda se ta ema (tj. raspodela prioriteta procesima) W moe transformisati tako da se
procesima preraspodele prioriteti prema DMPO, a da se rasporedivost ne narui (tj. nijedan
proces ne prekorai svoj rok). Svaki korak u transformaciji rasporedele prioriteta iz W u
DMPO e ouvati rasporedivost.
Neka su i i j dva procesa iz Q sa susednim prioritetima tako da u W vai P
i
> P
j
i D
i
> D
j
.
Definiimo emu W' koja je ista kao i W, osim to su prioriteti procesima i i j meusobno
zamenjeni. Posmatrajmo rasporedivost Q po emi W':
- Svi procesi sa prioritetima viim od P
i
nee biti nikako ugroeni ovom promenom
niih prioriteta.
- Svi procesi sa prioritetima niim od P
j
nee biti nikako ugroeni ovom promenom,
jer e i dalje trpeti istu interferenciju od strane procesa viih prioriteta.
- Proces j, koji je bio rasporediv po emi W, sada ima vii prioritet, pa e trpeti
manje interferencije i zato e sigurno biti rasporediv po emi W'.
Ostaje da se pokae da je proces i, kome je smanjen prioritet, jo uvek rasporediv.
Prema emi W vai: R
j
< D
j
, D
j
< D
i
, D
i
s T
i
, pa zato proces i samo jednom interferira tokom
izvravanja procesa j. Kada se prioriteti ova dva procesa zamene u W', novo vreme odziva
procesa i postaje jednako starom vremenu odziva procesa j. Ovo vai zato to se po obe eme
ukupno C
i
+ C
j
vremena troi na izvravanje ova dva procesa sa istom interferencijom od
strane procesa viih prioriteta. Proces j je aktiviran samo jednom tokom R
j
, tako da interferira
samo jednom tokom izvravanja i po emi W'. Odatle sledi:
R'
i
= R
j
s D
j
< D
i
.
Odatle sledi da je proces i rasporediv po emi W'.
Na isti nain se ema W' moe transformisati u neku novu emu W" zamenom prioriteta druga
dva procesa iji prioriteti nisu u skladu sa DMPO itd., sve dok se ne postigne redosled prema
Programiranje u realnom vremenu 201
DMPO. Konano, doi e se do eme DMPO, pri emu e svi procesi i dalje biti rasporedivi.
Prema tome, DMPO je optimalna.
- Treba primetiti da se isti ovaj dokaz moe iskoristiti za specijalni sluaj procesa sa D = T,
tj. kao dokaz optimalnosti eme RMPO.
Interakcija procesa i blokiranje
- Jedno od najveih pojednostavljenja u jednostavnom modelu procesa bila je pretpostavka
da su procesi nezavisni, tj. da ne interaguju. Ova pretpostavka oigledno nije realna, jer
praktino svaka stvarna aplikacija zahteva interakciju izmeu procesa.
- Kao to je ranije pokazano, procesi interaguju ili pomou neke forme zatienih deljenih
podataka (koristei, na primer, semafore, kritine regione, monitore ili zatiene objekte),
ili direktnom razmenom poruka (npr. pomou randevua).
- Svi ovi koncepti omoguuju da neki proces bude suspendovan sve dok se ne ispuni neki
uslov (npr. ekanje na semaforu ili uslovnoj promenljivoj, na ulazu u kritini region,
monitor ili zatieni objekat, ili ekanje sauesnika za randevu). Zbog toga analiza
rasporedivosti mora da uzme u obzir i vreme suspenzije (ekanja na takav dogaaj) u
najgorem sluaju.
- Analiza u narednom izlaganju odnosi se iskljuivo na FPS emu.
- Ako je proces suspendovan ekajui da neki drugi proces nieg prioriteta zavri neko
izraunavanje, npr. oslobodi deljeni resurs, onda prioriteti procesa u neku ruku gube svoj
smisao.
- Ovakva situacija, kada je proces suspendovan ekajui da neki drugi proces nieg
prioriteta zavri svoje izraunavanje ili oslobodi resurs, naziva se inverzija prioriteta
(engl. priority inversion). Za takav proces vieg prioriteta koji eka na proces nieg
prioriteta kae se u ovom kontekstu da je blokiran (engl. blocked).
- U idealnom sluaju, inverzija prioriteta ne bi smela da se desi. U realnim sluajevima je
nju nemogue izbei, ali je cilj da se ona minimizuje i da bude predvidiva, kako bi mogla
da se izvri analiza rasporedivosti.
- Kao ilustraciju inverzije prioriteta, posmatrajmo primer etiri procesa (a, b, c i d) kojima
su prioriteti dodeljeni npr. prema DMPO emi, kao to je prikazano u donjoj tabeli.
Pretpostavimo da procesi d i a dele kritinu sekciju (resurs), zatienu meusobnim
iskljuenjem, oznaenu sa Q, a procesi d i c dele kritinu sekciju V. U datoj tabeli simbol
E oznaava nezavisno izraunavanje duine jedne jedinice vremena, a simboli Q i V
oznaavaju izvravanje u kritinoj sekciji Q odnosno V, duine jedne jedinice vremena.
Proces Prioritet Sekvenca izvravanja Vreme aktivacije
a 1 EQQQQE 0
b 2 EE 2
c 3 EVVE 2
d 4 EEQVE 4
Na sledeoj slici pokazan je redosled izvravanja ovih procesa prema FPS emi:
Programiranje u realnom vremenu 202
0
a
b
c
2 4 6 8 10
Q
Executing with Q locked Preempted
Executing V
Executing with V locked
Blocked
12 14 16 18
d
Q
V V
Q
Q V
Kao to se vidi, proces d biva suspendovan u trenutku kada pokuava da pristupi resursu Q,
jer je taj resurs ve zauzet od strane procesa a. Zbog toga proces d ostaje blokiran sve dok
proces a ne oslobodi resurs Q. Meutim, proces a je najnieg prioriteta i zbog toga se ne
izvrava sve dok procesi b i c ne zavre, pa celo izvravanje ozbiljno pati zbog inverzije
prioriteta. Prema ovom izvravanju, d zavrava u trenutku 16, pa ima vreme odziva jednako
12; c ima vreme odziva jednako 6, b jednako 8, a a jednako 17.
Proces d tako trpi blokadu ne samo od procesa a, nego i od procesa c i b. Blokada od strane
procesa a je neizbena, jer ona treba da obezbedi meusobno iskljuenje pristupa deljenom
resursu Q. Meutim, blokada od strane drugih procesa se moe i treba izbei, jer ona ugroava
rasporedivost sistema.
- Jedan pristup za smanjenje vremena blokiranja jeste nasleivanje prioriteta (engl. priority
inheritance). Kod ove eme prioriteti procesa nisu vie fiksni, ve se menjaju u vreme
izvravanja na sledei nain. Ukoliko je proces p suspendovan ekajui na pristup do
resursa koga je zakljuao proces q nieg prioriteta, onda se procesu q dodeljuje prioritet
procesa p. Kae se tada da q nasleuje prioritet od p. Tako je prioritet procesa u vreme
izvravanja jednak maksimumu njegovog podrazumevanog prioriteta, koji mu je statiki
dodeljen pomou neke eme (npr. DMPO), i prioriteta svih procesa koji su od njega
zavisni u datom trenutku (ekaju ga).
- Prema ovoj emi, izvravanje procesa iz prethodnog primera izgleda ovako:
0
a
b
c
2 4 6 8 10 12 14 16 18
d
Q
V
Q
Q
V
V
Programiranje u realnom vremenu 203
U trenutku kada se d aktivira i pokua da pristupi resursu Q, prioritet procesa a koji je zauzeo
Q se poveava na vrednost 4. Zato a oslobaa resurs Q procesu d znatno ranije, koji zbog toga
takoe zavrava ranije. Treba primetiti da proces d sada trpi i drugu blokadu, ali mu je vreme
odziva sada krae i iznosi 9.
- U optem sluaju, nasleivanje prioriteta nije ogranieno na samo jedan korak, ve je
tranzitivno. Na primer, ako proces d eka na proces c, a c opet eka na proces b, onda e
procesu b biti dodeljen prioritet procesa d. Zato e u vreme izvravanja prioriteti procesa
biti esto menjani, pa o tome treba voditi rauna pri implementaciji rasporeivaa. Ranije
prikazana implementacija reda sa prioritetima upravo odgovara ovim potrebama.
- Iako je nasleivanje prioriteta od ogromnog znaaja za RT sisteme, nije ga uvek
jednostavno implementirati jer koncepti za sinhronizaciju i komunikaciju u konkurentnom
jeziku nisu uvek pogodni za to. Na primer, izvravanje operacije wait na semaforu, koja
blokira proces, ne mora uvek da garantuje da e semafor osloboditi ba onaj proces koji je
poslednji proao kroz semafor.
- Kod eme sa nasleivanjem prioriteta postoji gornja granica broja blokada koje neki
proces moe da trpi. Ukoliko proces prolazi kroz m kritinih sekcija, onda je maksimalni
broj blokada koje mogu da mu se dogode u najgorem sluaju jednak m. Ukoliko postoji
samo n<m procesa nieg prioriteta, onda je taj broj jednak n.
- Ukupno maksimalno vreme B
i
koje neki proces i moe da provede blokiran od strane
procesa niih prioriteta, u sluaju nasleivanja prioriteta, dato je sledeom formulom:
) ( ) , (
1
k C i k usage
K
k
i B
=
=
gde je K ukupan broj resursa (kritinih sekcija), a usage je 0/1 funkcija: usage(k,i)=1 ako
resurs k koristi bar jedan proces nieg prioriteta od procesa i i bar jedan proces vieg ili istog
prioriteta od prioriteta procesa i; inae usage daje 0. C(k) je vreme izvravanja kritine sekcije
za resurs k u najgorem sluaju.
- Kada je poznato vreme blokade u najgorem sluaju za svaki proces, onda je njegovo
vreme odziva jednako:
R
i
= C
i
+ B
i
+ I
i
,
odnosno moe se dobiti prema formuli:
e (
(
(
(
+ + =
) (i hp j
j
j
i
i i i C
T
R
B C R
koja se opet izraunava na isti iterativan nain kao i ranije.
- Treba naglasiti da ova analiza rasporedivosti sada moe da bude pesimistina, tj. da uslov
vie nije potreban i dovoljan. Naime, da li e proces zaista trpeti blokadu za najgori sluaj
zavisi od toga kako se procesi aktiviraju, tj. kako su fazno pomereni. Na primer, ako su svi
procesi periodini i sa istom periodom, onda nee biti inverzije prioriteta.
Protokoli prioriteta sa gornjom granicom
- Jedan pristup za znaajno smanjenje vremena blokiranja predstavljaju protokoli prioriteta
sa gornjom granicom (engl. priority ceiling protocols) (Sha et al., 1990).
- Jedan od nekoliko takvih protokola jeste tzv. protokol prioriteta sa neposrednom gornjom
granicom (engl. Immediate Ceiling Priority Protocol, ICPP). On je definisan na sledei
nain:
o Svaki proces ima svoj statiki dodeljen podrazumevani prioritet (dodeljen npr.
DMPO emom).
Programiranje u realnom vremenu 204
o Svaki resurs ima svoju statiki dodeljenu gornju vrednost prioriteta, tzv. plafon-
vrednost (engl. ceiling value), koja je jednaka maksimumu podrazumevanih
prioriteta svih procesa koji koriste taj resurs.
o U vreme izvravanja, proces ima svoj dinamiki prioritet koji je u svakom trenutku
jednak maksimumu vrednosti njegovog statikog prioriteta i plafon-vrednosti svih
resursa koje u tom trenutku on dri zauzete.
- Procesu se tako u vreme izvravanja prioritet potencijalno menja im zauzme neki resurs i
postavlja se na plafon-vrednost tog resursa, ukoliko je prioritet tog procesa bio nii.
Prilikom oslobaanja resursa, prioritet procesa se vraa na prethodnu dinamiku vrednost.
- Za isti prethodni primer, redosled izvravanja procesa prema ICPP emi izgleda ovako:
0
a
b
c
2 4 6 8 10 12 14 16 18
d
Q
V
Q V
Proces a koji je zakljuao resurs Q izvrava se sa prioritetom 4, to je plafon-vrednost ovog
resursa (jer njega koristi i proces d). Zbog toga procesi b, c i d ne mogu da zaponu svoje
izvravanje sve dok a ne oslobodi resurs Q, kada mu se prioritet vraa na podrazumevanu
vrednost. Dalje procesi nastavljaju izvravanje prema svojim prioritetima. Tako je vreme
odziva procesa d sada samo 6 jedinica. Treba primetiti da se blokiranje procesa deava samo
na poetku njegovog izvravanja.
- ICPP podravaju i POSIX (gde se naziva Priority Protect Protocol) i RT Java (gde se
naziva Priority Ceiling Emulation).
- Vano svojstvo ovog protokola u optem sluaju jeste da e proces trpeti blokadu
eventualno samo na poetku svog izvravanja. Kada proces zapone svoje izvravanje, svi
resursi koje on trai bie raspoloivi. Zaista, ukoliko bi neki resurs bio zauzet, onda bi on
bio zauzet od strane procesa koji trenutno ima vii ili jednak prioritet od posmatranog (jer
prema ICPP taj prioritet sigurno nije manji od plafon-vrednosti resursa, a ta vrednost opet
nije manja od prioriteta posmatranog procesa), pa bi izvravanje posmatranog procesa bilo
odloeno.
- Posledica ovog svojstva na jednoprocesorskim sistemima jeste da zapravo sam protokol
rasporeivanja obezbeuje meusobno iskljuenje pristupa resursima, pa to nije potrebno
obezbeivati na nivou sinhronizacionih primitiva. Kod ICPP, ako jedan proces zauzima
neki resurs, onda e se taj proces izvravati najmanje sa plafon-vrednou prioriteta tog
resursa, koja nije manja od prioriteta bilo kog drugog procesa koji koristi isti resurs. Tako
nijedan drugi proces koji koristi isti resurs nee dobiti priliku za izvravanjem od strane
samog rasporeivaa, pa je implicitno obezbeeno meusobno iskljuenje.
- Takoe na jednoprocesorskim sistemima, jo jedno vano svojstvo jeste da ovaj protokol
sigurno spreava mrtvo blokiranje, jer proces sigurno dobija resurse koje trai posle
Programiranje u realnom vremenu 205
poetka svog izvravanja. Zbog toga je primena ovog protokola jedan nain za prevenciju
mrtvog blokiranja u RT sistemima.
- Prema tome, vana svojstva protokola sa gornjom granicom prioriteta na
jednoprocesorskim sistemima jesu:
o Proces visokog prioriteta moe biti blokiran samo jednom i to na poetku svog
izvravanja.
o Mrtvo blokiranje je spreeno.
o Tranzitivno blokiranje je spreeno.
o Implicitno je obezbeeno meusobno iskljuenje pristupa resursima.
- Zbog toga je vreme blokiranja procesa u najgorem sluaju dato sledeim izrazom:
) ( ) , ( max
1
k C i k usage
K
k
i B
=
= .
Projektovanje prema vremenskim zahtevima
- Nain na koji se sistem projektuje da bi ispunio postavljene vremenske zahteve bie
ilustrovan na primeru softvera za upravljanje jednostavnog sistema pumpi za isuivanje
rudnika. Pretpostavlja se da se sistem implementira na jednom procesoru.
- Sistem se koristi da bi na povrinu ispumpavao podzemnu vodu koja se prilikom
iskopavanja u rudniku sakuplja u cisterni. Osnovni sigurnosni zahtev je da zbog opasnosti
od eksplozije pumpa ne sme da radi kada je nivo metana u rudniku iznad kritine granice.
ematski prikaz ovog sistema dat je na sledeoj slici:
Sump
Pump
Pump control station
Switch on/off
Water flow sensor
Low water level detector
High water level detector
Environment monitoring
station
CO sensor
Methane sensor
Air flow sensor
To surface control room
Programiranje u realnom vremenu 206
- Relacije izmeu upravljakog sistema i spoljnih ureaja prikazane su na sledeoj slici.
Samo senzori za visok i nizak nivo vode generiu prekide. Svi ostali ureaji moraju da
budu kontrolisani prozivanjem (engl. polling).
Control system
High water
sensor
Low water
sensor
Water flow
sensor
Pump motor
CO sensor
CH
4
sensor
Air flow
sensor
Funkcionalni zahtevi
- Kontroler pumpe treba da nadzire nivo vode u rezervoaru. Kada voda dostigne visok nivo,
ili kada to operater zahteva, pumpu treba ukljuiti sve dok nivo vode ne dostigne donju
granicu. U tom trenutku, ili kada operater to zahteva, pumpu treba iskljuiti. Stvarni tok
vode kroz pumpu moe se detektovati odgovarajuim senzorom, kako bi se proverilo
stvarno stanje pumpe. Pumpa sme da radi samo ukoliko je nivo metana ispod kritine
granice.
- Sistem nadzire i okolinu kako bi detektovao nivo prisustva metana i ugljen-monoksida u
vazduhu, kao i to da li postoji dovoljan protok vazduha kroz ventilacioni sistem rudnika.
Ukoliko nivo nekog od gasova ili protok vazduha dostigne kritinu vrednost, potrebno je
ukljuiti alarm.
- Operater na povrini rudnika nadgleda sistema preko konzole. Operater se obavetava o
svim kritinim dogaajima u sistemu. Pored toga, svi dogaaji i akcije u sistemu belee se
u arhivu, kako bi mogli da budu pregledani na zahtev.
Vremenski zahtevi
- Ureaji koji oitavaju neku fiziku veliinu iz okruenja pomou senzora esto
funkcioniu po sledeem principu (podsetiti se naina funkcionisanja A/D konvertora).
Procesor mora najpre da zada uzimanje odbirka sa analognog senzora i poetak njegove
konverzije u digitalni oblik. To zadavanje obino se izvodi upisom neke vrednosti u
upravljaki (kontrolni) registar ureaja (npr. A/D konvertora). Posle toga, ureaj vri
potrebno oitavanje i konverziju, to zahteva odreeno vreme. Kada zavri sa konverzijom
i pripremi podatak za oitavanje u svom registru za podatke, ureaj moe ili generisati
prekid procesoru, ili samo postaviti odgovarajui indikator u svom statusnom registru. U
svakom sluaju, taj podatak za oitavanje moe biti spreman tek posle odreenog
vremena, a o spremnosti tog podatka procesor (tj. aplikacija) moe biti obavetena na
jedan od sledea tri naina:
Programiranje u realnom vremenu 207
o Stalnim oitavanjem statusnog registra i ispitivanjem indikatora (engl. polling), tj.
uposlenim ekanjem (engl. busy waiting) da taj indikator postane postavljen.
o Prekidom koji generie postavljeni indikator (engl. interrupt).
o Putanjem da protekne odgovarajue vreme za koje e ova vrednost sigurno biti
raspoloiva, odnosno za koje e konverzija biti zavrena.
U sluaju da konverzija nije uspela ili je dolo do bilo kakve greke, podaci o greci se mogu
oitati iz statusnog registra ureaja.
- U ovom primeru bie korien drugi pristup za detektore nivoa vode u rezervoaru,
odnosno trei pristup za sve ostale senzore, jer uposleno ekanje nije dovoljno efikasno
reenje (nepotrebno troi procesorsko vreme).
- Senzore koji e biti prozivani kontrolisae periodini procesi. Maksimalne periode
oitavanja senzora mogu biti definisane odgovarajuim propisima. U ovom primeru
pretpostaviemo da su periode oitavanja svih senzora iste i da iznose 100 ms. U sluaju
praenja nivoa prisustva metana, zahtevi mogu biti neto stroiji, zbog inercije pumpe i
potrebe da se osigura da ona bude iskljuena u sluaju kritinog nivoa metana, kao to e
biti opisano u nastavku.
- Pretpostavlja se da e ovi senzori sigurno zavriti svoje oitavanje i konverziju za 40 ms
od trenutka zadavanja konverzije. To oitavanje zadavae se periodino, sa navedenom
periodom od 100 ms. Za to periodino oitavanje bie zadueni periodini procesi u
projektovanoj RT aplikaciji. Meutim, bilo bi neefikasno da ti periodini procesi u istoj
aktivaciji i zadaju konverziju i oitavaju vrednost, jer bi to zahtevalo nepotrebnu pauzu
tokom istog izvravanja procesa od 40 ms.
- Zato se u ovakvim situacijama primenjuje tehnika tzv. pomeranja periode (engl. period
displacement). Ona se sastoji u tome da se na samom kraju jednog izvravanja (aktivacije)
periodinog procesa koji proziva senzor zapravo zada oitavanje i pokrene konverzija
(upisom odgovarajue vrednosti u upravljaki registar ureaja), a na poetku narednog
izvravanja konvertovana vrednost oita iz registra podataka. Na taj nain se rad
konvertora paralelizuje sa radom procesora na drugim procesima u sistemu, pa se
procesorsko vreme ne troi na ekanje konverzije. Ova tehnika prikazana je na sledeoj
slici:
Start next conversion
Take previous reading
Start next conversion
Take previous reading
... ...
- Prema tome, sa jedne strane mora biti ispotovana navedena perioda oitavanja senzora od
100 ms. Sa druge strane, meutim, mora biti ispotovano vreme konverzije od 40 ms, to
znai da najmanji razmak izmeu kraja jednog izvravanja procesa i poetka drugog mora
biti 40 ms. Ovo se moe ispuniti zadavanjem sledeih parametara periodinog procesa:
perioda T = 100 ms, vremenski rok D = 60 ms:
T = 100
max 60 (D) min 40
- Proces koji kontrolie protok vode kroz pumpu takoe je periodian i ima dve uloge. Prvo,
kada je pumpa ukljuena, on proverava da li zaista ima protoka vode. Drugo, kada je
Programiranje u realnom vremenu 208
pumpa iskljuena, on proverava da li je protok zaustavljen, kao potvrdu da je pumpa zaista
iskljuena. Zbog inertnosti fizikog sistema (pokretanja i zaustavljanja pumpe i protoka),
ovom procesu se daje perioda od 1 sekunde, pri emu e on koristiti dva uzastopna
oitavanja da bi utvrdio stvarno stanje pumpe. Da bi se obezbedilo da su dva uzastopna
oitavanja zaista na razmaku od oko 1 sekunde, ovom procesu se zadaje tesan rok od
40 ms. Na taj nain dva susedna oitavanja mogu da budu na razmaku od 960 ms do
1040 ms:
T = 1000
max = 1040 min = 960
T = 1000
D
- Pretpostavlja se dalje da su procesi za nadzor nivoa vode pokretani dogaajem (engl.
event-driven), tj. sporadini i da sistem treba da na njih reaguje u roku od 200 ms. Fizika
sistema ukazuje da e proi bar 6 sekundi izmeu dva ovakva dogaaja.
- Da bi se izbegla eksplozija, postoji vremenski rok do koga pumpa mora biti iskljuena od
trenutka kada je nivo metana dostigao kritinu vrednost. Ovaj rok je u relaciji sa periodom
oitavanja senzora i vremenskim rokom procesa koji vri to oitavanje. Ukoliko se koristi
direktno oitavanje, tj. ukoliko se u svakoj aktivaciji procesa uzima odbirak bez ekanja
na konverziju, onda je relacija sledea:
T + D < T
c
,
gde je:
T perioda procesa koji oitava senzor;
D vremenski rok procesa koji oitava senzor;
T
c
vreme koje se sme dozvoliti od trenutka kada nivo metana postane kritian do gaenja
pumpe.
Ovakva relacija je diktirana najgorim sluajem koji izgleda ovako. U jednom oitavanju
vrednost moe biti malo ispod kritine, pa proces nee zaustaviti pumpu. Meutim, odmah
posle tog trenutka, nivo metana moe postati kritian i dalje rasti sve do narednog oitavanja
kada e proces detektovati opasan nivo i preduzeti akciju iskljuenja pumpe. Od prvog do
drugog trenutka moe protei u najgorem sluaju T + D vremena, kao to je pokazano na
sledeem dijagramu:
D
Meutim, ukoliko se za oitavanje senzora koristi tehnika pomeranja periode, onda na ovo
vreme treba dodati jo jedno T, jer se u prvom oitavanju koje se obavlja na kraju izvravanja
i-2 moe oitati vrednost neto ispod granine, odmah posle toga ona moe postati kritina, a
proces e to oitati tek u izvravanju i. Zato relacija postaje:
2T + D < T
c
Ova dva parametra T i D mogu se birati i podeavati prema drugim uslovima i jedan prema
drugom. U ovom primeru uzeto je da je T
c
jednako 200 ms, to se moe zadovoljiti sa
T = 80 ms i D = 30 ms. Treba primetiti da se time zadovoljava i uslov da je vreme konverzije
jednako 40 ms, jer je sa ovim parametrima vreme izmeu uzimanja odbirka i oitavanja
vrednosti najmanje 80 ms 30 ms = 50 ms.
Programiranje u realnom vremenu 209
- Sve ukupno, parametri identifikovanih periodinih i sporadinih procesa u sistemu dati su
u sledeoj tabeli (vremena su u milisekundama):
Proces Periodian/Sporadian "Period", T Vremenski rok, D
CH
4
senzor P 80 30
CO senzor P 100 60
Protok vazduha P 100 100
Protok vode P 1000 40
Detektori nivoa vode S 6000 200
- Dalji tok projektovanja i implementacije sistema bio bi sledei. Najpre bi se prema
funckionalnim zahtevima konstruisao model ovog sistema korienjem nekog jezika za
modelovanje (npr. UML). Zatim bi se iz tog modela napravila implementacija na ciljnom
programskom jeziku (npr. Ada, RT Java ili C++), uz korienje odgovarajuih koncepata
konkurentnog programiranja.
- Dobijeni program bi se zatim najpre funkcionalno testirao. Zatim bi se analizom ili
merenjem odredilo maksimalno vreme izvravanja (WCET, C) i maksimalno vreme
blokiranja (B) svakog procesa u najgorem sluaju, sve za dati procesor koji je izabran za
realizaciju.
- Na kraju, izvrila bi se analiza rasporedivosti ovih procesa na datom procesoru. Ukoliko
analiza pokae da je sistem rasporediv, vrilo bi se i njegovo testiranje pod realnim
uslovima ili u simulacionom okruenju. Ukoliko analiza pokae da sistem nije rasporediv,
onda se mora pristupiti reavanju problema bilo promenom vremenskih zahteva sistema,
bilo promenom implementacije (smanjenjem C i B), bilo izborom breg procesora.
- U ovom primeru nisu razmatrana pitanja tolerancije otkaza, ali bi se u realnom sluaju i taj
element morao uzeti u obzir.
- Ostavlja se itaocu da do kraja sprovede navedeni postupak i realizuje opisani program.
Zadaci
8.1 Ciklino izvravanje i FPS
Tri procesa sa D = T imaju sledee karakteristike:
Proces T C
a 3 1
b 6 2
c 18 5
(a) Pokazati kako se moe konstruisati ciklino izvravanje ovih procesa.
(b) Pokazati kako izgleda rasporeivanje ovih procesa prema FPS emi, uz prioritete
dodeljene prema RMPO emi, poev od kritinog trenutka.
Reenje
(a)
Minor period: 3; Major period: 18
Prema tome, u svakoj maloj periodi potrebno je izvriti "proces" a u celini. U svakoj drugoj
maloj periodi potrebno je izvriti "proces" b u celini. "Proces" c treba izvriti po jednom u
svakoj velikoj periodi. Meutim, kako tek u svakoj drugoj maloj periodi ostaje jo samo 2
jedinice vremena za izvravanje "procesa" c, potrebno je "proces" c podeliti na tri dela-
Programiranje u realnom vremenu 210
procedure, nazovimo ih c1, c2 i c3, pri emu su dva duine 2 jedinice, a jedan duine 1
jedinice vremena. Tako se dobija sledei ciklian raspored:
a b a a b a a b a c1 c2 c3
Izvravanje se dobija sledeim programom:
loop
wait_for_interrupt;
procedure_a;
procedure_b;
wait_for_interrupt;
procedure_a;
procedure_c1;
wait_for_interrupt;
procedure_a;
procedure_b;
wait_for_interrupt;
procedure_a;
procedure_c2;
wait_for_interrupt;
procedure_a;
procedure_b;
wait_for_interrupt;
procedure_a;
procedure_c3;
end loop;
(b)
Process release time
Process completion time - deadline met
Process completion time - deadline missed
Executing
Preempted
0
a
b
c
3 6 9 12 15 18
8.2 Test za FPS zasnovan na vremenu odziva
Da li je sledei skup procesa rasporediv po FPS emi?
Proces T D C
A 50 40 10
B 40 30 10
C 30 20 9
Programiranje u realnom vremenu 211
Rasporedivost ispitati pomou testa zasnovanog na vremenu odziva.
Reenje
Prioriteti prema DMPO: U
c
= 3, U
b
= 2, U
a
= 1.
R
c
= C
c
= 9 < D
c
= 20, rasporediv;
R
b
:
R
b
:= C
b
= 10
R
b
:= 10 + 10/30(*9 = 19
R
b
:= 10 + 19/30(*9 = 19 < D
b
= 30, rasporediv;
R
a
:
R
a
:= C
a
= 10
R
a
:= 10 + 10/30(*9 + 10/40(*10 = 29
R
a
:= 10 + 29/30(*9 + 29/40(*10 = 29 < D
a
= 40, rasporediv.
8.3 Safety-critical system
U nekom RT sistemu kritine sigurnosti (engl. safety-critical system), skup procesa moe da
se koristi za nadzor kljunih dogaaja iz okruenja. Tipino postoji vremensko ogranienje
izmeu trenutka pojave dogaaja i odgovarajue reakcije sistema (izlaza). Pokazati kako se
mogu koristiti periodini procesi za nadzor ovih dogaaja.
Reenje
Svakom kritinom dogaaju pridruuje se jedan periodini proces. Taj proces e periodino
ispitivati da li se dogaaj dogodio ili nije (pretpostavlja se da se dogaaj pamti, bilo
hardverski ili softverski, sve do trenutka dok ga ne obradi ovaj proces). Da bi se zadovoljio
kriterijum kritinog odziva sistema na dogaaj u najgorem sluaju, potrebno je da bude
zadovoljeno:
T + D s T
c
,
gde je T
c
kritino vreme odziva sistema. Kao to je ranije objanjeno, ovo je potrebno jer se u
najgorem sluaju moe dogoditi da se dogaaj dogodi tik po aktivaciji periodinog procesa,
koji e ga pri toj aktivaciji propustiti, a da se na dogaaj reaguje tek pri narednoj aktivaciji
procesa.
8.4
Posmatra se skup dogaaja zajedno sa vremenom izvravanja potrebnim za reakciju na
dogaaje. Ako se za nadzor svakog dogaaja koristi zaseban periodian proces i ti procesi
rasporeuju po FPS emi, pokazati kako se moe obezbediti da svi vremenski zahtevi budu
ispunjeni.
Dogaaj Ogranienje vremena reakcije Vreme izvravanja
A 36 2
B 24 1
C 10 1
D 48 4
E 12 1
Programiranje u realnom vremenu 212
Reenje
Prema objanjenju iz prethodnog zadatka, za svaki periodini proces pridruen jednom
dogaaju mora da bude zadovoljeno:
T + D s T
c
.
Izborom parametara T i D moe da se utie na rasporedivost ovih procesa. Kada se ovi
parametri izaberu, potrebno je proveriti rasporedivost procesa nekim od pokazanih testova (u
svakom sluaju je primenjiv test zasnovan na vremenu odziva). Meutim, kako je najlake
primeniti test zasnovan na iskorienju, moe se najpre probati sa izborom parametara T = D
da bi ovaj test bio primenjiv.
Tako je izvren izbor parametara gde je:
T + D = T
c
, jer se time dobija najrelaksiraniji uslov;
T = D, jer se tako moe primeniti test zasnovan na iskorienju. Odatle sledi da je
izabrano T = D = T
c
/2. U narednoj tabeli prikazani su izabrani parametri procesa pridruenih
odgovarajuim dogaajima oznaenim istim slovima:
Proces T
c
C T D U
A 36 2 18 18 0.1111
B 24 1 12 12 0.0833
C 10 1 5 5 0.2
D 48 4 24 24 0.1667
E 12 1 6 6 0.1667
Ukupno iskorienje iznosi 0.7278, to je manje od granine vrednosti za pet procesa koja
iznosi 0.743, pa je ovaj skup procesa rasporediv po FPS. Time su postavljeni zahtevi
zadovoljeni.
8.5
Implementirati ICPP rasporeivanje u kolskom Jezgru. Izvriti potrebne modifikacije u
programskom interfejsu (engl. Application Programming Interface, API) prema korisnikom
kodu koje su potrebne za zadavanje prioriteta niti, ali tako da kod koji je pravljen za
prethodnu verziju Jezgra bude prevodiv i na novoj verziji. Kao jedinu primitivu za pristup do
deljenih resursa predvideti realizovanu klasu Mutex koju treba modifikovati na odgovarajui
nain.
Reenje
- Vano svojstvo protokola prioriteta sa neposrednom gornjom granicom (engl. Immediate
Ceiling Priority Protocol, ICPP) u optem sluaju jeste da e proces trpeti blokadu
eventualno samo na poetku svog izvravanja. Kada proces zapone svoje izvravanje, svi
resursi koje on trai bie raspoloivi. Posledica ovog svojstva na jednoprocesorskim
sistemima jeste da zapravo sam protokol rasporeivanja obezbeuje meusobno
iskljuenje pristupa resursima, pa to nije potrebno obezbeivati na nivou sinhronizacionih
primitiva.
- Izmene u klasi Thread:
const Priority MinPri = 0;
class Thread : public Object {
public:
Programiranje u realnom vremenu 213
Thread (Priority pri=MinPri) : peForScheduler(this) {
...
peForScheduler.setPriority(pri);
}
void start ();
static void dispatch ();
static Thread* running ();
CollectionElement* getPEForScheduler ();
...
protected:
virtual void run ();
private:
...
PriorityElement peForScheduler;
RECYCLE_DEC(Thread)
};
- FPS rasporeiva
class Scheduler {
public:
static Scheduler* Instance ();
virtual void put (Thread*) = 0;
virtual Thread* get () = 0;
protected:
Scheduler () {}
};
class FPScheduler : public Scheduler {
public:
virtual void put (Thread* t) { if (t) rep.add(t->getPEForScheduler()); }
virtual Thread* get () { return (Thread*)rep.remove(rep.first()); }
private:
PriorityQueue rep;
};
- Deljeni resurs
class Mutex {
public:
Mutex (Priority pri=minPri);
~Mutex ();
private:
Priority p;
Priority runningThreadOldPri; // moe se uvati i u p
};
Programiranje u realnom vremenu 214
Mutex::Mutex (Priority pri=minPri): p(pri) {
if (p>Thread::runningThread->getPEForScheduler().getPriority()) {
runningThreadOldPri = Thread::runningThread->
getPEForScheduler().getPriority();
Thread::runningThread->getPEForScheduler().setPriority(p);
}
Mutex::~Mutex () {
Thread::runningThread->
getPEForScheduler().setPriority(runningThreadOldPri);
}
- Primer upotrebe
void Monitor::criticalSection () {
Mutex dummy(maxPriForThisSection);
//... telo kritine sekcije
}
Zadaci za samostalan rad
8.6
Implementirati FPS rasporeivanje u kolskom Jezgru. Izvriti potrebne modifikacije u
programskom interfejsu (engl. Application Programming Interface, API) prema korisnikom
kodu koje su potrebne za zadavanje prioriteta niti, ali tako da kod koji je pravljen za
prethodnu verziju Jezgra bude prevodiv i na novoj verziji.
8.7
Implementirati EDF rasporeivanje u kolskom Jezgru. Izvriti potrebne modifikacije u
programskom interfejsu (engl. Application Programming Interface, API) prema korisnikom
kodu koje su potrebne za zadavanje vremenskih rokova niti, ali tako da kod koji je pravljen za
prethodnu verziju Jezgra bude prevodiv i na novoj verziji.
8.8
Implementirati rasporeivanje sa nasleivanjem prioriteta (engl. priority inheritance) u
kolskom Jezgru. Izvriti potrebne modifikacije u programskom interfejsu (engl. Application
Programming Interface, API) prema korisnikom kodu koje su potrebne za zadavanje
prioriteta niti, ali tako da kod koji je pravljen za prethodnu verziju Jezgra bude prevodiv i na
novoj verziji. Kao jedinu primitivu za pristup do deljenih resursa predvideti realizovanu klasu
Mutex koju treba modifikovati na odgovarajui nain.
8.9
Tri procesa sa D = T imaju sledee karakteristike:
Proces T C
A 100 30
B 5 1
C 25 5
Programiranje u realnom vremenu 215
Pretpostavimo da a ima najvei znaaj za sistem prema svojim funkcionalnostima, pa da
zatim sledi b i potom c.
(a) Pokazati kako izgleda rasporeivanje ovih procesa po FPS emi poev od kritinog
trenutka, pod uslovom da su prioriteti dodeljeni prema znaaju procesa.
(b) Koje je iskorienje procesa a, b i c?
(c) Kako treba rasporeivati procese da svi vremenski rokovi budu ispotovani?
8.10
U sistem procesa iz prethodnog zadatka dodat je jo jedan proces d iji otkaz nee ugroziti
sigurnost sistema i koji ima period 50 i vreme izvravanja koje varira od 5 do 25 jedinica
vremena. Diskutovati kako ovaj proces treba ukljuiti u prethodni sistem procesa.
8.11
Dat je skup od etiri procesa sa sledeim karakteristikama:
Proces Prioritet Vreme aktivacije WCET Semafori
W 10 7 4 A, B
X 8 2 5 A, B
Y 6 5 4 -
Z 4 0 5 A
Ova etiri procesa dele dva resursa koji su zatieni pomou semafora A i B. Simbol A
(odnosno B) na datom dijagramu oznaava izvravanje operacije wait na semaforu A (odnosno
B), a simbol A' (odnosno B') oznaava izvravanje operacije signal na semaforu A (odnosno
B). Dijagram prikazuje istoriju izvravanja ova etiri procesa po FPS emi. Svaki proces
poinje u trenutku oznaenom sa S, a zavrava u trenutku oznaenom sa T. Na primer, proces
x startuje u trenutku 2, izvrava uspenu operaciju wait na semaforu B u trenutku 3, ali
neuspenu operaciju wait na semaforu A u trenutku 4 (jer je z ve zakljuao A). U trenutku 13
x se ponovo izvrava (sada zakljuava A), oslobaa A u trenutku 14, a B u trenutku 15. Tada
biva preuzet od strane procesa w, ali se ponovo izvrava u trenutku 16 i konano zavrava u
trenutku 17.
0
z
y
x
2 4 6 8 10 12 14 16 18
w
S
T
A A'
S T
S
T
A B A' B'
S
T
A A' B B'
(a) Nacrtati dijagram koji prikazuje izvravanje ovih procesa uz rasporeivanje sa
nasleivanjem prioriteta.
(b) Nacrtati dijagram koji prikazuje izvravanje ovih procesa uz rasporeivanje po ICPP
emi.
Programiranje u realnom vremenu 216
8.12
Sledei skup procesa ne prolazi test rasporedivosti po FPS emi zasnovan na iskorienju, ali
je ipak rasporediv po FPS emi. Objasniti kako.
Proces T C
A 75 35
B 40 10
C 20 5
Programiranje u realnom vremenu 217
IV Osnove objektno
orijentisanog
modelovanja na
jeziku UML
Programiranje u realnom vremenu 218
Modelovanje strukture
- Klasa je osnovna jedinica strukturnog modela sistema.
- Klasa je veoma retko izolovana. Ona dobija smisao samo uz druge klase sa kojima je u
relaciji. Osnovne relacije izmeu klasa su: asocijacija, zavisnost i
generalizacija/specijalizacija.
- Koncept interfejsa omoguava pravljenje fleksibilnih, labavo spregnutih softverskih
komponenata koje se mogu zamenjivati.
Klasa, atributi i operacije
- Klasom se modeluje apstrakcija. Klasa je opis skupa objekata koji dele iste atribute,
operacije, relacije i semantiku.
- Atribut je imenovano svojstvo entiteta. Njime se opisuje opseg vrednosti koje instance
tog svojstva mogu da imaju.
- Operacija je implementacija usluge koja se moe zatraiti od bilo kog objekta klase da
bi se uticalo na ponaanje.
- Klasa se prikazuje pravougaonim simbolom u kome mogu postojati posebni odeljci za
ime klase, atribute i operacije:
Asocijacija
- Asocijacija (pridruivanje, engl. association) je relacija izmeu klasa iji su objekti na
neki nain strukturno povezani. Ta veza izmeu objekata klasa tipino postoji odreeno due
vreme, a ne samo tokom trajanja izvravanja operacije jednog objekta koju poziva drugi
objekat. Instanca asocijacije naziva se vezom (engl. link) i postoji izmeu objekata datih klasa.
Conversation Participant
2..*
0..1
connection
+participants +conversation
2..*
0..1
- Asocijacija se predstavlja punom linijom koja povezuje dve klase. Asocijacija moe da
ima ime koje opisuje njeno znaenje. Svaka strana u asocijaciji ima svoju ulogu (engl. role)
koja se moe naznaiti na strani date klase.
- Na svakoj strani asocijacije moe se definisati kardinalnost (multiplikativnost, engl.
multiplicity) pomou sledeih oznaka:
Programiranje u realnom vremenu 219
1 tano 1
* proizvoljno mnogo (0 ili vie)
1..* 1 ili vie
0..1 0 ili 1
3..7 zadati opseg
i slino.
- Druga posebna karakteristika svake strane asocijacije je navigabilnost (engl.
navigability): sposobnost da se sa te strane (od objekta sa jedne strane veze) dospe do druge
strane (do objekta sa druge strane veze). Prema ovom svojstvu, asocijacija moe biti
simetrina (dvosmerna, bidirekciona) ili asimetrina (jednosmerna, unidirekciona).
- Asocijacija prikazana u prvom primeru se na ciljnom OO programskom jeziku na
strani klase Participant moe realizovati na sledei nain:
class Conversation;
class Participant {
public:
//...
// Funkcije za uspostavljanje, raskidanje i navigaciju
// preko veza asocijacije:
void setConversation (Conversation* c) { conversation = c; }
Conversation* getConversation() { return conversation; }
private:
Conversation* conversation;
};
- Asocijacija prikazana u drugom primeru se na ciljnom OO programskom jeziku na
strani klase SupervizingSystem moe realizovati na sledei nain:
class Sensor;
class SupervizingSystem {
public:
//...
// Funkcije za uspostavljanje, raskidanje i navigaciju
// preko veza asocijacije:
void addSensor (Sensor* s) { sensors.append(s); }
void removeSensor (Sensor* s) { sensors.remove(s); }
CollectionIterator* getSensors() { return sensors.getIterator(); }
private:
Collection sensors;
};
- Primer ukoliko na strani klase B postoji mogunost navigacije prema klasi A, i
multiplikativnost na strani A je tano 1:
class A;
Programiranje u realnom vremenu 220
class B {
public:
B (A* a) { myA=a; }
//...
private:
A* myA;
};
- Kod navedene realizacije na jeziku C++, potrebno je obratiti panju na sledee. U
deklaraciji klase B nije potrebna potpuna definicija klase A, ve samo prosta deklaracija
class A;, jer je objekat B vezan za objekat klase A preko pokazivaa. Samo u
implementaciji neke sloenije operacije koja pristupa lanovima klase A potrebna je potpuna
definicija klase A. Kako se implementacije ovih funkcija tipino nalaze u modulu B.cpp,
samo ovaj modul zavisi od modula sa interfejsom klase A, dok modul B.h ne zavisi. Na ovaj
nain se znaajno smanjuju zavisnosti izmeu modula i vreme prevoenja.
- Treba obratiti panju da pokaziva ili struktura pokazivaa u implementaciji klase nije
njen atribut, pa se ne modeluje atributom u UML modelu, ve je to samo podatak lan koji je
manifestacija (posledica) navigabilne asocijacione uloge na drugoj strani asocijacije i
generisan je (runo ili automatski) u implementacionom kodu na ciljnom programskom jeziku
kao posledica UML modela i asocijacije u njemu. Treba zato razlikovati dva razdvojena nivoa
apstrakcije: model na jeziku UML (u kome postoje klase, atributi, asocijacije, uloge
asocijacija, operacije itd.) i implementaciju (kod) na ciljnom programskom jeziku, u kome
postoje klase, podaci lanovi i funkcije lanice, kao posledice (dobijene runim ili
automatskim generisanjem koda) elemenata modela.
- Ukoliko je struktura objekata i njihovih veza sloena i ne moe se direktno videti iz
dijagrama klasa i njihovih relacija, jasniji prikaz te strukture moe se dati pomou dijagrama
objekata (engl. object diagram). Na tom dijagramu prikazuju se objekti (kao instance klasa) i
njihove veze (kao instance asocijacija).
aBilateralConversation :
Conversation
theCaller :
Participant
theCallee :
Participant
- Instancom (objektom) na dijagramu objekata se moe modelovati konkretna stvar koja
postoji u konceptualnom svetu i sa kojom se mogu raditi odreene operacije. Meutim,
instanca moe prikazivati i apstraktnu stvar, npr. instancu apstraktne klase koja predstavlja
bilo koju konkretnu instancu konkretne izvedene klase. Najee instanca u modelu
predstavlja neki, bilo koji ugledni primerak, tj. prototip datog tipa.
- Na jeziku UML instanca (objekat) se prikazuje kao pravougaonik u kome su upisani i
podvueni ime (neobavezno), dvotaka i tip objekta (neobavezno).
- Skupina objekata iste vrste moe se prikazati simboliki kao kolekcija anonimnih
objekata (engl. multiobjects).
aConferenceConversa
ti on : Conversation
: Participant
participants conversation
Programiranje u realnom vremenu 221
- Kada se prikazuje instanca, moe se prikazati i stanje te instance (vrednosti njenih
atributa). Taj prikaz se odnosi na jedan trenutak tokom izvravanja. Dakle, ovim se prikazuje
"snimak" stanja u jednom trenutku dinamikog izvravanja programa (statiki nain
modelovanja dinamike).
- Vrednosti atributa (stanje) prikazuju se navoenjem liste naziva atributa i njihovih
vrednosti (atribut:tip=vrednost).
- Moe se navesti i eksplicitno stanje objekta, ukoliko je ponaanje njegove klase
opisano mainom stanja, navoenjem naziva stanja izmeu srednjih zagrada [].
Zavisnost
- Relacija zavisnosti (engl. dependency) postoji ako klasa A na neki nain koristi usluge
klase B (pristupa njenim lanovima). To moe biti npr. odnos klijent-server (klasa A poziva
operacije klase B) ili odnos instancijalizacije (klasa A pravi objekte klase B).
- Za realizaciju ove relacije izmeu klase A i B potrebno je da interfejs ili
implementacija klase A "zna" za definiciju klase B. Zbog toga klasa A, kao element modela,
zavisi od klase B u sledeem smislu: ako se B kao element modela na neki nain promeni ili
nestane iz modela, i A moda trpi posledice zbog te promene.
- Oznaka:
Client Supplier
- Primer:
SupervizingSystem
ControlCenter
- Znaenje relacije moe da se navede kao stereotip relacije na dijagramu, npr.
<<call>> ili <<create>>.
- Ako klasa Client koristi usluge klase Supplier tako to poziva operacije objekata
ove klase (odnos klijent-server), onda ona tipino "vidi" ove objekte kao argumente svojih
operacija. U ovom sluaju, za implementaciju na jeziku C++, interfejsu klase Client nije
potrebna definicija klase Supplier, ve samo njenoj implementaciji:
class Supplier;
class Client {
public:
//...
void aFunction (Supplier*);
};
// Implementacija:
void Client::aFunction (Supplier* s) {
//...
s->doSomething();
}
- Drugi sluaj zavisnosti stereotipa <<call>> je sa pristupom do globalno dostupnog
objekta:
class Supplier;
Programiranje u realnom vremenu 222
class Client {
public:
//...
void aFunction ();
};
// Implementacija:
void Client::aFunction () {
//...
Supplier::Instance()->doSomething();
}
- Ako klasa Client instancijalizuje klasu Supplier (zavisnost stereotipa
<<create>>), onda je realizacija nalik na:
Supplier* Client::createSupplier (/*some_arguments*/) {
return new Supplier(/*some_arguments*/);
}
Generalizacija/Specijalizacija
Derived Base
- Relacija generalizacije/specijalizacije (engl. generalization/specialization) predstavlja
relaciju izmeu klasa koja ima dve vane semantike manifestacije:
(a) Nasleivanje: nasleena (izvedena) klasa implicitno poseduje (nasleuje) sve atribute,
operacije i asocijacije osnovne klase (vai i tranzitivnost).
(b) Supstitucija (engl. substitution): objekat (instanca) izvedene klase moe se nai svugde
gde se oekuje objekat osnovne klase (vai i tranzitivnost). Za strukturni aspekt sistema
ovo pravilo ima sledeu bitnu manifestaciju: ako u nekoj asocijaciji uestvuje osnovna
klasa, onda u nekoj vezi kao instanci te asocijacije mogu uestvovati objekti svih klasa
izvedenih (neposredno ili posredno) iz te klase.
- Realizacija:
class Derived : public Base //...
- Zbog ovako definisane semantike osnovnih relacija izmeu klasa (prvenstveno
asocijacije i nasleivanja), softverski sistemi (aplikacije) koji su modelovani objektno imaju
jedno opte svojstvo: njihova struktura u vreme izvravanja moe se apstraktno posmatrati
kao tipizirani graf, jer se sastoji iz objekata (instanci klasa) povezanih vezama (instancama
asocijacija). Dakle, objekti predstavljaju vorove, a veze grane jednog grafa. Pri tom, objekti
kao vorovi grafa imaju svoje tipove (to su klase ije su ovo instance), kao i veze koje su
instance odgovarajuih asocijacija. Na stranama svake veze koja je instanca neke asocijacije
nalaze se instance onih klasa koje povezuje ta asocijacija, ili klasa izvedenih iz njih
(ukljuujui i tranzitivnost nasleivanja).
Programiranje u realnom vremenu 223
Interfejsi
- Interfejs (engl. interface) je skup operacija koje definiu uslugu klase ili komponente
pruene nekom korisniku (u nekom kontekstu).
- Operacije u interfejsu nemaju implementaciju. Konkretne klase ili komponente koje
implementiraju interfejs obezbedie realizaciju ovih operacija. Takve realizacije operacija
nazivaju se metode (engl. method).
- Interfejs ne sadri atribute. Interfejs je samo specifikacija skupa (apstraktnih) operacija.
- Interfejs se u jeziku C++ koji ne podrava direktno ovaj koncept realizuje apstraktnom
klasom koja ima samo apstraktne operacije (isto virtuelne funkcije), bez atributa.
- Nazivi interfejsa obino poinju velikim slovom I.
- Interfejs se u jeziku UML moe predstaviti svojim simbolom (krug sa nazivom interfejsa)
ili kao klasa sa stereotipom <<interface>>.
- Klasa ili komponenta koja realizuje dati interfejs povezuje se relacijom realizacije (engl.
realize) prema interfejsu. Ova relacija se prikazuje kao isprekidana linija sa zatvorenom
strelicom na vrhu ukoliko je interfejs prikazan kao klasa sa stereotipom, ili kao obina
puna linija ukoliko je interfejs prikazan ikonom.
- Interfejsom se moe opisati ugovor koji nudi sluaj upotrebe ili komponenta. Interfejsom
se tipino opisuju usluge koje data apstrakcija nudi u odgovarajuem kontekstu, ili koje
neka apstrakcija trai od uesnika u kolaboraciji.
- Interfejs moe uestvovati u relacijama kao i klasa. U relacijama se on moe prikazivati
kao ikona (krug) ili kao klasa sa stereotipom.
- Interfejs je slian apstraktnoj klasi. Ipak, razlike postoje. Interfejs nema atribute, dok
apstraktna klasa moe da ih ima. Interfejs nema nijednu metodu (implementaciju
operacije), dok apstraktna klasa moe da ih ima. Interfejs moe biti realizovan i klasom
(logiki koncept), ali i komponentom (fiziki koncept).
- Klasa moe da realizuje vie interfejsa. Instanca takve klase podrava sve te interfejse, jer
interfejs predstavlja ugovor koji mora ispuniti onaj ko mu podlee. Meutim, u datom
kontekstu moe biti znaajan samo neki od interfejsa koje data klasa zadovoljava. Na
primer, u nekoj asocijaciji, klasa sa jedne strane asocijacije moe da zahteva od druge
strane samo neki interfejs. To znai da ta druga strana igra odreenu ulogu u asocijaciji.
- Uloga (engl. role) je "lice" koje data apstrakcija pokazuje datom okruenju. Uloga koju
jedna apstrakcija igra u nekoj relaciji oznaava se navoenjem naziva interfejsa koji ta
uloga nudi i koji je bitan za tu relaciju:
Company Person
e : Employee
Employee
<<Interface>>
Programiranje u realnom vremenu 224
Modelovanje ponaanja
- Ponaanje sistema se na jeziku moe UML modelovati pomou razliitih koncepata:
o operacije, koje se specifikuju na dijagramima klasa, a pojavljuju na mnogim drugim
dijagramima
o interakcije, koje se prikazuju na dijagramima interakcija
o aktivnosti i akcije, koje se prikazuju na dijagramima aktivnosti
o maine stanja, koje se prikazuju na dijagramima prelaza stanja.
Interakcije i dijagrami interakcije
- Ponaanje sistema se veoma esto realizuje interakcijama izmeu objekata. Interakcija
(engl. interaction) je ponaanje koje se sastoji od skupa poruka koje se razmenjuju izmeu
objekata u nekom kontekstu da bi se ispunila neka svrha. Poruka (engl. message) je
specifikacija komunikacije izmeu objekata koja prenosi informaciju sa oekivanjem da e se
pokrenuti neka aktivnost.
- Dijagram interakcije (engl. interaction diagram) opisuje ponaanje i odnosi se na neki
kontekst deo sistema ije ponaanje opisuje. To moe biti neka funkcionalnost sistema ili
neka operacija klase.
- Dijagramom interakcije mogu se prikazati interakcije na razliitom nivou apstrakcije i
granularnosti, u razliitim fazama razvoja softvera:
o Za specifikaciju ili analizu zahteva, u ranim fazama analize i projektovanja
sistema. U ovom sluaju dijagrami su neformalni, esto i nekompletni, i
predstavljaju samo grube skice interakcija koje ne ukljuuju konkretne
softverske objekte niti njihove operacije, ve ee samo konceptualne,
apstraktne objekte iz domena problema i neformalne poruke izmeu njih:
Programiranje u realnom vremenu 225
caller : Phone switch :
TelephoneSwitchingSystem
callee : Phone
Hook off
Resources available?
Dial tone
Dial number
Determine callee
Ringing tone
Ringing control tone
Hook off
Stop ringing tone
Stop ringing control tone
Establish commutation
Stop dial tone
o Za detaljan dizajn, u kasnim fazama projektovanja. U ovom sluaju dijagrami
sadre instance klasa iz modela (kao na dijagramima objekata) i pozive
njihovih operacija:
Programiranje u realnom vremenu 226
: PhoneLine : Participant : ToneDialingDetector :
InternalComChannel
:
ToneGenerator
hookOff( )
isAvailable( )
true
isAvailable( )
true
genDialTone( )
- Postoje dve vrste dijagrama interakcije: dijagram kolaboracije i dijagram sekvence.
Ovi dijagrami predstavljaju dva razliita pogleda na semantiki istu stvar (istu interakciju),
samo to naglaavaju razliite aspekte te interakcije.
- Dijagram kolaboracije (engl. collaboration diagram) je dijagram interakcije koji
naglaava strukturnu organizaciju objekata koji razmenjuju poruke. Grafiki, ovaj dijagram je
skup vorova koji predstavljaju objekte i skup linija koji ih povezuju i preko kojih idu poruke.
vorovi predstavljaju objekte (kao instance klasa), a linije predstavljaju instance relacija
izmeu njihovih klasa (tipino asocijacija i zavisnosti):
:
PhoneLine
: Participant
: ToneDialingDetector
:
InternalComChannel
: ToneGenerator
1: hookOff( )
2: isAvailable( )
3: true
4: isAvailable( )
5: true
6: genDialTone( )
- Dijagram sekvence (engl. sequence diagram) je dijagram interakcije koji naglaava
vremenski redosled poruka (vidi prve primere u ovom odeljku). Ovaj dijagram prikazuje
objekte poreane po x osi, dok se poruke reaju kao horizontalne linije po y osi, pri emu
vreme raste nadole.
Aktivnosti i dijagrami aktivnosti
- Ponekad je ponaanje nekog dela sistema (npr. operacije ili interakcije) pogodno opisati
dijagramom nalik na dijagram kontrole toka (engl. control-flow chart). Za ovakve potrebe,
u jeziku UML postoje dijagrami aktivnosti (engl. activity diagram).
Programiranje u realnom vremenu 227
Takeoff Check
Signal for takeoff
check = ON
Engine Ready
signal = ON
Flight Ready
signal = ON
Signal for
takeoff = OFF
Tekeoff Acknowledged
Engine Ready?
Flight Ready?
Yes
Takeoff Canceled
Takeoff
Alert
No
Yes
No
Takeoff Controller
- Dijagram aktivnosti ima kontekst u kome opisuje neko ponaanje, dakle, moe biti
pridruen nekom elementu (operaciji, klasi i slino).
- Dijagram aktivnosti (engl. activity diagram) prikazuje tok od aktivnosti do aktivnosti.
Aktivnost (engl. activity) je neatomino izvravanje u okviru neke maine stanja. Aktivnost
se konano svodi (dekomponuje) na akcije (engl. action).
- Akcija (engl. action) predstavlja atomino izraunavanje koje menja stanje sistema i/ili
proizvodi rezultat. Akcija moe biti poziv druge operacije, slanje signala nekom objektu,
nastanak ili unitavanje nekog objekta, ili neko prosto izraunavanje, kao to je naredba ili
izraz na ciljnom programskom jeziku.
- Prema tome, akcije predstavljaju atomino, elementarno izvravanje, dok se aktivnosti
mogu dalje dekomponovati. Aktivnosti se mogu predstavljati drugim dijagramima
aktivnosti.
- Dijagram aktivnosti predstavlja skup vorova (aktivnosti) i linija koje ih povezuju
(tranzicije).
- Akcije i aktivnosti predstavljaju se stanjima pravougaonicima sa zaobljenim temenima.
U pravougaoniku stanja napisan je naziv aktivnosti ili akcije koja se izvrava.
- Poetno stanje aktivnosti predstavljene dijagramom oznaava se punim krugom, a zavrno
punim krugom sa opisanim koncentrinim krugom.
Programiranje u realnom vremenu 228
- Tranzicije se predstavljaju usmerenim linijama koje povezuju stanja. Tranzicija moe biti
uslovljena. Uslov se pie unutar srednjih zagrada [].
- Uslovno grananje predstavlja se malim rombom iz koga izlazi vie tranzicija sa uslovima.
- Da bi se bolje prikazalo koji objekat izvrava koju aktivnost, dijagram se moe podeliti
vertikalnim "plivakim stazama" (engl. swimlanes) koje predstavljaju objekte, sa nazivima
objekata na vrhu.
Maine stanja i dijagrami prelaza stanja
In order
Red Red/Yellow
Green Yellow
Out of order
Yellow on Yellow off
Red Red/Yellow
Green Yellow
Yellow on Yellow off
Startup
after Tr / redAndYellowOn()
after Try / greenOn()
after Tg / yellowOn()
after Ty / redOn()
after Tf / yellowOff()
after Tf / yellowOn()
[ in order ] / switchOffAll()
/ redOn()
/ yellowOn()
outOfOrderSignal / switchOffAll()
when 8:00 / switchToMorningMode()
when 11:00 / switchToDailyMode()
- Dinamiki aspekt ponaanja nekog dela sistema (klase, podsistema itd.) moe se
modelovati mainom stanja (engl. state machine), ukoliko to odgovara semantici tog
ponaanja.
- Mainom stanja modeluje se ponaanje (tipino klase) kod koje reakcija na spoljanji
dogaaj ne zavisi iskljuivo od tog dogaaja, nego i od predistorije dogaaja, odnosno od
stanja u kome se objekat nalazi.
- Za razliku od dijagrama interakcije i aktivnosti kojima se modeluje ponaanje grupe
instanci, mainom stanja modeluje se ponaanje pojedinane instance datog tipa.
- Maina stanja (engl. state machine) je ponaanje koje definie sekvencu stanja kroz koje
objekat prolazi tokom svog ivotnog veka, kao odgovor na dogaaje.
- Dijagramom stanja (engl. statechart diagram) prikazuje se ponaanje definisano mainom
stanja pomou stanja i prelaza.
Programiranje u realnom vremenu 229
- Stanje (engl. state) je uslov ili situacija u ivotu objekta tokom kojeg objekat zadovoljava
neki uslov, obavlja neku aktivnost ili eka na dogaaj.
- Objekat menja svoje stanje na pojavu dogaaja. Tada se vri prelaz u isto ili neko drugo
stanje.
- Prelaz (ili tranzicija, engl. transition) je relacija izmeu stanja koja definie da e objekat,
na pojavu odgovarajueg dogaaja i pod odreenim uslovom, izvriti neke akcije i prei u
neko drugo ili isto stanje.
- Stanje se predstavlja pravougaonikom sa zaobljenim uglovima. Prelaz se oznaava
usmerenom linijom izmeu stanja.
- Stanje ima sledee delove:
- Ime (engl. name): ime stanja.
- Ulazne/izlazne akcije (engl. entry/exit actions): akcije koje se izvravaju svaki put
kada objekat ulazi, odnosno izlazi iz datog stanja.
- Interni prelazi (engl. internal transitions): prelazi koji se obavljaju bez promene stanja.
- Podstanja (engl. substates): ugneena stanja.
- Odloeni dogaaji (engl. deferred events): dogaaji koji se ne obrauju u tom stanju,
ali se i ne odbacuju. Njihova obrada se odlae i obavie se kada objekat bude u stanju
koje reaguje na te dogaaje.
- Poetno i krajnje stanje maine oznaavaju se kao kod dijagrama aktivnosti.
- Prelaz se opisuje sledeim delovima:
- Izvorino stanje (engl. source state).
- Dogaaj (engl. event) koji pokree prelaz, ukoliko je uslov zadovoljen. Ukoliko
dogaaj nije zadat, stanje predstavlja aktivnost, a prelaz se vri implicitno, kada se
aktivnost zavri.
- Uslov (engl. guard condition) koji treba da bude zadovoljen da bi se prelaz izvrio.
Ukoliko nijedna tranzicija za dato stanje i dati dogaaj nema zadovoljen uslov,
dogaaj se odbacuje (ukoliko nije odloen).
- Akcija (engl. action) koja se vri prilikom prelaza. Ona moe biti upuivanje dogaaja
(signal ili poziv operacije) drugom ili istom objektu, ili neko drugo prosto
izraunavanje.
- Odredino stanje (engl. target state) u koje se prelazi.
- Na prelazu se ovi elementi navode po sledeoj sintaksi: event[condition]/action. Svaki
element je opcioni.
- Stanje moe imati ugneena stanja. Ugneivanje moe biti hijerarhijsko do proizvoljne
dubine. Ugneena stanja mogu biti sekvencijalna ili konkurentna. Kod sekvencijalnih
podstanja, objekat je uvek u jednom, najdublje ugneenom podstanju. Ukoliko dato
podstanje ne reaguje na pristigli dogaaj, trai se, redom navie, prvo okruujue stanje
koje reaguje. Kada tranzicija vodi u neko sloeno stanje, onda se ulazi u najdublje
ugneeno stanje po hijerarhiji, korienjem poetnih stanja za ugneena stanja. Za
primer sa donje slike: tranzicija alarm(s) vodi u stanje Check; iz stanja Alarming se po
isteku 10 sec prelazi u stanje Idle.
Idle
Active
Checking Alarming
entry/ startAlarm()
alarm(s)[ alarmOn ]
Checking
after(10 sec)/stopAlarm()
Alarming
entry/ startAlarm()
switchOff / shutDown()
/ setUp()
Programiranje u realnom vremenu 230
Implementacija maina stanja
- Postoji mnogo naina implementacije maina stanja, koji se razlikuju po mnogim
parametrima, kao to su sloenost ili efikasnost implementacije. Jo neki parametri mogu
da budu:
o Kontrola toka. Maina stanja moe imati sopstvenu, nezavisnu nit kontrole toka. U
tom sluaju maina prima dogaaje najee preko nekog bafera, obrauje ih jedan
po jedan, a drugim mainama poruke alje sinhrono ili asinhrono. Sa druge strane,
maina stanja moe biti i pasivan objekat, pri emu se prelaz (obrada dogaaja)
izvrava u kontekstu onoga ko je dogaaj poslao (pozivaoca).
o Nain prijema dogaaja. Dogaaji se mogu primati centralizovano, preko
jedinstvene funkcije za prijem dogaaja, ili jedinstvenog bafera za dogaaje. U
tom sluaju sadraj dogaaja odreuje prelaz maine stanja. Sa druge strane,
interfejs objekta moe da sadri vie operacija i da svaka operacija predstavlja
zapravo jedan dogaaj na osnovu koga se vri prelaz.
- Ovde e biti prikazan samo jedan jednostavan nain realizacije maina stanja. Interfejs
maine sadri sve one operacije koje predstavljaju dogaaje na koje maina reaguje.
- Implementacija objekta-automata sadri vie podobjekata koji predstavljaju stanja maine.
Svi ovi podobjekti imaju zajedniki interfejs, to znai da su njihove klase izvedene iz
osnovne klase stanja date maine (u primeru klasa State). Ovaj interfejs stanja sadri sve
operacije interfejsa samog automata, s tim da je njihovo podrazumevano ponaanje
prazno. Izvedene klase konkretnih stanja redefiniu ponaanje za svaki dogaaj za koji
postoji prelaz iz datog stanja. Objekat-automat sadri pokaziva na tekue stanje, kome se
obraa preko zajednikog interfejsa tako to poziva onu funkciju koja je pozvana spolja.
Virtuelni mehanizam obezbeuje da se izvri prelaz svojstven tekuem stanju. Posle
prelaza, tekue stanje vraa pokaziva na odredino, naredno tekue stanje.
- Na ovaj nain dobija se efekat da objekat-automat menja ponaanje u zavisnosti od
tekueg stanja (projektni obrazac State).
- Ogranienja ovog jednostavnog koncepta su da ne postoji ugneivanje stanja, entry i exit
akcije se vre uvek, ak i ako je prelaz u isto stanje, nema inicijalnih prelaza ni pamenja
istorije itd.
- Realizacija opisanog ablona bie prikazana na primeru sledee maine stanja:
A B
C
s1 / t1
s2 / t2
s1 / t3
s3 / t4 s1
Izvorni kod koji implementira ovu mainu stanja izgleda ovako:
// Project: Real-Time Programming
// Subject: Finite State Machines (FSM)
Programiranje u realnom vremenu 231
// Module: FSM Example
// File: fsmexmpl.cpp
// Date: 23.11.1996.
// Author: Dragan Milicev
// Contents: State Design Pattern Example
#include <iostream.h>
/////////////////////////////////////////////////////////////////////
// class State
/////////////////////////////////////////////////////////////////////
class FSM;
class State {
public:
State (FSM* fsm) : myFSM(fsm) {}
virtual State* signal1 () { return this; }
virtual State* signal2 () { return this; }
virtual State* signal3 () { return this; }
virtual void entry () {}
virtual void exit () {}
protected:
FSM* fsm () { return myFSM; }
private:
FSM* myFSM;
};
/////////////////////////////////////////////////////////////////////
// classes StateA, StateB, StateC
/////////////////////////////////////////////////////////////////////
class StateA : public State {
public:
StateA (FSM* fsm) : State(fsm) {}
virtual State* signal1 ();
virtual State* signal2 ();
virtual void entry () { cout<<"Entry A\n"; }
virtual void exit () { cout<<"Exit A\n"; }
};
class StateB : public State {
public:
StateB (FSM* fsm) : State(fsm) {}
virtual State* signal1 ();
virtual State* signal3 ();
virtual void entry () { cout<<"Entry B\n"; }
virtual void exit () { cout<<"Exit B\n"; }
Programiranje u realnom vremenu 232
};
class StateC : public State {
public:
StateC (FSM* fsm) : State(fsm) {}
virtual State* signal1 ();
virtual void entry () { cout<<"Entry C\n"; }
virtual void exit () { cout<<"Exit C\n"; }
};
/////////////////////////////////////////////////////////////////////
// class FSM
/////////////////////////////////////////////////////////////////////
class FSM {
public:
FSM ();
void signal1 ();
void signal2 ();
void signal3 ();
protected:
friend class StateA;
friend class StateB;
friend class StateC;
void transition1 () { cout<<"Transition 1\n"; }
void transition2 () { cout<<"Transition 2\n"; }
void transition3 () { cout<<"Transition 3\n"; }
void transition4 () { cout<<"Transition 4\n"; }
private:
StateA stateA;
StateB stateB;
StateC stateC;
State* currentState;
};
FSM::FSM () : stateA(this), stateB(this), stateC(this),
currentState(&stateA) {
currentState->entry();
}
void FSM::signal1 () {
currentState->exit();
currentState=currentState->signal1();
currentState->entry();
}
void FSM::signal2 () {
Programiranje u realnom vremenu 233
currentState->exit();
currentState=currentState->signal2();
currentState->entry();
}
void FSM::signal3 () {
currentState->exit();
currentState=currentState->signal3();
currentState->entry();
}
/////////////////////////////////////////////////////////////////////
// Implementation
/////////////////////////////////////////////////////////////////////
State* StateA::signal1 () {
fsm()->transition1();
return this;
}
State* StateA::signal2 () {
fsm()->transition2();
return &(fsm()->stateB);
}
State* StateB::signal1 () {
fsm()->transition3();
return &(fsm()->stateA);
}
State* StateB::signal3 () {
fsm()->transition4();
return &(fsm()->stateC);
}
State* StateC::signal1 () {
return &(fsm()->stateA);
}
/////////////////////////////////////////////////////////////////////
// Test
/////////////////////////////////////////////////////////////////////
void main () {
cout<<"\n\n";
FSM fsm; cout<<"\n";
fsm.signal1(); cout<<"\n";
fsm.signal2(); cout<<"\n";
fsm.signal1(); cout<<"\n";
fsm.signal3(); cout<<"\n";
fsm.signal1(); cout<<"\n";
fsm.signal2(); cout<<"\n";
fsm.signal3(); cout<<"\n";
fsm.signal2(); cout<<"\n";
fsm.signal1(); cout<<"\n";
}
Programiranje u realnom vremenu 234
Organizacija modela
- Model se hijerarhijski organuzuje u pakete, koji sadre razliite elemente modela.
- Delovi modela prikazuju se na dijagramima.
Paketi
- Specifikacija elemenata sloenog sistema podrazumeva manipulisanje velikim brojem
klasa, dijagrama i ostalih elemenata. Da bi se model bolje organizovao, elementi se
grupiu u celine pakete.
- Paket (engl. package) je opti mehanizam jezika UML za grupisanje elemenata u celine.
- Paket moe grupisati elemente bilo koje vrste. Ipak, u dobro organizovanom sistemu
paketi sadre elemente koji su srodni i kohezivni a slabije vezani sa elementima van
paketa.
- Paket moe sadrati elemente koji su u njegovom vlasnitvu (kada se obrie paket, nestaju
i elementi koje on sadri), ali isto tako i referisati (koristiti) elemente iz drugih paketa.
- Paket predstavlja oblast vaenja imena (engl. namespace). Elementi jedne vrste moraju
imati jedinstveno ime unutar paketa koji ih sadri.
- Paket moe sadrati i druge pakete. Na ovaj nain se sistem hijerarhijski organizuje.
- Paket predstavlja i jedinicu enkapsulacije: za svaki element paketa moe se definisati
njegova vidljivost (engl. visibility) izvan tog paketa. Vidljivost moe biti public, protected
ili private sa istim znaenjem kao i za lanove klasa (paketi se mogu nasleivati). Paket
moe referisati (koristiti) samo elemente drugih paketa do kojih ima pravo pristupa.
- Ako neki element paketa A treba da koristi neki od (njemu dostupnih) elemenata paketa B,
onda je potrebno definisati relaciju zavisnosti od A ka B (A zavisi od B). Da bi elementi
paketa A imali pristup do elemenata paketa B, ova relacija ima stereotip <<import>>. Ovo
je jednosmerna dozvola pristupa do elemenata ukljuenog paketa.
- Ugneeni paket moe da pristupi svim elementima do kojih moe da pristupi paket koji
ga sadri.
- Paket se na jeziku UML prikazuje pravougaonikom sa "rukom":
Client
+ OrderForm
- Order
Policies
+ OrderRules
<<import>>
Dijagrami
- Dijagram (engl. diagram) je grafika prezentacija skupa elemenata koji predstavlja samo
jedan pogled na jedan deo modela.
- Dijagram ne nosi semantiku i ne sadri elemente modela. Dijagram samo predstavlja
prikaz nekih elemenata modela.
Programiranje u realnom vremenu 235
- Dijagrami treba da prikazuju samo po jedan iseak modela koji elite da naglasite.
Dijagram ne treba da ima vie od 5-10 elemenata i treba da bude jasan i pregledan.
Programiranje u realnom vremenu 236
V Modelovanje RT
sistema
Programiranje u realnom vremenu 237
Uvod
Istorijat
- Krajem 80-ih: razvoj u okviru Bell-Nothern Research, Ottawa, Canada
- Poetak 90-ih: razvojni tim se izdvaja u sopstvenu kompaniju, ObjectTime, Ottawa,
Canada i poinje razvoj metode ROOM i alata ObjectTime Developer
- Bran Selic, Garth Gullekson, Paul T. Ward, Real-Time Object-Oriented Modeling, John
Wiley and Sons, 1994
- Oko 1997. ObjectTime i Rational sarauju na izradi Rational Rose for RT u UML
inkorporiraju koncepte ROOM
- Krajem 90-ih: Rational kupuje ObjectTime
- Poetkom 2000-ih IBM kupuje Rational
Primenljivost
- ROOM je primenljiv na sisteme sledeih karakteristika:
o obezbeuju odziv na vreme (timeliness)
o dinamika interna struktura (dinamika rekonfiguracija, kreiranje i unitavanje
softverskih komponenata)
o reaktivnost na dogaaje iji redosled i vreme nisu uvek predvidivi, na vreme i u
zavisnosti od internog stanja sistema
o konkurentnost
o distribuiranost
Principi
- Problem ranijih metodologija razvoja softvera - diskontinuiteti:
o Semantiki diskontinuitet (semantic discontinuity) zbog nedostatka formalne
sprege izmeu reprezentacija razliitih vrsta povezanih detalja
o Diskontinuitet opsega (scope discontinuity) zbog nedostatka formalne sprege
izmeu reprezentacija razliitih nivoa detalja
o Fazni diskontinuitet (phase discontinuity) zbog nedostatka formalne sprege izmeu
reprezentacija koje se koriste u razliitim fazama razvoja (specifikacija zahteva,
projektovanje, implementacija)
- Posledica diskontinuiteta opsega i semantike:
o modeli i modelovanje se koriste samo u ranim fazama razvoja, specifikacije
zahteva i projektovanja, a onda se prelazi na kodovanje, pri emu kod nije
formalno i vrsto spregnut sa modelom
o pojava sindroma urbe ka kodovanju (rush to code syndrome): model ne moe
da prui vrste, oigledne i uverljive dokaze da je sistem dobro zamiljen, kao to
to moe da prui kod (ispravnim prevoenjem i izvravanjem testova)
Programiranje u realnom vremenu 238
o model je samo skica reenja, ne i formalna, autoritarna specifikacija i konstrukcija
sistema
o zbog nedostatka vrste sprege sa implementacijom, iteracija u unapreenju ili
ispravci implementacije ne ide do modela, pa model postaje samo neaurna skica
sistema
- Ovaj sindrom se ne moe reiti samo zamenom paradigme (npr. OO umesto proceduralne)
on je posledica navedenih diskontinuiteta
- Reenje operacioni pristup:
o korienje jezika za modelovanje sa kompletnom, formalnom semantikom, koja
precizno i formalno definie sprege izmeu razliitih nivoa i vrsta detalja
o zbog formalne semantike, interpretacija modela je jednoznana, pa je model izvriv
(executable model) model se moe prevesti i izvriti kao i svaki program
o model je apstraktna specifikacija koja se moe hijerarhijski dekomponovati i iji se
detalji mogu specifikovati ili izostaviti do proizvoljne mere
- Kao posledica, model ve u ranoj fazi analize moe da poslui za verifikaciju projektnih
odluka nema potrebe za urbom ka kodovanju. Model je tako i brzi prototip sistema, uz
moguu simulaciju okruenja
- Model se moe i prevoditi, ali i interpretirati, pa i vizualizovati (ukljuujui i izvravanje)
- Primer: maina stanja (state machine)
- Objektna paradigma:
o Objekti kao instance apstraktnih tipova podataka: kolekcija podataka i pridruenih
procedura sa skrivenom implementacijom i dostupnim interfejsom
o Objekti kao softverske maine: aktivni agent implementiran u softveru
o Objekti kao logike maine: aktivna komponenta sistema koja moe biti
implementirana u softveru, hardveru, manuelno, ili kombinovano
o Enkapsulacija: objekat je unutar ljuske u kojoj su kapije kroz koje jedino moe ii
komunikacija objekta sa okolinom; zatita unutranjosti objekta od okoline, ali i
obratno
o Komunikacija izmeu objekata je po modelu razmene poruka (message passing),
uz podrku i klijent-server relacijama
o Klase i nasleivanje (bez viestrukog nasleivanja)
Demo primer aplikacije
- Upravljanje industrijskim procesima - bojenje tkanine
- Osnovni oblik procesa:
o otvara se ulivna slavina dok se ne ulije zadata koliina rastvora (zavisi od vrste i
koliine tkanine, maksimalno kapacitet rezervoara)
o tkanina se ostavlja zadato vreme (zavisi od vrste i koliine tkanine)
o otvara se odlivna slavina dok se rezervoar ne isprazni
Programiranje u realnom vremenu 239
Dye Valve
Dyeing Tank
Fabric Rack
Access Hatch
Drain Valve
- Uslonjenja:
o grejanje na odreenu temperaturu
o kontrola pritiska zbog spreavanja kljuanja rastvora
o sukcesivno ulivanje razliitih rastvora pod razliitim uslovima
o sigurnosni ureaji, npr. spreavanje otvaranja ulivne slavine ako je poklopac
otvoren
o dodatni zahtevi za raunarski sistem: detekcija, izvetavanje i oporavak od
greaka, UI, baza parametara, snimanje i statistika analiza
o vie ovakvih sistema kontrolisati uporedo, pri emu oni mogu da dele resurse (npr.
kompresor, cevovod)
Programiranje u realnom vremenu 240
Jednostavan ROOM model
- Akter (actor) objekat kao logika maina, aktivna konkurentno sa drugim akterima (ima
svoj tok kontrole), sposobna da prima i alje poruke kroz svoj interfejs
- Klasa aktera (actor class) definicija klase objekata (npr. DyingRunController);
osnovna komponenta ROOM modela
Data Collector DyeingUnitInterface
DyeingRunController
OperatorInterface
DyeingSpecifications
- Definicija interfejsa poruke, protokoli i klase protokola
DyeingRunController:
Receive: runParameters (requiredLevel, dyeingTime)
Receive: operatorCommand (start, stop)
Receive: solutionLevel
Receive: timeout (dyeingTime has elapsed)
Receive: dyeValveStatus
Receive: drainValveStatus
Send: startTimer (for dyeingTime)
Send: openDyeValve, closeDyeValve
Send: openDrainValve, closeDrainValve
Send: runStatus (to operator)
Send: parameterRequest
Definicija interfejsa
- Definicija interfejsa poruke, protokoli i klase protokola:
o Grupisanje individialnih poruka u skupove povezanih
o Upotreba skupova poruka za definisanje klasa protokola
o Prikljuivanje vrata (port, referenci na klase protokola) klasama aktera
- Protokol (protocol) za skup poruka definie:
o smer poruke: ulazni (prijem, in) ili izlazni (slanje, out)
Programiranje u realnom vremenu 241
o signal identifikator poruke
o objekti sa podacima (data objects) struktura koja se alje sa porukom (parametri)
- Klasa protokola (protocol class): skup protokola sa istim svojstvima
-- Fabric Dyeing Classes --
DyeingRunController DeviceControl
OperatorDialog
RunData
MonitoredValue
protocol class DeviceControl:
in: {deviceStatus}
out: {deviceCommand}
- Definicija interfejsa aktera portovi
o Port (port) je referenca na klasu protokola, deklaracija da skup poruka definisan
klasom protokola ini deo interfejsa aktera date klase
- Interfejs aktera, definisan pomou portova, je deo strukture aktera
-- Fabric Dyeing Classes --
DyeingRunController DeviceControl
OperatorDialog
RunData
MonitoredValue
DyeingRunController
dyeValveControl
drainValveControl
solutionLevel
runData
operatorDialog
Expanded Structure Definition
Reference
Definisanje ponaanja aktera
- Definisanje ponaanja aktera ROOMcharts: ponaanje aktera moe se definisati
mainom stanja koja je deo definicije klase
Programiranje u realnom vremenu 242
- Maina stanja modeluje ponaanje u kome reakcija na pobudu zavisi od istorije pobuda,
odnosno od trenutnog stanja
- Stanje predstavlja period vremena tokom kog akter ispoljava odreeno ponaanje
(izvrava aktivnost i/ili eka na pobudu na koju e reagovati)
- Tranzicija (transition) predstavlja dozvoljen prelaz iz jednog u drugo stanje
top
settingUp filling
aborted dyeing
draining done
- Grafika predstava relacije izmeu strukture i ponaanja:
-- Fabric Dyeing Classes --
DyeingRunController DeviceControl
OperatorDialog
RunData
MonitoredValue
Structure
DyeingRunController
Behavior
DyeingRunController::top
settingUp filling
aborted dyeing
draining done
Programiranje u realnom vremenu 243
- Definisanje ponaanja aktera okidai (trigger): svaka tranzicija mora imati definisan
okida
- Okida: lista od jednog ili vie tripleta port, signal i opcioni uslov (guard function)
top
settingUp filling
aborted dyeing
draining done
runError
t: {start, operatorDialog}
t: {runParameters, runData}
t: {level, solutionLevel,
full()}
transition runEror:
triggeredBy: {
{deviceStatus,dyeValveControl, dyeValveError()}
or
{deviceStatus, drainValveControl, drainValveError()}
}
- Definisanje ponaanja aktera akcije (actions): svaka tranzicija moe imati definisanu
akciju koja se preduzima prilikom prelaza
- Akcija - jedna ili vie naredbi ili poziv procedure koji se moe pridruiti:
o Tranziciji izvrava se prilikom prelaza
o Kao ulazna akcija stanja (entry action) izvrava se pri svakom ulazu u stanje
o Kao izlazna akcija stanja (exit action) izvrava se pri svakom izlazu iz stanja
- Akcije su iskazi na jeziku detalja (detail-level language) koji je inkorporiran u ROOM;
opti ili specijalizovani programski jezik
Programiranje u realnom vremenu 244
t: {level, solutionLevel, full()}
t: {start, operatorDialog}
filling
t: {level, solutionLevel, full()}
a: {controlDyeValve(off)}
t: {start, operatorDialog}
a: {controlDyeValve(on}
filling
e: {controlDyeValve(on)}
x: {controlDyeValve(off)}
- Definisanje enkapsuliranih podataka aktera klase podataka i proirene promenljive stanja
(extended state vaiables)
- Objekti podataka (data objects): instance apstraktnih tipova podataka (klasa podataka,
data class)
- Jezik detalja inkorporiran u ROOM obezbeuje osnovni skup predefinisanih tipova
podataka (primitivnih i klasa) sa operacijama koji se mogu koristiti neposredno, ili od
kojih se onda konstruiu korisniki tipovi
-- Fabric Dyeing Data Classes --
DyeingParameters
SolutionLevel
DevicePosition
Expanded Definition
class SolutionLevel {
public:
SolutionLevel (float max, float min);
float readLevel ();
void setLevel (float level);
private:
float currentLevel,
maxLevel, minLevel;
};
class DevicePosition {
public:
DevicePosition (char* initPosition);
char* getPosition ();
void setPosition (char* position);
private:
char* currentPosition;
};
Expanded Definition
class DyeingParameters {
public:
DyeingParameters (SolutionLevel level, int time);
SolutionLevel getLevel ();
int getTime ();
private:
SolutionLevel desiredLevel;
int dyeingTime;
};
Expanded Definition
- Klase podataka se mogu koristiti za definisanje:
o proirenih promenljivih stanja (extended state variable) aktera
o podataka koje prenose poruke iz klase protokola: svaka poruka moe opciono da
nosi jedan (neimenovani) objekat date klase podataka
Programiranje u realnom vremenu 245
DyeingRunController DeviceControl
OperatorDialog
RunData
MonitoredValue
-- Fabric Dyeing Classes --
DeyingParameters
SolutionLevel
DevicePosition
top
settingUp filling
aborted dyeing
draining done
vars:
dyeingParameters : DyeingParameters
protocol class DeviceControl:
in: {deviceStatus, DevicePosition}
out: {deviceCommand, DevicePosition}
Behavior
Reference
Expanded Definition
Reference
Izvravanje modela
- Svaka definicija klase aktera moe se izvriti, predstavlja program na jeziku veoma
visokog nivoa apstrakcije
- Izvravanje podrazumeva kreiranje instance klase aktera i njeno izvravanje u okviru
ROOM izvrnog okruenja
- Izvrivanje omoguava (i zahteva):
o observabilnost: praenje tekueg stanja, animacija prelaza, animacija toka poruka,
praenje vrednosti promenljivih, praenje toka kontrole itd.
o kontrolu stanja i toka:start, stop, inject, step, trace, reset
- Na ovaj nain se model moe proveriti veoma rano, i bez definisanja mnogo detalja, kao
rani prototip
Programiranje u realnom vremenu 246
dyeingRunController.top
t: {start,operatorDialog}
settingUp filling
aborted
dyeing
a: {requestParams()}
t: {runParameters, runData}
a: {storeRunData()}
t: {level, solutionLevel, full()}
vars:
dyeingParameters {
dyeingTime: 0
desiredLevel: 0
}
...
dyeingRunController
dyeValveControl
drainValveControl
solutionLevel
runData
operatorDialog
START STOP RESET
STEP INJECT TRACE
RTS Controls
- Mogue je dobiti trag izvravanja (trace), odnosno dogaaja (razmena poruka, promena
stanja)
dyeingRunController
runParameters(25,18)
start
dyeValveControl.deviceCommand(on)
level(16)
level(19)
dyeValveControl.deviceCommand(off)
time: 116; port: runData; signal: runParameters;
data: {dyeingTime 25, desiredLevel 18}; direction: in;
time: 201; port: operatorDialog; signal: start; direction: in;
time: 400; port: dyeValveControl; signal: deviceCommand;
data: on; direction: out;
...
Programiranje u realnom vremenu 247
Hijerarhijski model sa vie aktera
- Hijerarhijska struktura aktera: akter moe da sadri druge aktere kao svoje komponente do
proizvoljne dubine
- Akteri mogu da predstavljaju i neraunarske ili kombinovane komponente (npr. Valve,
DyeingSolution), skupove podataka (npr. DyeingSpecifications) ili ceo heterogeni sistem
(npr. DyeingSystem)
-- Fabric Dyeing Classes --
DyeingSystem
Valve
DyeingRunController
DyeingSolution
DyeingSpecifications
DyeingSystem
Expanded Definition
dyeValve
drainValve
Reference
dyeingSolution
Reference
dyeingSpecifications
dyeingRunController
Komunikacija izmeu aktera
- Komunikacija izmeu aktera konjugovani portovi i veze
- Konjugovani port: referie na klasu protokola, samo obre smer poruka
Programiranje u realnom vremenu 248
-- Fabric Dyeing Protocol Classes --
DeviceControl
...
DyeingRunController
Unconjugated Reference
drainValveControl
Valve
Conjugated Reference
- Veza (binding) moe biti uspostavljena izmeu kompatibilnih (npr. konjugovanih) portova
aktera koji su sadrani unutar iste klase aktera
- Veza je svojstvo klase aktera
- Veza predstavlja komunikacioni kanal za protok poruka izmeu poruka
parameters
drainValveMessages
solutionOut
solutionIn
DyeingSystem
dyeValve
drainValve
dyeingSolution
dyeingSpecifications
dyeingRunController
dyeValveMessages
levels
deviceStatus
deviceCommand
- Relejni portovi (relay port): nain da se portovi komponenata aktera regularno izvezu u
interfejs aktera kontejnera
- Relejni portovi prosto prosleuju sve poruke
Programiranje u realnom vremenu 249
dyeingUnit
DyeingSystem
dyeValve
drainValve
dyeingSolution
dyeingSpecifications
dyeingRunController
X
X
X
- Relejni portovi, kao i krajnji portovi (end port) mogu biti konjugovani ili nekonjugovani
- Poruka moe da prolazi kroz proizvoljno mnogo relejnih portova
dyeingSoftware
dyeingUnit
DyeingSystem
dyeValve
drainValve
dyeingSolution
dyeingSpecifications
dyeingRunController
- Unutranja struktura aktera moe se sakriti na dijagramu
DyeingUnit
dyeValve
drainValve
dyeingSolution
Programiranje u realnom vremenu 250
dyeingSoftware
dyeingUnit
DyeingSystem
- Replikacija referenci na aktere i referenci na portove
- Replikacija reference na klasu aktera menja definiciju kontejnerske klase aktera, ne
referencirane klase aktera
- Replikacija reference na klasu protokola menja definiciju referencirane klase aktera, ne
kontejnerske klasu aktera
n
dyeingUnit dyeingSoftware
DyeingSystem
dyeingUnit1 dyeingSoftware
DyeingSystem
dyeingUnit2
Programiranje u realnom vremenu 251
- Opcione reference na aktere: donja granica kardinalnosti je 0
- Opcioni i neogranieni: 0..*
- Samo opcioni: 0..1
- Obavezni i neogranieni: 1..*
DyeingSoftware
parameters
dyeingSpecifications
specChanges
n
dyeingRunController
operatorMessages
- Proireno stanje (extended state) aktera u vreme izvravanja sastoji se od:
o trenutnog stanja maine stanja (ponaanja) tog aktera
o trenutne vrednosti varijabli tog aktera
o proirenih stanja aktera-komponenata koje taj akter sadri
- Akter moe, ali ne mora imati i aktere-komponente i sopstvenu mainu stanja
- Primer kada akter ima i komponente i sopstvenu mainu: kada je neka komponenta
opciona, njeno kreiranje se obavlja u ponaanju (maini stanja) kontejnera
- Komunikacija izmeu aktera-kontejnera i aktera-komponente mogua je preko internih
portova kontejnera
Programiranje u realnom vremenu 252
DyeingSoftware
dyeingSpecifications
n
dyeingRunController
operatorInOut
operatorDialog
DyeingSoftware::top
t: {runStatus, operatorInOut}
a: {passToOperator();}
t: {creator, operatorDialog}
a: {createController();}
t: {{start, operatorDialog},
{stop,operatorDialog}}
a: {passToController();}
- Poruka create primljena na eksterni port operatorDialog prosleuje se maini
stanja klase DyeingSoftware, koja onda akcijom kreira akter
dyeingRunController
- Poruke start i stop prosleuju se maini stanja klase DyeingSoftware, koja ih
onda akcijom prosleuje na interni port operatorInOut akteru-komponenti
Sistemske servisne pristupne taake
- Komunikacija preko sistemskih servisnih pristupnih taaka (System Service Access Point,
SAP): pristupne take do ROOM virtuelne maine (VM) i njenih usluga
- ROOM VM obezbeuje predefinisane protokole za svoje interfejse i usluge
- Na primer: protokol Timing iz Timing Service interfejsa ukljuuje predefinisanu
poruku timeout koja se alje kada istekne zadato vreme
Programiranje u realnom vremenu 253
ROOM Model
ROOM Virtual Machine
Via ports
Via System SAPs
DyeingRunController::top
filling
draining
dyeing
t: {level, solutionLevel, full()}
a: {timer.informIn(dyeingParameters.dyeingTime);}
vars:
dyeingParameters :
DyeingParameters
saps:
timer : Timing
...
...
t: {timeout,timer}
Interne sekvence poruka
- Definicija klase aktera moe da ima opcionu specifikaciju interne sekvence poruka
(internal message sequence specification) koja deklarie oekivanu sekvencu poruka
izmeu komponenata
- Puni opis poruke moe da ukljui vrednosti objekata podataka unutar poruke
Programiranje u realnom vremenu 254
dyeingSoftware
deviceCommand(on)
deviceCommand(off)
dyeingUnit
create
start
deviceCommand(on)
deviceCommand(off)
- Sekvence specifikuju oekivane scenarije izvravanja modela. Kada se akter izvri, VM
prijavljuje prekraj stvarne sekvence u odnosu na specifikaciju. Moe se koristiti za
specifikaciju i verifikaciju zahteva
Hijerarhijske maine stanja
- Hijerarhijske maine stanja: stanje moe da sadri podstanja
- Grupne tranzicije:
o sukcesivno izvravanje izlaznih, prelaznih i ulaznih akcija
o prelaz po istoriji (history transition)
DyeingRunController::top
settingUp filling
aborted dyeing
draining done
DyeingRunController::top
running
settingUp filling
aborted
dyeing
draining
done
runError
Programiranje u realnom vremenu 255
DyeingRunController::top
running
settingUp filling
aborted
dyeing
draining
done
runError
recover
abandon
Izvravanje modela sa vie aktera
- Sledei dijagram prikazuje izvravanje modela sa vie aktera
dyeingSoftware
dyeingRunController
dyeingUnit
dyeingUnit
dyeingSystem
dyeValve
drainValve
dyeingSolution
dyeingSpecifications
dyeingRunController
2
2
1
Programiranje u realnom vremenu 256
dyeingSolution[1].top
vars:
cyrrentLevel: 3
active
a: {timer.informIn(10);}
t: {{flow,liquidIn} or {flow,liquidOut}}
a: {adjustCurrentLevel();}
t: {timeout,timer}
a: {reportValue(); timer.informIn(10);}
- Izvravanje modela sa vie aktera:
o ponaanja aktera (reakcija na poruke) se izvravaju konkurentno
(multiprogramiranjem, multiprocesiranjem ili distribuirano)
o hijerarhijska struktura aktera ne ograniava konkurentnost komponente se
izvravaju konkurentno
o poruke koje su poslate jednom akteru se izvravaju jedna po jedna; svaka poruka
se obrauje do kraja, nikada ne biva prekinuta (preempted) obradom druge poruke
istom akteru, ak i ako je ona vieg prioriteta run-to-completion semantika;
obrada poruke je atomina, (logiki) neprekidiva aktivnost, poruke istom akteru se
sekvencijalizuju nema konflikata
dyeValve
drainValve
dyeingSolution
dyeingRunController
Run-Time Scheduler
Timer
Resets
Sent
Timeouts
Received,
Messages
Sent
Run-Time
Scheduler
Receives
Messages
dyeValve
drainValve
dyeingSolution
dyeingRunController
Acts on Messages from:
Programiranje u realnom vremenu 257
Nivo detalja
- Jezik nivoa detalja (detail-level language) konvencionalni OO programski jezik za
specifikaciju detalja modela niskog nivoa
- Da bi se reili problemi diskontinuiteta opsega (scope discontinuity), potrebno je da
postoji mogunost da se iz jezika nivoa detalja mogu koristiti usluge ROOM virtuelne
maine (ROOM API)
- Slanje poruke - port se vidi kao objekat u jeziku detalja, slanje poruke na port se vidi kao
poziv operacije klase porta:
solutionLevel.send(level,currentLevel);
- Parametri: ime signala i objekat podataka ija se kopija alje u poruci
- Posebna podrazumevana varijabla proirenog stanja msg predstavlja poruku koja se
obrauje u akteru. U C++ deklarisana kao pokaziva (ROOMMessage*):
Boolean DyeingRunController::full () {
if (msg->data <= desiredLevel) return FALSE;
else return TRUE;
}
- Funkcija je definisana u opsegu ponaanja date klase aktera, pa ima direktan pristup do
varijabli i poruka svog aktera
- Podrazumevano slanje poruke je asinhrono: odmah nakon slanja poruke, procedura send
vraa kontrolu kodu tranzicije koja nastavlja izvravanje (ili se zavrava) nezavisno od
obrade poslate poruke
Programiranje u realnom vremenu 258
dyeingRunController.running
vars:
dyeingParameters :
DyeingParameters
settingUp
a: {runData.send(parameterRequest, msg->data);}
t: {runParameters, runData}
a: {dyeingParameters = msg->data;}
...
DyeingSpecifications::top
t: {parameterRequest, runData}
a: {extractParams();
runData.send(runParameters,extractedParameters);}
...
vars:
extractedParameters :
DyeingParameters
...
functions:
extractParams ()
- Slanje poruke moe biti i sinhrono: slanje poruke sa invoke vraa kontrolu izvravanju
tranzicije tek kada je poslata poruka obraena (do tada je blokirano)
- Definicija protokola je nezavisna od naina slanja poruke
dyeingRunController.running
vars:
dyeingParameters :
DyeingParameters
settingUp
a: {replyMsg = runData.invoke(parameterRequest, msg->data);
dyeingParameters = replyMsg->data;}
...
DyeingSpecifications::top
t: {parameterRequest, runData}
a: {extractParams();
runData.reply(runParameters,extractedParameters);}
...
vars:
extractedParameters :
DyeingParameters
...
functions:
extractParams ()
Programiranje u realnom vremenu 259
- Pristup sistemskim SAP:
timer.informIn(dyeingParameters.dyeingTime)
- Frame Service: SAP protokol za usluge kreiranja i unitavanja instanci klasa aktera
DyeingSoftware::top
t: {create, operatorDialog}
a: {frame.incarnate(dyeingRunController, createData);}
...
saps:
frame : Frame
dyeingRunController.running
vars:
dyeingParameters :
DyeingParameters
settingUp
a: {replyMsg = runData.invoke(parameterRequest, msg->data);
dyeingParameters = replyMsg->data;}
...
Initialization Message
Programiranje u realnom vremenu 260
Nasleivanje
- Nasleivanje klasa aktera, protokola i klasa podataka
- Podrazumevano, izvedena klasa nasleuje, ali moe i da redefinie svojstva osnovne klase
- Primer nasleivanja protokola: razdvajanje detekcije greaka od upravljanja
-- Fabric Dyeing Protocol Classes --
DeviceControlBasic
DeviceControlPhysical
DeviceControlVirtual
...
protocol class DeviceControlBasic
{out: {deviceCommand, DevicePosition}}
Expanded Definition
protocol class DeviceControlPhysical
derived from: DeviceControlBasic
{in: {deviceStatus, DevicePosition}}
protocol class DeviceControlVirtual
derived from: DeviceControlBasic
{in: {deviceError, ErrorData}}
Expanded Definition
drainValve dyeingRunController
deviceStatus
deviceCommand
drainValve dyeingValveInterface
deviceStatus
deviceCommand
dyeingRunController
deviceError
deviceCommand
- Primer nasleivanja klasa aktera: proireni model sa grejanjem rastvora tokom bojenja
- Sva svojstva klase se mogu nasleivati, ali i proirivati i redefinisati: interfejs, struktura,
ponaanje
Programiranje u realnom vremenu 261
DyeingSolution
HeatableDyeingSolution
DyeingUnit
ElevatedTemperatureDyeingUnit
...
Expanded
Structure
Definition
-- Fabric Dyeing Actor Classes --
DyeingUnit
dyeValve
drainValve
dyeingSolution
DyeingSolution
ElevatedTemperature
DyeingUnit
dyeValve
drainValve
heatableDyeingSolution
heater
Heatable
DyeingSolution
DyeingRunController::top
filling
dyeing
t: {level, solutionLevel, full()}
...
...
ElevatedTemperature
DyeingRunController::top
filling
dyeing
t: {level, solutionLevel, full()}
...
...
heating
maintaining
cooling
Programiranje u realnom vremenu 262
Napredni koncepti
- Slojevi u arhitekturi:
o korisniki definisan sloj (user-defined layer) sastoji se od krupnih aktera
odgovarajuih svojstava - obezbeuje internu komponentu interfejsa zvanu taka
obezbeenja usluge (service provision point, SPP)
o SAP je konjugovani SPP
o Upareni SAP i SPP omoguavaju komunikaciju izmeu slojeva
o Akter koji sadri SPP ili akter koji sadri takav akter se definie kao usluni sloj
(service layer); akter koji sadri SAP ili akter koji sadri takav akter se definie
kao sloj koji koristi tu uslugu
o Komunikacija izmeu slojeva ne zahteva vezu (binding). Zavisnost izmeu slojeva
se deklarie vezama slojeva (layer connection) koje se ne vezuju eksplicitno za
individualne komponente aktera
o U svemu ostalom, komunikacija izmeu slojeva ponaa se kao i komunikacija
preko portova: poruke se definiu klasama protokola, postoje send i invoke
procedure
- Slojevi se koriste za modelovanje centralizovanih, iroko korienih usluga na
implementacionom nivou
ROOM Layer (Service User)
SAP
ROOM Layer (Service Provider)
Via ports
Via SAP-SPP Run-Time Connections
SPP
Via ports
Programiranje u realnom vremenu 263
DyeingSystem
dyeingUnit
dataAcquisitionHardware
dataCollectionProcessor
dataCollectionSoftware
networkSoftware
controlProcessor
networkSoftware
dataCollection
Interface
dyeingSoftware
- Primer: vei broj slinih relejnih portova povezuje referencu na akter sa komponentama
unutar druge reference indikacija da je proputena prilika za apstrakcijom
- Interpretacija: dyeingRunController operie u dva konteksta kao komponenta
aktera dyeingSoftware i preko relejnih portova kao komponenta aktera
dyeingUnitInterface
DyeingSoftware
actorReference
dyeingUnitInterface
dyeingSpecifications
n
dyeingRunController
dyeValve
Interface
*
drainValve
Interface
dyeingSolution
Interface
Programiranje u realnom vremenu 264
- Viestruko sadravanje ekvivalencije: par referenci ukazuje da se isti akter pojavljuje na
dva mesta u razliitim ulogama (reference ukazuju na istu instancu klase aktera)
DyeingSoftware
actorReference
dyeingUnitInterface
dyeingSpecifications
n
dyeingRunController
dyeValve
Interface
*
drainValve
Interface
dyeingSolution
Interface
dyeingRun
Controller
equivalences:
{dyeingRunController,
dyeingInterface.dyeingRunController}
- Nasleivanje podrazumeva i supstituciju: referenca moe da ukazuje na instancu izvedene
klase
- Referenca mora da bude deklarisana kao substitutable i referisana instanca mora da ima
kompatibilan interfejs
- Mogunost za razliite konfiguracije sistema
dyeValve
Interface
drainValve
Interface
dyeingSolution
Interface
dyeingRun
Controller
DyeingUnitInterface
dyeValve
Interface
drainValve
Interface
dyeingSolution
Interface
elevated
Temperature
DyeingRun
Controller
ElevatedTemperature
DyeingUnitInterface
heater
Interface
Programiranje u realnom vremenu 265
VI Praktikum
Programiranje u realnom vremenu 266
Rational Rose Technical Developer
- IBM Rational Rose Technical Developer (ranije pod nazivom Rational Rose
Real Time) predstavlja integrisano MDD okruenje koje podrava automatsku translaciju
izeu modela i koda za razliite programske jezike, kao to su Java, C i C++. Neke od
podranih mogunosti ovog programskog paketa su:
o Mogunosti izvravanja, testiranja i vizuelnog debagovanja modela
o Kolaboracija vie uesnika projektnog tima
o Integracija sa razvojnim okruenjem Eclipse
o Mogunost reverznog inenjerstva
o Integraciju sa velikim brojem RT operativnih sistema i embedded razvojnih
okruenja
o Instalacija pod operativnim okruenjem: Windows i Linux
- U daljem tekstu predstavljen je jedan jednostavan ugraen (engl. embedded) sistem, na
kome e biti prikazane mogunosti razvoja jednog RT UML modela pomou programskog
okruenja Rational Rose Technical Developer ver. 7.0. Za jezik nivoa impementacije
upotrebljen je Java programski jezik pod Windows operativnim sistemom.
Programiranje u realnom vremenu 267
Podeavanje okruenja
- Pre pokretanju razvojnog okruenja potrebno je instalirati slee alate:
o java JDK (eng. Java Development Kit) -
http://www.oracle.com/technetwork/java/javase/downloads/index.html
o nmake.exe postoji u okviru instalacije Microsoft Visual Studio okruenja
- Podesiti promenljive okruenja, tako da putanja bude podeena prema java JDK i
nmake.exe alatu.
- Jedan jednostavan nain je kreiranje skript fajla (.bat) koji izvrava sva neophodna
podeavanja i koji pokree Rose RT razvojno okruenje. U nastavku je dat primer jednog
takvog skripta:
set Path=PATH=%PATH%;c:\Program Files\Java\jdk1.6.0_04\bin\
call "c:\Program Files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
start /d "C:\Program Files\Rational\Rose RealTime\bin\win32\" roseRT.exe
exit
Programiranje u realnom vremenu 268
Postavka zadatka
- Potrebno je projektovati jednostavan alarm sistem ematski prikazan na sledeoj slici.
- Sistem automatski obavetava o potencijalnoj mogunosti izbijanja poara. Senzor za
detekciju dima generie odreeni prekid na koji sistem (u koliko je u aktivnom stanju)
treba da reaguje tako to ukljuuje alarm. Duina trajanja alarma kao i vrsta sirene kojom
e se oglasiti mogu se zadati putem kontrolne table, npr. duina trajanja alarma t
a
= 60s,
sirena periode T
s
= 1s (T
s1
= 400ms poluperioda naizmenino ukljuene i T
s2
= 600ms
poluperioda iskljuene sirene).
Pretpostavke
- Kontrolna tabla se sastoji od jednog tastera i jednog svetlosnog signalizatora, pri emu
razliita signalizacija oznaava drugo stanje sistema:
o Crveno ukazuje da je sistem u neaktivnom stanju (Za prelazak iz ovog stanja
potreban je pritisak na taster ije je trajanje due od 1s).
o Zeleno t
a
= 60s, T
s
= 1s (T
s1
= 400ms , T
s2
= 600ms)
o Zeleno trepue t
a
= 90s, T
s
= 500ms (T
s1
= 250ms , T
s2
= 250ms)
- Sistem prelazi iz jednog aktivnog stanja u drugo po gore navedenom redosledu kratkim
pritiskom na taster ije je trajanje krae od 1s.
- Sistem se inicijalno nalazi u aktivnom stanju (Zeleno - T
s1
= 400ms , T
s2
= 600ms).
- Sistem prelazi iz aktivnog u neaktivno stanje pritiskom na taster kontrolne table trajanja
dueg od 1s.
Programiranje u realnom vremenu 269
- Duina pritiska tastera kontrolne table meri se na nain tako to se generiu dva prekida,
jedan pri pritisku i jedan pri otputanju tastera.
- Alarm sirena se aktivira kratkim signalom i ostaje aktivna sve dok se ne dovede ponovo
signal na njen ulaz.
Programiranje u realnom vremenu 270
Kreiranje modela
Kreiranje novog modela
1. Pokrenuti Rational Rose Real Time prema predhodno datom uputstvu.
2. Na poetku e se pojaviti dijalog (kao na slici) za odabir ciljnog programskog
okruenja. Odabrati RTJava.
3. Pojavie se prazan model kao na sledeoj slici.
Programiranje u realnom vremenu 271
- Osnovni prozor podeljen je u etiri sekcije:
o Sa leve strane je browser koji slui za navigaciju kroz celokupan model.
o Glavni panel, tj. dijagram prozor sa desne strane
o Ispod se nalaze output i code/documentation prozori.
Programiranje u realnom vremenu 272
Kreiranje use case dijagrama
4. U okviru browsera, proiriti Use Case View i otvoriti Main component.
5. Izabrati Use Case tool iz toolbox-a i prevui na dijagram.
6. Preimenovati u FireDetectorMainFlow
7. Iz toolbox-a izabrati Text tool i uneti kratak opis sistema.
Kreiranje kapsula (aktora)
- Prvi zadatak je kreiranje kapsula koje sainjavaju sistem. Postoje 4 osnovna aktora
(capsules) u sistemu: senzor za detekciju dima, sirena(alarm), kontrolna tabla/tastatura i
sam alarm sistem.
- Kreiranje kapsule:
8. U okviru browsera, proiriti Logical View i otvoriti Main component.
9. Prevui capsule iz Diagram toolbox-a na dijagram.
10. Imenovati capsule sa Alarm.
- Trebalo bi dobiti dijagram prikazan na sledeoj slici:
Programiranje u realnom vremenu 273
- Ponoviti proces za sledee elemente:
11. Keypad
12. SmokeDetector
13. FireAlarm
- U ovom trenutku definisani su osnovni aktori u sisemu, tri koja definiu aktore vezane
za spoljne ureaje i jedan koji definie ponaanje samog sistema.
Kreiranje dijagrama strukture za kapsule
- Sada je potrebno kreirati strukturni dijagram koji implementira ponaanje opisano u use
case dijagramu. Zatim je potrebno kreirati dijagram sekvence koji opisuje interakciju
kapsula.
- Obzirom da Alarm kapsula opisuje tok dogaaja opisanih u osnovnom use case dijagramu
koji se implementira, on takoe enkapsulira sve kapsule i klase relevantne za sistem.
Kreiranje sturkture Alarm kapsule
- Mogue je na 2 naina agregirati kapsule u okviru neke druge kapsule:
o Pomou Aggregation tool u klasnom dijagramu.
o Prevlaenjem kapsule na strukturni dijagram druge kapsule.
- Ovde e biti upotrebljen drugi nain:
Programiranje u realnom vremenu 274
1. U okviru Model View taba browser-a kliknuti na plus znak [+] pored ikone da bi se
ekspandovala Alarm kapsula.
2. Pojavie se dve stavke: jedna koja reprezentuje dijagram stanja i druga vezana za
dijagram strukture.
3. Dupli-klik na Structure Diagram ikonu kako bi se otvorio sledei prozor dijagrama.
4. Prevui Keypad kapsulu iz Model View taba browsera na Alarm strukturni dijagram.
5. Dupli-klik na rolu kapsule /keypadR1 i preimenovati je u keypad.
6. Ponoviti proces za SmokeDetector i FireAlarm kapsule
7. U Logical View folderu , dupli-klik na Class Diagram: Logical View / Main dijalog.
Programiranje u realnom vremenu 275
8. Trebalo bi da se prikau prethodno kreirane kapsule.
9. Iz Query menija odabrati Filter Relationships
10. Proveriti da li su selektovane sve Type i Access grupe i kliknuti na OK.
Programiranje u realnom vremenu 276
Kreiranje dijagrama sekvence
- Potrebno je kreirati dijagram sekvence na kome e se prikazati interakcija odreenih
kapsula sistema, radi implementacije datog ponaanja opisanog u FireDetectorMainFlow
use case-u.
1. Model View tab, proiriti Logical View, desni-klik na Alarm i odabrati Sequence
Diagram.
2. Preimenovati u FireDetectorAlarmMainFlow.
3. Prevui Interaction Instance iz toolbox-a i odabrati SmokeDetector
4. Ponoviti za FireAlarm i Keypad
5. Samostalno opisati interakciju kapsula u sistemu pomou datog dijagrama sekvence
(pomo Help: Contents: Toolset Guide: Creating Sequence Diagrams)
Kreiranje protokola
1. Otvoriti Main klasni dijagram.
2. Prevui Protocol tool iz toolbox-a.
3. Imenovati u EnableDetector.
Kreiranje signala za dati protokol
4. Desni-klik na protokol i odabrati Open Specification.
5. Odabrati Signals tab.
Programiranje u realnom vremenu 277
6. Desni-klik na In Signals panel, odabrati Insert.
7. Preimenovati signal u Enable.
8. Kliknuti na Data Class kolonu pored Enable signala i pritisnuti F8.
9. Odabrati boolean iz liste.
10. Na isti nain kreirati sledee protokole:
Protokol InSignals OutSignals
InterruptDetection
Interrupt:void
RaiseAlarm AlarmSignal:void
Kreiranje portova i konektora
- Portovi su atributi kapsula, pa kao takve, sve role (instance) kapsula imaju dostupne iste
portove. esta greka je da se portovi dodaju rolama kapsula.
Kreiranje portova
1. Otvoriti Structure Diagram za SmokeDetector kapsulu.
Programiranje u realnom vremenu 278
2. Iz Model View taba browser-a, prevui EnableDetector protokol na crnu ivicu
strukturnog dijagrama SmokeDetector kapsule.
3. Desni-klik na novokreirani port, odabrati End Port. Port e promeniti izgled u
. ta predstavlja End Prot?
4. Preimenovati u EnableSmokeDetector.
5. Uraditi isto za InterruptDetection i RaiseAlarm kao na slici.
Programiranje u realnom vremenu 279
Dokumentovanje
- Pri projektovanju modela dobra praksa predstavlja dokumentovanje svakog elementa.
Rose RealTime podrava da svaki element moe zasebno sadrati dokumentaciju.
- Uneti za svaki element kratak opis ponaanja pomou prozora Documentation
oznaenog na sledeoj slici.
Dodavanje ponaanja kapsuli
- Ponaanje kapsule opisano je dijagramom stanja koji se automatski pridodaje pri njenom
kreiranju.
1. Dupli-klik na State Diagram za otvaranje dijagrama stanja za SmokeDetector
kapsulu.
Programiranje u realnom vremenu 280
Kreiranje stanja
2. Kliknuti na State tool iz State Diagram toolbox-a i prevui na dijagram stanja.
3. Preimenovati stanje u Enabled.
4. Na isti nain dodati stanje Disabled.
Programiranje u realnom vremenu 281
Kreiranje tranzicija
5. U State Diagram toolbox-u kliknuti na State Transition tool .
6. Prevui tranziciju sa Initial Point na stanje Enabled.
7. Imenovati tranziciju Initial.
8. Na isti nain dodati tranzicije izmeu stanja Enabled i Disabled i obratno i nazvati ih
enabled i disabled respektivno.
9. Simbol predstavlja da tranzicija nema definisan okida (trigger).
Kreiranje triggera
10. Dupli-klik na enabled tranziciju.
11. Odabrati Triggers tab.
12. Desni-klik na listu i odabrati Insert.
13. Odabrati EnableSmokeDetector
14. U polju za Signal tiklirati Enable
15. U polju Guard code uneti sledei kod:
return (java.lang.Boolean)rtGetMsgData()==true;
Programiranje u realnom vremenu 282
16. Na isti nain definisati trigger na disabled tranziciji, s tim to u Gurard code treba
uneti:
return (java.lang.Boolean)rtGetMsgData()==false;
Dodavanje akcije
17. U State Diagram toolbox-u kliknuti na Transition to Self tool.
18. Odabrati Enabled stanje.
19. Imenovati tranziciju SmokeDetected.
20. Dupli-klik na tranziciju.
21. Dodati trigger na Interrupt signal SmokeDetection porta.
22. Odabrati Action tab i uneti sledei kod:
RaiseFireAlarm.AlarmSignal().send();
ta pretstavlja dati kod?
Programiranje u realnom vremenu 283
Kompajliranje i izvravanje
- ta je to MDD i zato je bitno u to ranijoj fazi izvriti kompajliranje, izvravanje i
testiranje modela?
Kreiranje komponente
1. U Model View browser-u, desni-klik na Component View, zatim New >
Component.
2. Preimenovati u SmokeDetectorComponent.
3. Dupli-klik na ovu komponentu da bi se otvrio Component Specification dialog.
4. OBAVEZNO! Pod tabom General postaviti polje Type na RTJavaProject.
5. Pod tabom References prevui iz Logical View browser-a kapsulu
SmokeDetector kao i sve kreirane portove.
6. Kliknuti na OK
Programiranje u realnom vremenu 284
OBAVEZNO!
7. Otvoriti Component View/Main dijagram i prevui SmokeDetectorComponent
i komponentu classes iz paketa rosert / Component View
8. Postaviti zavisnost (Dependecy) od SmokeDetectorComponent ka komponenti
classes.
Kompajliranje
1. Desni-klik na SmokeDetectorComponent (u Component View).
2. Build > Build
3. OK.
- U koliko je kompajliranje uspeno nastaviti dalje, u suprotnom proveriti ceo postupak.
Izvravanje
1. Desni-klik na Deployment View
2. New>Processor
3. Imenovati LocalCPU
4. Dupli-klik na LocalCPU i odabrati tab Detail
5. Desni-klik na Component Insatances, odabrati Insert
6. Odabrati SmokeDetectorComponent.
Programiranje u realnom vremenu 285
7. OK.
8. Dupli-klik na SmokeDetectorComponentInsatnce u okviru Deployment View /
LokalCPU
OBAVEZNO!
9. U polje Parameters uneti:
com.rational.rosert.DebugApplication SmokeDetector -
obslisten= <br. porta koji se nalazi polju Target
observabilitiy port>
Programiranje u realnom vremenu 286
Napomena: Prvi parametar oznaava ime top-level kapsule koja se pokree (u ovom
sluaju SmokeDetector), a drugi oznaava broj porta koji oslukuje okruenje (uneti bez
razmaka).
10. OK
11. Desni-klik na SmokeDetectorComponentInsatnce, odabrati Run.
Programiranje u realnom vremenu 287
Testiranje
1. Pritisnuti Start dugme da bi se uitala komponenta.
2. Desni-klik na SmokeDetector instancu kapsule i odabrati Open Structure Monitor.
3. Odabrati Probe tool iz Structure Monitor toolbox-a.
4. Pozicionirati kursor na EnableSmokeDetector port na Structure Monitor diagramu i
zatim kliknuti .
Programiranje u realnom vremenu 288
5. U Structure Monitor dijagramu ekspandovati Probes, desni-klik na jedini ponueni
probe (za SmokeDetection port) i izabrati Open Inject.
6. Desni-klik na listu pa Insert.
7. U Data polje uneti:
java.lang.Boolean false
8. Ponoviti za vrednost
java.lang.Boolean true
Programiranje u realnom vremenu 289
9. OK.
10. Desni-klik na SmokeDetector instancu kapsule i odabrati Open State Monitor.
11. Ekspandovati kreirani probe.
12. Desni-klik na jednu od vrednosti i odabrati Inject.
13. Naizmenino zadavati jednu pa drugu injektovanu vrednost i posmatrati promene
stanja sistema.
ta e se dogoditi ako se dva puta zada ista vrednost? Zato?
14. Zaustaviti izvravanje pomou dugmeta Shutdown.
Programiranje u realnom vremenu 290
Proirenje modela
- Do sada je implementiran i testiran akter SmokeDetector . Potrebno je na isti nain to
uraditi i za aktere FireAlarm i Keypad.
1. U okviru Logical View: Main klasnog dijagrama dodati klasu TimeParameters, koja
predstavlja parametre koji se definiu pomou kontrolne table, sa sledeim poljima:
Ime Vidljivost Tip
Ta public int
Ts1 public int
Ts2 public int
Napomena: Zbog jednostavnosti sva polja su definisana kao public.
2. Na prethodno prikazan nain definisati protokol Parameters sa jednim In signalom
Parameter tipa TimeParameters prethodno definisane klase.
3. Na prethodno prikazan nain u okviru Structure Diagram kapsule FireAlarm
definisati sledee potove:
Programiranje u realnom vremenu 291
Ime Tip
RaiseFireAlarm RaiseAlarm
ReceiveParameter Parameters
4. Postaviti da su End Port tipa.
5. Desni-klik na RaiseFireAlarm port, odabrati Conjugate.
Zato?
Kreiranje timing porta
1. Iz Structure Diagram toolbox-a odabrati Port tool i prevui unutar Strukturnog
dijagrama FireAlarm kapsule.
Napomena: Ne prevlaiti na ivicu ve unutar strukture FireAlarm kapsule. Dodavanje
porta na ivicu kreira public port, dok dodavanje unutar strukture stvara protected port.
Zato?
2. Odabrati Timing protokol iz liste ponuenih protokola.
Programiranje u realnom vremenu 292
3. Imenovati port timer1.
4. Na isti nain dodati port timer2.
5. Dodati jo jedan port tipa RaiseAlarm i imenovati ga AlarmOut, koji e predstavljati
izlaz na alarm sirenu.
6. Postaviti da je tipa EndPort.
Povezivanje portova
1. Otvoriti Structure Diagram kapsule Alarm.
2. Pomou Connector tool povezati portove RaiseFireAlarm kapsula
SmokeDetector i FireAlarm
Programiranje u realnom vremenu 293
Dodavanje atributa
1. Desni-klik na FireAlarm kapsulu (u Model browser-u) i odabrati Open
Specification.
2. Odabrati Attributes tab.
3. Unet sledee atribute:
Ime Tip Inicijalna vrednost
ta int 60000
ts1 int 400
ts2 int 600
signalOn boolean false
Programiranje u realnom vremenu 294
Kreiranje stanja
1. U okviru FireAlarm kapsule definisati stanja Alarm i NonActive.
2. Napraviti meusobne tranzicije.
3. Imenovati ih sa ActivateAlarm i DeactivateAlarm.
4. Napraviti tranziju u inicijalno stanje NonActive, imenovati je Initial.
5. Napraviti takoe Transition to Self za stanje NonActive i imenovati je
ParameterInicialization.
6. Napraviti Transition to Self za stanje Alarm i imenovati je ChangeSignal.
7. Implementirati tranzicije na sledei nain:
Tranzicija Port Signal Akcija
Initial
ta=60000;
ts1=600;
ts2=400;
signalOn = false;
ActivateAlarm RaiseFireAlarm AlarmSignal
timer1.informIn(ts1);
timer2.informIn(ta);
AlarmOut.AlarmSignal().send();
signalOn = true;
DeactivateAlarm timer2 timeout
if(signalOn)
{
// stopAlarm;
Programiranje u realnom vremenu 295
AlarmOut.AlarmSignal().send();
signalOn = false;
}
ParameterInicializa
tion
ReceiveParamete
r
Parameter
ta=((TimeParameters)rtGetMsgDa
ta()).Ta;
ts1=((TimeParameters)rtGetMsgD
ata()).Ts1;
ts2=((TimeParameters)rtGetMsgD
ata()).Ts2;
ChangeSignal timer1 timeout
signalOn = !signalOn;
if(signalOn)
{
// startAlarm;
AlarmOut.AlarmSignal().send();
timer1.informIn(ts1);
}
else
{
//stopAlarm
AlarmOut.AlarmSignal().send();
timer1.informIn(ts2);
}
Testiranje
1. Na prethodno naveden nain kompajlirati i pokrenuti aplikaciju za kapsulu Alarm
(top-level kapsula koja sadri sve ostale kapsule).
2. Postaviti probe na portove RaiseFireAlarm, timer1 i timer2 kapsule FireAlarm, kao
i na sve portove kapsule SmokeDetector.
Programiranje u realnom vremenu 296
3. Desni-klik na FireAlarm instancu kapsule i odabrati Open State Monitor.
4. Postaviti pogled na sve atribute FireAlarm kapsule, prevlaei ih u Watch prozor.
Programiranje u realnom vremenu 297
5. Na prethodno pokazani nain kreirati Inject za port SmokeDetection kapsule
SmokeDetector. Takoe uraditi isto i za EnableSmokeDetector port.
6. Zadavati ove pobude i posmatrati promenu atributa i stanja u kapsuli FireAlarm.
Kreiranje trace-a
- Drugi nain testiranja izvravanja modela pretstavlja kreiranje i praenja dogaaja unutar
trace-a:
7. Desni-klik na probe kreiran nad portom RaiseFireAlarm u strukturnom dijagramu
kapsule FireAlarm i odabrati Open Trace.
Programiranje u realnom vremenu 298
8. Ponoviti za portove timer1 i timer2.
9. Ponovo zadati pobudu za port SmokeDetection kapsule SmokeDetector i posmatrati
promene za zadate trace-ove.
Napomena: Za port AlarmOut nije mogue pratiti trace s obzirom da nije povezan ni na
jedan drugi port. Testiranje se moe izvriti npr. dodavanjem naredbe
System.out.println() u action delu tranzicije koja alje poruku preko ovog porta.
Samostalan rad
1. Prepraviti ponaanje kapsule FireAlarm pomou metode Timer.informAt()
(pogledati dokumentaciju) umesto Timer.informIn() tako da ovaj proces ne pati od
kumulativnog drifta (Eng. Cumulative Drift).
2. Impelmentirati i testirati Keypad kapsulu, a zatim testirati ceo sistem.
Korisni linkovi
- Rational RoseRT Help:
Concept Tutorials
QuickStart Tutorial
Card Game Turorial (C++)
Za integrisanje modela sa eksternim projektom (npr. simulacionim ili GUI kodom)
pogledati turorijal Java Reference>Getting Started with Rational Rose RealTime
Java>Integrating external classes
Programiranje u realnom vremenu 299
Literatura
1. Burns, A., Wellings, A., "Real-Time Systems and Programming Languages," 3rd ed.,
Addison-Wesley, 2001
2. Selic, B., Gullekson, G., Ward, P.T., "Real-Time Object-Oriented Modeling," Wiley,
1994
3. Dibble, D., Real-Time Java Platform Programming, 2nd ed., BookSurge Publishing,
2008
4. Brown, M.,Modeling and developing embedded Java applications with Rational Rose
RealTime, developerWorks
, 2004
http://www.ibm.com/developerworks/rational/tutorials/rroserealtime/index.html
5. RATIONAL ROSE