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

Prof.dr Sinia Mini, dipl. Ing.

ng.
sinisaminic@yahoo.com

Operativni sistemi

1
Sadraj

1 Uvod o predmetu
2 Primer operativnog sistema: Linux
3 Primer operativnog sistema: Windows API

2
Sadraj, ciljevi
Sadraj:
Primeri konstrukcije dva najpopularnija sistema: Linux i
Windows
Ciljevi:
Upoznati se sa irim spektrom koncepata i principa
konstrukcije operativnih sistema
Stei potpuno znanje primenjivo na operativne sisteme
uopte, nevezano ni za jedan konkretan sistem
Upoznati se sa principima konstrukcije konkretnih,
realnih operativnih sistema

3/249
Sadraj, ciljevi

Samostalan, praktian i kontinuiran rad:


operativni sistemi se najbolje
na mogu razumeti
konstruiui sopstveni!

4/249
Literatura
Referentne knjige:
Silberschatz, A., Galvin, P., Gagne, G.: Operating
System Concepts, 7th ed., John Wiley and Sons
www.os-book.com
www.wiley.com/college/silberschatz
B. orevi, D. Pleskonji, N. Maek, Operativni sistemi
koncepti, VE Beograd, 2004.
Univerzitetski kursevi:
Stanford University: www.stanford.edu/class/cs140/
University of Washington:
www.cs.washington.edu/education/courses/451/

5/249
Glava 2: Primer operativnog sistema
Linux
Istorijat
Principi dizajna
Moduli jezgra
Upravljanje procesima
Rasporeivanje
Upravljanje memorijom
Fajl sistemi
Ulaz i izlaz
Meuprocesna komunikacija

2016. Copyright (C) 2016 by Sinia Mini 6


Istorijat
Linux spolja izgleda skoro isto i kompatibilan je sa drugim UNIX
sistemima
Linus Torvalds, finski student, 1991. poinje razvoj malog, novog open-
source kernela za 80386 i objavljuje ga na Internetu; naziva ga Linux
Linux je proizvod kolaboracije mnogih programera irom sveta i pravi je
zaetnik open-source filozofije
U svom ranom stadijumu, razvoj Linuxa se uglavnom fokusirao na
kernel jezgro sa privilegovanim izvravanjem koje direktno upravlja
svim sistemskim resursima i hardverom
Linux kernel: potpuno originalan deo softvera razvijen potpuno od
poetka od strane Linux drutva (community)
Linux sistem: kernel plus skup mnogih drugih komponenata, nekih
razvijenih ispoetka, nekih pozajmljenih od drugih sistema i grupa
Linux distribucija: sve standardne komponente Linux sistema, plus skup
administrativnih alata koje olakavaju instalaciju i odravanje i drugih
sistemskih, kao i aplikativnih programa

2016. Copyright (C) 2016 by Sinia Mini 7/249


Istorijat Linux kernel
V0.01, 14. maj 1991.:
izvrava se samo na Intel 80386 i kompatibilnim procesorima
UNIX procesi sa zatienim adresnim prostorima
nema mrenog softvera
veoma ogranien skup drajvera ureaja
podsistem za virtuelnu memoriju jednostavan, podrava straninu
organizaciju, deljenje stranica i copy-on-write, ali ne podrava
memorijski peslikane fajlove
Minix fajl sistem
V1.0, 14. mart 1994.:
standardni UNIX TCP/IP, BSD kompatibilan socket interfejs
podrka Ethernetu i modemima, kao i irem spektru raznih I/O
ureaja (flopi, CD-ROM,
ROM, mievi, zvune kartice, internac. tastature)
proireni fajl sistem i podrka lepezi SCSI kontrolera
zamena stranica u swap fajlove i memorijski preslikani fajlovi

2016. Copyright (C) 2016 by Sinia Mini 8/249


Istorijat Linux kernel
Oznake verzija kernela:
sa neparnim brojem podverzije (1.1, 1.3, 2.1,...) razvojne
(development kernels), sadre nove i moda netestirane stvari
sa parnim brojem podverzije (1.2, 1.4, 2.2,...) stabilne proizvodne
(production kernels) verzije sa ispravkama, bez novih stvari
V1.2, mart 1995.:
podrka irem spektru hardvera: PCI bus, podrka 8086 virtuelnog
moda na 80386 (emulacija DOSa)
poslednji kernel koji je bio samo za PC zapoinje podrka za Sun
SPARC, DEC Alpha i MIPS procesore
kompletirana implementacija IP i firewalls

2016. Copyright (C) 2016 by Sinia Mini 9/249


Istorijat Linux kernel
V2.0, jun 1996.:
puna podrka za vie arhitektura (sada i Motorola 68000 serija),
ukljuujui i 64-bitni Alpha
podrka za multiprocesorske arhitekture
unificirano keiranje fajlova nezavisno od keiranja blokovskih
ureaja, poboljane performanse fajl sistema i VM
poboljanje performansi TCP/IP, vei broj novih protokola (ISDN,
AX.25)
Interne kernel niti, automatsko uitavanje modula na zahtev,
dinamika konfiguracija kernela
V2.2, januar 1999.:
podrka za UltraSPARC, poboljan mreni softver, proirena podrka
I/O ureajima
V2.6, kraj 2003.:
efikasno rasporeivanje procesa kompleksnosti O(1), potpuno
preemptive u kernel modu i druga proirenja
2016. Copyright (C) 2016 by Sinia Mini 10/249
Istorijat Linux sistem i distribucije
Linux sistem sadri mnogo komponenata koje su razvijene
za UNIX van Linux pokreta : Berkley BSD, MIT X Windows,
Free Software Foundation GNU (npr. GNU C compiler, gcc)
Ovaj uticaj je iao u oba smera: Linux je doprineo
poboljanjima ili proirenjima ovih drugih projekata
Teorijski, svako moe da instalira Linux skidajui poslednje
verzije izvornog koda potrebnih komponenata sa ftp sajtova
i prevodei ih; nekada je to tako i bilo, ali je nepraktino
Distribucije obezbeuju gotove pakete komponenata
spremnih za instalaciju i odravanje instalacije. Neke
vanije:
SLS: najranije doba, prva distribucija
Slackware: jedna od najrairenijih
Red Hat, SuSe, Debian, Caldera, Craftworks, Unifix, ...

2016. Copyright (C) 2016 by Sinia Mini 11/249


Istorijat Licenciranje
Linux nije public domain, jer to znai da su se autori odrekli
svog copyright; copyright na Linux kod dre njegovi autori
Linux kernel se distribuira pod GNU General Public License
(GPL) koju definie Free Software Foundation; osnovna
pravila:
softver je besplatan
svako moe da ga kopira, koristi, menja ili distribuira bez restrikcija
niko ko koristi Linux ili ga je koristio da bi napravio svoj proizvod, ne
sme taj proizvod da uini svojim vlasnitvom
softver se ne moe distribuirati iskljuivo u binarnoj formi; svakome
kome se da binarna forma (besplatno ili komercijalno), mora biti
dostupan i izvorni kod (besplatno ili za razumnu cenu koja ne
ukljuuje cenu proizvoda, ve samo isporuke/usluge)

2016. Copyright (C) 2016 by Sinia Mini 12/249


Principi dizajna
U svom sveukupnom dizajnu, Linux lii na bilo koju drugu
tradicionalnu, ne-mikrokernelsku
mikrokernelsku implementaciju UNIX-a
UNIX
Linux je multikorisniki, multitasking sistem sa skupom UNIX-
UNIX
kompatibilnih alatki, fajl- i mrenim sistemom koji imaju istu semantiku
kao i UNIX sistemi
Zbog toga to je u poetku nastajao samo na PC platformi, kao rezultat
rada entuzijasta bez finansijske podrke, Linux je dizajniran tako da
izvlai maksimum iz ogranienih resursa. Zato Linux moe uspeno da
radi i na multiprocesorskom sistemu sa stotinama MB RAM-a,
RAM i na
samo 4MB RAM-a
U novije vreme, mnogo vie napora se ulae u standardizaciju kao cilj,
pored efikasnosti i brzine (kompatibilnost izmeu raznih
implementacija UNIX-a a nije 100%). Linux je dizajniran da bude
kompatibilan sa POSIX i Pthread standardom
Linux API podravaju semantiku SVR4 UNIX API, ne BSD semantiku

2016. Copyright (C) 2016 by Sinia Mini 13/249


Principi dizajna
Linux sistem se sastoji od tri glavne celine programskog
koda:
kernel obezbeuje sve osnovne apstrakcije OS-a OS
sistemske biblioteke: definiu standardni skup funkcija kojima
korisniki program interaguje sa kernelom
sistemski usluni programi (utilities): sistemski programi koji
obavljaju odreene zadatke; neki se mogu pozivati samo jednom da
bi neto inicijalizovali ili konfigurisali, drugi (demoni, daemons) se
permanentno izvravaju, obraujui pristigle zahteve (npr. dolazei
saobraaj sa mree, logon korisnika sa terminala, upis u log fajlove)
Ceo kernel se izvrava u procesorskom privilegovanom
reimu (kernel mode) sa punim pristupom do svih fizikih
resursa
Sav sistemski kod koji ne treba da se izvrava u kernel
modu smeten je u sistemske biblioteke ili uslune
programe
2016. Copyright (C) 2016 by Sinia Mini 14/249
Principi dizajna
Linux kernel je monolitan, u cilju boljih performansi: sav kod
i podaci (za sve funkcije, ukljuujui i drajvere, fajl sistem,
mrenu komunikaciju) su u istom adresnom prostoru, nema
promene konteksta kada proces vri sistemski poziv
Kernel moe dinamiki da uita (i izbaci) deo koda/modul po
potrebi tokom izvravanja
Linux kernel implementira sve funkcije jednog OS-a,
OS ali ono
to on nudi nije ni priblino nalik potpunom UNIX-u
UNIX
mnoge funkcije fale ili su drugaije. Umesto toga, sistemske
biblioteke nude API koji odgovara UNIX-u;
UNIX one vre
sistemske pozive kernela
Sistemske biblioteke nude i kompleksnije sistemske usluge,
kao i usluge koje nisu deo kernela (npr. sortiranje, stringovi)
2016. Copyright (C) 2016 by Sinia Mini 15/249
Moduli jezgra
Kernel moe da uitava proizvoljni modul dinamiki, po
potrebi
Svi moduli kernela izvravaju se u kernel modu i imaju
neogranien pristup do svog hardveda
Kernel modul npr. moe da implementira drajver ureaja,
fajl sistem, ili mreni protokol
Zbog toga je kernel proiriv: svako moe da doda novi
modul (npr. drajver), prevede ga i dinamiki povee (bez
prevoenja, povezivanja i restartovanja celog kernela)
Posledica: tako dodati moduli ne moraju biti po GPL licenci
jer ne zahtevaju da se ceo kernel isporuuje sa dodatim
komponentama, ve nezavisno

2016. Copyright (C) 2016 by Sinia Mini 16/249


Moduli jezgra Rukovanje modulima
Dinamiko uitavanje modula ne zahteva samo uitavanje binarne
forme u memoriju kernela, ve i dinamiko povezivanje referenci
modula na simbole iz kernela
Zato kernel uva internu tabelu simbola ne svih, ve samo onih koji
su eksplicitno izveeni iz kernela da bi ih moduli koristili (interfejs
kernela prema modulima); ovo zahteva posebnu intervenciju
programera kernela
Da bi modul uvezao simbol iz kernela, nije potreban nikakav poseban
postupak koristi se standardno spoljno povezivanje jezika C (svi
simboli koji se koriste, a nisu definisani)
Kada se modul uita, poseban deo kernela vri povezivanje, kao
klasian linker, korienjem interne tabele simbola
Uitani modul moe da dopuni ovu tabelu simbola svojim simbolima
koje izvozi
Kad god korisniki proces zahteva pristup do modula koji nije uitan,
pokree se postupak dinamikog uitavanja i povezivanja
Poseban proces povremeno proziva kernel da vidi da li je modul u
aktivnoj upotrebi i izbacuje ga ako nije
2016. Copyright (C) 2016 by Sinia Mini 17/249
Moduli jezgra Registracija drajvera
Kernel odrava dinamike tabele svih raspoloivih drajvera
i nudi rutine za dodavanje ili izbacivanje drajvera iz tabele
Kernel poziva inicijalizacionu i zavrnu rutinu modula po
uitavanju i izbacivanju. One su odgovorne za registraciju i
deregistraciju funkcionalnosti modula
Jedan modul moe da registruje vie drajvera raznih tipova
Tipovi drajvera:
drajveri ureaja: znakovnih, blokovskih i mrenih
fajl sistem: bilo ta to implementira Linux virtuelni fajl sistem
(fajlovi na disku u odreenom formatu, mreni fajl sistem itd.)
mreni protokol (ukljuujui i pravila proputanja paketa firewall)
binarni format: specifikuje nain prepoznavanja i uitavanja novog
tipa izvrnog fajla

2016. Copyright (C) 2016 by Sinia Mini 18/249


Moduli jezgra Reavanje konflikta
Linux moe da se izvrava na najrazliitijim hardverskim
konfiguracijama (PC). Kako izbei da dinamiki uitani i
nezavisni drajveri ne pristupaju konfliktno istim ureajima?
Kernel odrava listu hardverskih resursa (I/O portovi, linije
zahteva za prekid i DMA kanali) i njihove alokacije od
strane drajvera
Pre nego to pristupa odreenom HW resursu, svaki
drajver je duan da ga najpre rezervie pozivom odreene
funkcije kernela
Ako kernel zakljui da je resurs ve zauzet od strane
drugog drajvera ili prosto taj resurs nije instaliran, odbija
zahtev; na modulu je da taj problem dalje razrei (moe da
obustavi svoju inicijalizaciju ili da proba da rezervie
alternativne resurse)

2016. Copyright (C) 2016 by Sinia Mini 19/249


Upravljanje procesima
UNIX stil: kreiranje novog procesa (nad istim kodom) i
pokretanje novog programa (unutar istog procesa) su dve
nezavisne operacije fork() i exec()
Identitet (identity) procesa:
Process ID (PID): jedinstveni identifikator procesa koji se koristi u
sistemskim pozivima kao argument
Credentials: ID korisnika i ID grupa korisnika koje odreuju prava
procesa da pristupa sistemskim resursima i fajlovima
Personality: identifikator koji moe neznatno da izmeni semantiku
sistemskih poziva; prvenstveno se koristi kod emulacionih biblioteka
da bi se zahtevalo da sistemski poziv bude kompatibilan sa
odreenim varijantama UNIXa
Okruenje (environment) procesa nasleuju se od
roditelja:
vektor argumenata iz komandne linije
vektor varijabli iz okruenja: lista parova name=value; definie ga
exec()
2016. Copyright (C) 2016 by Sinia Mini 20/249
Upravljanje procesima
Kontekst (context) procesa:
scheduling context: informacije potrebne da se proces
suspenduje i ponovo restartuje (kontekst izvravanja)
svi registri procesora;floating-point
floating registi se uvaju i restauriraju
samo po potrebi
kernel stek procesa (process
process kernel stack): deo memorije
kernela rezervisan za kod koji se izvrava u kernel modu; svi
sistemski pozivi i prekidne rutine koriste ovaj stek
accounting: informacije o resursima koje proces koristi i
korienju resursa tokom dosadanjeg ivota procesa
file table: niz pokazivaa na deskriptore otvorenih fajlova
unutar kernela; kada identifikuje fajlove u sistemskim
pozivima, proces koristi indeks ulaza u ovoj tabeli

2016. Copyright (C) 2016 by Sinia Mini 21/249


Upravljanje procesima
Kontekst (context) procesa (nastavak):
file-system context: podaci koji se odnose na zahteve za
otvaranjem novih fajlova (tekui i koreni direktorijum za
traenje fajlova)
signal-handler table: UNIX moe da prosleuje asinhrone
signale procesu; ova tabela definie rutine u adresnom
prostoru procesa koje se pozivaju za odreene signale
virtual memory context: podaci o adresnom prostoru
procesa

2016. Copyright (C) 2016 by Sinia Mini 22/249


Upravljanje procesima
Kreiranje niti (thread): sistemski poziv clone()
Linux zapravo ne razlikuje procese i niti, ve ih generalizuje
u pojam zadatka (task) tok kontrole unutar programa
Ideja je da se pri kreiranju zadatka-deteta
zadatka samo definie ta
e tano on deliti sa roditeljem. Mogue je deliti:
Deliti: Fleg (argument kreiranja zadatka-deteta):
zadatka
Podatke o fajl sistemu CLONE_FS
Adresni prostor CLONE_VM
Rutine za signale CLONE_SIGHAND
Otvorene fajlove CLONE_FILES
clone() sa postavljenim svim ovim flegovima kreira nit
clone() sa obrisanim svim ovim flegovima kreira proces
(kao fork())
2016. Copyright (C) 2016 by Sinia Mini 23/249
Upravljanje procesima
Ovo je implementirano tako to PCB zadatka zapravo uva pokazivae
na strukture koje uvaju kontekst fajl-sistema,
fajl tabelu deksriptora
stranica, tabelu rutina za obradu signala i kontekst virtuelne memorije,
pa vie zadataka moe da deli ove strukture (podkontekste)
Argumenti poziva clone() zapravo govore koje od ovih podkonteksta
treba kopirati u zadatak-dete
dete (duboko kopiranje), a koje deliti (plitko
kopiranje, samo kopirati pokazivae na podkontekste unutar PCB-a)
PCB
PCB
File Table
Process Identity

Sched Context File System Ctxt

File Table Ptr


File-Sys Ctxt Ptr Sig Hndl Tbl
Sig Hndl Tbl Ptr
VM Ctxt Ptr VM Ctxt
2016. Copyright (C) 2016 by Sinia Mini 24/249
Rasporeivanje
Linux poseduje dva algoritma rasporeivanja:
time-sharing za pravino rasporeivanje sa preuzimanjem
real-time rasporeivanje po prioritetima
Pre V2.5 kernela, Linux je koristio varijantu tradicionalnog
UNIX time-sharing rasporeivanja; ovo nije imalo adekvatnu
podrku za multiprocesorske sisteme i nije bilo skalabilno za
vie procesa
Od V2.5, algoritam rasporeivanja izvrava se u
konstantnom vremenu, nezavisnom od broja procesa (O(1))
Rasporeivanje u Linuxu je sa preuzimanjem (preemptive),
bazirano na prioritetima (priority-based
priority )
Dva opsega prioriteta (nii broj-vii
broj prioritet):
real-time: 0-99
nice: 100-140

2016. Copyright (C) 2016 by Sinia Mini 25/249


Rasporeivanje
Procesima vieg prioriteta dodeljuje se dui vremenski
interval i obratno (suprotno od ustaljenog principa)
od 10 ms (prioritet 140) do 200 ms (prioritet 0)
Proces se smatra kandidatom za izvravanje sve dok mu ne
istekne dodeljeni interval; kada mu istekne interval, on se
smeta u red expired procesa i nije kandidat za izvravanje
sve dok svim ostalim procesima ne istekne interval
Za svaki prioritet vode se dva reda: active i expired
Priority Active task list Expired task list
0
1
... ... ...
140

2016. Copyright (C) 2016 by Sinia Mini 26/249


Rasporeivanje
Bira se proces najvieg prioriteta iz active liste
Kada se cela active struktura isprazni, strukture active i
expired zamenjuju uloge
Kod multiprocesora, svaki procesor ima svoju ovakvu
strukturu i vri svoje rasporeivanje po istom principu
Procesu se dodeljuje dinamiki prioritet baziran na nice
vrednosti +/-5 5 u zavisnosti od interaktivnosti procesa.
Interaktivnost je srazmerna vremenu koju je proces proveo
ekajui na zavretak I/O operacija. Vea interaktivnost
vii prioritet (blie 5),
5), manja interaktivnost nii prioritet
(blie +5)
Dinamiki prioritet se aurira kada procesu istekne interval;
kada active i expired zamene uloge, svi procesi imaju
auriran prioritet i novi interval vremena u skladu sa njim

2016. Copyright (C) 2016 by Sinia Mini 27/249


Rasporeivanje
Kernel svoje sopstvene poslove rasporeuje bitno drugaije
nego korisnike procese
Kada se prelazi u kernel mod?
kada korisniki proces izvri sistemski poziv eksplicitno ili implicitno
(npr. page fault)
kada neki I/O ureaj generie hardverski prekid i pokrene se
prekidna rutina
Problem: obezbediti meusobno iskljuenje kritinih sekcija
kernela tako da asinhroni prekid ne prekine izvravanje
kritine sekcije samog kernela i ue u svoju kritinu sekciju
Pre V2.6, Linux kernel je ovo reavao tako to nije bio
preemptive nije dozvoljavao prekide u kernel modu
Sada je Linux kernel preemptive, pa se procesor moe
preuzeti i kada izvrava kod u kernel modu

2016. Copyright (C) 2016 by Sinia Mini 28/249


Rasporeivanje
Za zakljuavanje kratkih kritinih sekcija unutar kernela,
Linux koristi:
zabranu/dozvolu preuzimanja (prekida) za jednoprocesorski sistem
spinlock za vieprocesorski sistem
Ako izvravanje dri neki spinlock, onda nije dozvoljeno ni
preuzimanje. Reeno brojanjem kljueva
(preempt_count)
Za due kritine sekcije unutar kernela, Linux koristi
semafore

2016. Copyright (C) 2016 by Sinia Mini 29/249


Upravljanje memorijom Alokacija
Dve komponente upravljanja memorijom:
alokacija fizike memorije: stranica, grupa stranica i manjih blokova
upravljanje straninom ogranizacijom virtuelne memorije
Tri zone fizike memorije:
ZONE_DMA:: memorija za prenos preko DMA, za one arhitekture gde
je to ogranieno (npr. na 80x86, neki ISA ureaji mogu da
pristupaju samo najniim 16MB fizike memorije preko DMA); ako
ogranienje ne postoji, ova zona ne postoji (koristi se sledea)
ZONE_NORMAL:: zona koju koristi procesor za veinu memorijskih
potreba
ZONE_HIGH:: fizika memorija koja se ne preslikava u adresni
prostor kernela (npr. 32-bitne
bitne Intel aritekture, od 4GB adresnog
prostora, kernel prostor je prvih 896MB)
Kernel odrava listu slobodnih stranica i opsluuje zahteve
za alokacijom memorije iz odgovarajue zone

2016. Copyright (C) 2016 by Sinia Mini 30/249


Upravljanje memorijom Alokacija
Svaka zona ima svoj alokator stranica (page allocator) koji
moe da alocira jednu ili vie susednih stranica na zahtev
Sistem parnjaka (buddy system) za alokaciju vie susednih
stranica:
kad god se oslobodi jedan blok i njegov parnjak (buddy) iste
veliine je slobodan, ova dva se spajaju u dvostruko vei blok
slobodne memorije (buddy heap), itd. rekurzivno navie dok moe
ako se zahtev ne moe zadovoljiti odgovarajuim malim slobodnim
blokom, onda se prvi sledei vei slobodni parnjak deli na dva dela,
i dalje rekurzivno, sve dok se ne dobije blok zahtevane veliine koji
se alocira
najmanji blok je veliine stranice
za svaku dozvoljenu veliinu bloka vodi se zasebna lista slobodnih
blokova

2016. Copyright (C) 2016 by Sinia Mini 31/249


Upravljanje memorijom Alokacija
Alokacija u kernelu vri se ili statiki (drajveri koji alociraju
svoj prostor prilikom podizanja sistema) ili dinamiki
Kernel ne mora da koristi osnovni alokator stranica, ve
postoje posebni memorijski podsistemi za razliite potrebe
koji se oslanjaju na osnovni alokator stranica:
podsistem virtuelne memorije
kmalloc() za alokaciju blokova promenljive veliine unutar
kernela; alocira stranice na zahtev, ali ih onda deli na manje delove
po potrebi; kada se zahteva blok odreene veliine, trai se takav
deo u listama slobodnih delova ve alociranih stranica; ako takvog
nema, alocira se nova stranica ili vie stranica
slab alokator za kernel strukture
page cache za keiranje stranica koje pripadaju fajlovima,
blokovskim I/O ureajima ili mrenim baferima

2016. Copyright (C) 2016 by Sinia Mini 32/249


Upravljanje memorijom VM
Logiki pogled na virtuelni adresni prostor procesa:
skup kontinualnih, nepreklapajuih regiona, poravnatih na stranice,
koji ine podskup virtuelnog adresnog prostora koji proces koristi
svaki od ovih regiona opisan je strukturom vm_area_struct:
prava pristupa (read, write, execute) i fajl preslikan u region
ove strukture su za svaki proces povezane u balansirano binarno
stablo da bi obezbedile brzu pretragu regiona koji odgovara nekoj
virtuelnoj adresi
Fiziki pogled na virtuelni adresni prostor:
informacije smetene u tabele preslikavanja adresa koje koristi
hardver (PMT: lokacija u fizikoj memoriji, da li je u memoriji)
ovom tabelom manipuliu prekidne rutine kernela koje se pozivaju
na page fault
svaka vm_area_struct sadri pokaziva na tabelu funkcija koje
implementiraju rukovanje stranicama za taj region (polimorfizam);
na njih se preusmeravaju pozivi iz prekidnih rutina na page fault

2016. Copyright (C) 2016 by Sinia Mini 33/249


Upravljanje memorijom VM
Regioni virtuelne memorije se karakteriu:
ta je u pozadini (backing store) odakle je stranica inicijalno
dobijena:
nita - demand-zero memory: stranica je inicijalno popunjena nulama
fajl: prozor na deo memorijski preslikanog fajla; ulaz u PMT je usmeren
na istu fiziku stranicu iz kea stranica koja odgovara tom delu fajla
reakcija na upis:
privatni region: copy-on-write semantika
deljeni region: upisi se manifestuju u svim procesima koji dele region
Postupak kernela pri kreiranju procesa (fork()):
(
kopira deskriptore vm_area_struct i tabele preslikavanja roditelja
u prostor deteta; tabele ukazuju na iste stranice (inkrementira se
broja referenci); roditelj i dete dele sve stranice
privatni regioni roditelja se u detetu oznaavaju kao read-only i
copy-on-write, tako da se dele sve dok proces-dete
proces ne eli da ih
menja

2016. Copyright (C) 2016 by Sinia Mini 34/249


Upravljanje memorijom VM
Algoritam zamene stranica - modifikovani second-chance
(clock) algoritam:
svakoj stranici se pridruuje starost (age) - mera koliko je stranica
bila aktivna u poslednje vreme (zapravo odslikava mladost)
smanjuje se ka 0 pri svakom obilasku kazaljke
umesto binarnih indikatora, koriste se brojai (age), pa se algoritam
ponaa priblinije LRU
Mehanizam zamene stranica:
zamena je mogua i u posebno namenjene particije i u fajlove
(znatno sporije)
alokacija blokova na particiji za zamenu pomou bit-vektora
bit
zauzetosti koji se uvek dri u memoriji
next-fit algoritam alokacije kontinualne sekvence blokova na disku za
zamenu, radi poveanja performansi

2016. Copyright (C) 2016 by Sinia Mini 35/249


Upravljanje memorijom VM
Unutar virtuelnog adresnog prostora svakog procesa, Linux
odvaja poseban deo fiksne veliine (zavisne od arhitekture)
za svoju internu upotrebu; ove stranice su zatiene od
pristupa u korisnikom reimu. Dva regiona:
preslikan na tano odreeno fiziko mesto sa glavnim delom kernela
preslikan proizvoljno i dostupan procesu preko sistemskih poziva
vmalloc() (alocira deo memorije eljene veliine) i vremap()
(preslikava deo virtuelnog prostora u prostor koga koristi drajver ili
memorijski preslikan I/O)
Prilikom pokretanja programa (exec())
( unutar istog
procesa, kreira se novi izvrni kontekst koji prepisuje stari.
Loader obezbeuje novo preslikavanje programa u virtuelni
prostor

2016. Copyright (C) 2016 by Sinia Mini 36/249


Upravljanje memorijom Uitavanje
Ne postoji jedinstvena rutina za uitavanje, ve tabela
raspoloivih rutina, jer su podrani razliiti formati binarnih
izvrnih fajlova:
a.out: stari UNIX jednostavni format
ELF: noviji format koji dozvoljava proirenje novim sekcijama (npr.
sa debug informacijama)
Loader ne uitava program u memoriju, ve preslikava
stranice programskog fajla u virtuelni prostor procesa.
Stranice se dalje uitavaju na zahtev tokom izvravanja
Linux podrava biblioteke sa dinamikim povezivanjem
(DLL)

2016. Copyright (C) 2016 by Sinia Mini 37/249


Fajl sistemi VFS
U UNIXu i Linuxu fajl ne mora da bude samo na disku
(lokalnom ili udaljenom), ve je to bilo koji apstraktni
objekat koji ima operacije davanja i prihvatanja toka
podataka virtuelni fajl sistem (virtual file system, VFS)
VFS podrava objektni pristup. Vrste objekata (klase):
inode object: predstavlja fajl
file object: predstavlja otvoreni fajl
superblock object: predstavlja ceo fajl sistem
dentry object: predstavlja jedan ulaz u direktorijumu
Za svaku od ovih vrsta objekata (klasa), definie se skup
operacija. Svaki objekat predstavljen je strukturom
podataka koja sadri i pokaziva na tabelu funkcija (virtual
table pointer, VTP) polimorfizam i dinamiko vezivanje
kao u C++u

2016. Copyright (C) 2016 by Sinia Mini 38/249


Fajl sistemi VFS
Inode objekat sadri informacije o poziciji fajla na disku.
Globalan je (deljen izmeu procesa). Da bi mu pristupio,
proces mora najpre da dobije file objekat koji na njega
ukazuje
File objekat sadri informacije o pravima pristupa procesa
do otvorenog fajla, kao i pokaziva trenutne lokacije za
sekvencijalni pristup. Lokalan je za svaki proces, ali se
keira prilikom oslobaanja, ako je potreban drugom
procesu u bliskoj budunosti
Operacije nad fajlovima koji predstavljaju direktorijume
izvravaju se specifino i definisane su za inode, a ne za
file objekte, jer ne zahtevaju prethodno otvaranje fajla
Za svaki montirani fajl sistem vodi se superblock objekat.
On obezbeuje pristup do inode objekata

2016. Copyright (C) 2016 by Sinia Mini 39/249


Fajl sistemi VFS
U cilju breg preslikavanja simbolikih imena u inode
objekte, vode se dentry objekti (ke preslikavanja vorova
u hijerarhiji direktorijuma): za svaki vor u strukturi
direktorijuma kome se pristupalo po jedan. On preslikava
simboliko ime vora u hijerarhiji direktorijuma u inode
Najstariji Linux fajl sistem Minix imao je mnogo ogranienja
(14 znakova za ime fajla, 64MB za fajl)
Standardni Linux fajl sistem: ext2fs (second extended file
system). Ima mnogo slinosti sa BSD Fast File System:
indeksni pristup alokaciji, sa jednim do tri nivoa indirekcije
direktorijumi se smetaju kao obini fajlovi, samo im se sadraj
drugaije interpretira: svaki blok u fajlu je ulanana lista iji su
elementi promenljive veliine i sadre imena fajlova i broj inode
koga taj element predstavlja
2016. Copyright (C) 2016 by Sinia Mini 40/249
Fajl sistemi ext2fs
Podrazumevana veliina bloka je 1KB, a podrani su i
blokovi veliine 2KB i 4KB
U cilju poveanja performansi (pristupati to vie susednim
blokovima na disku), prostor za smetanje fajlova deli se
na grupe blokova (block groups) (u FFS grupe cilindara, ali
je to prevazieno jer noviji diskovi nemaju cilindre iste
veliine)
Kada alocira fajl, ext2fs najpre odreuje grupu blokova za
fajl:
za smetanje blokova sa podacima fajla, trai se najpre mesto
unutar grupe blokova gde je smeten i inode za taj fajl
za smetanje inode strukture za fajlove koji nisu direktorijumi, trai
se najpre u grupi blokova u kojoj je smeten roditeljski direktorijum
inode za direktorijume se rasipaju po raznim grupama blokova
2016. Copyright (C) 2016 by Sinia Mini 41/249
Fajl sistemi ext2fs
Unutar grupe blokova, blokovi se alociraju na sledei nain:
vodi se bit-vektor
vektor slobodnih blokova za svaku grupu blokova
forsira se kontinualna alokacija sa izbegavanjem fragmentacije
kada se alocira prvi blok za fajl, trai se najpre blok na poetku grupe
kada se fajl proiruje, blok se trai najpre u grupi u kojoj je najskorije
alociran blok tog fajla, u dva prolaza:
prvo se trai ceo bajt slobodnih blokova, kako bi se prealocirao niz fiziki
susednih 8 blokova za taj fajl; ako se ovako nae ceo bajt, trae se
unazad slobodni biti sve do poslednje popunjenog bloka, kako bi se
popunila rupa, a zatim se u novom bajtu alocira ostatak do 8 blokova
ako to ne uspe, trai se bilo koji slobodan blok u toj grupi; zatim se
odmah alociraju svi slobodni blokovi do punog bajta

. . . . . .. .

........
2016. Copyright (C) 2016 by Sinia Mini 42/249
Fajl sistemi - Journaling
Jedna popularna funkcionalnost mnogih Linux fajl sistema -
beleenje (journaling):
modifikacije (akcije) nad fajl sistemom koje se vre u okviru jedne
nedeljive celine transakcije (transaction) ne vre se sinhrono, ve
se najpre upisuju u zapisnik (journal)
write() zavri (commit) i cela upie u
kada se transakcija (npr. write())
zapisnik, kontrola se vraa korisnikom procesu
u meuvremenu, zapisane akcije se asinhrono redom obavljaju nad
fajl sistemom; zapisnik je zapravo kruni bafer koji ima pokaziva
(kurzor) koje zapisane akcije su zaista izvrene u fajl sistemu
kada su sve akcije jedne transakcije zavrene, one se briu iz
zapisnika
zapisnik se uva kao posebna sekcija fajl sistema
ako sistem padne, cele transakcije koje su potvrene (committed)
a nisu izvedene u celini u fajl sistemu se naknadno izvravaju;
delimino izvrene transakcije se ponitavaju (razmotavaju, undo,
rollback), kako bi sistem ostao u konzistentnom stanju
2016. Copyright (C) 2016 by Sinia Mini 43/249
Fajl sistemi Process File System
UNIX/Linux process file system (/proc):
virtuelni fajl sistem koji se ne odnosi na perzistentne podatke, ve
koristi VFS da bi vratio informaciju na svaki zahtev za itanjem
svaki poddirektorijum unutar /proc odnosi se na jedan tekui
proces sa imenom koje predstavlja ASCII reprezentaciju PID-a
PID
fajlovi unutar ovih poddirektorijuma nude razne reijske i debug
informacije o pokrenutim procesima
ovaj sistem nudi drugim procesima mogunost da ovim
informacijama pristupaju kao obinim tekstualnim fajlovima; npr.
UNIX komanda ps (lista stanja procesa) je na Linuxu
implementirana kao najobiniji neprivilegovani program koji ita i
ispisuje ove fajlove
posebni globalni fajlovi u ovom sistemu nude informacije i
statistiku o celom sistemu i kernelu
/proc/sys sadri fajlove koji se odnose na parametre kernela i
koji dozvoljavaju i upis (promena parametara); na ovaj nain
administrator utie na sistem prostim upisom u ove fajlove
2016. Copyright (C) 2016 by Sinia Mini 44/249
Ulaz i izlaz
Kao i u UNIXu, drajveri ureaja se spolja koriste kao fajlovi
oni su objekti u fajl-sistemu:
sistemu:
da bi pristupao ureaju, proces treba da otvori kanal ka ureaju kao
i svaki drugi fajl
administrator moe da kreira poseban fajl u sistemu koji referie
odreeni drajver, tako da se ulaz/izlaz s tim fajlom usmerava na
drajver
prava pristupa do ureaja definiu se i kontroliu kao za fajlove
Blokovski orijentisani ureaji (svi diskovi i fle memorije):
za svaki ureaj se vodi posebna lista zahteva
lista zahteva je sortirana po redosledu poetnog sektora koji se trai
rasporeivanje zahteva je po C-SCAN
C algoritmu
tek kada se zahtev opslui i operacija zavri, izbacuje se iz liste i
prelazi na sledei, dok su u meuvremenu stizali novi zahtevi, u cilju
poboljanja performansi; problem: mogue izgladnjivanje!

2016. Copyright (C) 2016 by Sinia Mini 45/249


Ulaz i izlaz
Zato je od verzije 2.6 algoritam C-SCAN
C modifikovan tako da
sprei izladnjivanje:
pored glavnog reda sortiranog po broju sektora, postoje jo dva
pomona reda: zahtevi za itanje i zahtevi za upis
kada stigne zahtev, on se smeta u glavni red i u jedan od pomonih
prema svom tipu
pomoni redovi su sortirani prema isteku vremenskog roka
(deadline): kada pristigne, zahtevu se dodeli vremenski rok u kome
se mora opsluiti (0.5s za itanje i 5s za upis)
zahtevi se podrazumevano opsluuju po redosledu u glavnom redu;
meutim, ukoliko nekom zahtevu u pomonim redovima istekne
vremenski rok, on se opsluuje preko reda

2016. Copyright (C) 2016 by Sinia Mini 46/249


Ulaz i izlaz
Znakovno-orijentisani
orijentisani ureaji:
svaki drajver registruje se kernelu sa skupom svih funkcija koje
implementiraju one operacije fajl sistema koje drajver podrava
kernel uopte ne filtrira zahteve ureaju, ve ih sve prosleuje preko
registrovanih funkcija; drajver je duan da adekvatno reaguje na
zahteve koje ne podrava
izuzetak su ureaji koji implementiraju terminale; oni imaju poseban
interfejs

2016. Copyright (C) 2016 by Sinia Mini 47/249


Meuprocesna komunikacija
UNIX asinhroni signali (signal):
jedan proces ili kernel moe da poalje signal drugom procesu
signal ne nosi nikakvu drugu informaciju, ve je prost dogaaj
kada primi signal, odredini proces prekida trenutni tok kontrole i
prelazi na izvravanje rutine za obradu signala (signal handler) koja
je definisana za taj signal u tom procesu
odredini proces moe i da eka na signal (blokiran) posebnim
sistemskim pozivom
Unutar kernela, ekanje na dogaaje implementira se
ekanjem kernel procesa u redovima ekanja; dogaaj
deblokira sve procese koji na njega ekaju
Postoje i klasini semafori za upotrebu u korisnikim
procesima

2016. Copyright (C) 2016 by Sinia Mini 48/249


Meuprocesna komunikacija
Razmena podataka izmeu procesa:
standardni UNIX pipe mehanizam u Linuxu je implementiran kao
poseban tip fajla u fajl sistemu
mrena komunikacija
deljenje memorije izmeu procesa

2016. Copyright (C) 2016 by Sinia Mini 49/249


Glava 2: Primer operativnog sistema
Windows

Istorijat
Komponente sistema
Programski interfejs Win32

2016. Copyright (C) 2016 by Sinia Mini 50


Istorijat
Windows XP je 32/64-bitni preemptive multitasking OS za
AMD K6/K7, Intel IA32/IA64 i novije procesore; naslednik je
Windows NT i 2000, a zamenjuje Windows 95/98
Sredinom 80-ih, ih, Microsoft i IBM sarauju na izgradnji OS/2
koji je bio pisan na asembleru za jednoprocesorske 80286
1988. Microsoft odluuje da pone ispoetka razvoj sistema
nove generacije (new technology, NT) koji e podravati i
OS/2 i POSIX API
1988. Microsoft angauje Dejva Katlera (Dave Cutler),
arhitektu DEC VAX/VMS sistema, koji zapoinje ovaj razvoj
Inicijalno je ideja bila da OS/2 API bude prirodno okruenje,
ali se vremenom odluka menja u Win32 API
Prve verzije: Windows NT 3.1 (u vreme 16-bitnog
16 Windows
3.1)
2016. Copyright (C) 2016 by Sinia Mini 51/249
Istorijat
Windows NT 4.0 preuzima GUI od Windows 95 i ugraeni
Web server i browser softver; sve GUI i grafike rutine
premetene su u kernel radi poboljanja performansi, uz
smanjenje pouzdanosti
Windows 2000 (februar 2000.) naputa podrku svega osim
Intel i kompatibilnih procesora iz trinih razloga; uvodi
Active Directory, bolju podrku umreavanju i laptop
raunarima, plug-and-play, distribuirani fajl sistem, podrku
vie procesora i vie memorije
Windows XP (oktobar 2001.) je nadgradnja Windows 2000 i
zamena za Windows 95/98: moderniji GUI za napredniji
hardver, bolje umreavanje i komunikacija (npr.
Messenger), znaajno poveanje performansi i poveana
pouzdanost i sigurnost
Windows .Net Server (2002.): serverska verzija Windows XP
2016. Copyright (C) 2016 by Sinia Mini 52/249
Istorijat
Windows XP je viekorisniki OS koji dozvoljava simultani
pristup kroz distribuirane usluge ili kroz viestruke instance
GUIa preko terminal servera:
serverska varijanta terminal servera dozvoljava simultani pristup sa
klijentskih raunara
desktop varijanta dozvoljava multipleksiranje tastature, mia i
ekrana izmeu sesija vie aktivnih korisnika
Windows XP je prva 64-bitna
bitna varijanta Windowsa
Dve verzije dekstop Windows XP: Professional Edition i
Home Edition
Windows XP Server ima iste osnovne komponente, ali nudi
mnoge druge usluge za podrku Webserver farmi, print/file
servera, klastera i velikih centara podataka (do 64GB
memorije i 32 procesora na IA32, odnosno 128GB memorije
i 64 procesora na IA64)
2016. Copyright (C) 2016 by Sinia Mini 53/249
Komponente sistema
OS/2 app Win16 app Win32 app MS-DOS POSIX app
app

OS/2 Win16 VDM MS-DOS POSIX


subsystem VDM subsystem

Win32
subsystem
User mode
Executive
Security Plug &
reference play
I/O manager monitor manager
File system Virtual Window
Object Process memory
Cache manager manager monitor manager
manager
Device drivers
Kernel Graphic
Network drivers device
Hardware Abstraction Layer (HAL) drivers

Hardware
2016. Copyright (C) 2016 by Sinia Mini 54/249
Programski interfejs Win32
Pristup kernel objektima:
CreateXXX():: kreira/zauzima kernel objekat tipa XXX i vraa
ruku (handle) tipa HANDLE;; ako ne uspe, vraa 0 ili
INVALID_HADLE_VALUE
CloseHandle():: oslobaa kernel objekat na koji ukazuje data
ruka (handle); ako objekat vie niko ne koristi, sistem ga brie
Tri naina da procesi dele kernel objekte:
1. proces-dete
dete nasleuje objekat (ruku) roditelja:
kada kreira objekat sa CreateXXX(),
CreateXXX() roditelj prosleuje strukturu
SECURITY_ATTRIBUTES kao argument sa poljem bInheritHandle
postavljenim na true
kada kreira proces-dete sa CreateProcess(),
CreateProcess() roditelj prosleuje
true kao argument bInheritHandle da bi se ruke nasledile
proces-dete
dete mora da zna koje se ruke dele i kako do njih da pristupi
(npr. preko komandne linije)
proces-dete
dete trai pristup do deljenog objekta
dalje procesi mogu da komuniciraju preko deljenog objekta

2016. Copyright (C) 2016 by Sinia Mini 55/249


Programski interfejs Win32
SECURITY_ATTRIBUTES sa;
sa.nlength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
Handle aSemaphore = CreateSemaphore(&sa,1,1,NULL);
char commandLine[132];
ostrstream ostring(commandLine,sizeof(commandLine));
ostring<<aSemaphore<<ends;
CreateProcess(program.exe,commandLine,NULL,NULL,TRUE,...)

2. jedan proces kreira objekat i pri kreiranju mu zadaje simboliko ime;


drugi proces otvara postojei (ne kreira novi) objekat sa zadatim
simbolikim imenom (OpenXXX()
OpenXXX()); problem: sukob imena
(nameclashing) jer je prostor simbolikih imena globalan za ceo
sistem, nezavisno od tipa objekta
// Process A:
HANDLE aSemaphore = CreateSemaphore(NULL,1,1,MySem1);
// Process B:
HANDLE bSemaphore = OpenSemaphore(SEMAPHORE_ALL_ACCESS,
FALSE,MySem1);
2016. Copyright (C) 2016 by Sinia Mini 56/249
Programski interfejs Win32
3. proces koji je kreirao objekat koristi neki drugi metod da prosledi
vrednost svoje ruke do objekta, a onda onaj koji je primio tu
vrednost poziva DuplicateHandle() da bi dobio svoju ruku do
istog deljenog objekta
Ruka instance (instance handle):
svaki DLL ili izvrni fajl uitan u adresni prostor procesa identifikuje
se rukom instance virtuelna adresa njegove lokacije
program moe dobiti ruku za neki modul u svom adresnom prostoru
pozivom GetModuleHandle() sa argumentom koji zadaje ime
modula; ako je ime NULL,, dobija se bazna adresa samog procesa
Nit (thread) se moe kreirati u stanju suspenzije ne
izvrava se dok ga neka druga nit ne pokrene sa
ResumeThread().. Nit se suspenduje sa
SuspendThread().. Broje se pozivi ove dve funkcije, nit se
pokree kada je Resume pozvano isti broj puta kao i
Suspend)
2016. Copyright (C) 2016 by Sinia Mini 57/249
Programski interfejs Win32
Postoje sinhranizacioni objekti semafor i mutex
Postoji i sinhronizacija pomou WaitForSingleObject()
i WaitForMultipleObjects()
Meusobno iskljuenje kritine sekcije:
InitializeCriticalSection(),
InitializeCriticalSection()
EnterCriticalSection(),
EnterCriticalSection()
LeaveCriticalSection() efikasnije nego korienje
drugih sinhronizaconih primitiva jer ne alocira kernel objekte
Razmena poruka izmeu procesa:
asinhrono: PostMessage(), PostThreadMessage()
sinhrono: SendMessage(), SendThreadMessage(),
SendThreadMessage()
SendMessageCallback()
ako proces ne pozove GetMessage() da primi poruku tokom oko
5s, sistem je oznaa kao Not Responding
svaka Win32 nit ima svoj red primljenih poruka (u Win16 red poruka
je bio zajedniki)
2016. Copyright (C) 2016 by Sinia Mini 58/249
Programski interfejs Win32
Alokacija i dealokacija virtuelne memorije:
VirtualAlloc() i VirtualFree()
mogue je definisati virtuelnu adresu gde se alocira memorija; mora
biti vea od 10000h (prvih 64KB adresnog prostora je zabranjeno za
korienje)
veliina se izraava u multiplima veliine stranice
proces moe da zakljua deo memorije (sprei zamenu stranica) sa
VirtualLock();; najvie 30 stranica, osim ako ne povea veliinu
svog radnog skupa sa SetProcessWorkingSetSize()
Memorijski preslikani fajlovi:
jo jedan nain da procesi dele podatke oba preslikaju isti fajl u
deo svog adresnog prostora
ako pozove CreateFileMapping() sa argumentom 1 kao
rukom za fajl, ne koristi se fajl, ve se deo adresnog prostora samo
deli sa drugim procesima
2016. Copyright (C) 2016 by Sinia Mini 59/249
Programski interfejs Win32
Posebni rezervisani delovi adresnog prostora koji se koriste
za dinamiku alokaciju i dealokaciju memorije heap:
svaki proces ima podrazumevani heap veliine 1MB; mnoge Win32
API funkcije koriste ovaj heap, pa je pristup do njega sinhronizovan
za konkurentne niti tog procesa (meusobno iskljuenje)
proces moe kreirati i unitavati heap sa HeapCreate() i
HeapDestroy()
alokacija i dealokacija prostora: HeapAlloc(), HeapFree()
meusobno iskljuenje pristupa jednom heap-u (ne zakljuavanje
stranica od zamene): HeapLock(),
HeapLock() HeapUnlock()
Statike programske promenljive koje su zasebne (lokalne)
za svaku nit:
_declspec(thread) long int cur_pos = 0;

2016. Copyright (C) 2016 by Sinia Mini 60/249

You might also like