Ilovepdf Merged

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 238

Sistemi za rad u realnom

vremenu

Predmetni profesor : prof. dr. Marko Tanasković


Predmetni asistent : Uroš Dragović
E-mail: mtanaskovic@singidunum.ac.rs
Operativni sistem - definicija

• Operativni sistem (OS) je skup računarskih programa koji


upravljaju hardverskim i softverskim resursima računara i
obezbeđuju interfejs ka korisniku

• Osigurava pravilno korišćenje hardvera, softvera i podataka

• Podloga svim ostalim programima koji se izvršavaju na


računaru i olakšava njhovo izvođenje
Operativni sistem - definicija

• OS ima zadatak da hardver


učini dostupnim i udobnim za
korišćenje od strane korisnika

- Omogućava izvršavanje
korisničkih programa

- Korišćenje računarskog sistema


čini podesnim za korisnika

- Omogućava efikasno iskorišćenje


računarskog hardvera
Delovi operativnog sistema
• Operativni sistem čine:

- Jezgro (kernel) program koji obavlja osnovne funkcije OS i


uvek se nalazi u memoriji

- Skup uslužnih sistemskih programa

- Školjka (shell) komandni ili grafički korisnički interfejs (GUI)


prema funkcijama OS

- Skup uslužnih aplikativnih programa

- Programi za internet usluge


Uloga operativnog sistema

• OS je bafer (posrednik) između hardvera i aplikativnog


softvera

• Olakšava pisanje aplikativnih programa jer maskira hardver


kreirajući virtuelnu mašinu
Struktura operativnog sistema
• Hijerarhijski (slojeviti ili onion) model OS

Hardver

Upravljanje procesorom

Raspoređivanje zadataka

Upravljanje memorijom

Kreiranje zadataka

I/O manadžment

Upravljanje fajlovima

Korisnički interfejs
Struktura operativnog sistema
• Hijerarhijski (slojeviti ili onion) model OS

• Svaka ljuštura predstavlja jedan nivo OS

• Na određenom nivou operativnog


sistema mogu se zahtevati usluge
samo od nižih nivoa, a ne i od
viših
Karamteristike operativnog sistema

• Paralelizam (Concurrency)

• Zajedničko korišćenje / deljenje resursa (Sharing)

• Pouzdanost (Reliability)

• Sigurnost (Security)

• Upotrebljivost (Usability)

• Modularnost (Modularity)
Paralelizam (Concurrency)

• Istovremeno izvršavanje više programskih zadataka

• U svakom trenutku jedan procesor može da izvršava jedan


zadatak.

• Pravi paralelizam kod sistema sa više procesora

• Kvaziparalelizam kod sistema sa jednim procesorom:


- Više zadataka se nalazi u redu čekanja za izvršenje i njima
se procesor dodeljuje naizmenično – sa stanovišta
korisnika izvršavanje je paralelno
Zajedničko korišćenje / deljenje resursa
(Sharing)
• Deljenje resursa je direktna posledica paralelnosti (bilo
stvarne ili kvaziparalelnosti)

• Uređaji mogu biti

- deljivi (sharable) kao npr. operativna memorija jer je mogu


koristiti više zadataka istovremeno
- nedeljivi (nonsharable) kao npr. disk, jer disku može da
pristupa samo jedan zadatak u jednom trenutku. Kada je
zadatak prekinut disku može pristupiti drugi aktivni zadatak
- monopolski (dedicated) koji su nedeljivi ali između
uzastopnih pristupa nije moguće da im pristupaju drugi
zadaci, npr. štampač.
Pouzdanost (Reliability)

• Pouzdanost OS se meri učestanošću grešaka i zastoja

• Ne zavisi samo od OS, već i od spoljnih događaja kao što su:


režim korišćenja, konfiguracija sistema, zahtevi korisnika i
slično

• Kod operativnih sistema za rad u realnom vremenu


pouzdanost je naročito važna

• Često se postiže redundansom – uvođenjem dodatnih


rezervnih softverskih i hardverskih komponenti
Sigurnost (Security)

• Sigurnost je osobina koja omogućava OS da zaštiti pojedine


delove računarskog sistema od neovlašćenog pristupa

• Najčešće je reč o zaštiti podataka i programa

• OS mora da bude u stanju i da zaštiti sebe od ostalih


programa u sistemu
Upotrebljivost (Usability)

• Osobina koja omogućava što jednostavnije korišćenje funkcija


OS

• Komunikacija između OS i korisnika mora biti jednostavna

• OS bi trebalo da podržava različite režime rada koji su od


interesa, mogućnost izvršenja više programa kao i različite
mogućnosti pristupa
Modularnost (Modularity)

• Osobina koja ukazuje da je OS dizajniram modularno

• Olakšava modifikacije i promene OS od strane proizvođača

• Samim tim olakšan je i razvoj OS i njegovo stalno


unapređenje
Funkcije operativnog sistema
• Upravljanje osnovnim resursima računarskog sistema:

• Interpretiranje i izvođenje kontrolno upravljačkih komandi i


programa

• Upravljanje zadacima

• Upravljanje sekundarnom memorijom

• Zaštita

• Podrška rada u mreži


Upravljanje osnovnim resursima
računarskog sistema
• Upravljanje procesorima

• Upravljanje operativnom memorijom

• Upravljanje perifernim uređajima

• Upravljanje podacima
Upravljanje procesorima

• Kojem zadatku dodeliti procesor ?

• Koliko dugo neki zadatak može držati procesor ?

• Koliko zadataka maksimalno može istovremeno konkurisati za


procesor ?
Upravljanje memorijom

• Podrazumeva sledeće funkcije:

- Realizacija određene strategije dodele memorije (statička i


dinamička dodela memorije)

- Dodeljivanje memorije

- Sprovođenje strategije za oslobađanje memorije


Upravljanje perifernim uređajima

• Regulacija rada I/O uređaja

• Ukoliko su I/O operacije sporije od procesora, moraju se


izolovati

• Ovo se postiže uz pomoć kanala i prekida

• Direct Memory Access (DMA) omogućava čitanje i pisanje


vrednosti sa I/O uređaja u RAM nezavisno od procesora –
ove vrednosti procesor menja i koristi po potrebi
Vrste operativnih sistema

Komercijalni Open source


Osnoni pojmovi i koncept OS

• Sistemski pozivi (system calls)

• Komandni interpreter (shell)

• Programski zadaci koji čekaju izvršenje (procesi)

• Fajl sistem (file system)

• Jezgro OS (kernel, nucleus, core)


Sistemski pozivi (system calls)

• Aplikativni programi komuniciraju sa OS preko sistemskih


poziva

• Sistemski pozivi se realizuju pomoću prekida:

- Aplikativni program postavlja parametre sistemskog poziva u


odgovarajuće memorijske lokacije i registre
- Aplikativni program inicira prekid
- OS preuzima kontrolu i na bazi parametara izvršava operaciju
- OS u odgovarajuće memorijske lokacije upisuje rezultate
- Kontrola se vraća aplikativnom softveru
Sistemski pozivi (system calls)

• Procesor često razlikuje dva režima rada:

1. Korisnički režim (user mode)


2. Sistemski režim (supervision mode)

• Korisnički programi mogu raditi samo u korisničkom režimu

• Ukoliko aplikativni program pokuša da izvrši operaciju koja je


dozvoljena u sistemskom režimu rada, kontrola se automatski
predaje OS. Po izvršenju komande kontrola se vraća
aplikativnom programu
Komandni interpreter (shell)

• Interpretira komande korisnika i izvršava ih uz pomoć


sistemskih poziva

• Deo OS koji je vidljiv za korisnika i predstavlja kanal


komunikacije između korisnika i OS

• Primer – Windows radno okruženje sa prozorima i komande u


komandnoj liniji
Programski zadaci koji čekaju izvršenje
(Procesi)
• Proces je programski zadatak koji se nalazi u redu čekanja na
izvršenje

• Moguća stanja procesa:

- Zadatak se izvršava (running) – procesor upravo izvršava


zadatak
- Zadatak je spreman ali se ne izvršava (ready) – zadatak je
uredu čekanja i svi resursi koji su mu potrebni su slobodni, ali
čeka jer procesor izvršava neki drugi zadatak
- Zadatak je blokiran (waiting) zadatak čeka da se oslobodi
neki resurs koji mu je potreban ili je blokiran zbog deljene
promenljive ili uslovne sinhronizacije
Programski zadaci koji čekaju izvršenje
(Procesi)
Programski zadaci koji čekaju izvršenje
(Procesi)
• Proces takođe može biti i privremeno suspendovan od strane
OS-a
Process Control Block

• PCB sadrži sve informacije neophodne za početak


izvršavanja nekog programskog zadatka:

- Jedninstveni identifikator procesa (process ID)


- Stanje procesa (da li je Ready, Running ili Waiting)
- Prioritet procesa
- Adresu memorije gde se nalazi proces
- Adresu zauzetih resursa
- Sadržaj registara procesora
Upravljanje procesima

• OS treba da omogući sledeće operacije sa procesima:

- Kreiranje novog procesa (stavljanje programskog zadatka u


red čekanja)
- Uništavanje procesa (brisanje programskog zadatka iz reda
čekanja)
- Promenu stanja procesa
- Promenu prioriteta procesa
- Dodelu procesora procesu (izbor procesa koji treba da se
izvršava – raspoređivanje)
- Sinhronizacija između procesa
- Komunikacija između procesa
Fajl sistem
• OS obezbeđuje apstraktni prikaz fajlova kroz fajl sistem

• OS obično za rad sa fajlovima obezbeđuje sledeće operacije:

- Otvaranje i zatvaranje fajlova


- Promenu pozicije pokazivača fajla
- Čitanje iz fajlova
- Pisanje u fajlove
- Kreiranje novih fajlova
- Brisanje postojećih fajlova
- Preimenovanje, kopiranje i slične operacije
Jezgro (kernel core)
• Jezgro je najvažniji deo OS-a, koji obavlja sledeće operacije

- Upravljanje prekidima
- Kreiranje i uništavanje procesa
- Dodela procesora različitim procesima
- Suspenzija i nastavljanje procesa
- Komunikacija između procesa
- Podrška za I/O
- Upravljanje memorijom
- Upravljanje fajl sistemom
Jezgro (kernel core)
• U slojevitom modelu jezgro je najbliže hardveru i obezbeđuje
vezu između hardvera i ostalih slojeva OS-a

Jezgro
Jezgro (kernel core)
• Jezgro omogućava programima da na siguran način pristupe
hardveru

• Moguće je programe izvršavati i bez jezgra, ali to zahtea


programiranje na mašinskom jeziku
• Jezgro vrši apstrakciju hardvera
Hardverske komponente neophodne za
rad jezgra
• Mehanizam prekida – mogućnost generisanja softverskih i
hardverskih prekida

• Zaštitni mehanizam adresiranja memorije – onemogućava


da jedan proces upisuje podatke u deo memorije koji je
dodeljen nekom drugom procesu

• Skup privilegovanih instrukcija – mora postojati set


instrukcija koje će biti dostupne samo OS, ali ne i aplikativnim
programima

• Časovnik realnog vremena – mora postojati mogućnost da


se meri vreme izvršavanja procesa i iskorišćenosti resursa
Delovi jezgra

• Raspoređivač (scheduler)
Vrši raspoređivanje programskih zadataka, odnosno određuje
u kom trenutku će procesor biti dodeljen kom procesu

• Rutine za ostvarivanje komunikacije među zadacima


Omogućavaju komunikaciju među zadacima preko
mehanizama kao što su deljene promenljive i uslovna
sinhronizacija

• Prvi nivo obrade prekida


Vrši određivanje izvora i iniciranje servisne rutine, odnosno
funkcije za obradu prekida
Dizajn jezgra

• Monolitno jezgro
Sav kod je lociran u istom adresnom prostoru. Pod nekim
uslovima ova jezgra su veoma efikasna ali im je mana jaka
međusobna zavisnost – npr. greška u drajveru može da sruši
ceo sistem

• Mikrojezgro
Koje treba da bude minimalno, pouzdano i da ima visoke
performanse. Sve ostale funkcije jezgra su potisnute u tzv.
korisnički prostor. Prednost ovakve arhitekture je modularnost
i lakoća proširenja osnovnog jezgra
Zadaci jezgra

• Upravljanje resursima

- Upravljanje memorijom
- Upravljanje periferijama

• Upravljanje programskim zadacima


Upravljanje memorijom

• Jezgro dozvoljava bezbedan pristup programskoj memoriji

• Virtuelno adresiranje – fizičkim memorijskim adresama


dodeljuju se nove virtuelne adrese

• Različiti programski zadaci mogu imati iste virtuelne, a


različite fizičke adrese – sprečava se da više zadataka
pristupa fizički istim memorijskim lokacijama
Upravljanje periferijama

• Svaki periferni uređaj ima svoj drajver koji se koristi za


njegovo upravljanje

• Programski zadaci ne mogu direktno pozivati drajvere već se


to radi posredno uz pomoć kernela

• Kernel vodi evidenciju (poseduje listu) svih perifernih uređaja


koji su mu na raspolaganju

• Lista perifernih uređaja kreira se uz pomoć skeniranja


različitih hardverskih magistrala
Upravljanje programskim zadacima

• Kernel obavlja funkcije raspoređivanja programskih zadataka

• Kernel kontroliše i komunikaciju između programskih


zadataka

• Dodela procesora različitim zadacima realizovana je uz


pomoć konačnog automata

• Svaki zadatak u redu čekanja na izvršenje moze biti u 5


stanja
Konačni automat procesa dodele
procesora programskim zadacima

Ready – Run: Zadatak je došao na početak reda čekanja i svi resursi potrebni za
njegovo izvršenje su slobodni

Run – Ready: U redu čekanja se pojavio neki zadatak sa većim stepenom


prioriteta kome treba da se dodeli procesor
Konačni automat procesa dodele
procesora programskim zadacima

Run – Wait: Neki od resursa potrebnih za izvršavanje zadatka više nije slobodan i
zadatak mora da čeka na njegovo oslobađanje

Wait – Ready: Resurs na koji je zadatak čekao je oslobođen


Konačni automat procesa dodele
procesora programskim zadacima

Start – Ready: Po aktiviranju programskog zadatka, zadatak se stavlja u red


čekanja

Run – Stop: Zadatak je potpuno izvršen i treba da se briše iz reda čekanja


Suspendovanje zadataka

• Zadaci koji su u stanju Ready i Wait mogu biti suspendovani


od strane OS
Suspendovanje zadataka

Ready – Suspended Ready: Postoji previše zadataka u redu čekanja ili se mora
izbeći zastoj ili korisnik eksplicitno suspenduje zadatak

Suspended Ready – Ready: Razlozi za suspenziju zadatka više ne važe


Suspendovanje zadataka

Wait – Suspended Wait: Postoji previše zadataka u redu čekanja ili se mora izbeći
zastoj ili korisnik eksplicitno suspenduje zadatak, a zadatak čeka da se oslobodi
resurs koji mu je potreban

Suspended Wait – Wait: Razlozi za suspenziju zadatka više ne važe, ali resurs još
uvek nije oslobođen
Suspendovanje zadataka

Suspended Wait – Suspended Ready: Resurs na koji je zadatak čekao je


oslobođen, ali razlozi za suspenziju zadatka još uvek važe
Pokretanje operativnog sistema

1. Računar se uključuje

2. Inicijalizuje se POST sekvenca (Power ON Self Test) –


provera osnovnih hardverskih delova računara

3. BIOS (Basic Input Output System) dobija punu kontrolu nad


hardverom sa ciljem pokretanja OS

4. BIOS pretražuje memorijske uređaje kako bi učitao image


veličine 512 bajta

5. BIOS učitava image kod u memoriju i izvršava ga


Bootloader

• Čitav kernel je gotovo uvek veći od 512 bajta

• Izvršenje image koda pokreće bootloader koji učitava jezgro i


prepušta mu komandu

• Pored učitavanja jezgra, bootloader izvršava i niz drugih


inicijalizacija potrebnih za pokretanje OS
Sistemi za rad u realnom
vremenu

Predmetni profesor : prof. dr. Marko Tanasković


Predmetni asistent : Uroš Dragović
E-mail: mtanaskovic@singidunum.ac.rs
Operativni sistemi za rad u realnom
vremenu (RTOS)

• Operativni sistem specijalno namenjeni sistemima za rad u


realnom vremenu

• Treba da sakrije složenost hardvera od korisnika – privid


virtuelne mašine, nezavisne od konkretne hardverske
platforme

• Korišćenjem RTOS inžinjeri razvoja se oslobađaju


implementacionih detalja niskog nivoa i mogu da se posvete
programiranju na višem nivou
Prednosti korišćenja RTOS

• Smanjuje se vreme razvoja

• Povećava se pouzdanost sistema (smanjuje se verovatnoća


programerske greške pri programiranju mehanizama niskog
nivoa)

• Olakšana prenosivost (program se lako može preneti na


drugu hardversku platformu)
Operativni sistemi za rad u realnom
vremenu (poređenje)
Atributi RTOS Klasičan OS
Virtualna memorija Nema Ima
Aplikativni programi Za posebnu namenu Opšte namene
Raspoređivanje Po prioritetu Fer
Upravljanje I/O Od strane aplikativnih Od strane drajvera
programa
Razmena velikog Koriste se pokazivači Koriste se sistemska
broja podataka među zbog brzine rešenja
zadacima
Alokacija resursa Statička Dinamička
Fajl sistem na disku Nema ili ima ali Ima
ograničen
Funkcije RTOS

• Upravljanje izvršavanjem zadataka

• Komunikacija i sinhronizacija među zadacima

• Upravljanje memorijom

• Upravljanje ulazima i izlazima

• Tolerancija otkaza
Izazovi za RTOS

• Pri stavljanju programskog zadatka u red za čekanje,


potrebno je korišćenje memorije bez odlaganja. To predstavlja
problem jer memorija mora biti inicijalizovana i veliki broj
podataka mora biti kopiran

• Memorijski blokovi za kritične programske zadatke moraju biti


u glavnoj memoriji da bi se izbegla kašnjenja pri upravljanju
memorijom
Izazovi za RTOS

• Kašnjenje obrade prekida – vreme koje protekne od podizanja


prekida do izvršenja ISR treba da bude što kraće

• Često postoji potreba da se samo pojedinačni prekidi dozvole


ili ne (pojedinačno maskiranje prekida)

• Različiti prioriteti prekida i mogućnost ugnježdenja ISR-ova

• Deljene prekida – može se zahtevati da više spoljnih uređaja


koristi isti kanal prekida
Upravljanje izvršavanjem zadataka

• RTOS treba da omogući preemptive dinamičko


raspoređivanje

• Sve radnje vezane za algoritam raspoređivanja i promene


stanja programskog zadatka koji koristi procesor prepuštene
su RTOS
Komunikacija i sinhronizacija među
zadacima
• RTOS sprovodi algoritam međusobnog isključenja

• Deljene promenljive se štite uz pomoć semafora ili monitora

• Uslovna sinhronizacija se ostvaruje iz pomoć semafora,


monitora i sličnih algoritama
Upravljanje memorijom
• Praćenje upotrebe memorije
- Identifikacija programa u memoriji
- Količinu memorije koji svaki program zauzima
- Preostali slobodan memorijski prostor
- Sprečava programe da pišu i čitaju van
memorijskih mesta koja su im dodeljena

• Prati red programa koji čekaju na izvršenje

• Dodeljuje memoriju programima koji sledeći treba da se izvrše

• Delocira memoriju dodeljenu programima po njihovom


izvršenju
Hijararhija skladištenja

Glavna memorija
• Cache na čipu (interni cache)
• Externa cache memorija
• RAM • Smanjuje se vreme
pristupa

Sekundarna Memorija • Smanjuje se kapacitet


• Hard disk • Povećava se cena

Tercijarna Memorija
• CD ROM
• Flash drive
Logičke i fizičke adrese

• Koncept logičkog adresnog prostora koji je povezan sa


posebnim fizičkim adresnim prostorom ključni je koncept u
upravljanju memorijom

• Logičke (virtuelne) adrese – generisane od strane programa

• Fizičke adrese – adrese u memorijskoj jedinici

• Logičke i fizičke adrese su iste u compile i load šemama


povezivanja adresa, a različite u execution šemama
povezuvanja adresa
Upravljanje memorijom - terminologija

• Apsolutni kod, smešten u tačno definisanom adresnom


prostoru

• Relocatable kod, može biti smešten bilo gde u fizičkoj


memoriji.

• Binding (povezivanje)
Program mora biti smešten negde u fizičkoj memoriji. Način
određivanja fizičke memorijske lokacije u koju je smešten
program:
– Mapiranjem logičkih u fizičke adrese.
– Ovo povezivanje adresa se najčešće odvija pri
kompajliranju programa
– Ukoliko se unapred zna gde će program biti smešten,
kompajler kreira apsolutni kod, u suprotnom kreira se
relocatable kod
Upravljanje memorijom - terminologija

• U toku učitavanja programa relocatable kod se povezuje sa


fizičkim adresama – pronalazi se najbolja fizička adresa za
dati kod

• Pri izvršenju programa virtuelna memorijska lokacija koda


može se menjati – fleksibilno virtuelno mapiranje
Povezivanje logigkih i fizičkih adresa

Povezivanje:

Kompajler:
Pretvara simboličke adrese u relocatable kod

Loader:
Povezuje relocatable kod sa fizičkom memorijom

U toku izvršavanja:
Memorijska lokacija koda može se menjati
Jednostavno upravljanje memorijom

• Koristi bare machine (direktno se koristi mašina)

• Nema zaštite, nema overheda

• Logičke adrese su identične fizičkim

• Korisnik, a ne OS ima kompletnu kontrolu nad memorijom

• Koristi se pri dijagnostici hardvera, pri podizanju sistema kao i


kod nekih ugrađenih i sistema za rad u realnom vremenu
Particija memorijskog prostora

• Podela fizičke memorije na regione fiksne veličine –


omogućava adresnom prostoru da bude jedinstven (svaki
zadatak, program ili korisnik koristi svoju particiju i ne može
doći do konflikta)

• Broj particija određuje broj paralelnih programskih


zadataka koji se mogu istovremeno izvršavati. Svakom
zadatku koji uđe u red čekanja dodeljuje se jedna
particija
Fiksna particija memorije
F F F
r r r
a a a
OS Proces 1 g Proces 2 g Proces 3 g
m m m
e e e
n n n
t t t

Particija 1 Particija 2 Particija 3

• Brojevi i veličine particija (koje mogu biti jednake ili


nejednake) postavlja operater pri pokretanju sistema na bazi
statistike rada programa

• Zastareo koncept
Dinamička particija memorije
• Particije se kreiraju pri učitavanju programa

OS
Memorija po pokretanju sistema
OS Proces 1 Proces 2 Proces 3
Procesi 1, 2 i 3 ulaze u red čekanja
OS Proces 1 Proces 3
Proces 2 se izvršio
OS Proces 1 Proces 3 Proces 4
Proces 4 (koji zauzima više memorije) stiže u red čekanja –
proces 3 je realociran
Mogući problemi sa dinamičkom
particijom
• Fragmentacija se javlja usled kreiranja i uništenja segmenata
pri učitavanju programa

• Fragmentacija se eliminiše relokacijom

• Relokacija mora biti brza da bi eliminisala dodatni overhead

• Alokaciju slobodne memorije vrši placement algoritam


Praćenje nekorišćene memorije

• Mape bitova – memorija je podeljena na manje alokacijske


jedinice fiksne veličine. Mapa bitova sa 0 za slobodnu jedinicu
i 1 za dodeljenu jedinicu daje sliku upotrebljene i slobodne
memorije

Memorijske alokacione jedinice: tamne – dodeljene,


svetle - slobodne

1 1 0 1 0 1 0 0 1 1 0 1 0 1
Mapa bitova za parče memorije iznad
Praćenje nekorišćene memorije

• Povezane liste dodeljenih i slobodnih segmenata memorije

1 2 3 4 5 6 7 8 9 10 11 12 13 14

Memorijske alokacione jedinice: tamne – dodeljene,


svetle - slobodne

F 1 5 U 6 3 F 9 2 U 11 4

Povezana lista memorijske mape


Alokacija jedne particije

Granični Registar
Registar Realokacije

Da
CPU < +
Logička Fizička
adresa Ne adresa Memorija
Susedska alokacija memorije
• Memorija se dodeljuje tako da se popune rupe nastale
oslobađanjem delova memorije

• OS vodi tabelu ovakve memorije – dodela memorije na bazi


ove tabele

OS OS OS

Proces 1 Proces 1 Proces 1

Proces 2 Završava se Aktivira se Proces 4


proces 2 proces 4
Proces 3 Proces 3 Proces 3
Susedska alokacija memorije

• Frst fit – alocira se prva rupa koja je dovoljno velika


• Best fit – alocira se najmanja rupa koja je dovoljno velika
• Worst fit – alocira se najveća rupa

• Eksterna fragmentacija – postoji veliki broj malih delova


memorije koji su slobodni

• Interna fragmentacija – kada se memorija dodeljuje sa


nekom fiksnom veličinom (npr. Stepen broja 2), a program
kome je dodeljena ne koristi svu dodeljenu memoriju

• Algoritam alokacije treba da izbegne internu i eksternu


fragmentaciju
Kompaktiranje memorije

• Reorganizacija slobodne memorije u jedan veći blok

• Moguće samo ako je dozvoljena dinamička realokacija


memorije

OS OS

P1
P1
P2

P3

P2

P3
Paging

• Logički adresni prostor nekog procesa može biti nesusedan


(nepovezan)

• Procesu se dodeljuje fizička memorija kada god je ona


slobodna i kada je potrebna procesu

• Fizička memorija se deli na blokove fiksne veličine koji se


zovu frejmovi (veličina je stepen broja 2 od 512 do 8191
bajta)

• Logička memorija deli se u blokove iste veličine koji se zovu


stranice (pages)
Paging

• Vodi se evidencija o svim slobodnim frejmovima

• Da bi se izvršio program veličine n strana, potrebno je naći n


slobodnih frejmova i učitati program

• Za prevođenje logičkih u fizičke adrese koristi se tabela strana

• Paging eliminiše fragmentaciju i potrebu za kompaktiranjem


memorije
Paging – sistem prevođenja adresa

• Adresa koja se generiše od strane procesora deli se na:

- Broj strane (p), koji se koristi kao indeks i tabeli strana koja
sadrži osnovne adrese svake strane u fizičkoj memoriji

- Ofset strane (d), koji kombinovan sa osnovnom adresom


strane definiše fizičku memorijsku adresu

p d
Paging – sistem prevođenja adresa

Logičk Fizička
adresa adresa
Fizička
memorija

Tabela
stranica
Paging – sistem prevođenja adresa

• Ukoliko je adresni prostor jako veliki, mogu se koristiti tabele


strana sa više nivoa

Logička
adresa

Spoljna
tabela
Strana sa
strana
tabelom
strana
Virtuelna memorija

• Sve logičke adrese zajedno čine virtuelnu memoriju

• Virtuelna memorija je koncept – ne postoji fizički

• Veličina virtuelne memoriji nije ograničena

• Često je virtuelna memorija veća od fizičke memorije

• Virtuelne adrese vezane za jedan programski zadatak


mapiraju se u fizičku memoriju tek kada taj programski
zadatak dospe u red čekanja za izvršenje
Virtuelna memorija

• Kada programski zadatak dospe u listu čekanja za izvršenje,


strane iz virtuelme memorije mapiraju se u fizičku memoriju
prema već objašnjenoj proceduri prevođenja

• Za ovo mapiranje zaduženi su i softver i hardver

• Kada programski zadatak dospe u listu čekanja, samo se prva


(glavna) stranica učitava. Ostale stranice se učitavaju po
potrebi
Detaljni izgled tabele stranica

Tabela stranica Element u tabeli stranica


0 Broj frejma
1
2
3 Zaštita strane
4
5 Referentni bit
6
7 Modifikacioni bit
8
Validacioni bit
Detaljni izgled tabele stranica

• Validacioni bit se setuje kada je stranica u memoriji

• Referentni bit se setuje od strane hardvera kad god je


stranica referencirana

• Modifikacioni bit se setuje kad god se stranica menja


(modifikuje)

• Zaštita strane služi za podešavanje pristupnih prava datoj


stranici kao što su ograničenja pri pisanju ili čitanju
Mapiranje stranica u fizičku memoriju

• U toku izvršenja programa, svako referenciranje neke strane


vrši se uz pomoć tabele strana

• Ako je validacioni bit setovan (stranica je već u memoriji),


izvršavanje se nastavlja

• Ukoliko stranica nije u memoriji, javlja se greška stranice


(page fault) koja podiže prekid kojim se stranica dovodi u
memoriju

• Ukoliko je memorija puna, stranica se unosi u memoriju preko


nekih drugih stranica koje su već u memoriji uz pomoć
algoritma za zamenu stranica
Potencijalni problemi sa pagingom

• Memorija može sadržati delove programa koji se ne koriste u


toku izvršavanja
- Sadržaj virtuelne memorije se učitava po potrebi

• Veličina programskih zadataka je ograničena veličinom


memorije
- Programski zadaci mogu biti veći od fizičke memorije

• Program ne zauzima susedne lokacije u fizičkoj memoriji


(virtuelne strane su razbacane svuda u memoriji)

• Sve ovo može značiti previše veliki overhead za stroge


sisteme za rad u realnom vremenu
Segmentacija

• Stranice su fiksne veličine, segmenti su promenljive veličine

• Segment može biti logički entitet kao što su:


- glavni program
- neke funkcije u programu
- podaci u programu
- fajl
Segmentacija

• Adresiranje sada ima oblik:


- Broj segmenta (s), koji se koristi kao indeks u tabeli
segmenata
- Ofset u okviru segmenta (d), koji kombinovan sa osnovnom
adresom segmenta definiše fizičku memorijsku adresu

• Tabela segmenata sadrži jedan element za svaki segment, a


svaki element sadrži:
- Broj segmenta
- Fizičku adresu u memoriji od koje segment počinje
- Dužinu segmenta
Segmentacija sa pagingom

• Segmentacija u virtuelnoj memoriji, paging u fizičkoj memoriji


• Segment se sastoji od stranica
• Adresa ima tri komponente

Segment Strana Ofset u okviru strane

• Fizička memorija sadrži samo zahtevane stranice segmenta,


a ne čitav segment
Adresiranje u segmentaciji sa pagingom

Segment Strana Ofset u okviru strane

Tabela segmenata Tabele strana Strane


Sistem ulaza i izlaza

• Upravljanje ulazima i izlazima je važan deo funkcije


operativnog sistema

• Kod sistema za rad u realnom vremenu, a posebno kod


ugrađenih sistema ovo postaje izuzetno važno, jer oni stalno
komuniciraju sa okolinom

• Korišćenje OS značajno olakšava komunikaciju sa različitim


tipovima I/O uređaja
Klasifikacija ulaza i izlaza

• Blokovski uređaji
– Informacije se nalaze u blokovima fiksne veličine
– Komunikacija sa I/O realizovana je kroz čitanje/pisanje
blokova
– Hard disks, CD rom spadaju u ovu kategoriju

• Znakovni uređaji
– Komunikacija sa I/O realizovana je kroz pojedinačne
karaktere (znakove) i nema njihovog grupisanja u blokove
– Terminali, štampači, miš, džojstik spadaju u ovu kategoriju
Tehnike komunikacije sa ulazima i
izlazima

• Programirani ulazi i izlazi

• Ulazi i izlazi vođeni prekidom

• Direct memory access (DMA)


Programirani ulazi i izlazi

• Procesor u ime nekog programskog zadatka izdaje I/O


komandu odgovarajućem I/O modulu

• Programski zadatak se onda nalazi u stanju čekanja da bi se


operacija čitanja ili pisanja završila pre nego što se nastavi sa
izvršavanjem tog programskog zadatka
Ulazi i izlazi vođeni prekidom
• Procesor izdaje I/O naredbu u ime programskog zadatka

• Programski zadatak se suspenduje i počinje komunikacija sa


I/O

• U međuvremenu procesor može da izvršava neki drugi


programski zadatak

• Kontroler čita podatke sa uređaja serijski u svoj interni bafer

• Kada je komunikacija sa I/O uređajem završena, diže se


prekid kako bi procesor o tome bio obavešten

• OS učitava interni bafer kontrolera u odgovarajuću


memorijsku lokaciju
Direct memory access (DMA)

• DMA modul kontroliše razmenu između glavne memorije i I/O


uređaja

• Procesor šalje zahtev za transferom bloka podataka u DMA


modul i nastavlja sa svojim dotadašnjim poslom

• DMA prekida procesor kada je kompletan transfer podataka


završen

• Kada OS preuzme kontrolu nema potrebe za kopiranjem bilo


čega u memoriju, sadržaj je već tu gde treba da bude
Direct memory access (DMA)

• DMA modul ima sposobnost da direktno prebacuje podatke iz


memorije na I/O uređaj i obrnuto

• DMA modul onemogućava procesor da koristi bus sve dok


DMA ne završi svoj posao (ovo se zove Cycle Stealing)

• Obično DMA ima manji broj prekida nego komunikacija sa I/O


preko prekida, jer ne zahteva prekid posle svakog karaktera
kada uređaj nema svoj interni bafer
Direct memory access (DMA)
Sistemi za rad u realnom
vremenu

Predmetni profesor : prof. dr. Marko Tanasković


E-mail: mtanaskovic@singidunum.ac.rs
Fajl sistem

• Kolekcija algoritama i struktura podataka koji vrše prevođenje


logičkih operacija nad fajlovima (koje su implementirane uz
pomoć sistemskih poziva) u stvarno, fizičko skladištenje
informacija
Uloga fajl sistema

• Obezbeđuje skladištenje i manipulaciju podacima

• Garantuje konzistentnost podataka i manipulacija

• Eliminiše gubljenje (uništenje)

• Podržava veliki broj I/O uređaja

• Daje podršku za standardni korisnički interfejs

• Podržava rad većeg broja korisnika


Zahtevi korisnika od fajl sistema

• Pristup fajlovima korišćenjem simboličkog imena

• Mogućnost da kreiraju, brišu i menjaju fajlove

• Kontrolisani pristup sistemu i korisničkim fajlovima

• Mogućnost da se podaci migriraju među različitim fajlovima

• Backup i recovery fajlova


Fajlovi

• Imena fajlova:
- ime – korisnička identifikacija za fajl
- ekstenzija – indikator tipa fajla

Neke tipične ekstenzije


Ekstenzija Značenje
.bak Backup fajl
.c Fajl sa C kodom
.jpg Slika enkodovana u JPEG standardu
.txt Generalni tekst fajl
.mp3 Muzika enkodovana u MP 3 slojnom
standardu
.zip Kompresovana arhiva
Struktura fajlova

• Sekvenca bajtova (UNIX, Windows, DOS)


• Sekvenca blokova (Zastareo koncept)
• Struktura drveta
Fajlovi – tipovi i pristup

• Tipovi fajlova
- Regularni (ASCII, binarni)
- Direktoriji
- Specijalni fajlovi

• Pristup fajlovima
- Sekvencijalni pristup
- Slučajni pristup (pristup bilo kom delu fajla)
Atributi fajlova
Operacije sa fajlovima

• Kreiranje (create)
• Uništenje (delete)
• Otvaranje (open)
• Zatvaranje (close)
• Čitanje (read)
• Pisanje (write)
• Traženje (seek)
• Uzimanje atributa (get attributes)
• Podešavanje atributa (set attributes)
• Preimenovanje
Direktoriji

• Gde skladištiti atribute fajlova


- U direktorijumu (Windows, DOS)
- U posebnu strukturu podataka (UNIX)

• Imena putanja (path name)


- Absolutno ime putanje
- Relativno ime putanje
- Radni (trenutni) direktorij

• Operacije sa direktorijima
- Kreiranje, brisanje, preimenovanje, otvaranje direktorija,
zatvaranje direktorija, čitanje direktorija
Direktoriji i fajlovi
Koreni (Root) Directorij
Disk A /
Linked Branch
d1 f4 d3 Disk B
f1 d2 Radni direktorij d4 d5 d6

f2 f3 f5 f6 f7

• Radni direktorij: d2
• Apsolutna putanja do fajla f2 : /d1/d2/f2
• Relativna putanja do fajla f2 : f2
Fizička organizacija na disku
Sektor
Traka
Cilindar

Glave

• Svaka ploča se sastoji od fizičkih blokova koji se nazivaju


sektori i koji su organizovani u koncentrične trake
• Sektori imaju najmanje 512 bajtova veličine
• Sektori kojima se pristupa bez pomeranja glave formiraju
cilindar
Implementacija fajl sistema

• Susedska alokacija

• Alokacija pomoću povezane liste

• Alokacija pomoću povezane liste uz korišćenje indeksa

• i-čvorovi
Susedska alokacija

• Fajlovi se pohranjuju kao povezani blokovi podataka koji se


alociraju sa kreiranjem fajlova

Susedska alokacija
memorijskog prostora na
disku za 7 fajlova

Stanje posle uklanjanja


fajlova D i F
Susedska alokacija

• Tabela alokacije fajlova (FAT – file allocation table) sadrži ime


fajla, početni memorijski blok i dužinu fajla u memoriji

• Prednosti
- Lako se implementira (dovoljan je početni blok i dužina fajla)
- Brz pristup jer blokovi prate jedan drugi

• Mane
- Fragmentacija
- Potrebna je realokacija (kompaktovanje)
Alokacija pomoću povezane liste

• Fajlovi se pohranjuju kao povezane liste blokova


Alokacija pomoću povezane liste

• Svaki blok sadrži pokazivač na sledeći blok

• FAT (file allocation table) sadrži ime fajla i adresu prvog bloka

• Prednosti
- Eliminiše se fragmentacija

• Mane:
- Pristup bilo kom delu fajla je otežan jer mora da se prati lista
Alokacija pomoću povezane liste uz
korišćenje indeksa

FAT (File Allocation Table)


0 Veličina diska
1 EOF
2 Slobodno
3 5 7 1
3 5
4 Slobodno Blokovi fajla
5 7
6 Slobodno
7 1 Adresa prvog bloka nalazi se u
….. direktoriju
n Free
Alokacija pomoću povezane liste uz
korišćenje indeksa

• Pokazivači svih blokova su u FAT-u i ne zauzimaju prostor u


blokovima gde su pohranjeni delovi fajla

• Pristup pojedinim delovima fajla je brži jer se FAT nalazi u


memoriji

• FAT kod Windows operativnog sistema izgleda ovako


i-čvorovi
FAT (File Allocation Table)
File mode
Number of links
UID
GID
File size
Time created
Time last accessed
Time last modified
10 disk block numbers
Single indirect block
Double indirect block
Triple indirect block

Indirektni blokovi
Blokovi podataka
i-čvorovi

• Različiti nivoi indirektnosti se koriste za fajlove različite


veličine
• Pretpostavimo da je svaki blok 1 KB veličine i da se 4 bajta
koriste kao brojevi blokova
• Svaki indirektni blok sadrži 256 brojeva blokova
• Prvih 10 blokova, fajlovi veličine manje do 10 KB
• Indirektnost prvog nivoa, fajlovi veličine do 256+10 = 266 KB
• Dupla indirektnost, fajlovi veličine do 256*256 +266 = 65802
KB = 64.26 MB
• Trostruka indirektnost, fajlovi veličine do 256*256*256 +
65802= 16843018 KB = ~16 GB
Operativni sistem Linux
Suština i istorija Linuxa

• Linux je open source operativni sistem

• Nastao je 1991 kao lični projekat finskog postdiplomca Linusa


Torvaldsa

• Linux se i dalje razvija uz pomoć tima koga čine entuzijasti, a


koje predvodi Torvalds

• Linux je razvijen pod General Publick Licence što znači da je


potpuno besplatan i njegov izvorni kod je dostupan svima da
ga proučavaju i modifikuju

Izvorni kod Linux jezgra dostupan je na : www.kernel.org


Linux distribucije

• Različiti operativni sistemi bazirani na Linux jezgru

• Mandrake: http://www.mandrakesoft.com/
• RedHat: http://www.redhat.com/
• Fedora: http://fedora.redhat.com/
• SuSE/Novell: http://www.suse.com/
• Debian: http://www.debian.org/

• U osnovi svih ovih operativnih sistema nalazi se Linux jezgro


– naš cilj razumevanje Linux jezgra
Prednosti korišćenja Linuxa

• Portabilnost i hardverska podrška (funkcioniše na gotovo svim


arhitekturama)

• Skalabilnost (funkcioniše na super kompijuterima kao i na


malim uređajima – 4MB rama je dovoljno)

• Poštovanje standarda i laka mogućnost migracije sistema

• Neiscrpna mreža podrške – forumi, dokumentacija, blogovi...


Prednosti korišćenja Linuxa

• Bezbednost – Nemoguće je da se potkrade greška u


izvornom kodu jezgra – kod je javno dostupan i stalno je pod
analizom stručnjaka

• Stabilnost i pouzdanost

• Modularnost – mogućnost da se koristi samo ono što je


potrebno čak i u toku izvršavanja programa

• Lako se programira – može da se uči na postojećem kodu

• Postoji ogroman broj javno dostupnih resursa za učenje i


razvoj
Uloga Linux jezgra

• Upravljanje hardverskim resursima (CPU, memorija, I/O)

• Obezbeđuje nezavisne sabrutine pottrebne korisničkim


programima i bibliotekama da koriste hardverske resurse
(API)

• Omogućava paralelan pristup i korišćenje hardvera od strane


različitih aplikativnih programa
Sistemski pozivi
• Glavni vid interakcije jezgra i korisničkih programa su
sistemski pozivi

• Linux jezgro ima oko 300 sistemskih poziva koji omogućavaju


osnovne usluge jezgra:
operacije sa fajlovima, mrežne operacije, komunikaciju među
procesima, upravljanje procesorom, mapiranje memorije,
tajmere, raspoređivanje, sinhronizaciju i drugo

• Interfejs sistemskih poziva je realizovan uz pomoć wrapper


funkcija u C-u

• Aplikativni programi ne prave direktne sistemske pozive već


koriste odgovarajuće C funkcije
Pseudo fajl sistem

• Linux prenosi informacije o sistemu i jezgru u korisnički


prostor preko pseudo fajl sistema (virtuelnog fajl sistema)
• Pseudo fajl sistem omogućava aplikacijama da vide direktorije
i fajlove koji ne postoje fizički
• Ovi direktoriji i fajlovi kreirani su u toku izvršavanja od strane
jezgra
• Dva najvažnija pseudo fajl sistema su:
• Proc (najčešće u direktoriju /proc) – daje informacije o
operativnom sistemu (procesima, parametrima upravljana
memorijom...)
• Sysfs (najčešće u direktoriju /sys) – daje reprezentaciju
sistema kao seta uređaja i baseva i daje osnovne informacije
o ovim uređajima
Struktura Linux jezgra
Struktura source koda Linux jezgra

• arch/<ARCH>
- Kod vezan za arhitekturue
• arch/<ARCH>/mach-<machine>
- Kod specifičan za mašinu, ploču
• arch/<ARCH>/include/asm,
- Hederi koda vezanog za arhitekturu
• arch/<ARCH>/boot/dts,
- Device Tree source fajlovi za neke arhitekture
• block/
- Blok sloj jezgra
Struktura source koda Linux jezgra

• COPYING
- Kopirajt uslovoi za Linux (GNU dozvola)
• CREDITS
- Lista ljudi zaslužnih za nastanak i razvoj Linuxa
• crypto/
- Kriptografske biblioteke
• Documentation/
- Kompletna dokumentacija Linux jezgra
• drivers/
- Drajveri svih uređaja osim onih za zvuk (usb, pci...)
• firmware/
- Funkcije za neke stare drajvere koji se još uvek koriste
Struktura source koda Linux jezgra

• fs/
- Fajl sistem (fs/ext4/, itd.)
• include/
- Hederi jezgra
• include/linux/
- Centralni hederi Linux jezgra
• include/uapi/
- Hederi API-ja
• init/
- Inicijalizacija Linux-a (uključujući init/main.c)
• ipc/
- Kod za komunikaciju među procesima
Struktura source koda Linux jezgra
• Kbuild
- Deo build sistema jezgra
• Kconfig
- Deskripcioni fajl za parametre konfiguracije
• kernel/
- Srž Linux jezgra (vrlo malo)
• lib/
- Biblioteke za osnovne rutine (zlib, crc32...)
• MAINTAINERS
- Maintaineri za svaki deo jezgra
• Makefile
- Osnovni Linux Makefile
Struktura source koda Linux jezgra

• mm/
- Kod za upravljanje memorijom
• net/
- Kod za mrežnu podršku
• README
- Uputstva za bildovanje kernela
• REPORTING-BUGS
- Uputstva za prijavljivanje bagova
• samples/
- Primeri koda
• scripts/
- Skripte za internu ili eksternu upotrebu
Struktura source koda Linux jezgra

• security/
- Implementacija bezbednosnih modula
• sound/
- Kod i drajveri za zvuk
• tools/
- Kod za različite alate u korisničkom prostoru (uglavnom C)
• usr/
- Kod za generisanje initramfs cpio arhive
• virt/
- Podrška za virtuelizaciju
Alat za analizu koda jezgra

• Cscope: http://cscope.sourceforge.net/
• Poziv iz Linuxa: cscope -Rk
Konfiguracija i bildovanje Linux jezgra

• Konfiguracija i bildovanje Linux jezgra bazirani su na većem


broju Makefileova

• Korisnik interaguje jedino glavni Makefile koji se nalazi u


gornjem direktoriju source koda jezgra

• Izborom željenog targeta korisnik definiše koja akcija će biti


izvršena (konfiguracija, kompilacija, instalacija)

• Primer:
linux-3.6.x/
make <target>
Konfiguracija jezgra

• Jezgro sadrži hiljade drajvera za različite uređaje, drajvere za


fajl sistem, mrežne protokole i druge stavke koje se mogu
konfigurisati
• Postoji hiljade različitih opcija koje služe da se selektivno
kompajliraju delovi jezgra koji su potrebni
• Konfiguracija jezgra je proces definisanja seta opcija sa
kojima želimo da se jezgro kompajlira
• Ovaj set opcija zavisi od
- Hardvera koji se koristi
- Od mogućnosti koje na kraju jezgro treba da ima (da li ima
mogućnost rada sa mrežama, da li ima i u kojoj meri fajl
sistem, da li treba da radi u realnom vremenu, itd.)
Konfiguracija jezgra

• Configuracija se nalazi u .config fajlu source koda Linux


jezgra – ovo je jednostavan tekstualni fajl

• Opcije su međusobno zavisne i ovaj fajl se po pravilu ne


modifikuje ručno, već kroz grafičke ili tekstualne interfejse:
- make xconfig, make gconfig (grafički)
- make menuconfig, make nconfig (tekstualni)
make xconfig

• Najčešće korišćen alat za konfiguraciju jezgra


make gconfig
make menuconfig
make nconfig
Kompajlirano jezgro
• Kompajlirano jezgro je jedan fajl koji nastaje povezivanjem
svih objekata i fajlova koji su specificirani u konfiguraciji
• Ovaj fajl se učitava u memoriju od strane bootloadera
• Sve opcije koje su uključene u jezgro su dostupne po
pokretanju jezgra bez potrebe da postoji fajl sistem
• Neke opcije (kao drajveri uređaja, fajl sistem, itd.) mogu se
kompajlirati i kao posebni moduli
• Ovi moduli su onda plugin moduli koji mogu biti učitani ili
obrisani iz memorije dinamički da bi se dodale ili uklonile
opcije jezgra u toku rada
• Svaki modul se nalazi u posebnom fajlu u fajl sistemu, pa je
pristup fajl sistemu neophodan da bi se koristili moduli
Prednosti korišćenja modula

• Postojanje modula omogućava dodavanje novih drajvera bez


potrebe da se čitavo jezgro ponovo kompajlira

• Korisno je da jezgro bude što manje (kompaktnije) – dobar


deo funkcionalnosti prebacuje se na module

• Korišćenje modula skraćuje vreme podizanja jezgra – vreme


se ne troši na inicijalizaciju delova jezgra koji su potrebni tek
kasnije

• Funkcionalnost jezgra može se proširivati pisanjem


sopstvenih modula
Bildovanje i instalacija jezgra

• Izvršiti komandu make

• Kopirati sliku jezgra u ciljnu memorijsku lokaciju

• make install – instalira jezgro

• make modules_install – kompajliranje i instaliranje modula


Korisni interfejsi za aplikativne programe
(API)
• U biblioteci include/linux/string.h
- Vezani za memoriju: memset(), memcpy(), memmove(),
memscan(), memcmp(), memchr()
- Vezani za stringove: strcpy(), strcat(), strcmp(), strchr(),
strrchr(), strlen()

• Alokacija i kopiranje stringa: kstrdup(), kstrndup()

• Alokacija i kopiranje dela memorije: kmemdup()


Korisni interfejsi za aplikativne programe
(API)
• U include/linux/kernel.h

• Konverzija iz string u int: simple_strtoul(), simple_strtol(),


simple_strtoull(), simple_strtoll()

• Ostale funkcije sa stringovima: sprintf(), sscanf()


Sistemi za rad u realnom
vremenu

Predmetni profesor : prof. dr. Marko Tanasković


Predmetni asistent : Uroš Dragović
E-mail: mtanaskovic@singidunum.ac.rs
Device Model
• Linux jezgro funkcioniše na velikom broju različitih arhitektura
i hardverskih platformi, zbog toga je potrebno da postoji
maksimalna mogućnost korišćenja istog koda na različitim
platformama

• Na primer, želimo da isti USB drajver može da se koristi na


x86 PC i na nekoj ARM platformi, iako su USB kontroleri na
ove dve platforme potpuno drugačiji

• Ovo zahteva jasnu organizaciju koda u kojoj su drajveri


uređaja odvojeni od kontrolera uređaja, a opis hardvera
odvojen od samih uređaja

• Ovo omogućava Device Model Linux jezgra


Jezgro i drajveri

• U Linuxu, drajver uvek


interaguje sa:
- framework (okvir) koji
omogućava drajveru da
apstrahuje osobine hardvera na
generički način.
- bus infrastrukturom, koja je
deo device modela i koja se
koristi za komunikaciju sa
hardverom.
Strukture podataka device modela

• Device model je organizovan oko tri osnovne strukture


podataka:
- Struktura bus_type koja predstavlja jedan tip busa (USB, PCI,
I2C, etc.)
- Struktura device_driver, koja predstavlja jedan drajver za
upravljanje jednim uređajem na jednom basu
- Struktura device_structure, koja predstavlja jedan uređaj
povezan na bus

• Jezgro koristi nasleđivanje da bi se kreirale specializovane


verzije device_driver i device_structure za svaki konkretan
subsistem
• Bus sa i bez dinamičke numeracije
Bus drajveri

• Osnovna komponenta device modela je bus drajver


• Jedan bus drajver za svaki tip busa: USB, PCI, SPI, MMC,
I2C, itd.
• Bus drajveri su zaduženi za:
- Registraciju tipa bus-a
- Registraciju adapterskih drajvera (USB kontroleri, I2C
adapteri itd.) koji su sposobni da detektuju uređaje prikačene
na bus i obezbede komunikacioni mehanizam sa tim
uređajima
- Registracija drajvera uređaja koji njima upravljaju
- Povezivanje drajvera sa uređajima koje su detektovali
adapterski drajveri
- Obezbeđuje API za adapterske i drajvere uređaja
Primer: USB bus
Primer: USB bus

• Osnovna infrastruktura (bus drajver)


- drivers/usb/core

• Adapterski drajveri
- drivers/usb/host

• Drajveri uređaja
- Svuda u kodu jezgra, klasifikovani po tipu
Busevi bez dinamičke enumeracije

• Kod embedded sistema uređaji se obično ne povezuju preko


busa koji omogućava enumeraciju i jedinstveni identifikacioni
broj za svaki uređaj
• Na primer uređaji na I2C busu ili SPI busu, ili uređaji koji su
deo sistema na čipu
• I ovakvi uređaji moraju biti deo device modela

• Ovakvi uređaji se ne detektuju dinamički, već statički na dva


osnovna načina:
- U izvornom kodu jezgra
- U Device Treeu, fajlu koji opisuje hardver i koji se koristi kod
nekih arhitektura
Platformski uređaji
• Među uređajima koji ne koriste bus sa mogućnošću dinamičke
enumeracije najčešći su uređaji koji su direktno deo sistema
na čipu kao što su UART kontroleri, Ethernet kontroleri, SPI ili
I2C kontroleri, grafički ili audio uređaji

• Specijalni bus koji se zove platform bus koristi se u okviru


Linux jezgra za rad sa ovakvim uređajima

• Sa platform busom se koriste platform drajveri koji


upravljaju platform uređajima.

• Ovaj bus funkcioniše kao bilo koji drugi bus (UBS, PCI) sa
razlikom da su uređaji numerisani statički umesto da se
dinamički identifikuju
Device tree
• Na mnogim embedded arhitekturama manuelna instalacija
platform uređaja se smatra velikim nedostatkom zbog
otežanog održavanja sistema.
• Kod ovakvih arhitektura tendencija je da se pređe na
korišćenje takozvanog Device Tree
• To je drvo čvorova koji modeluju hijararhiju uređaja u
sistemu od uređaja unutar procesora do ostalih uređaja u
okviru jedne ploče
• Svaki čvor može da ima određeni broj osobina koje opisuju
različite osobine samog uređaja: adrese, prekide, clockove
itd.
• U toku podizanja jezgra, jezgru se dodeljuje kompajlirana
verzija Device Tree Blob, koja se koristi da se instanciraju svi
uređaji u Device Tree-u
• Na ARM procesorima: arch/arm/boot/dts.
Device tree - nasleđivanje

• Svaka pojedinačna hardverska platforma ima svoj device tree

• Međutim često različite hardverske platforme koriste isti


procesor, a često i različiti procesori iz iste familije dele
odrešeni broj sličnosti

• Da bi se nosili sa ovom pojavom u Linux jezgru je moguće da


jedan device tree fajl uključi drugi. Three-ovi fajla koji
uključuje preklapaju tree-ove fajla koji je uključen
I2C bus
• Vema često korišćen bus male brzine za povezivanje uređaja
na čipu ili spoljnih uređaja za procesor
• Koristi samo dve žice: SDA za podatke i SCL za clock.
• To je master/slave bus: samo master može da inicira
razmenu informacija, a slaveovi mogu samo da odgovaraju na
razmenu iniciranu od strane mastera
• U LiInux sistemu, I2C kontroler koji se nalazi u procesoru je
tiično master koji kontroliše bus
• Svaki slave uređaj se identifikuje uz pomoć jedinstvene I2C
adrese i svaka razmena koju pokreće master sadrži ovu
adresu koja omogućava odgovarajućem slave-u da prepozna
da baš on treba da odgovori na iniciranu razmenu
Primer I2C busa
Multipleksiranje pinova

• Moderni sistemi na čipu uključuju sve više i više hardverskih


blokova koji moraju sa spoljnim svetom da interaguju putem
pinova
• Međutim, fizička veličina čipova ostaje mala, pa samim tim i
broj pinova je često limitiran
• Iz ovog razloga često se dešava da ne mogu svi interni
hardverski blokovi da imaju pristup pinovima simultano
• Zbog toga se pinovi multipleksiraju: sa pinovima povezuju ili
funkcionalnost hardverskog bloka A ili hardverskog bloka B
• Ovo multipleksiranje najčešće može da se konfiguriše putem
softvera
Multipleksiranje - primer
Multipleksiranje u Linuxu

• Za multipleksiranje u Linux jezgru zadužen je pinctrl


subsistem

• Ovaj subsistem (lociran u drivers/pinctrl) obezbeđuje generički


subsistem za upravljanje multipleksiranjem

• On nudi:
- Drajvere za konfiguraciju multipleksiranja za dati sistem na
čipu
- Korisnički interfejs za drajvere multipleksiranja

• Većina pinctrl drajvera poseduje i vezu sa Device Tree


Jezgro i drajveri

• U Linuxu drajver uvek interaguje


sa:
- framework (okvir) koji
omogućava drajveru da
apstrahuje osobine hardvera na
generički način.
- bus infrastrukturom, koja je
deo device modela i koja se
koristi za komunikaciju sa
hardverom.
Tipovi uređaja - podsećanje

• Blokovski uređaji
– Informacije se nalaze u blokovima fiksne veličine
– Komunikacija sa I/O realizovana je kroz čitanje/pisanje
blokova
– Hard disks, CD rom spadaju u ovu kategoriju

• Znakovni uređaji
– Komunikacija sa I/O realizovana je kroz pojedinačne
karaktere (znakove) i nema njihovog grupisanja u blokove
– Terminali, štampači, miš, džojstik spadaju u ovu kategoriju

• U praksi su relevantni znakovni uređaji


Major i minor brojevi

• U okviru jezgra svi uređaji se identifikuju uz pomoć major i


minor broja

• Major broj najčešće označava familiju uređaja

• Minor broj najčešće označava broj uređaja (kada na primer


postoji više serijskih portova)

• Većina major i minor brojeva su statički alocirani i identični u


svim Linux sistemima. Definisani su u
Documentation/devices.txt
Uređaji – sve je fajl

• Linux koristi strategiju da većinu sistemskih objekata


predstavlja kao fajlove
• Ovo omogućava aplikativnom softveru da manipuliše
sistemskim objektima sa uobičajenim fajl API-jem (open, read,
write, close, itd.)
• Tako i uređaji moraju biti predstavljeni kao fajlovi aplikativnim
programima
• Ovo se postiže kroz specialni artifakt koji se naziva device
file
• To je spcijalni tip fajla koji povezuje ime fajla vidljivo u
korisničkim aplikacijama sa tripletom: tip, major, minor, koji
jezgro razume
• Svi device fajlovi po konvenciji nalaze se u /dev direktorijumu
Device file - primer

• Primeri device fajlova u Linux operativnom sistemu


$ ls -l /dev/ttyS0 /dev/tty1 /dev/sda1 /dev/sda2 /dev/zero
brw-rw---- 1 root disk 8, 1 2011-05-27 08:56 /dev/sda1
brw-rw---- 1 root disk 8, 2 2011-05-27 08:56 /dev/sda2
crw------- 1 root root 4, 1 2011-05-27 08:57 /dev/tty1
crw-rw---- 1 root dialout 4, 64 2011-05-27 08:56 /dev/ttyS0
crw-rw-rw- 1 root root 1, 5 2011-05-27 08:56 /dev/zero
• Primer C koda za ispis na serijski port
int fd;
fd = open("/dev/ttyS0", O_RDWR);
write(fd, "Hello", 5);
close(fd);
Znakovni drajver u jezgru

• Sa stanovišta aplikativnog programa, znakovni uređaj je


zapravo fajl

• Drajver znakovnog uređaja zato mora implementirati operacije


koje su uobičajene za fajlove: open, close, read, write, itd.

• Da bi postigao ovo, znakovni drajver mora implementirati


operacije opisane u strukturi file_operations

• Fajl sistem sloj Linux jezgra će se pobrinuti da se operacije


drajvera pozivaju kada iz korisničkog prostora stigne
odgovarajući sistemski poziv
Znakovni uređaji: od aplikativnog
programa do jezgra
Više od znakovnih drajvera – framework
jezgra
• Mnogi drajveri zapravo i nisu implementirani kao znakovni
drajveri
• Oni su implementirani u okviru (framework) koji je specifičan
za dati tip uređaja (framebuffer, V4L, serial, itd.)
• Framework (okvir) omogućava da se generišu zajednički
delovi drajvera za isti tip uređaja
• Iz korisničkog prostora svi ovi uređaji i dalje se vide kao
znakovni od strane aplikativnih programa
• Framework (okvir) omogućava koherentan interfejs prema
korisničkom prostoru za svaki tip uređaja, bez obzira na
drajver
Framework jezgra
Misc subsistem

• Jezgro nudi veliki broj okvira (frameworko-ova) koji pokrivaju


veliki broj tipova uređaja: ulazni, mrežni, video, audio itd.
• Ovi okviri omogućavaju da se izgradi konzistentan API ka
korisničkom prostoru i aplikacijama
• Međutim, postoje uređaji koji zapravo se ne mogu svrstati ni u
jedan postojeći okvir – primeri su uređaji koji su veoma
prilagođeni specijalnoj nameni, implementirani na FPGA-u ili
drugi uređaji za koje implementacija okvira nije racionalna
• Drajveri za ovakve ueđaje mogu biti implementirani direktno
kao sirovi znakovni drajveri
• Međutim postoji misc subsistem koji ovaj posao olakšava
• On je zapravo tanak sloj jezgra koji se nalazi odmah iznad
API-ja za znakovne drajvere
Dijagram misc subsistema
Ulazni subsistem

• Ulazni subsistem vodi računa o svim ulaznim događajima koji


dolaze od ljudskog korisnika
• Ovaj subsistem vodi računa o ulazima sa tastature, miša,
džojstika, tačskrina itd.
• Ulazni subsistem podeljen je na dva dela:
- Drajveri uređaja koji komuniciraju sa hardverom (npr. preko
USB-a) i dostavljaju informacije o događajima (pritsak na dirku
tastature, pomeranje miša, pritisak na tačskrin, itd.) do ulaznog
jezgra
- Hendleri događaja koji primaju informacije o događajima od
drajvera i prosleđuju ih gde je potrebno uz pomoć različitih vrsta
interfejsa (najčešće vođenih događajem)
Ulazni subsistem
Upravljanje memorijom
Organizacija virtuelne memorije
• 1GB rezervisano za jezgro
- Sadrži kod jezgra i strukture podataka,
identično u svim adresnim prostorima
- Fizička memorija je uglavnom direktno
mapirana sa fiksnim
ofsetom

• 3GB na raspolaganju za korisničke


procese:
- Kod procesa i podatci
- Nije nužno mapirano u fizičku memoriju
(dinamičko mapiranje po potrebi)
- Različito mapiranje od jednog adresnog
prostora do drugog
Mapiranje virtuelne memorije
Memorija korisničkog prostora

• Nova memorija u korisničkom prostoru se alocira ili iz već


alocirane memorije za proces ili korišćenjem mmap
sistemskog poziva

• Virtuelna memorija u korisničkom prostoru ne mora biti i fizički


alocirana – do fizičke alokacije dolazi kada pristup virtuelnoj
stranici dovodi do greške strane

• Dozvoljava se da virtuelna memorija u korisničkom prostoru


bude mnogo veća od fizičke

• U nedostatku fizičke memorije suspenduje se određeni proces


kako bi oslobodio fizičku memoriju
Memorija jezgra
• Alokacija memorije koja je vezana za jezgro je statička –
nema suspenzije i potrebe za dinamičkom alokacijom
memorije

• Većina funkcija za alokaciju memorije za jezgro takođe vraća


i virtuelnu adresu koja se može koristiti u sistemskom prostoru

• Alokator jezgra niskog nivoa vrši mapiranje stranica. Ovaj


alokator ima finu granulaciju (obično 4 KB, ali zavisi od
arhitekture)

• Alokacija manjih memorijskih jedinica je takođe moguća (npr.


SLAB alokatori u okviru kmaloc() funkcije)
Alokacija u jezgru
Alokator stranica

• Pogodno za alokaciju srednje veličine


• Stranica najčešće ima veličinu 4KB, ali može biti i veća u
nekim arhitekturama (npr: 4, 8, 16 ili 64 KB)
• Moguća je alokacija broja strana koji odgovara stepenu broja
2: 1, 2, 4, 8, 16 strana, itd.
• Tipična maksimalna veličina je 8192 KB, ali može zavisisti od
konfiguracije jezgra
• Alocirana memorija je naravno virtuelno povezana, ali takođe i
fizički jer je alocirana u memorijskom prostoru jezgra
(sistemskom prostoru)
• Zbog ovoga se može desiti da velike memorijske površine ne
budu dostupne ili im je teško pristupiti zbog fragmentacije
memorije
SLAB alokator

• SLAB alokator omogućava kreiranje cashea koji sadrže set


objekata iste veličine
• Veličina objekata može biti manja ili veća od veličine jedne
strane
• SLAB alokator vodi računa o povećanju ili smanjenju veličine
cashea u zavisnosti od broja objekata. Ovaj alokator koristi
alokator strana da alocira i oslobodi strane
• SLAB cachei se koriste za strukture podataka koje su prisutne
u mnogim instancama u jezgru kao što su fajl objekti,
deskriptori mrežnih paketa, deskriptori procesa itd.
• Retko se koristi za individualne drajvere
Kmalloc alokator

• Kmalloc je alokator memorije generalne namene u Linux


jezgru

• Za male veličine ovaj alokator se oslanja na SLAB alokator

• Za veće veličine oslanja se na alokator stranica

• Alocirani fizički prostor je garantovano povezan

• Veličina alocirane memorijske površine se zaokružuje do


veličine najmanjeg SLAB cashea koji se koristi
Vmalloc alokator

• Vmalloc alokator se koristi za kreiranje virtualno povezanih


mememorijskih zona koje ne moraju biti i fizički povezane

• Veličina zahtevanog memorijskog prostora se zaokružuje na


celobrojni broj potrebnih stranica

• Alokacija prilično velike površine je moguća (gotovo je


moguće alocirati kompletnu raspoloživu memoriju)

• Fragmentacija fizičke memorije ne predstavlja problem, jedino


se ne može koristiti za DMA, jer DMA zahteva fizički
povezanu memorijsku alokaciju
Proces i thread

• Često postoji zabuna oko pojmova zadatak, proces i thread –


u ovom kursu ih sve koristimo kao sinonime
• U Linuxu, proces se kreira uz pomoć funkcije fork() i sastoji se
od adresnog prostora koji sadrži programski kod, podatke,
deljene biblioteke itd.
• Ovakav proces se može smatrati thredom
• Dodatni threadovi se mogu generisati u okviru postojećeg
procesa i oni se izvršavaju u okviru istog adresnog prostora
kao i proces koji ih je kreirao
• Sa stanovišta jezgra ovo ne pravi nikakvu razliku i zato ćemo i
procese i threadove tretirati kao sinonime
Životni vek threada
Izvršavanje sistemskih poziva

• Sistemski pozivi se izvršavaju u kontekstu procesa koji ih


poziva (zahteva)
Spavanje

• Spavanje je neophodno kada proces čeka na određene


podatke
Spavanje i buđenje
Sistem za upravljanje prekidima

• Drajver uređaja
- Kada se fajl uređaja po prvi put otvori, drajver registruje
hendler prekida za taj uređaj

• Hendler prekida
- Poziva se kada dođe do prekida
- Obaveštava da je zahtev za prekidom primljen
- Ukoliko je potrebno raspoređuje zadatke za upravljanje
podacima, inače budi procese koji čekaju na podatke

• Drajver uređaja
- Kada uređaj više nije korišćen od strane bilo kog procesa,
deregistruje hendler prekida
Sistemi za rad u realnom
vremenu

Predmetni profesor : prof. dr. Marko Tanasković


Predmetni asistent : Uroš Dragović
E-mail: mtanaskovic@singidunum.ac.rs
Embedded Linux

• Embedded Linux je korišćenje Linux jezgra i drugih open-


source komponenata u embedded sistemima

• Upotreba Linux operativnog sistema u embedded sistemima


pruža veliki broj prednosti
Upotreba istih komponenti više puta

• Ključna prednost korišćenja Linuksa u embedded sistemima


je mogućnos korišćenja postojećih softverskih rešenja na
različitim hardverskim platformama
• Čim neka hardverska komponenta, protokol ili osobina
postanu dovoljno široko prihvaćeni i korišćeni, postoji jako
velika šansa da već postoji open-source kod koji je podržava.
• Ovo omogućava brz dizajn i razvoj komplikovanih proizvoda
na bazi postojećih komponenata
• Niko ne bi trebalo da ponovo razvija jezgro, USB drajver ili
druge biblioteke koje se masovno koriste
• Dozvoljava koncentraciju na dodatnu vrednost samog
proizvoda
Niska cena

• Besplatan softver može da se koristi na neograničenom broju


uređaja bez naknade

• Ukoliko vaš embedded sistem koristi isključivo besplatan


softver, možete svesti troškove licenciranja softvera na nulu.
Čak su i alati potrebni za razvoj besplatni

• Dozvoljava veći budžet za hardver ili ulaganja na povećanje


znanja i veština zaposlenih
Potpuna kontrola

• Korišćenjem open-source koda imate dostupan kod za svaki


deo vašeg sistema

• Dozvoljava neograničene modifikacije, debagovanja,


podešavanja, optimizaciju i to u neograničenom vremenskom
periodu bez zavisnosti od drugih dobavljača

• Dozvoljava potpunu kontrolu softverskog dela vašeg


sistema
Kvalitet

• Mnoge open-source komponente se već koriste u praksi često


na milionima sitema

• Kvalitet ovakvih komponenti je dakle testiran u praksi

• Naravno, nisu sve open-source komponente dobrog kvaliteta,


ali one koje su široko primenjene najčešće jesu

• Dozvoljava dizajn sistema sa komponentama visokog


kvaliteta od početka
Ubrzan proces istraživanja novih rešenja

• Pošto je open-source lako dostupan, lako je nabaviti deo


softvera i testirati ga

• Olakšava evaluaciju većeg broja mogućnosti i donošenje


odluke

• Ceo proces je mnogo brži nego kod komponenti koje se


kupuju i čije osobine moraju da se demonstriraju

• Olakšava istraživanje novih mogućnosti i rešenja


Podrška zajednice

• Open-source softverske komponente se razvijaju od strane


zajednice developera i korisnika

• Ova zajednica može da ponudi podršku izuzetno velikog


kvaliteta – možete kontaktirati osobu koja je razvila neku
komponentu direktno, mogućnost dobijanja informacija ne
zavisi od toga za koju kompaniju radite

• Često bolji način od klasične, komercijalne podrške, ali mora


se razumeti kako zajednica funkcioniše

• Ubrzava rešavanje problema u fazi razvoja sistema


Primeri embedded sistema koji koriste
Linux
Arhitektura embedded Linux sistema
Softverske komponente
• Cross-compilation toolchain
- Kompajler koji radi na računaru za razvoj ali generiše kod za
ciljnu hardversku arhitekturu
• Bootloader
- Pokreće se od strane hardvera, odgovoran je za osnovnu
inicijalizaciju, učitavanje i izvršenje jezgra
• Linux Jezgro
- Sadrži upravljanje procesima i memorijom, upravljanje
mrežama, drajvere uređaja i interfejs za korisničke aplikacije
• C biblioteka
- Interfejs između jezgra i korisničkih aplikacija
• Biblioteke i aplikacije
- Sopstvene ili tuđe
Host i target
• Pri razvoju embedded sistema uvek postoji podela na
• Host – razvojnu stanicu, koja je tipično moćan PC računar
• Target – embedded sistem koji se razvija
• Mogu biti povezani različitim sredstvima: gotovo uvek serijska
veza radi debagovanja, a često i Ethernet konekcija, ponekat i
JTAG konekcija radi debagovanja nižih nivoa
Cross-compiling toolchains

• Uobičajeni razvojni alat koji je dostupan na Linux platformi je


native toolchain
• Ovaj toolchain se koristi na hostu i generiše kod za host
• Za razvoj embedded sisteme obično je nemoguće koristiti
native toolchain
• Target je suviše ograničen u smislu memorije
• Target je obično mnogo sporiji od odgovarajućeg hosta
• Zbog ovoga se najčešće koriste cross-compiling toolchains
• Oni se izvršavaju na hostu, ali generišu kod za target
Cross-compiling toolchains
Mašine u procesu bildovanja

• Razlikujemo tri karakteristične mašine u postupku kreiranja


toolchain-a

• Build mašina, gde je toolchain bildovan.


• Host mašina, gde će se toolchain izvršavati.
• Target mašina, gde će se binarni fajlovi kreirani od strane
toolchain-a izvršavati

• Četiri česta tipa toolchainov-a se sreću


Tipovi toolchain-a
Komponente toolchain-a
Komponente toolchain-a

• Binutils je set alata za generisanje i manipulaciju binarnih


fajlova za datu arhitekturu procesora
• Hederi kernela služe da omoguće komunikaciju jezgra sa C
bibliotekama i kompajliranim kodom
Komponente toolchaina

• GCC kompajler je jako poznat besplatan softverski kompajler

• C biblioteka omogućava interfejs između aplikacija i jezgra.


Ona omogućava dobro poznati C API koji olakšava razvoj
aplikacija
Bootloader

• Bootloader je kod koji je zadužen za :


- Osnovnu inicijalizaciju hardvera
- Učitavanje jezgra operativnog sistema sa fleš memorije, sa
mreže ili drugog tipa trajne memorije
- Ponekad dekompresiju binarnih fajlova aplikativnog softvera
- Izvršenje aplikacije
• Pored ovih osnovnih funkcionalnosti, većina bootloadera
takođe omogućava i shell sa različitim komandama koje
implementiraju različite operacije
- Učitavanje podataka sa neke skladišne memorije ili
mreže, inspekciju,dijagnostiku i testiranje hardvera, itd.
Bootloader na BIOS baziranom x86

• x86 procesori se najčešće nalaze na


ploči zajedno sa trajnom memorijom
koja sadrži specijalan program koji se
zove BIOS
• BIOS je odgovoran za inicijalizaciju
hardvera i lodovanje veoma malog
parčeta koda iz trajne memorije
(image)
• Image je tipično prvi stepen
bootloadera koji onda učitava čitav
bootloader
• Tipično se jezgro učitava direktno iz
regularnog fajl sistema
Bootloader kod embedded sistema

• Procesor ima integrisan boot kod u ROM memoriji

• Tačni detalji zavise od konkretnog procesora

• Ovaj boot kod je u stanju da učita prvi stepen bootloadera sa


trajnog memorijskog uređaja na RAM

• Trajni memorijski uređaji su tipično: MMC, NAND, SPI flash,


UART (serijski port), itd.

• Prvi stepen bootloadera je ograničene veličine usled


hardverskih ograničenja i on učitava drugi stepen bootloadera
u RAM
Embedded bootloaderi
Embedded Linux i realno vreme

• Zbog svojih prednosti Linux i open-source softver se sve više


koriste u embedded sistemima

• Ono što nas posebno interesuje su aplikacije u kojima postoje


ograničenja usled realnog vremena

• Idealno bi bilo zadržati sve pobrojane prednosti Linux


operativnog sistema: hardverska pordška, iskorišćenje istih
komponenti više puta, niska cena, itd.

• U isto vreme sva vremenska ograničenja moraju biti ispunjena


Embedded Linux i realno vreme

• Osnovni cilj pri razvoju Linux operativnog sistema je bio da se


ostvari najveća moguća iskorišćenost datih hardverskih
resursa kao što su procesor, memorija, I/O, itd.

• Vremenski determinizam nije bio toliko važan

• Sa druge strane vremenska ograničenja zahtevaju vremenski


determinizam na račun maksimalnog mogućeg iskorišćenja
resursa

• Najbolje moguće iskorišenje resursa i vremenski


determinizam su suprotstavljeni zahtevi
Linux i realno vreme
• Postoje dva osnovna načina da se zahtevi realnog vremena
uključe u Linux operativni sistem
• Način 1
- Poboljšavanje samog Linux jezgra tako da ono može da
odgovori realnim vremenskim zahtevima tako što će
omogućiti ograničen vremenska kašnjenja, API-je za
aplikacije u realnom vremenu, itd.
- Primer PREEMPT_RT projekat.
• Način 2
- Dodavanje sloja ispod Linux jezgra koji će se nositi sa svim
zahtevima vezanim za realno vreme, tako da ponašanje
Linuxa ne dovede u pitanje ispunjenje zadatih vremenskih
okvira
- Ovaj pristup koriste na primer RTLinux, RTAI i Xenomai
Linux i realno vreme

• Alternativni pristup je korišćenje specifičnog hardvera da bi se


ostvarila vremenska ograničenja

- Rezervisanje jednog dela procesorskog jezgra isključivo za


vremenski kritične zadatke

- Obavljanje vremenski kritičnih zadataka na FPGA-ju

- Obavljanje vremenski kritičnih zadataka na posebnom


mikorokontroleru, npr. TI AM335x koji je namenjen za
aplikacije u realnom vremenu
Razumevanje kašnjenja
• Kada se razvijaju aplikacije u realnom vremenu sa sistemom
kao što je Linux, tipičan je sledeći scenario:
- Desi se neki događaj u spoljnom svetu i o tome se obaveštava
procesor putem prekida
- Hendler prekida prepoznaje i pokreće reakciju na događaj
budeći korisnički program koji treba da reaguje na dati događaj
- Posle određenog vremena aplikacija iz korisničkog prostora će
se izvršavati i reagovati na dati fizički događaj
• Cilj je dati garancije na ovo kašnjenje u reakciji na događaj iz
spoljnog sveta
Komponente kašnjenja kod Linux
operativnog sistema
Kašnjenje prekida
Izvori kašnjenja prekida

• Jedan od najčešće korišćenih mehanizama da se zaštiti


kritičan deo koda od prekida je takozvani spinlock
• Postojanje zaštićenih delova koda i uopšte delova u kojima
prekidi nisu dozvoljeni može da dovede do kašnjenja u obradi
prekida – dužina izvršavanja zaštićenog dela koda može
generalno da bude i beskonačna
Kašnjenje hendlera prekida
Implementacija hendlera prekida
• U Linuxu većina hendlera prekida je podeljena u dva dela
- Gornja polovina koju pokreće CPU čim prekidi postanu
dozvoljeni. Ovaj deo bi trebalo da se izvršava što je moguće
brže.
- Donja polovina koja se pokreće kada sve gornje polovine na
čekanju završe svoj rad

• Zbog toga, za vremenski kritične prekide, donje polovine ne bi


trebalo da se koriste – njihovo izvršavanje odlaže prisustvo
svih drugih prekida u sistemu
Kašnjenje raspoređivača
Funkcionisanje prekidanja

• Linux je preemptive operativni sistem


• Kada se zadatak izvršava u korisničkom prostoru i bude
prekinu od strane prekida, ako hendler prekida budi neki drugi
zadatak, ovaj zadatak može dobiti procesor čim se vratimo iz
hendlera prekida
Funkcionisanje prekida

• Međutim, kada do prekida dođe u toku izvršavanja


sistemskog poziva, sistemski poziv mora prvo da se završi,
pre ego što drugi zadatak počne da se izvršava
• Nema preempcije u okviru Linux jezgra.
• Ovo znači da dužina vremenskog perioda pre nego što
zadatak koji je povezan sa prekidom počne da se izvršava
može biti beskonačno dugo
Trajanje raspoređivanja
Ostali ne-deterministički mehanizmi

• Postoje i drugi mehanizmi u okviru Linux operativnog sistema


koje mogu da utiču na izvršavanje vremenski kritičnih
zadataka

• Linux je jako baziran na virtuelnoj memoriji, tako da se


memorija fizički alocira po potrebi, gde kada se neki kod prvi
put izvršava prvo mora da se uradi njegova memorijska
alokacija

• Mnoge servisne C biblioteke Linux jezgra nisu pisane za


aplikacije sa vremenskim ograničenjima
Prioritet hendlera prekida
• U Linuxu hendlere prekida izvršava direktno CPU prekidni
mehanizam i nisu pod kontrolom Linux raspoređivača. Zbog
toga svi hendleri prekida imaju veći prioritet nego svi zadaci
koji se trenutno izvršavaju u sistemu
PREEMPT_RT project

• Dugoročni projekat koji vode članovi tima za razvoj Linux


jezgra Ingo Molnar, Thomas Gleixner i Steven Rostedt

• https://rt.wiki.kernel.org

• Cilj je postepeno poboljšanje Linux jezgra da bi ono lakše


moglo da se nosi sa realnim vremenskim ograničenjima

• Mnoga poboljšanja razvijena u okviru PREEMPT_RT projekta


već su uključena u gavni kod Linux jezgra
Real time ekstenzije za Linux operativni
sistem
• Tri generacije
- RTLinux
- RTAI
- Xenomai
• Zajednički princip je da se doda dodatni sloj između hardvera
i Linux jezgra da bi se zadaci sa vremenskim ograničenjima
upravljalo uz pomoć tog sloja
RTLinux

• Prva real time ekstenzija za Linux

• Nije potpuno open sorce

• Ova činjenica odvartila je mnoge inžinjere od njenog


korišćenja

• Danas je ovaj projekat gotovo mrtav


RTAI
• https://www.rtai.org/

• Nastao 1999 na Politecnico di Milano

• Ima solidnu korisničku bazu

• Uglavnom se održava samo na x86 arhitekturama

• Ima nešto kraća kašnjenja nego Xenomai, po cenu težeg


održavanja

• Pošto se ne razvija za embedded platforme nije toliko


značajan kao rešenje
Xenomai projekat

• http://www.xenomai.org/

• Započet 2001 kao projekat za emulaciju tradicionalnih


operativnih sistema za rad u realnom vremenu

• Inicijalno je bio vezan za RTAI projekat, a sada je zaseban


projekat

• Najviše se koristi kao vezija Linuxa za rad u realnom vremenu


Xenomai arhitektura
Xenomai aplikacije
• Xenomai aplikacije se pokreću kao i standardni procesi u
Linuxu, oni se inicijalno raspoređuju uz pomoć Linux
scheduelera i imaju pristup svim Linux servisima
• Po inicijalizaciji ove aplikacije se deklarišu kao aplikacije u
realnom vremenu, što ih migrira u primarni mod
• U ovom modu:
- Raspoređuju se direktno od strane Xenomai scheduler-a, tako
da imaju real time osobine koje nudi Xenomai
- Nemaju pristup Linux servisima, jer bi inače bili migrirani nazad
u sekundarni mod i izgube sve real time karakteristike
- Koriste samo drajvere implementirane u Xenomai, a ne one u
Linux jezgru
• Potrebno je implementirati drajvere uređaja u Xenomai i
razdvojiti vremenski kritične od vremenski nekritičnih zadatak
u konkretnoj aplikaciji

You might also like