Poglavlje 13: Sistemi u realnom vremenu i IoT

Priča za početak. Dvadesetog jula 1969. godine lunarni modul Eagle misije Apollo 11 spuštao se prema površini Mjeseca. Na nekoliko minuta do slijetanja, na ekranu računara pojavio se alarm koji astronauti nikad nisu vidjeli na vježbi: 1202, a malo kasnije i 1201. Računar je javljao da je preopterećen: dobija više poslova nego što stigne obaviti. Kasnije se pokazalo da je jedan prekidač radara za susret u orbiti bio u položaju koji je računaru stalno slao nepotrebne poslove. U kontroli leta u Houstonu inženjeri su za nekoliko sekundi morali odlučiti: prekinuti slijetanje ili nastaviti. Odluka je bila „nastavite”, jer su znali kako je softver projektovan. Tim na MIT-u, u kojem je softver za letjelicu vodila Margaret Hamilton, napravio je računar koji svakom poslu daje prioritet. Kad posla ima previše, računar se ponovo pokrene, odbaci manje važne poslove i nastavi samo s onima od kojih zavisi slijetanje. Upravo to se desilo, više puta, i modul se spustio. Računar nije bio brži od posla; bio je projektovan da zna šta je važnije kad sve ne stigne na vrijeme. To je suština sistema u realnom vremenu.

U poglavljima 9 i 10 projektovali smo DeliveryApp kao web sistem: zahtjev dođe, server odgovori, i ako odgovor kasni sekundu, kupac je malo nestrpljiv, ali niko nije u opasnosti. Ali DeliveryApp dodiruje i fizički svijet: dostavljač vozi s telefonom koji javlja položaj, a hrana u restoranu stoji u hladnjaku koji mora držati temperaturu. Postoje i sistemi kod kojih je zakašnjeli odgovor isto tako pogrešan kao i netačan: kočnice, pejsmejker, upravljanje fabrikom. Ovo poglavlje uči kako se takvi sistemi projektuju. Prvo objašnjavamo šta je realno vrijeme i po čemu se razlikuju tvrdi i meki rokovi. Zatim upravljačku petlju, vezu računara sa senzorima i motorima, i operativne sisteme za realno vrijeme. Na kraju pouzdanost, glasanje dva od tri i Internet stvari. Na praktičnoj nastavi simuliramo hladnjak restorana i provjeravamo da li zadaci stižu na vrijeme.

Literatura. Osnovna literatura predmeta:

  1. B. Popović, K. Kuk: Informacioni sistemi, Kriminalističko-policijski univerzitet, Beograd, 2017.
  2. J. S. Valacich, J. F. George: Modern Systems Analysis and Design, 9th ed., Pearson, 2020.
  3. L. Jelenković: Sustavi za rad u stvarnom vremenu – skripta, FER, Zagreb, 2015.
  4. D. Milićev: Programiranje u realnom vremenu – skripta, Beograd, 2002.
  5. V. Kovačević, M. Popović: Sistemska programska podrška u realnom vremenu 1, FTN, Novi Sad, 2013.

Za ovo poglavlje posebno su korisne skripte 3, 4 i 5.

Riječi ovog poglavlja.

  • Sistem u realnom vremenu – sistem čiji je rezultat ispravan samo ako je i tačan i na vrijeme.
  • Rok (deadline) – najkasniji trenutak do kojeg rezultat mora biti gotov.
  • Tvrdi, čvrsti i meki rok – propušten tvrdi rok je katastrofa, čvrsti čini rezultat bezvrijednim, meki samo smanjuje kvalitet.
  • Kašnjenje (latency) i treperenje (jitter) – koliko traje odgovor, i koliko se to trajanje mijenja od puta do puta.
  • Ugrađeni sistem (embedded) – računar ugrađen u uređaj da obavlja jedan posao (u perilici, autu, hladnjaku).
  • Senzor i aktuator – senzor mjeri (temperaturu, položaj), aktuator djeluje (pali kompresor, pokreće motor).
  • Upravljačka petlja – stalni krug: izmjeri, uporedi sa željenim, djeluj, ponovo izmjeri.
  • DDC (direct digital control) – direktno digitalno upravljanje: računar sam računa i šalje upravljački signal.
  • A/D i D/A pretvarač – pretvara napon senzora u broj, i broj u napon za aktuator.
  • Procesna magistrala (fieldbus) – mreža kojom se u fabrici povezuju senzori, aktuatori i kontroleri (npr. Modbus, CAN, PROFIBUS).
  • RTOS (real-time operating system) – operativni sistem koji garantuje da će važni zadaci dobiti procesor na vrijeme.
  • Prioritet i prekidanje – važniji zadatak smije prekinuti manje važan.
  • Redundancija i glasanje – više primjeraka istog dijela; ishod bira većina (npr. dva od tri).
  • Nadzorni tajmer (watchdog) – brojač koji ponovo pokrene sistem ako se program „zaglavi”.
  • IoT (Internet of Things, Internet stvari) – uređaji sa senzorima koji preko interneta šalju podatke i primaju naredbe.

Ciljevi poglavlja. Nakon poglavlja možete: objasniti šta je sistem u realnom vremenu i zašto zakašnjeli rezultat može biti pogrešan; razlikovati tvrde, čvrste i meke rokove na primjerima; objasniti kašnjenje, treperenje i najgore vrijeme izvršavanja; nacrtati upravljačku petlju i razlikovati otvorenu i zatvorenu petlju; objasniti regulator uključi-isključi s histerezom na hladnjaku restorana; izračunati rezoluciju A/D pretvarača; navesti čemu služe procesna magistrala i standard ISA-88; objasniti raspoređivanje po prioritetima i provjeriti test iskorištenosti procesora; izračunati pouzdanost glasanja dva od tri; objasniti nadzorni tajmer i siguran kvar; izračunati kako se nakuplja greška sata na primjeru Patriota 1991; opisati arhitekturu IoT sistema i obrazac objavi–pretplati se (MQTT).

Plan poglavlja – Sedmica 13: tri časa teorije i tri časa praktične nastave

Čas Sadržaj Na času
Teorija 1 13.1–13.3 Realno vrijeme, rokovi, specifičnosti Kočnica, video, praćenje dostavljača
Teorija 2 13.4–13.6 Upravljačka petlja, sprezanje s fizičkim svijetom, RTOS Hladnjak R-1; U = 0,25; Apollo 1202
Teorija 3 13.7–13.9 Redundancija, sat i vrijeme, IoT 99,97 %; Patriot 0,34 s; MQTT
Praksa 1–3 Simulacija hladnjaka; test rasporedivosti; glasanje dva od tri hladnjak.py, alarm u 40. minuti

Dio 1 – Šta je realno vrijeme

13.1 Tačno i na vrijeme

U običnom informacionom sistemu rezultat je ispravan ako je tačan. Ako izvještaj o prometu DeliveryApp stigne za 3 sekunde umjesto za jednu, i dalje je ispravan. U sistemu u realnom vremenu rezultat je ispravan samo ako je tačan i na vrijeme. Ako računar kočnica tačno izračuna koliko treba pritisnuti kočnicu, ali to izračuna pola sekunde prekasno, auto je već udario.

Važno je razumjeti šta „realno vrijeme” ne znači: ne znači „vrlo brzo”. Znači predvidivo na vrijeme. Sistem koji uvijek odgovori za 50 milisekundi je sistem u realnom vremenu; sistem koji obično odgovori za 1 milisekundu, ali ponekad za 2 sekunde, nije, iako je u prosjeku brži.

Ključni pojam je rok (deadline): najkasniji trenutak do kojeg rezultat mora biti gotov. Rokovi se dijele po tome šta se desi kad se propuste:

Vrsta roka Šta se desi kad se propusti Primjeri
Tvrdi (hard) katastrofa: šteta, povreda, gubitak života ABS kočnice, zračni jastuk, pejsmejker, upravljanje letom
Čvrsti (firm) zakašnjeli rezultat je bezvrijedan, ali rijetka propuštanja se mogu podnijeti sličica u video pozivu, očitavanje bar-koda na traci
Meki (soft) rezultat i dalje vrijedi, samo manje položaj dostavljača na mapi kupca, obavještenje „narudžba je krenula”

DeliveryApp ima uglavnom meke rokove: ako se položaj dostavljača na mapi osvježi za 12 umjesto za 10 sekundi, kupac to jedva primijeti. Ali hladnjak u kojem restoran čuva meso i salate ima čvršći zahtjev: ako temperatura dugo bude previsoka, hrana se mora baciti, a rizik je i zdravlje kupaca. Zato i DeliveryApp, kao sistem koji spaja restorane, ima razloga da razumije realno vrijeme.

Ukratko.

  • U sistemu u realnom vremenu rezultat je ispravan samo ako je tačan i na vrijeme.
  • Realno vrijeme ne znači vrlo brzo, nego predvidivo na vrijeme.
  • Propušten tvrdi rok je katastrofa, čvrsti čini rezultat bezvrijednim, a meki samo smanjuje kvalitet.
  • Praćenje dostavljača ima meki rok, a hladnjak restorana čvršći.

13.2 Specifičnosti: kašnjenje, treperenje, najgori slučaj

Projektant sistema u realnom vremenu razmišlja drugačije od projektanta web aplikacije. Tri pojma su mu najvažnija.

Kašnjenje (latency) je vrijeme od događaja do reakcije: od trenutka kad senzor izmjeri 5,1 °C do trenutka kad se kompresor upali.

Treperenje (jitter) je koliko se kašnjenje mijenja od jednog puta do drugog. Ako se senzor očitava „svakih 10 ms”, a stvarni razmaci su 9, 11, 10, 14 i 8 ms, treperenje je veliko. Kod upravljanja motorom ili zvukom treperenje smeta koliko i samo kašnjenje.

Najgore vrijeme izvršavanja (WCET, worst-case execution time) je najduže vrijeme koje neki posao može trajati, u najgorem slučaju. Web projektant pita „koliko traje u prosjeku?”. Projektant realnog vremena pita „koliko traje najduže?”, jer rok mora biti ispoštovan i u najgorem slučaju, a ne samo obično.

Zato sistemi u realnom vremenu izbjegavaju sve što je nepredvidivo: čekanje na mrežu bez vremenskog ograničenja, pozive koji ponekad traju dugo, pa čak i automatsko čišćenje memorije koje neki programski jezici rade kad im odgovara. Programi za tvrde rokove češće se pišu u jezicima kao što su C, C++, Ada ili Rust, za male procesore, i provjeravaju u simulatoru (alati iz poglavlja 2).

Slika iz života: redovni gradski autobus. Putnicima je manje važno da autobus vozi brzo, a više da dolazi kad piše u redu vožnje. Autobus koji nekad dođe za 2, a nekad za 25 minuta, gori je od autobusa koji uvijek dođe za tačno 12.

Ukratko.

  • Kašnjenje je vrijeme od događaja do reakcije, a treperenje njegova promjenljivost.
  • Projektant realnog vremena pita koliko posao traje najduže (WCET), a ne u prosjeku.
  • Zato se izbjegava sve nepredvidivo, a programi za tvrde rokove često se pišu u C, C++, Adi ili Rustu.
  • Kao autobus: važnije je da dođe kad piše nego da vozi brzo.

13.3 Vrste sistema u realnom vremenu

Sistemi u realnom vremenu dijele se na još dva korisna načina.

Po tome šta ih pokreće:

  • Vođeni vremenom (time-triggered): posao se radi u tačno određenim trenucima, npr. temperatura se očitava svakih 60 sekundi. Lako se predviđa i provjerava.
  • Vođeni događajima (event-triggered): posao se radi kad se nešto desi, npr. vrata hladnjaka su otvorena. Brže reaguje, ali je teže predvidjeti koliko posla može doći odjednom (Apollo 11 je dobio mnogo više događaja nego što je predviđeno).

Po tome gdje rade:

  • Ugrađeni sistemi (embedded systems): mali računar ugrađen u uređaj, za jedan posao. U hladnjaku restorana, perilici, autu (moderan auto ima desetine takvih računara). Često se zasnivaju na mikrokontroleru: čipu koji ima procesor, memoriju i ulaze i izlaze za senzore na jednom mjestu.
  • Sistemi za upravljanje procesima: fabrike, elektrane, vodovod, gdje računari upravljaju pumpama, ventilima i motorima i povezani su posebnim mrežama (13.5).
  • Distribuirani sistemi u realnom vremenu: više računara koji zajedno moraju poštovati rokove, npr. sistem semafora u gradu ili avion s više računara za upravljanje letom.

Ukratko.

  • Sistemi vođeni vremenom rade posao u određenim trenucima, a vođeni događajima kad se nešto desi.
  • Ugrađeni sistem je mali računar u uređaju, često na mikrokontroleru.
  • Postoje i sistemi za upravljanje procesima i distribuirani sistemi u realnom vremenu.

Provjeri se.

  1. Znači li „realno vrijeme” isto što i „vrlo brzo”? – Ne; znači predvidivo na vrijeme, uključujući najgori slučaj.
  2. Kakav rok ima osvježavanje položaja dostavljača? – Meki: zakašnjeli položaj i dalje vrijedi, samo manje.
  3. Šta je WCET? – Najduže vrijeme koje posao može trajati u najgorem slučaju.

Dio 2 – Upravljanje i operativni sistem za realno vrijeme

13.4 Upravljačka petlja

Mnogi sistemi u realnom vremenu upravljaju nečim u fizičkom svijetu. Osnovni obrazac je upravljačka petlja:

  1. senzor izmjeri stanje (temperatura u hladnjaku je 5,1 °C);
  2. regulator (kontroler) uporedi izmjereno sa željenim stanjem i izračuna šta treba uraditi;
  3. aktuator djeluje (upali kompresor);
  4. stanje se mijenja, senzor ponovo mjeri, i krug se ponavlja.

Ovakva petlja zove se zatvorena, jer se rezultat djelovanja vraća kao novo mjerenje (povratna veza). Otvorena petlja nema povratnu vezu: toster drži hljeb tačno dvije minute, bez obzira da li je hljeb već izgorio. Zatvorena petlja je kao vozač koji gleda brzinomjer i podešava gas; otvorena je kao vozač koji drži papučicu na istoj poziciji i nada se.

Slika 13.1 – Zatvorena upravljačka petlja hladnjaka: senzor, regulator, aktuator i povratna veza

Kada računar sam, u svakom krugu, izračuna i pošalje upravljački signal aktuatoru, to se zove direktno digitalno upravljanje (DDC, direct digital control). Ključni parametar je perioda uzorkovanja: koliko često se mjeri. Prerijetko mjerenje propusti promjenu; prečesto bespotrebno troši procesor.

Regulator uključi-isključi s histerezom

Najjednostavniji regulator je uključi-isključi: kompresor ili radi punom snagom, ili ne radi. Ali ako bi se kompresor palio na 4,0 °C i gasio na 4,0 °C, palio bi se i gasio svakih nekoliko sekundi i brzo se pokvario. Zato se koristi histereza: dvije granice. Hladnjak Picerije R-1 projektovan je ovako:

  • kompresor se uključi kad temperatura pređe 5,0 °C;
  • kompresor se isključi kad temperatura padne ispod 3,0 °C;
  • između 3,0 i 5,0 °C kompresor zadržava zadnje stanje.

Isto radi termostat grijanja u stanu: peć se ne pali i gasi na svaku desetinku stepena.

U simulaciji (praktična nastava, primjeri/deliveryapp/hladnjak.py) temperatura, kad kompresor radi, pada 0,6 °C po minuti, a kad ne radi, raste 0,4 °C po minuti. Hladnjak tada mirno kruži između oko 3 i 5 °C. Od 25. do 45. minute vrata su otvorena (neko u kuhinji ih je zaboravio zatvoriti), pa toplota ulazi brže nego što kompresor može izbaciti: temperatura raste i dostiže 12,0 °C u 45. minuti. Sistem pali alarm kad je temperatura iznad 8,0 °C duže od pet minuta; u simulaciji alarm se pali u 40. minuti, a gasi u 52. minuti, kad se temperatura poslije zatvaranja vrata vrati ispod 8,0 °C.

Slika 13.2 – Hladnjak R-1: histereza između 3 i 5 °C, otvorena vrata i alarm

Za radoznale. Precizniji regulator od uključi-isključi je PID regulator, koji upravljački signal računa iz greške e (razlike željenog i izmjerenog): proporcionalno trenutnoj grešci, njenom zbiru kroz vrijeme i brzini njene promjene, u = K_p·e + K_i·Σe·Δt + K_d·Δe/Δt. Tako rade tempomat u autu, dronovi i većina industrijskih procesa. Druga porodica, fuzzy (rasplinuto) upravljanje, koristi pravila s nejasnim granicama („ako je temperatura malo visoka i brzo raste, hladi jače”), slično kako bi čovjek rasuđivao; korišteno je u perilicama, klima-uređajima i vozovima. Oba su teme za predmete o automatskom upravljanju.

Ukratko.

  • Upravljačka petlja: senzor mjeri, regulator upoređuje sa željenim, aktuator djeluje, i krug se ponavlja.
  • Zatvorena petlja ima povratnu vezu, a otvorena nema, kao toster.
  • DDC znači da računar sam računa i šalje upravljački signal, s izabranom periodom uzorkovanja.
  • Histereza (uključi iznad 5,0 °C, isključi ispod 3,0 °C) sprečava stalno paljenje i gašenje.
  • U simulaciji otvorena vrata dižu temperaturu na 12,0 °C, a alarm se pali u 40. minuti.

13.5 Sprezanje s fizičkim svijetom

Računar razumije samo brojeve, a fizički svijet su naponi, temperature, pritisci i pokreti. Između njih stoje pretvarači.

A/D pretvarač (analogno-digitalni) pretvara napon senzora u broj. Njegova važna osobina je rezolucija: na koliko dijelova dijeli opseg napona. Pretvarač od n bita daje 2ⁿ različitih vrijednosti, pa je najmanji korak

\[ \Delta U = \frac{U_{\text{opseg}}}{2^n} \]

Čemu služi. Formula kaže koliko sitnu promjenu senzor uopšte može primijetiti. Za 10-bitni pretvarač i opseg od 0 do 3,3 V (čest kod mikrokontrolera): ΔU = 3,3 V / 1024 ≈ 3,2 mV. Ako senzor temperature daje 10 mV po stepenu, sistem razlikuje promjene od oko 0,3 °C. Za hladnjak je to dovoljno; za medicinski termometar nije, pa bi trebao pretvarač s više bita.

D/A pretvarač radi obrnuto: broj pretvara u napon, npr. da podesi brzinu ventilatora.

U fabrikama i velikim kuhinjama senzora i aktuatora ima stotine, i ne mogu se svi povezati posebnim žicama na jedan računar. Povezuju se procesnom magistralom (fieldbus): industrijskom mrežom s pravilima koja garantuju da poruke stižu na vrijeme. Poznati primjeri su Modbus (star, jednostavan i vrlo raširen), CAN (nastao za automobile, danas i u mašinama) i PROFIBUS/PROFINET (fabrike). Za razliku od obične kancelarijske mreže, kod procesne magistrale važnije je da poruka stigne na vrijeme nego da stigne mnogo podataka.

Za upravljanje procesima u kojima se proizvod pravi u serijama („šaržama”), kao u prehrambenoj, farmaceutskoj i hemijskoj industriji, postoji standard ISA-88 (ranije S88). On dijeli posao na recept (šta se pravi i kojim redom: miješaj, zagrij na 80 °C, drži 10 minuta, ohladi) i opremu koja recept izvršava. Ideja je ista kao kod modelovanja procesa iz poglavlja 4: posao se rastavi na korake i faze koje se mogu provjeriti i ponoviti. Velika industrijska kuhinja koja priprema hiljade obroka mogla bi upravljati kotlovima upravo po takvim receptima.

Ukratko.

  • A/D pretvarač pretvara napon u broj, a rezolucija je opseg podijeljen sa 2ⁿ.
  • Za 10 bita i 3,3 V najmanji korak je oko 3,2 mV.
  • Procesna magistrala (Modbus, CAN, PROFIBUS) povezuje senzore i aktuatore tako da poruke stižu na vrijeme.
  • Standard ISA-88 dijeli šaržni proces na recept i opremu koja ga izvršava.

13.6 Operativni sistem za realno vrijeme

Računar u hladnjaku ili autu istovremeno radi više poslova: mjeri temperaturu, prikazuje je na ekranu, šalje podatke u oblak, provjerava vrata. To su zadaci (tasks). Koji dobija procesor kad ih je više spremno? Na običnom računaru odlučuje operativni sistem po svom nahođenju, trudeći se da svi budu „zadovoljni u prosjeku”. Za realno vrijeme to nije dovoljno, pa se koristi operativni sistem za realno vrijeme (RTOS, real-time operating system), npr. FreeRTOS, Zephyr ili VxWorks.

RTOS radi po jednostavnom i strogom pravilu: svaki zadatak ima prioritet, i od svih spremnih zadataka uvijek radi onaj s najvišim prioritetom. Ako se pojavi važniji zadatak dok manje važan radi, RTOS prekida (preemption) manje važan i odmah daje procesor važnijem. To je višezadaćni rad (multitasking) s prioritetima, upravo onakav kakav je imao računar Apolla 11: kad je posla bilo previše, poslovi navođenja za slijetanje imali su prednost, a manje važni su odbačeni.

Da li svi zadaci stižu na vrijeme?

Za periodične zadatke (koji se ponavljaju sa stalnom periodom) postoji jednostavna provjera. Svaki zadatak i ima trajanje Cᵢ (najgore vrijeme izvršavanja) i periodu Tᵢ. Udio procesora koji zadatak troši je Cᵢ / Tᵢ, a ukupna iskorištenost je

\[ U = \sum_{i=1}^{n} \frac{C_i}{T_i} \]

Čemu služi. Ako se prioriteti dodijele tako da kraća perioda dobija viši prioritet (to se zove rate monotonic), Liu i Layland su 1973. pokazali da svi zadaci sigurno stižu na vrijeme ako je U ≤ n · (2^{1/n} − 1). Za tri zadatka granica je 3 · (2^{1/3} − 1) ≈ 0,78.

Računar hladnjaka R-1 ima tri zadatka:

Zadatak Trajanje C Perioda T C / T Prioritet
mjerenje i regulacija 1 ms 10 ms 0,10 najviši
slanje podataka u oblak 5 ms 100 ms 0,05 srednji
osvježavanje ekrana 20 ms 200 ms 0,10 najniži

U = 0,10 + 0,05 + 0,10 = 0,25, što je manje od 0,78, pa sva tri zadatka sigurno stižu na vrijeme, s velikom rezervom. Ako bi neko dodao zadatak „kamera u hladnjaku” koji traje 60 ms svakih 100 ms (0,60), U bi bio 0,85, iznad granice od 0,78 za četiri zadatka (≈ 0,76), i garancije više ne bi bilo.

Iz stvarnog svijeta. I dobro projektovan RTOS može zakazati kad se zadaci takmiče za isti resurs. Letjelica Mars Pathfinder se 1997. na Marsu ponovo pokretala jer je zadatak niskog prioriteta držao zajednički resurs koji je trebao zadatku visokog prioriteta, a zadatak srednjeg prioriteta je stalno prekidao onaj niski. Pojava se zove inverzija prioriteta. Inženjeri su je reprodukovali na kopiji letjelice na Zemlji i ispravku poslali na Mars. Detaljno o tome govori predmet Testiranje softvera (testiranje paralelnih aplikacija).

Slika 13.3 – Raspored tri zadatka hladnjaka po prioritetima (U = 0,25)

Ukratko.

  • RTOS uvijek daje procesor spremnom zadatku najvišeg prioriteta i prekida manje važne.
  • Tako je radio računar Apolla 11: pri preopterećenju zadržao je poslove od kojih je zavisilo slijetanje.
  • Iskorištenost je U = Σ Cᵢ / Tᵢ; za tri zadatka s kraćom periodom na višem prioritetu dovoljno je U ≤ 0,78.
  • Tri zadatka hladnjaka imaju U = 0,25 i sigurno stižu na vrijeme.

Provjeri se.

  1. Koja je razlika između otvorene i zatvorene petlje? – Zatvorena ima povratnu vezu (ponovo mjeri rezultat), a otvorena nema.
  2. Zašto hladnjak ima dvije granice, 3,0 i 5,0 °C? – Histereza sprečava da se kompresor stalno pali i gasi.
  3. Šta radi RTOS kad se pojavi važniji zadatak? – Prekine manje važan i odmah da procesor važnijem.

Dio 3 – Pouzdanost, vrijeme i IoT

13.7 Redundancija i glasanje

U poglavlju 9 vidjeli smo da dva paralelna servera povećavaju dostupnost. Kod sistema u realnom vremenu, posebno onih s tvrdim rokovima, redundancija ide korak dalje: nije dovoljno da rezervni dio postoji, nego treba i znati koji dio griješi.

Najpoznatiji obrazac je trostruka modularna redundancija (TMR, triple modular redundancy), ili glasanje dva od tri. Tri nezavisna računara (ili senzora) rade isti posao, a glasač uzima rezultat koji su dala bar dva. Ako jedan pogriješi, druga dva ga preglasaju. Slika iz života: tri sata na zidu. Ako jedan kasni pet minuta, a druga dva pokazuju isto, vjerujete onoj dvojici.

Ako je pouzdanost jednog dijela r (vjerovatnoća da radi ispravno), sistem dva od tri radi ispravno kad rade sva tri, ili tačno dva:

\[ R_{\text{2od3}} = r^3 + 3r^2(1 - r) = 3r^2 - 2r^3 \]

Čemu služi. Za r = 0,99: R = 3 · 0,9801 − 2 · 0,970299 ≈ 0,9997. Vjerovatnoća otkaza pada s 1 % na oko 0,03 %, odnosno oko 33 puta. Ovo važi samo ako dijelovi otkazuju nezavisno, i ako je sam glasač pouzdan. Zato se u avionima i svemirskim letjelicama koriste računari različitih proizvođača, pa čak i programi koje su pisali različiti timovi, da ista greška ne pogodi sva tri.

Još dva obrasca pouzdanosti:

  • Nadzorni tajmer (watchdog timer): brojač koji broji unazad, a ispravan program ga redovno „resetuje”. Ako se program zaglavi i prestane to raditi, brojač dođe do nule i ponovo pokrene sistem. Restart Apolla 11 i Pathfindera su primjeri ovakve samopomoći.
  • Siguran kvar (fail-safe): kad nešto otkaže, sistem prelazi u bezbjedno stanje. Semafor koji izgubi kontrolu počne treptati žuto, a ne pokazivati zeleno na sve strane. Hladnjak koji izgubi senzor pali kompresor i alarm, jer je hladnija hrana manji rizik od tople.

Ukratko.

  • Glasanje dva od tri (TMR) koristi tri nezavisna dijela i uzima rezultat većine.
  • Pouzdanost je R = 3r² − 2r³; za r = 0,99 to je oko 0,9997.
  • Dijelovi moraju otkazivati nezavisno, pa se koriste različiti proizvođači i timovi.
  • Nadzorni tajmer ponovo pokrene zaglavljen sistem, a siguran kvar vodi u bezbjedno stanje.

13.8 Sat i vrijeme

U distribuiranim sistemima u realnom vremenu postoji pitanje koje izgleda trivijalno: koliko je sati? Svaki računar ima svoj sat, i satovi se razilaze. Kad računari sarađuju (radar i raketa, dva semafora, dostavljač i server), male razlike u vremenu mogu dati velike greške u položaju.

Iz stvarnog svijeta. U februaru 1991, za vrijeme Zaljevskog rata, sistem protivvazdušne odbrane Patriot kod grada Dhahran u Saudijskoj Arabiji nije presreo iračku raketu Scud, koja je pogodila kasarnu; poginulo je 28 američkih vojnika. Izvještaj američke kontrolne službe GAO iz 1992. pokazao je uzrok. Sistem je vrijeme brojao u desetinkama sekunde i množio ga sa 0,1 da dobije sekunde. Broj 0,1 se u binarnom zapisu ne može tačno napisati (kao što se 1/3 ne može tačno napisati decimalno), a sistem ga je čuvao u 24 bita, pa je svaki otkucaj sata bio pogrešan za oko 0,000000095 sekundi. To je zanemarljivo jednom. Ali baterija je radila bez prekida više od 100 sati, a to je oko 3,6 miliona otkucaja, i greška se nagomilala na oko 0,34 sekunde. Scud leti oko 1700 metara u sekundi, pa je sistem tražio raketu više od pola kilometra od mjesta gdje je zaista bila. Ispravljen softver stigao je u Dhahran dan kasnije. Sistem je prvobitno projektovan za rad od nekoliko sati na jednom mjestu, a ne za stotinu sati bez ponovnog pokretanja; takav način rada niko nije predvidio u zahtjevima.

Račun greške je jednostavan i vrijedi ga ponoviti:

\[ \text{greška} = \varepsilon \times f \times t = 9{,}5 \times 10^{-8}\ \text{s} \times 10\ \tfrac{\text{otkucaja}}{\text{s}} \times 360\,000\ \text{s} \approx 0{,}34\ \text{s} \]

Čemu služi. ε je greška jednog otkucaja, f broj otkucaja u sekundi, a t vrijeme rada (100 sati = 360 000 sekundi). Formula pokazuje opštu pouku: mala greška koja se sabira raste s vremenom rada. Zato se u projektovanju pitaju dvije stvari: koliko dugo sistem smije raditi bez ponovnog pokretanja (zahtjev koji je Patriotu falio), i kako se satovi računara usklađuju (u običnim mrežama protokolom NTP, u preciznim industrijskim mrežama protokolom PTP, a mnogi uređaji vrijeme uzimaju iz satelita GPS).

Za DeliveryApp je pouka skromnija, ali ista: položaj dostavljača i vrijeme narudžbe uvijek se zapisuju s vremenom iz usklađenog sata, u UTC (poglavlje 10), a ne s vremenom koje telefon dostavljača „misli” da je.

Slika 13.4 – Kako se mala greška sata nakuplja: Patriot, 1991

Ukratko.

  • Satovi različitih računara se razilaze, a mala greška može dati veliku grešku u položaju.
  • Kod Patriota 1991. greška od oko 0,000000095 s po otkucaju narasla je za 100 sati na oko 0,34 s.
  • Greška je ε × f × t: mala greška koja se sabira raste s vremenom rada.
  • Zahtjevi moraju reći koliko dugo sistem smije raditi bez ponovnog pokretanja, a satovi se usklađuju (NTP, PTP, GPS).

13.9 Internet stvari

Internet stvari (IoT, Internet of Things) su uređaji sa senzorima i aktuatorima koji preko interneta šalju podatke i primaju naredbe: pametni termostati, satovi, brojila struje, senzori u poljima, hladnjaci. Za DeliveryApp su dva primjera IoT-a sasvim prirodna:

  • hladnjaci restorana šalju temperaturu svakih 60 sekundi, a DeliveryApp šalje upozorenje vlasniku ako se upali alarm (i, po želji, privremeno sakrije osjetljiva jela s jelovnika);
  • telefoni dostavljača šalju položaj svakih 10 sekundi, da kupac vidi gdje je hrana.

Tipična IoT arhitektura ima četiri sloja:

  1. uređaj (senzor i mikrokontroler u hladnjaku);
  2. prolaz (gateway): mali računar u restoranu koji skuplja podatke s više uređaja i šalje ih dalje, i radi i kad internet nakratko nestane;
  3. posrednik poruka (broker) u oblaku;
  4. aplikacija: DeliveryApp, koji podatke čuva, prikazuje i na njih reaguje.

Najčešći protokol za IoT je MQTT, a radi po obrascu objavi–pretplati se (publish–subscribe). Uređaj ne šalje poruku nekome određenom, nego je objavi na temu, npr. restorani/R-1/hladnjak/temperatura. Ko god se pretplatio na tu temu (DeliveryApp, aplikacija vlasnika, sistem za izvještaje), dobije poruku od posrednika. Ovo je ista ideja kao red poruka iz poglavlja 10, ali lagana, za uređaje sa slabim procesorom i nesigurnom vezom. Slika iz života: radio stanica. Stanica emituje na svojoj frekvenciji (tema), a sluša je ko god se na nju naštimao, bez da stanica zna ko sluša.

IoT donosi i posebne rizike za sigurnost (poglavlje 12): uređaja je mnogo, slabi su, dugo se ne ažuriraju, a često dolaze s istom fabričkom lozinkom. Pravila: svaki uređaj ima svoj ključ, saobraćaj je šifrovan, uređaj prima samo poruke na svoje teme, i postoji način da se ažurira na daljinu.

Za radoznale. Rani ekspertni sistemi u realnom vremenu, iz osamdesetih godina, pokušavali su znanje iskusnog operatera u elektrani ili fabrici zapisati kao stotine pravila „ako je ovo, onda uradi ono”, pa da računar savjetuje operatera u stvarnom vremenu. Danas ulogu savjetnika sve češće preuzimaju modeli mašinskog učenja, o čemu govori poglavlje 15, ali problem ostaje isti: savjet koji stigne prekasno ne pomaže.

Ukratko.

  • IoT su uređaji sa senzorima i aktuatorima povezani preko interneta; za DeliveryApp to su hladnjaci restorana i telefoni dostavljača.
  • IoT arhitektura ima uređaj, prolaz, posrednika poruka i aplikaciju.
  • MQTT radi po obrascu objavi–pretplati se: uređaj objavi na temu, a dobija je svako ko je pretplaćen, kao radio stanica.
  • IoT uređaji traže poseban oprez: svoj ključ za svaki uređaj, šifrovanje i ažuriranje na daljinu.

Provjeri se.

  1. Kolika je pouzdanost glasanja dva od tri za r = 0,99? – Oko 0,9997.
  2. Kolika se greška sata nakupila kod Patriota za 100 sati? – Oko 0,34 sekunde.
  3. Kako se zove obrazac po kojem radi MQTT? – Objavi–pretplati se (publish–subscribe), s temama.

Praktična nastava – hladnjak, raspored i glasanje

Cilj je simulirati upravljačku petlju hladnjaka, provjeriti rasporedivost zadataka i izračunati pouzdanost glasanja, sve u Pythonu. Radi se u folderu kod/realno-vrijeme/.

Korak 1 – Simulacija hladnjaka

  1. Kopirajte hladnjak.py iz primjeri/deliveryapp/ i pokrenite ga: python hladnjak.py.
  2. Uporedite ispis sa slikom 13.2: kompresor se pali i gasi između 3 i 5 °C; vrata su otvorena od 25. do 45. minute; najviša temperatura je 12,0 °C; alarm se pali u 40. minuti.
  3. Nacrtajte grafik temperature kroz vrijeme (biblioteka matplotlib), s horizontalnim linijama na 3,0, 5,0 i 8,0 °C i osjenčenim periodom otvorenih vrata.

Korak 2 – Promjene projekta

Mijenjajte po jedan parametar i zapišite posljedicu u kod/realno-vrijeme/nalazi.md:

  1. Histereza bez razmaka (uključi i isključi na 4,0 °C). Koliko puta se kompresor upali u prvih 25 minuta, u odnosu na originalni projekat?
  2. Vrata otvorena samo 10 minuta (od 25. do 35. minute). Da li se alarm upali?
  3. Jači kompresor (hladi 1,2 °C po minuti). Šta se dešava s otvorenim vratima?
  4. Dodajte pravilo sigurnog kvara: ako senzor vrati nemoguću vrijednost (npr. −40 °C ili 99 °C), kompresor se uključi i pali se alarm „kvar senzora”. Ubacite takvu vrijednost u 15. minuti i provjerite ponašanje.

Korak 3 – Test rasporedivosti

Napišite funkciju koja za listu zadataka (C, T) računa iskorištenost U i granicu n · (2^{1/n} − 1) i ispisuje da li je skup sigurno rasporediv:

def rasporediv(zadaci):
    n = len(zadaci)
    U = sum(c / t for c, t in zadaci)
    granica = n * (2 ** (1 / n) - 1)
    return round(U, 3), round(granica, 3), U <= granica

print(rasporediv([(1, 10), (5, 100), (20, 200)]))               # (0.25, 0.78, True)
print(rasporediv([(1, 10), (5, 100), (20, 200), (60, 100)]))    # (0.85, 0.757, False)

Provjerite oba primjera iz 13.6 i dodajte svoj zadatak (npr. „očitavanje vrata” 0,5 ms svakih 20 ms).

Korak 4 – Glasanje dva od tri

  1. Napišite funkciju glasaj(a, b, c) koja vraća vrijednost koju su dala bar dva od tri senzora (za temperature: vrijednosti koje se razlikuju za najviše 0,5 °C smatraju se istim; vraća se njihov prosjek), ili None ako se nijedna dva ne slažu.
  2. Isprobajte: (4,1; 4,2; 4,0), (4,1; 4,2; 19,5), (4,1; 9,0; 19,5).
  3. Izračunajte 3r² − 2r³ za r = 0,9, 0,99 i 0,999 i zapišite koliko puta se smanjuje vjerovatnoća otkaza.

Korak 5 – Greška sata

Izračunajte u Pythonu grešku jednog otkucaja kada se 0,1 čuva sa 23 bita iza binarne tačke (0.1 - int(0.1 * 2**23) / 2**23), pa nagomilanu grešku za 8, 20, 48 i 100 sati rada pri 10 otkucaja u sekundi. Uporedite rezultat za 100 sati sa 0,34 s iz 13.8.

Korak 6 – MQTT i AI (opcionalno)

  1. Uz biblioteku paho-mqtt i javni probni posrednik (npr. test.mosquitto.org) objavite temperaturu iz simulacije na temu deliveryapp-vjezba/<vaše-ime>/hladnjak i u drugom programu se pretplatite na nju. Ne šaljite ništa osim izmišljenih brojeva, jer je javni posrednik vidljiv svima.
  2. Zatražite od AI asistenta da predloži pravila za alarm hladnjaka „kao što bi ih napisao inspektor za hranu”. Provjerite svaki prijedlog na simulaciji: koliko lažnih alarma bi davao, a koliko stvarnih problema bi propustio?

Rezultat koji se predaje: folder kod/realno-vrijeme/ sa simulacijom i grafikom, nalazi.md s rezultatima koraka 2 do 5, i funkcijama rasporediv i glasaj s ispisom provjera.

Vježbe

Vježba za studenta 1 – vrsta roka.

Tvrdi, čvrsti ili meki rok? a) računar koji upravlja ventilom za pritisak u kotlu; b) prikaz titlova u video zapisu; c) e-mail s računom poslije narudžbe; d) senzor koji zaustavlja pokretnu traku kad radnik stavi ruku unutra.

Rješenje. a) tvrdi (kašnjenje može izazvati eksploziju); b) čvrsti (zakašnjeli titl je bezvrijedan, ali rijetko kašnjenje se podnosi); c) meki; d) tvrdi (povreda radnika).

Vježba za studenta 2 – rezolucija.

Koliki je najmanji korak 12-bitnog A/D pretvarača s opsegom od 0 do 5 V? Koliko je to stepeni za senzor koji daje 10 mV po °C?

Rješenje. ΔU = 5 V / 2¹² = 5 / 4096 ≈ 0,00122 V ≈ 1,22 mV. Uz 10 mV/°C to je oko 0,12 °C.

Vježba za studenta 3 – rasporedivost.

Tri zadatka: (C = 2 ms, T = 10 ms), (C = 10 ms, T = 50 ms), (C = 30 ms, T = 100 ms). Izračunajte U i provjerite da li je skup sigurno rasporediv po testu iz 13.6.

Rješenje. U = 0,2 + 0,2 + 0,3 = 0,7. Granica za tri zadatka je ≈ 0,78, a 0,7 ≤ 0,78, pa je skup sigurno rasporediv.

Vježba za studenta 4 – glasanje.

Svaki od tri senzora radi ispravno s vjerovatnoćom 0,95. Kolika je pouzdanost glasanja dva od tri? Je li to bolje od jednog senzora?

Rješenje. R = 3 · 0,95² − 2 · 0,95³ = 3 · 0,9025 − 2 · 0,857375 = 2,7075 − 1,71475 = 0,99275. Pouzdanost raste s 95 % na oko 99,3 %, a vjerovatnoća otkaza pada s 5 % na oko 0,7 %.

Vježba za studenta 5 – greška sata.

Sat u telefonu dostavljača kasni 2 sekunde, a dostavljač vozi skuter 36 km/h. Za koliko metara je pogrešno prikazan njegov položaj na mapi kupca, ako se položaj crta prema vremenu servera? Je li to opasno za DeliveryApp?

Rješenje. 36 km/h = 10 m/s, pa je greška 10 m/s × 2 s = 20 m. Za praćenje dostave (meki rok) to nije opasno, ali pokazuje zašto se vrijeme mjerenja zapisuje iz usklađenog sata; za sistem s tvrdim rokom ista greška bila bi neprihvatljiva.

Sažetak u pet rečenica

  1. Sistem u realnom vremenu je ispravan samo ako je rezultat tačan i na vrijeme, a Apollo 11 je 1969. sletio jer je računar bio projektovan da pri preopterećenju zadrži najvažnije poslove.
  2. Rokovi su tvrdi, čvrsti ili meki, a projektant gleda kašnjenje, treperenje i najgore vrijeme izvršavanja, a ne prosjek.
  3. Upravljačka petlja mjeri, upoređuje i djeluje; hladnjak R-1 regulatorom s histerezom drži 3 do 5 °C, a u simulaciji s otvorenim vratima alarm se pali u 40. minuti.
  4. RTOS uvijek daje procesor zadatku najvišeg prioriteta, a test iskorištenosti U = Σ Cᵢ/Tᵢ (za tri zadatka hladnjaka 0,25, ispod granice 0,78) pokazuje da svi zadaci stižu na vrijeme.
  5. Glasanje dva od tri podiže pouzdanost na 3r² − 2r³ (0,9997 za r = 0,99), greška sata se nakuplja kao kod Patriota 1991 (0,34 s za 100 sati), a IoT uređaji šalju podatke preko MQTT-a po obrascu objavi–pretplati se.

Pitanja za ponavljanje

  1. Šta se desilo pri slijetanju Apolla 11 i zašto je slijetanje uspjelo?
  2. Šta je sistem u realnom vremenu? Znači li to „vrlo brz”?
  3. Objasnite razliku između tvrdog, čvrstog i mekog roka s primjerima.
  4. Šta su kašnjenje, treperenje i WCET?
  5. Kako se sistemi u realnom vremenu dijele po tome šta ih pokreće i gdje rade?
  6. Opišite upravljačku petlju. Koja je razlika između otvorene i zatvorene petlje?
  7. Šta je histereza i zašto je potrebna u hladnjaku R-1?
  8. Kako se računa rezolucija A/D pretvarača? Dajte primjer.
  9. Čemu služe procesna magistrala i standard ISA-88?
  10. Kako RTOS raspoređuje zadatke? Napišite test iskorištenosti i primijenite ga na hladnjak.
  11. Šta je inverzija prioriteta?
  12. Objasnite glasanje dva od tri i izračunajte pouzdanost za r = 0,99.
  13. Šta su nadzorni tajmer i siguran kvar?
  14. Šta se desilo s Patriotom 1991. i kako se računa nagomilana greška sata?
  15. Šta je IoT, od kojih slojeva se sastoji i kako radi MQTT?

Odgovori na pitanja za ponavljanje.

  1. Nekoliko minuta prije slijetanja pojavili su se alarmi 1202 i 1201, jer je računar zbog pogrešnog položaja prekidača radara dobijao više poslova nego što stiže obaviti. Slijetanje je uspjelo jer je softver dodjeljivao prioritete: računar se ponovo pokretao, odbacivao manje važne poslove i zadržavao poslove navođenja za slijetanje.
  2. Sistem u realnom vremenu je sistem čiji je rezultat ispravan samo ako je tačan i na vrijeme. Ne znači „vrlo brz”, nego predvidivo na vrijeme, i u najgorem slučaju.
  3. Propušten tvrdi rok je katastrofa (ABS kočnice, pejsmejker); propušten čvrsti rok čini rezultat bezvrijednim, ali se rijetka propuštanja podnose (sličica u video pozivu); propušten meki rok samo smanjuje vrijednost rezultata (položaj dostavljača na mapi).
  4. Kašnjenje je vrijeme od događaja do reakcije, treperenje je promjenljivost tog vremena od puta do puta, a WCET je najduže vrijeme koje posao može trajati u najgorem slučaju.
  5. Po pokretaču: vođeni vremenom (posao u određenim trenucima) i vođeni događajima (posao kad se nešto desi). Po mjestu: ugrađeni sistemi (mali računar u uređaju), sistemi za upravljanje procesima (fabrike, elektrane) i distribuirani sistemi u realnom vremenu.
  6. Senzor mjeri stanje, regulator ga upoređuje sa željenim i računa šta treba uraditi, aktuator djeluje, i krug se ponavlja. Zatvorena petlja ima povratnu vezu (rezultat se ponovo mjeri), a otvorena nema (kao toster koji drži hljeb tačno dvije minute).
  7. Histereza znači dvije granice: kompresor se uključi iznad 5,0 °C, a isključi ispod 3,0 °C, i između zadržava stanje. Potrebna je da se kompresor ne pali i gasi svakih nekoliko sekundi i brzo pokvari.
  8. ΔU = U_opseg / 2ⁿ, gdje je n broj bita. Za 10 bita i 3,3 V: 3,3 / 1024 ≈ 3,2 mV.
  9. Procesna magistrala (Modbus, CAN, PROFIBUS) povezuje mnogo senzora, aktuatora i kontrolera u industriji tako da poruke stižu na vrijeme. ISA-88 je standard za šaržne procese koji posao dijeli na recept (koraci i faze) i opremu koja ga izvršava.
  10. RTOS uvijek daje procesor spremnom zadatku najvišeg prioriteta i prekida manje važan kad se pojavi važniji. Test: U = Σ Cᵢ / Tᵢ ≤ n · (2^{1/n} − 1), uz viši prioritet za kraću periodu. Za hladnjak U = 0,10 + 0,05 + 0,10 = 0,25 ≤ 0,78, pa svi zadaci stižu na vrijeme.
  11. Inverzija prioriteta je situacija u kojoj zadatak visokog prioriteta čeka resurs koji drži zadatak niskog prioriteta, a zadatak srednjeg prioriteta stalno prekida onaj niski, pa važni zadatak čeka predugo, kao na Mars Pathfinderu 1997.
  12. Tri nezavisna dijela rade isti posao, a glasač uzima rezultat koji su dala bar dva. Pouzdanost je R = 3r² − 2r³; za r = 0,99: 3 · 0,9801 − 2 · 0,970299 ≈ 0,9997.
  13. Nadzorni tajmer je brojač koji ispravan program redovno resetuje; ako se program zaglavi, brojač dođe do nule i ponovo pokrene sistem. Siguran kvar znači da sistem pri otkazu prelazi u bezbjedno stanje, npr. semafor trepće žuto, a hladnjak bez senzora pali kompresor i alarm.
  14. Patriot u Dhahranu nije presreo raketu Scud i poginulo je 28 vojnika. Vrijeme se brojalo u desetinkama sekunde, a 0,1 je u 24 bita sačuvan s greškom od oko 0,000000095 s po otkucaju; za više od 100 sati rada greška je narasla na oko 0,34 s. Računa se kao ε × f × t = 9,5 × 10⁻⁸ s × 10 otkucaja/s × 360 000 s ≈ 0,34 s.
  15. IoT su uređaji sa senzorima i aktuatorima povezani preko interneta. Slojevi su uređaj, prolaz (gateway), posrednik poruka (broker) i aplikacija. MQTT radi po obrascu objavi–pretplati se: uređaj objavi poruku na temu, a posrednik je preda svima koji su se pretplatili na tu temu.