Operativni Sistemi
Operativni Sistemi
1 Uvod
Donedavno su se operativni sistemi vezivali isklju£ivo za personalne ra£u-
nare. Kada vam neko pomene operativni sistem, prva asocijacija bi, uglavnom
bio Microsoft Windows (10/7/Vista/XP/98..), moºda neka distribucija Linux
operativnog sistema ili eventualno macOS-X. Ali svakako neki personalni ra-
£unar na kojem moºete da u gra£kom okruºenju pokre¢ete programe koji se
izvr²avaju (naizgled) istovremeno.
Sa druge strane, sve rasprostranjeniji su postajali embeded sistemi. Prvobitni
embeded sistemi su bili prili£no jednostavni: naj£e²¢e su sadrºali neki mikrokon-
troler skromnih performansi. Oni nisu imali previ²e RAM memorije, uglavnom
su imali skroman CPU, eventualno sa mogu¢no²¢u proto£ne obrade instrukcija-
dok se jedna izvr²ava, druga se dekoduje, a tre¢a prihvata iz memorije. Imali
su relativno mnogo periferijskih jedinica koje su bile zna£ajne za interakciju sa
spolja²njim svetom - A/D konvertori, tajmeri/broja£i, komunikacioni interfejsi
(UART, SPI, I2C), PWM izlazi, itd.
Tipi£an program koji bi se izvr²avao na jednom takvom embeded sistemu
obavezno je sadrºao jednu beskona£nu petlju, koja je obezbeivala da program-
ski broja£ nikada ne dosegne zabranjenu zonu tj. zonu u kojoj se ne nalazi
nikakav program, odnosno zonu u kojoj se nalaze ilegalne instrukcije. Unutar
petlje, sekvencijalno su se izvr²avale operacije koje su uklju£ivale interakciju sa
periferijskim jedinicama i obradu podataka. Na primer, pseudo kod programa
koji detektuje da li je pritisnut taster (koji ubrzava/usporava motor), a onda ge-
neri²e PWM izlaz za kontrolu motora kori²¢enjem PID regulatora i eventualno
prikazuje trenutnu brzinu na displeju:
while ( true )
{
ocitaj_trenutnu_brzinu_obrtanja ()
if pritisnut_taster ()
{
aºuriraj_parametre_regulatora ()
}
izra£unaj_novi_izlaz_za_pwm ()
podesi_kontroler_za_pwm ()
prikaºi_brzinu_na_displeju ()
}
while ( true )
{
ocitaj_trenutnu_brzinu_obrtanja ()
if pritisnut_taster ()
{
aºuriraj_parametre_regulatora ()
}
izra£unaj_novi_izlaz_za_pwm ()
podesi_kontroler_za_pwm ()
prikaºi_brzinu_na_displeju ()
if ( pristigla_poruka ())
{
dekoduj_pristiglu_poruku ()
spremi_odgovor ()
odgovori_na_zahtev ()
}
}
Mnogi veb zahtevi uklju£uju kako same podatke tako i zahtevno i kom-
pleksno ra£unanje. Na primer, Google stranica predstavlja jednostavan
tekstualni okvir, ali svaki upit za pretragu une²en u taj okvir, sadrºi pre-
traºivanje baza podataka koje se prenosi bukvalno na hiljade ma²ina. Da bi
njihov softver bio upravljiv, veb serveri £esto pozivaju pomo¢ne aplikacije,
npr. za kontrolu same funkcije pretraºivanja. Ove pomo¢ne aplikacije mo-
raju da komuniciraju sa glavnim veb serverom da bi £itav ovaj postupak
bio uspe²no obavljen. Kako operativni sistem omogu¢ava vi²e aplikacija
da komuniciraju jedne sa drugima?
4
ta se de²ava ako dva korisnika (ili milion njih) poku²aju da zatraºe veb
stranicu sa servera istovremeno? Jednostavan pristup bi mogao biti obrai-
vanje svakog zahteva po redu pristizanja. Meutim, ako svaki pojedina£ni
zahtev traje duºe vremena, ovaj pristup bi zna£io da bi svi ostali morali
da sa£ekaju da se on zavr²i. Brºe, ali sloºenije re²enje je multitasking obra-
da: istovremeno obraivanje vi²e zahteva u istom vremenskom intervalu.
Multitasking je posebno vaºan na savremenim ra£unarima sa vi²e jezgara,
jer pruºa na£in da se vi²e procesora koristi istovremeno. Kako operativni
sistem omogu¢ava aplikacijama da rade vi²e stvari istovremeno?
Radi boljih performansi, veb server ¢e £esto kreirati kopiju, koja se naziva
ke², nedavno zatraºenih stranica, kako bi slede¢i korisnik koji zahteva istu
stranicu mogao dobiti rezultat iz ke²a, umesto zapo£injanja zahteva od po-
£etka. Za ovo je potrebno da aplikacija sinhronizuje pristup ke² podacima
od strane hiljade veb zahteva koji istovremeno pristiºu. Kako operativni
sistem podrºava sinhronizaciju aplikacija sa deljenim podacima?
ta se dogaa kada veb pretraºiva£ i veb server rade razli£itim brzinama?
Ako server poku²ava da po²alje veb stranicu klijentu brºe nego ²to klijent
moºe da prikaºe stranicu, gde se nalazi sadrºaj datoteke u meuvremenu?
Moºe li operativni sistem potpuno razdvojiti klijenta i server tako da svaki
moºe raditi svojom brzinom, a da se pritom drugi ne usporava?
datoteku koju kreira jedna aplikacija moºe da £ita bilo koja druga. Dodat-
no, operativni sistemi obezbeuju standardni korisni£ki interfejs kako bi
aplikacijama pomogli da imaju uobi£ajeni izgled (" look and feel "). Moºda
najvaºnije od svega jeste da operativni sistemi pruºaju sloj koji razdva-
ja aplikacije od hardverskih ulazno-izlaznih ureaja, tako da se aplikacije
mogu razvijati potpuno nezavisno od toga koja tastatura, mi² ili hard disk
se koristi u sistemu.
while ( true ){
;
}
3.1 Pouzdanost
Moºda i najvaºnija karakteristika operativnog sistema je njegova pouzda-
nost. Pouzdanost podrazumeva da sistem radi upravo ono za ²ta je stvoren.
Kao najniºi nivo softvera koji radi na sistemu, gre²ke u kodu operativnog si-
stema mogu imati pogubne i skrivene efekte. Ako se operativni sistem pokvari,
korisnik uglavnom ne¢e mo¢i obaviti nikakav posao, a u nekim slu£ajevima moºe
£ak i izgubiti prethodno uraeni posao, na primer, ako novonastali kvar o²teti
datoteke na disku. Nasuprot tome, kvarovi aplikacija mogu biti mnogo benig-
niji, upravo zato ²to operativni sistemi omogu¢avaju izolaciju gre²aka i brzo i
jednozna£no ponovno pokretanje nakon gre²ke u aplikaciji.
Dizajnirati pouzdan operativni sistem je veliki izazov. Operativni sistemi
£esto rade u neprijateljskom okruºenju, gde ra£unarski virusi i sli£ni zlonamerni
kodovi £esto poku²avaju da preuzmu kontrolu nad sistemom za sopstvene svrhe
iskori²¢avanjem gre²aka u dizajnu ili implementaciji operativnog sistema.
Naºalost, tipi£ne metode za pobolj²anje pouzdanosti softvera, kao ²to su
testiranje uobi£ajenih putanja koda, manje su ekasne kada se primenjuju na
operativne sisteme. Budu¢i da zlonamerni napadi naj£e²¢e ciljaju upravo izvr-
²avanje retkih putanja koda, bukvalno sve mora ispravno raditi da bi operativni
sistem bio pouzdan. ak i bez zlonamernih napada koji namerno aktiviraju
gre²ke, mogu se javiti izuzetno retki slu£ajevi gre²aka i bagova u kontekstu ope-
rativnog sistema ( corner cases ). Ako operativni sistem ima milion korisnika,
dogaaj sa verovatno¢om jedan u milijardu ¢e se, naºalost, dogoditi nekome od
njih brºe nego ²to je o£ekivano.
Srodni koncept pouzdanosti je odzivnost, procenat vremena u kojem je sistem
upotrebljiv. Bagoviti operativni sistem koji se £esto ru²i, ²to uzrokuje gubitkom
rezultata rada korisnika, je istovremeno i nepouzdan je i neodzivan. Bagoviti
operativni sistem koji se £esto ru²i, ali nikada ne gubi rad korisnika i ne moºe
ga upropastiti eventualnim virusima, bio bi pouzdan, ali neodzivan. Operativni
sistem koji je nefunkcionalan, ali i dalje deluje normalno dok registruje korisni£ke
pritiske tastera ili pomeraje mi²a, nepouzdan je, ali odzivan.
Stoga su jednako poºeljna i pouzdanost i odzivnost. Na odzivnost uti£u dva
faktora:
3.2 Sigurnost
Dva koncepta usko povezana sa pouzdano²¢u su sigurnost i privatnost. Si-
gurnost je svojstvo koje garantuje da napada£ ne moºe ugroziti rad ra£unara.
Privatnost je deo sigurnosti - da su podaci sa£uvani na ra£unaru dostupni samo
ovla²¢enim korisnicima.
Nijedan upotrebljiv ra£unar nije savr²eno siguran! Bilo koji sloºeni deo sof-
tvera ima gre²ke, a £ak i ina£e ne²kodljivi bagovi mogu biti iskori²¢eni od strane
napada£a da bi stekli kontrolu nad sistemom. Sa jedne strane, hardver ra£u-
nara moºe biti tako dizajniran da omogu¢ava pristup potencijalnom napada£u,
sa druge strane, moºda je administrator ra£unara nepouzdan, te koriste¢i pri-
vilegije omogu¢ava krau korisni£kih podataka. Na kraju krajeva, programer
operativnog sistema je moºda namerno i svesno omogu¢io ulazne ta£ke kako bi
napada£ mogao pristupiti sistemu.
Ipak, operativni sistem moºe i treba da bude osmi²ljen tako da, koliko god
je to mogu¢e, minimizira svoju ranjivost na napade. Na primer, dobra izolacija
gre²aka moºe spre£iti eksterne aplikacije ( third party applications ) da preuzmu
kontrolu nad sistemom. Ali £ak i sa jakom izolacijom gre²aka, sistem moºe biti
nesiguran ako njegove aplikacije nisu dizajnirane imaju¢i u vidu sigurnost. Na
primer, Internet standard elektronske po²te ne omogu¢ava pouzdan identitet
po²iljaoca; mogu¢e je formirati poruku elektronske po²te sa proizvoljnom adre-
som u polju od, koja ne odgovara adresi stvarnog po²iljaoca. Stoga se moºe
pojaviti email od nekoga kome verujete, a u stvarnosti je od nekog drugog (i
sadrºi virus koji preuzima kontrolu nad ra£unarom kada se otvori prilog). Ovaj
problem bi mogao da se posmatra kao ograni£enje interakcije izmeu klijenta
elektronske po²te i operativnog sistema - da je operativni sistem omogu¢io jeftin
i jednostavan na£in da otvori prilog u izolovanom okruºenju izvr²enja sa ogra-
ni£enim mogu¢nostima, problema garantovano ne bi bilo £ak i ako prilog sadrºi
virus.
Komplikacija je svakako to ²to operativni sistem ne mora samo da spre£ava
neºeljeni pristup deljenim podacima, ve¢ mora da omogu¢i pristup u mnogim
slu£ajevima. elimo da korisnici i programi meusobno komuniciraju, da mogu
da urade cut i paste teksta izmeu razli£itih aplikacija i da £itaju ili upisuju
podatke na disk ili putem mreºe. Ako bi svaki program bio potpuno samostalan
bez ikakve mogu¢nosti za interakciju s bilo kojim drugim programom, tada
bi bila dovoljna samo izolacija gre²aka. Meutim, ne samo da ne moºemo da
izolujemo programe jedne od drugih, ve¢ ºelimo da lako delimo podatke izmeu
programa i izmeu korisnika.
Stoga su operativnom sistemu potrebni i mehanizam podsticanja (enforce-
ment mechanism ) i sigurnosna politika (security policy ). Mehanizam podsticanja
predstavlja na£in na koji operativni sistem omogu¢ava izvr²avanje samo dozvo-
ljenih radnji. Sigurnosna politika, sa druge strane, deni²e ²ta je dozvoljeno -
kome je dozvoljen pristup podacima i ko moºe obavljati neke operacije.
Zlonamerni napada£i mogu ciljati kako na ranjivosti u mehanizmima pod-
sticanja, tako i u bezbednosnoj politici.
14
3.4 Performanse
Za razliku od prenosivosti operativnog sistema, koja se moºe posmatrati
samo u ²irem vremenskom okviru, performanse operativnog sistema su £esto
odmah vidljive njegovim korisnicima.
Iako £esto povezujemo performanse sa svakom pojedina£nom aplikacijom,
dizajn operativnog sistema moºe imati veliki uticaj na percipirane performan-
se aplikacije jer operativni sistem odlu£uje kada se aplikacija moºe pokrenuti,
koliko memorije moºe da koristi i da li se datoteke ke²iraju u memoriju ili se
skladi²te na disku. Operativni sistem takoe posreduje prilikom pristupa apli-
kacije memoriji, mreºi i disku. Performanse se ne mogu meriti jednozna£no, ve¢
isklju£ivo kori²¢enjem vi²estrukih metrika. Jedna metrika performansi je eka-
snost apstrakcije koja je predstavljena aplikacijama. Ekasnost je uvek u uskoj
vezi sa dodatnim tro²kom resursa za sprovoenje same apstrakcije (eng Overhe-
ad ). Jedan od na£ina za merenje ekasnosti je stepen do koga apstrakcija ometa
performanse aplikacije. Pretpostavimo da je aplikacija dizajnirana da radi di-
rektno na osnovnom hardveru, bez dodatnih tro²kova apstrakcije operativnog
sistema; koliko bi to pobolj²alo performanse aplikacije?
Operativni sistemi takoe moraju da rasporeuju resurse izmeu aplikacija,
a to moºe uticati na performanse sistema onako kako ih opaºa krajnji korisnik.
Jedno je pitanje pravi£nost ( fairness ), izmeu razli£itih korisnika iste ma²ine
ili izmeu razli£itih aplikacija koje se pokre¢u na toj ma²ini. Treba li resurse
podeliti podjednako izmeu razli£itih korisnika ili razli£itih aplikacija ili bi neki
trebali imati povla²¢en tretman? Ako je tako, kako operativni sistem odlu£uje
koji zadaci dobijaju prioritet?
16
3.5 Dostupnost
Pored pouzdanosti, prenosivosti i performansi, uspeh operativnog sistema
zavisi od dva faktora koji su van njegove neposredne kontrole: (²iroka) dostup-
nost aplikacija prenosivih u taj operativni sistem i (²iroka) dostupnost hardvera
koji operativni sistem moºe da podrºi. IPhone pokre¢e iOS, ali bez unapred in-
staliranih aplikacija i sadrºaja App Store-a, iPhone bi bio samo mobilni telefon
sa verovatno lo²im prijemom kod korisnika.
Neto efekat nastaje kada vrednost neke tehnologije ne zavisi samo od njenih
sopstvenih mogu¢nosti, ve¢ i od broja drugih ljudi koji su usvojili tu tehnologiju.
Dizajneri aplikacija i hardvera tro²e svoje napore na platformama operativnog
sistema s najvi²e korisnika, dok korisnici favorizuju one operativne sisteme sa
najboljim aplikacijama ili najjeftinijim hardverom. Ako ovo zvu£i kao kruºni
efekat, to i jeste tako: vi²e korisnika podrazumeva vi²e aplikacija i jeftiniji har-
dver; vi²e aplikacija i jeftiniji hardver podrazumeva vi²e korisnika u virtualnom
ciklusu.
Izazov onda o£igledno postaje dizajniranje operativnog sistema tako da is-
koristi neto efekat ili bar da bude imun na njega. O£igledan korak u tom smeru
bi bio dizajniranje sistema tako da se olak²a dodatak novog hardvera i olak²a
prenos aplikacija u razli£itim verzijama istog operativnog sistema.
Suptilnije je pitanje izbora da li je interfejs za programiranje (API) opera-
tivnog sistema ili sam izvorni kod operativnog sistema otvoren (open code ) ili
zatvoren (proprietary ). Softver zatvorenog koda je pod kontrolom jedne kom-
panije, pa ga vlasnik moºe u bilo kom trenutku promeniti kako bi zadovoljio
potrebe svojih kupaca. Otvoreni sistem je onaj gde je izvorni kod sistema javni,
omogu¢avaju¢i svima da ga pregledaju i promene. esto ¢e otvoreni sistem imati
API koji se moºe menjati samo uz saglasnost tela za javne standarde. Pridrºava-
17
nje standarda pruºa sigurnost programeru da se API ne¢e menjati, osim op²tim
sporazumom; s druge strane, organi za standarde mogu oteºati brzo dodavanje
novih, ºeljenih funkcija. Ni otvoreni ni zatvoreni sistemi nisu o£igledno bolji za
²iroko usvajanje. Windows 10 i MacOS su primeri zatvorenih operativnih siste-
ma, Linux je primer otvorenog operativnog sistema i sva tri se ²iroko koriste!
Otvoreni sistemi se lak²e prilagoavaju ²irokom rasponu hardverskih platformi,
ali rizikuju fragmentaciju, ²to uti£e na neto efekat. Tvorci zatvorenih operativ-
nih sistema tvrde da su njihovi sistemi pouzdaniji i bolje prilagoeni potrebama
kupaca. Problemi interoperabilnosti i kompatibilnosti su smanjeni ako i hardver
i softver kontroli²e ista kompanija, ali ograni£enje operativnog sistema na jednu
hardversku platformu umanjuje neto efekat.
Olak²avanje preno²enja aplikacija sa postoje¢ih na novi operativni sistem
moºe pomo¢i novom sistemu da se uspostavi, i obrnuto, dizajniranje API-ja
operativnog sistema da oteºava prenos aplikacija van operativnog sistema moºe
spre£iti njegovo ²irenje i konkurentnost. Stoga £esto postoje komercijalni priti-
sci koji spre£avaju da interfejs operativnog sistema postane idiosinkratski. Iako
¢emo u nastavku raspravljati o problemima operativnih sistema na konceptu-
alnom nivou, vaºno je shvatiti da ¢e sami detalji poprili£no varirati za svaki
odreeni operativni sistem, zbog vaºnih, ali i pomalo haoti£nih komercijalnih
interesa.
duºen za odreenu vrstu ureaja (na primer, diskovi, audio ureaji ili video
displeji). CPU i kontroleri ureaja rade paralelno, nadme¢u¢i se za memorijske
cikluse, obzirom na £injenicu da je memorija deljena.
Da bi ra£unar mogao da se pokrene (uklju£i ili nakon reseta), potrebno je
da se pokrene inicijalni program. Ovaj inicijalni program, ili program za pokre-
tanje sistema ( bootstrap program ), obi£no je jednostavan. Uglavnom se £uva u
ra£unarskom hardveru u memoriji isklju£ivo za £itanje (ROM) ili u elektri£no
izbrisivoj programibilnoj memoriji za £itanje (EEPROM). On inicijalizuje sve
aspekte sistema, od registara CPU-a, preko kontrolera ureaja do memorijskog
sadrºaja. Program za pokretanje sistema mora znati kako u£itati operativni si-
stem i kako zapo£eti njegovo izvr²avanje. Da bi postigao ovaj cilj, program za
pokretanje sistema mora locirati jezgro ( kernel ) operativnog sistema i u£itati
ga u memoriju.
Kada se kernel u£ita i krene izvr²avati, on moºe po£eti da pruºa servise
sistemu i svojim korisnicima. Neki servisi su obezbeeni izvan kernela, od strane
sistemskih programa koji se u£itavaju u memoriju tokom pokretanja sistema, a
zovu se sistemski procesi (system daemons ). Sistemski procesi se izvr²avaju svo
vreme dok se izvr²ava kernel operativnog sistema.
Na Unix-u (i sistemima nasleenim od njega), prvi sistemski proces se naziva
"init", a pokre¢e mnoge druge sistemske daemon procese. Kada se ova faza
zavr²i, sistem je potpuno pokrenut i £eka da se dogodi neki dogaaj.
Pojava dogaaja obi£no se signalizira prekidom bilo od strane hardvera ili
softvera. Hardver moºe u bilo kom trenutku izazvati prekid slanjem signala ka
CPU. Softver moºe izazvati prekid izvr²avanjem posebne operacije koja se zove
sistemski poziv (system call, monitor call ).
Kad se CPU prekine na ovaj na£in, on zaustavlja ono ²to radi i odmah pre-
lazi na izvr²avanje koda sa ksne lokacije. Fiksna lokacija obi£no sadrºi po£etnu
adresu na kojoj se nalazi prekidna rutina. Prekidna rutina se izvr²ava, a po zavr-
²etku, CPU nastavlja izvr²avanje na mestu gde je stao kada je bio prekinut. Vre-
menski dijagram ove operacije prikazan je na slici 3. Prekidi su izuzetno vaºan
deo ra£unarske arhitekture. Svaki dizajn ra£unara ima svoj mehanizam prekida,
ali nekoliko funkcija je zajedni£ko. Prekid mora preneti kontrolu odgovaraju¢oj
19
a u slu£aju da nema dovoljno prostora za sve, sistem mora da bira izmeu njih.
U tom cilju, sistem vr²i rasporeivanje zadataka ( job scheduling ). Kada opera-
tivni sistem izabere zadatak iz grupe zadataka sa diska, on u£itava taj zadatak
u memoriju radi izvr²avanja. Da bismo smestili vi²e programa u memoriju is-
tovremeno, potrebno je implementirati neki oblik upravljanja memorijom, ali
to je zaseban problem o kojem ¢emo takoe detaljno pri£ati. Kada su jednom
odabrani zadaci koji ¢e se upisati u memoriju, ako je nekoliko njih spremno isto-
vremeno da se izvr²ava, sistem mora odabrati koji ¢e se zadatak prvi izvr²avati.
Dono²enje ove odluke je vezano za rasporeivanje CPU-a ( CPU scheduling ) o
kome ¢emo takoe op²irnije govoriti kasnije. Na kraju, izvr²avanje vi²e zada-
taka istovremeno zahteva da njihova sposobnost da uti£u jedni na druge bude
ograni£ena u svim segmentima operativnog sistema, uklju£uju¢i rasporeivanje
procesa, kori²¢enje diska i upravljanje memorijom.
U sistemu za deljenje vremena, operativni sistem mora da obezbedi razum-
no vreme odziva. Ovaj cilj se ponekad postiºe zamenom (swapping ), pri £emu
se procesi prebacuju u glavnu memoriju sa diska i obrnuto. e²¢a metoda za
obezbeivanje razumnog vremena odziva je virtualna memorija, tehnika koja
omogu¢ava izvr²enje procesa koji nije u potpunosti u memoriji i o ovome ¢emo
detaljno pri£ati u jednom od zavr²nih predavanja. Glavna prednost virtualne
memorije je u tome ²to omogu¢ava korisnicima da pokre¢u programe koji su
£ak i ve¢i od stvarne zi£ke memorije. Dodatno, mehanizam virtualizacije me-
morije abstrakuje glavnu memoriju u veliki, uniformni niz lokacija, odvajaju¢i
logi£ku memoriju, kako je korisnik vidi, od zi£ke memorije. Ovaj aranºman
oslobaa programere od brige zbog ograni£enja memorije.
Multitasking sistem, takoe, mora da obezbedi sistem datoteka ( le system ).
Sistem datoteka se nalazi na disku (ili vi²e njih); stoga se mora obezbediti upra-
vljanje diskom od strane operativnog sistema.
Za kraj, neophodan je mehanizam za za²titu resursa od neprimerene upotre-
be, a operativni sistem mora obezbediti i mehanizme za sinhronizaciju zadataka
i njihovu meusobnu komunikaciju. O svemu ovome ¢emo detaljnije pri£ati na
predavanjima koja dolaze.
Nastavak rada nakon izuzetka, prekida ili sistemskog poziva: Kada kernel
zavr²i obradu zahteva, nastavlja izvr²avanje prekinutog procesa vra¢anjem
27