3. Operacijski sustav
● Minimalna funkcionalnost OS-a
– Raspoređivanje zadataka (eng. Task scheduling)
● koji zadatak će biti idući poslan na obradu
– Slanje (prosljeđivanje) zadataka na obradu (eng. Task dispatching)
● priprema memorije i ostalih elemenata procesora kako bi procesor u
budućnosti obradio upravo željeni zadatak
– Komunikacija između zadataka (eng. Intertask communication)
● zadaci moraju moći međusobno razgovarati kako bi prosljeđivali
podatke između procesa.
● Kernel (nucleus, jezgra) – minimalan OS koji obavlja (barem)
gornje 3 zadaće
● Često se za kernel čuje kad se govori o Linuxu – osnovni kernel
je dostupan za različite platforme, a dodatni softver
(nadogradnja na kernel) čini "distribuciju"
5. Real time Operating System (RTOS)
● Sustav za rad u realnom vremenu (eng. Real-time
operating system – RTOS) je više zadaćni operacijski
sustav koji izvršava aplikacije u realnom vremenu –
operacije bez vidljive zadrške
● CPU ne može raditi više stvari istovremeno – samo jedna
naredba se izvršava u nekom trenutku
– kako ostvariti istovremeni rad više zadaća u isto vrijeme?
● Rješenje: koristiti specijalizirane algoritme za raspoređivanje
zadataka (task scheduling)
● Napomena: u literaturi su uobičajeni nazivi RTS (eng. Real time systems) i
RTOS, ali je moguće pronaći i domaću kraticu SRSV (Sustavi za Rad u
Stvarnom Vremenu)
6. Parametri za različite ideje primjene kernela
● Algoritam za raspoređivanje može reagirati
– vremenski (eng. time-sharing)
– po događaju (eng. event-driven)
● Time sharing sustav koristi vremenske prekide za pozivanje
algoritma koji odlučuje koji će se idući zadatak (ili dio zadatka) izvršiti
● Event driven sustav poziva algoritam za raspoređivanje na svaki
prekid (vanjski ili unutarnji), a koji je aktiviran zbog nekog događaja
(npr. aktivacija senzora)
7. Podjela sustava za rad u stvarnom vremenu
● Prema posljedicama nepoštivanja ograničenja RTS sustavi se dijele na:
– stroge (engl. hard RTS)
● jedan pogrešno ili zakašnjelo obrađeni ulazni događaj dovodi do
katastrofalnog događaja u sustavu
– npr. nuklearna elektrana
– ublažene (engl. soft RTS)
● pogrešno ili zakašnjelo obrađeni događaji ne dovodi do katastrofalnog
završetka
– npr. grijanje u prostoru gdje se dogodi i pregrijavanje ili preveliko hlađenje
– čvrste (engl. firm RTS)
● poneki pogrešno ili zakašnjelo obrađeni događaj nije kritičan, ali više takvih
dovodi do katastrofalnog završetka
– npr. sustav detekcije kolizije s drugim objektom može propustiti jedan događaj
(idući će ispraviti problem), ali ako ih propusti nekoliko zaredom doći će do kolizije
● Vremenski rokovi (eng. Deadlines)
– minimalno vrijeme unutar kojeg događaj mora biti obrađen
8. Parametri za različite ideje primjene kernela
● Periodičnost događaja
– sporadično
● pojavljuju se nenadano
– aperiodički
● nepravilni gledajući točna vremena, ali statistički postoji jednoliki
razmak od kojeg postoji manji otklon
– periodički
● pojavljuju se u istim vremenskim razmacima
● Događaji međusobno mogu biti
– sinkroni
● dva događaja za koja se zna točna vremenska razlika u početku
aktivacije – usklađeni su
– ne moraju biti periodički, samo usklađeni vremenski
– asinkroni
● dva događaja nemaju usklađeno vremena aktivacije
9. Strategije za izradu kernela
● Petlja s prozivanjem (Polled Loop Systems)
● Kružno pokretanje (Cyclic Executive)
● Kooperativna višezadaćnost (Cooperative Multitasking)
● Sustav s prekidima (Interrupt-Driven Systems)
● Prednji/pozadinski sustav (Foreground/Background
Systems)
● Operacijski sustav za rad u stvarnom vremenu (RTOS)
10. Petlja s prozivanjem (Polled Loop Systems)
● Petlja s prozivanjem
– u petlji se redovito “prozivaju događaji” (poll) provjeravanjem
zastavice (flag) ili ulaza koji označava potrebnu aktivaciju
– koristi se kod jednostavnih sustava ili kao pozadinski sustav kod
sustava s prekidima
– ako je više događaja, svi bi se trebali provjeravati unutar iste petlje
● Primjer:
– primanje podataka nekim od komunikacijskih protokola. Po
završetku primanja podataka varijabla new_packet će biti
postavljena u vrijednosti 1.
for (;;) { // beskonacna petlja
if ( new_packet == 1) { // provjeri zastavicu
process_packet(); // obradi doga ajđ
new_packet = 0; // resetiraj zastavicu
}
}
11. Sinkronizirana petlja s prozivanjem
● Sinkronizirana petlja s prozivanjem
– u petlji se redovito “prozivaju događaji” (poll) provjeravanjem
zastavice (flag) ili ulaza koji označava potrebnu aktivaciju, a
sam događaj se obrađuje vremenski usklađeno
– koristi se kod sustava kod kojih je potrebno vrijeme da se
situacija "slegne" (npr. bouncing kod tipkala)
● Primjer:
– Aktivacija zbog pritisnutog tipkala. Bouncing traje do 20ms.
for (;;) { // beskonacna petlja
if ( button == 1) { // provjeri zastavicu
delay_ms(20); // pauza od 20 ms
process_packet(); // obradi doga ajđ
button = 0; // resetiraj zastavicu
}
}
12. Petlja s prozivanjem i zastavice
● Petlja s prozivanjem i zastavice
– Kako se zastavice postave na pravu vrijednost?
● Prozivanje (poll) vrijednosti ulaza – problematično ako se radi
o aktivnosti koja traje vremenski kratko a vrijeme između
prozivanja je predugo
● Korištenjem prekida – učestaliji vremenski prekid ili vanjski
prekid daju bolju kontrolu
for(;;) { /* petlja s prozivanjem */
if(flag) { /* provjeri zastavicu */
counter = 0;
while(counter<3);
process_event();
flag=0; /* resetiraj zastavicu */
}
}
counter=counter+1;
Prekidna rutina (funkcija)
13. Kružno pokretanje (Cyclic Executive)
● Kružno pokretanje
– daje privid istovremenog pokretanja zadaća time što se
neprestano pokreću kratki procesi u beskonačnoj petlji
– ne koristi prekide (interrupt)
– ako je vremenski rok (deadline) kritičan, tada svaki pojedini
zadatak mora biti vremenski određen (broj instrukcija mora
biti poznat, nisu dozvoljene petlje s neodređenom duljinom
izvršavanja).
for(;;) {
task_1();
task_2();
...
task_n();
}
for(;;) {
task_1();
task_2();
task_1();
task_3();
}
14. Kooperativni multitasking (Cooperative Multitasking)
● Kooperativni multitasking
– zadaci su podjeljeni u nekoliko faza, i obrada zadatka je
napisana na način da se po izvršavanju pojedine faze
kontrola vraća sustavu koji raspoređuje zadatke. Sustav za
raspoređivanje zadataka odlučuje koji zadatak se dalje
izvršava (moguće je pozivanje istog zadataka nekoliko puta
kako bi prošao kroz više faza)
void process_a(void)
{
for(;;){
switch(state_a){
case 1: phase_a1();
break;
case 2: phase_a2();
break;
case 3: phase_a3();
break;
case 4: phase_a4();
break;
case 5: phase_a5();
break;
}
}
}
void process_b(void)
{
for(;;){
switch(state_b){
case 1: phase_b1();
break;
case 2: phase_b2();
break;
case 3: phase_b3();
break;
case 4: phase_b4();
break;
case 5: phase_b5();
break;
}
}
}
15. Sustav s prekidima (Interrupt-Driven Systems)
● Sustav s prekidima
– Glavni program ne radi ništa
– Raspoređivanje zadataka je usklađeno koristeći sklopovske
ili programske prekide te se raspoređivanje izvodi kroz
standardne prekidne rutine (funkcije)
void main(void)
{
for(;;);
}
void _isr_1(void)
{
/* obrada zadatka 1 */ ...
}
void _isr_n(void)
{
/* zadatak n */
}
Sklopovski prekid: Vanjski signal na nekoj od nožica pokreće prekidnu
rutinu.
Programski prekid: Aktiviranje prekidne rutine kroz unutarnji prekid
(npr. Vremenski prekid) ili postavljanjem bita u registru kako bi se
simulirao sklopovski prekid
16. Prekidi i zadaci
● Prekidi se mogu dogoditi u bilo koje vrijeme (sporadični,
asinkroni) i sustavi ne bi smjeli biti vezani vremenski
(sinkronost)
● Tijekom obrade jednog zadatka može se zahtjevati
blokiranje obrade drugih zadataka
– Zadaci mogu biti obrađeni i u klasičnim funkcijama, ne samo
u prekidnoj rutini
– Obrada zadataka bi trebala biti što kraća (naročito ako su
blokirani drugi prekidi odnosno zadaci)
– Ako postoji prioritet (važnost zadatka), može se dopustiti
prekidanje jednog procesa, s drugim
● Preemptive-priority systems
17. Prekidi i spašavanje konteksta
● Svaki zadatak ima svoje podatke
– Ako dolazi do prekida zbog zadataka višeg prioriteta,
potrebno je spremiti trenutne podatke – spašavanje
konteksta
– Po odrađivanju zadaće kontekst se vraća.
void main(void)
{
for(;;);
}
void _isr_1(void)
{
save(context);
task_1();
restore(context);
}
void _isr_n(void)
{
save(context);
task_n();
restore(context);
}
...
18. Prednji/pozadinski sustav (Foreground/Background System)
● Prednji i pozadinski sustav je hibridni sustav koji koristi
prekide za važne zadatke, ali istovremeno u glavnoj petlji
obavlja druge, manje važne zadatke (kao što to radi sustav
s prozivanjem petlje)
– Najkorištenija arhitektura jer pruža kontinuirani efektivni rad
pozadinskog procesa, s real-time obradom važnijih prednjih
zadataka (real-time zbog korištenja prekidnih rutina)
Inicijalizacija:
1. Isključi prekide
2. Postavi prekidne vektore
3. Obavi test sustava
4. Obavi inicijalizaciju drugih stvari u
sustavu
5. Uključi prekide
19. Pozadinski zadatak
● Pozadinski zadaci ne smiju biti ovisni o vremenu
– Izvode se samo ako nema prekida (odnosno ima slobodnog
vremena za izvođenje pozadinskih aktivnosti)
– Česta upotreba je provjera radi li sustav u redu
● Nije vremenski kritično, ali je dobro znati trenutno stanje
sustava
● Općenito:
– Vrijeme izvođenja pozadinskog zadatka
t = e / (1 – p)
● gdje je e vrijeme koje bi trebalo zadatku da se obavi kad ne bi
bio pozadinski
● a p postotak vremena u kojem procesor obavlja sve prednje
zadatke
20. Primjer pozadinskog zadatka: Watchdog
void task_1(void)
{
while(1){
wdt_1=0;
...
wait();
}
}
void task_n(void)
{
while(1){
wdt_n=0;
...
wait();
}
}
void main(void)
{
for(;;){
wdt_1++; ... wdt_n++;
if(wdt_1>10)
reset_system();
...
else if(wdt_n>500)
reset_system();
}
}
Prednji zadaci: pozivanje
zadataka se vrši iz
vremenske prekidne rutine.
Pri svakom pozivanju zadatka se
resetira brojač. Brojač koji nije
resetiran unutar određenog
vremenskog razdoblja označava
grešku u sustavu, te se sustav
resetira.
21. Operacijski sustav za rad u stvarnom vremenu (RTOS)
● Prednji/pozadinski sustav je dobar za specijaliziranu sklopovski
izvedbu, no potpuni operacijski sustav ima i dodatne mogućnosti:
podrška za mrežne komunikacijske protokole, dodatni sklopovi su
podržani kroz sustav pokretača (drivera), podržani su sustavi za lako
uočavanje i ispravljanje grešaka (debugging)
● Takvi sustavi imaju različite kompleksne algoritme za usklađivanje
zadataka unutar okvira opisanih u prijašnjim primjerima
– Npr. Kako ostvariti preemptive prioritete ili važnost pojedinih zadataka u
kooperativnom multitaskingu
● Popularni RTOS sustavi su:
– QNX
– VxWorks
– Real-Time Unix
– Real-Time Linux
– ....
22. RTOS
Real-Time kernel daje podršku za
A. Rad s prekidima
B. Rad s raspoređivanjem zadataka (kooperativni multitasking +
preemptive priority)
C. Komunikacija i sinkronizacija između zadataka
D. Rad sa sustavom koji mjeri vrijeme
E. Upravljanje memorijom
F. Podrška za ulazno izlazne jedinice (korištenje pokretačkih
(driver) programa)
G. Brzo prikupljanje podataka s U/I jedinica
H. Korisnička kontrola sistemskih resursa
I. Rad s greškama i iznimkama
Real-time OS mora podržavati stvaranje, brisanje i
raspoređivanja više zadataka istovremeno
Real-time OS mora moći obraditi svaki događaj na strogo
determinirani način (poznat način i vrijeme obrade)
Real-time OS mora podržavati pouzdanu i brzu
komunikaciju između procesa kroz poznate procese,
poput prosljeđivanja poruka, djeljene memorije i
semafora.
Real-time OS mora moći obraditi vrlo velike količine
podataka u kratkom vremenu
23. RTOS sustavi raspoređivanja zadataka
● Zadatak-kontrola blok način rada
– Eng. Task-Control Block Mode
– Svaki stvoreni zadatak je u jednom od 4 stanja:
1)Izvodi se (Executing)
● samo jedan zadatak u bilo kojem trenutku može biti u ovom stanju
2)Pripravan (Ready)
● Zadatak je spreman za izvođenje, ali nije trenutno aktivan
● Ovdje je ako je pripremljen (preemptive) ili ako je njegovo vrijeme
za rad isteklo
3)Suspendiran ili blokiran (Suspended / Blocked)
● Trenutno je neaktivan i čeka da ga netko pozove ili čeka na neki
resurs koji je trenutno zauzet
4) Spava ( Dormant / Sleep)
● Zadatak nije uvijek dostupan OS-u (npr. možda je spreman za
brisanje)
26. Za one koji žele znati više
● http://www.zemris.fer.hr/~leonardo/
– Real-Time Systems (SzRuSV),
– Operating Systems for Embedded Computers (OszUR)
● http://www.mouloudrahmani.com/ElectricalEngineering/Embedd
● http://web.mit.edu/16.070/www/year2001/RTOS27.pdf
● http://web.mit.edu/16.070/www/year2001/RTOS28.pdf