operativni sistemi

94
Operativni sistemi Niti i procesi

Upload: maggy-howe

Post on 30-Dec-2015

68 views

Category:

Documents


2 download

DESCRIPTION

Operativni sistemi. Niti i procesi. Prostori kernela i korisnika. Kernel operativnog sistema mora da se nalazi u delu memorije u koji korisni č ki programi nemaju direktnog pristupa – u prostoru kernela . - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Operativni sistemi

Operativni sistemi

Niti i procesi

Page 2: Operativni sistemi

Prostori kernela i korisnika

• Kernel operativnog sistema mora da se nalazi u delu memorije u koji korisnički programi nemaju direktnog pristupa – u prostoru kernela.

• Ukoliko postoji hardverska podrška za ovo, to se rešava višom privilegijom izvršavanja kôda u prostoru kernela, u odnosu na prostor korisnika. Zbog toga se često izvršavanje sa visokom privilegijom poistovećuje sa prostorm kernela, ali to nije uvek slučaj.

• Ako nema hardverske podrške, tada se sistem oslanja na “lepo ponašanje” korisničkih programa, nadajući se da oni nikada neće direktno adresirati prostor kernela.

Page 3: Operativni sistemi

Sistemski pozivi

• Bilo da postoji ili ne postoji podrška hardvera (mikroprocesora) koja štiti prostor kernela, programi iz prostora korisnika mu pristupaju isključivo upotrebom sistemskih poziva.

• Obrnuto ne važi – program iz prostora kernela nikada nema potrebe da pristupa korisničkom programu, sem u nekim, vrlo specifičnim, situacijama.

• Kernel je skup rezidentnih biblioteka koje pružaju svoje usluge korisničkim programima (aplikacijama).

• Jedne kernel funkcije mogu da pozivaju druge kernel funkcije, ali nikada funkcije iz aplikacija.

Page 4: Operativni sistemi

Program

• Program* se nalazi u sklopu izvršne datoteke• Izvršna datoteka dobija se nakon procesa prevođenja

izvornog programa • Program se sastoji od instrukcija i podataka• Podaci mogu da budu konstante i promenljive• Pomenljive mogu da budu perzistentne i tranzijentne• Instrukcije mogu da budu privatne ili deljene

* Za definiciju programa pogledati meterijal iz predmeta Uvod u programiranje.

Page 5: Operativni sistemi

Program u memoriji (task)

text

data

BSS

heap

stack

Runtime library

text

data

RPT

zaglavlje

Program na disku (EXE)

Task

Neinicijalizovani podaci

Inicijalizovani podaci

Privatni podaci(tranzijentni)

Programski kôd

Dobija se nakon

prevođenja

Metapodaci na disku

Deo konteksta

CSIP

DSBP

SSSP

Deljene instrukcije i podaci

Globalni podaci

Page 6: Operativni sistemi

Multitasking

• Sve ovo smo imali i kod MS-DOS-a.• Ono što nismo imali je da se proizvoljan broj taskova

izvršava u isto vreme – multitasking.• Ali, tvrdnja da neki operativni sistem izvršava više

taskova istovremeno nije uvek tačna, čak i kada je u pitanju sistem sa više procesora (jezgara).

• Multitasking je samo naša percepcija istovremenog izvršavanja svih taskova.

Page 7: Operativni sistemi

Kako radi multitasking

• U stvarnosti, operativni sistem učitava program u memoriju (kada on postaje task), predaje mu kontrolu nad procesorom, tj. dozvoljava mu izvršavanje neko vreme, a zatim prekida njegovo izvršavanje.

• U tom trenutku, operativni sistem pravi „snimak“ trenutnog stanja procesora (konteksta), tj. zamrzava vrednost svih njegovih registara (segmentnih registara, registara opšte namene, programskog brojača, stek pointera, flags ...) i stavlja ih na sigurno mesto.

• Zatim dozvoljava nekom drugom tasku izvršavanje izvesno vreme, prekida njegovo izvršavanje, itd.

• Sve ovo ponavlja se vrlo brzo, tako da korisnik ima utisak da se taskovi izvršavaju istovremeno.

Page 8: Operativni sistemi

Task (definicija)

• Iz ugla programera, termin “task” je često nejasan. • On se izjednačava sa pojmovima kao što su proces, laki

proces, korisnička nit, kernel nit, fiber, itd.

• Definicija: Task čine programski kôd i podaci koji poseduju sopstveni kontekst i sopstveni stek.

Page 9: Operativni sistemi

Gde se čuva kontekst

• Najšešće na steku• Može i neki drugi deo memorije (u zaštićenom režimu

rada za ovo imamo i pomoć hardvera)• Ovako se čuvaju registri na tekućem steku: pushf

push ax push bx

push cx . . .pop es ; Nakon zamene stekova, izvrsavaju se pop ; instrukcije obrnutim redosledom

• Svaki task mora da ima svoj stek. • Stek se inicijalizuje adresom početka taska.

Page 10: Operativni sistemi

Zamena konteksta

• Sva task ima inicijalizovan stek pointer na vrednost poslednjeg smeštenog registra.

• Vrednost stek pointera svakog taska čuva se u delu memorije koji se često zove TCB (Task Control Block).

• TCB može da sadrži i druge informacije vezane za task. • Zamena konteksta:

– Određuje se koji seledeći task treba da se izvršava.– Iz TCB tog taska uzima se vrednost stek pointera i stavlja u

SS/SP registre mikroprocesora.– Nastavlja se sa izvršavanjem pop instrukcija, sada sa novog

steka (na taj način se registri postavljaju na vrednosti tog taska).– Poslednja instrukcija RET učitava adresu novog taska u CS/IP.

Page 11: Operativni sistemi

Stanja taska

• Task može da se nalazi u jednom od dva osnovna stanja:– Stanje izvršenja– Stanje neizvršenja

• Na jednom procesoru (jezgru) samo jedan task može da bude u stanju izvršenja.

• Ne treba mešati stanje taska i stanje procesora (kontekst).

neizvršenje izvršenjeProizvoljan broj taskova

Samo jedan task

Start task

Startovan je neki drugi task

Dijagram stanja konačnog automata

Page 12: Operativni sistemi

Prinudni prekid izvršavanja

• Prinudni prekid izvršavanja nekog taska nastaje kada se ne čeka da on dobrovoljno prepusti procesor nekom drugom tasku, već mu se procesor oduzme “na silu”

• Mi ćemo to zvati istiskivanje (engl. Preemption)• Preempt – istisni• Preemptive – sa istiskivanjem

Page 13: Operativni sistemi

Raspoređivanje

• Task nije u stanju izvršenja kada:– Nema šta da radi *– Ima šta da radi, ali mu operativni sistem ne dozvoljava prelazak u

stanje izvršenja – Dobrovoljno je prepustio stanje izvršenja nekom drugom tasku– Prinudno je prepustio stanje izvršenja nekom drugom tasku

(posledica istiskivanja)

• Kako se određuje kada će neki task da se startuje (da bude u stanju izvršenja)?

• Tu funkciju obavlja raspoređivač (scheduler).

* Kada se program “vrti” u praznoj petlji, on ipak nešto radi (možda nešto čeka), ali je to beskorisno zauzimanje procesora. Primer: JMP $

Page 14: Operativni sistemi

Primer

task1: mov dx, zeleno mov al, _ON out dx, al mov dx, crveno mov al, _OFF out dx, al jmp task1

task2: mov dx, zeleno mov al, _OFF out dx, al mov dx, crveno mov al, _ON out dx, al jmp task2

• Nijedan task ne vodi računa o čuvanju registara koje koristi (DX i AL).

• Nema ni potrebe, jer o tome vodi računa mehanizam zamene konteksta.

• Pravljenje programa je identično kao da je jedini u sistemu.

• Ipak, potrebno je voditi računa da možda postoji još taskova koji koriste iste resurse (memoriju, ulaz/izlaz) i koji mogu da ih menjaju.

• U ovom primeru task 1 pali zeleno, a gasi crveno svetlo. Task 2 radi obrnuto - gasi zeleno, a pali crveno svetlo.

Page 15: Operativni sistemi

Raspoređivač kao ISR

• Pretpostavimo da task nema nameru da startuje drugi task i da mu na taj način dobrovoljno prepusti procesor.

• U tom slučaju njega može da prekine samo prekid (interrupt). On najčešće potiče od sistemskog časovnika.

• Prekidna rutina sadrži algoritam koji određuje koji sledeći task će biti startovan i ona bi trebalo da taj task i startuje – jednom rečju, da radi kao raspoređivač.

• Ali, kako će ona to da uradi?• Ako na svom kraju izvrši instrukciju IRET, vratiće se u

task koji je prekinut, a ne u novi task koji treba startovati.• Prethodno će izvršiti zamenu stekova. IRET sada uzima

povratnu adresu sa novog steka.

Page 16: Operativni sistemi

Primer: kružno raspoređivanje

• Pretpostavimo da Task 1 i Task 2 izvršavamo po algoritmu kružnog raspoređivanja (Round Robin): malo se izvršava jedan, malo drugi, pa opet prvi i tako u krug.

• Izvršavanje svakog taska određeno je intervalima prekida sistemskog časovnika (kvantumom) i isto je za oba taska.

• Ovakvo raspoređivanje koristi se u tzv. Time-sharing sistemima, gde svaki task ima dodeljen isti vremenski interval (Time Slice) za svoje izvršavanje.

task1 task1 itd ...task2 task2ISR

vreme

ISR ISR

Periodični prekidi sistemskog časovnika

Page 17: Operativni sistemi

Komunikacija između taskova

• Da bi taskovi mogli međusobno da komuniciraju, potrebno je da poseduju neki deo memorije koji je zajednički.

• S druge strane, poželjno je što više izolovati taskove, da ne bi na bilo koji način uticali jedni na druge.

• Taskovi mogu međusobno da budu izolovani u različitom obimu:– potpuno izolovani (nemaju zajednički ni najmanji deo memorije)– neizolovani (zajednička im je cela memorija)– delimično izolovani (postoji neki deo memorije koji je zajednički)

Page 18: Operativni sistemi

Razdvojen adresni prostor

• Nema deljenog koda ni podataka• Jedan task nikako ne može da utiče na drugi task• Taskovi ne mogu da komuniciraju

Task 1 Task 2

Page 19: Operativni sistemi

Zajednički adresni prostor

• Kompletan kodni prostor i prostor podataka su zajednički• Jedan task može da utiče na drugi• Taskovi mogu da razmenjuju informacije

Task 1

Task 2

Page 20: Operativni sistemi

Preklopljen adresni prostor

• Pojedini delovi koda i podataka su zajednički• Jedan task može da utiče na drugi• Taskovi mogu da razmenjuju informacije

Task 1

Task 2

Page 21: Operativni sistemi

Taskovi i njihovi atributi

• Samo jedan task može da bude u stanju izvršenja na jednom procesorskom jezgru.

• Taskovi se nalaze u stanju neizvršenja iz različitih razloga.• Razvrstavanje taskova prema tim razlozima vrši se

upotrebom atributa koji dodatno opisuju zašto task nije u stanju izvršenja i kada bi trebalo u njega da pređe.

neizvršenje izvršenjeProizvoljan broj taskova

Samo jedan task

Start task

Startovan je neki drugi task

Page 22: Operativni sistemi

Niti i procesi

• Na osnovu atributa, stanje neizvršenja taskova deli se na više (pod)stanja.

• Atribute formira i održava operativni sistem i oni nisu u sastavu taska.

• Taskovi sa zajedničkim adresnim prostorom i sa pridruženim atributima zovu se niti (threads).

• Skup niti (sa dodatnim atributima*) zove se proces.• Različiti procesi imaju međusobno potpuno razdvojene ili

delimično preklopljene adresne prostore.• Proces mora da ima najmanje jednu nit.

* Biće objašnjeno kasnije

Page 23: Operativni sistemi

Stanja niti

• Zavisno od realizacije, niti mogu da imaju različita stanja, ali sledeća stanja prisutna su kod svih operativnih sistema :– Stanje nespremnosti za izvršenje. To je stanje čekanja na neki

događaj. Često se zove i blokirano stanje (Blocked), spavanje (Sleep), čekanje (Wait), itd.

– Stanje spremnosti za izvršenje– Stanje izvršenja

• Na svakom procesorskom jezgru mora da postoji jedna i samo jedna nit koja je u stanju izvršenja.

Page 24: Operativni sistemi

Atributi niti

• Atributi niti zavise od operativnog sistema, ali u osnovi se sastoje od sledećih informacija:– Identifikator niti (Thread ID)– Kontekst– Stanje u kome se nalazi nit– Prioritet– Afinitet– Klasa raspoređivanja– Događaj na koji čeka– Preostalo vreme za izvršavanje u okviru kvantuma *– Povratna vrednost po završetku– …

* Biće objašnjeno kasnije

Jedinstveno za svaku nit

Page 25: Operativni sistemi

Kako se čuvaju atributi

• Prilikom kreiranja, kernel svakoj niti dodeljuje memorijsku strukturu koja sadrži atribute.

• Ove strukture se obično povezuju kao jednostruko ulančane liste. Operacije nad listom su: “stavi na kraj” i “ukloni sa početka”, a izuzetno i “stavi na početak”.

• Ovakva lista naziva se red čekanja – Queue• U sastav reda ulaze strukture koje imaju neke zajedničke

atribute. Npr., jedan red čine strukture koje imaju istu vrednost atributa “Prioritet”, drugi red čine strukture koje imaju istu vrednost atributa “Događaj na koji čeka”, itd.

• Radi kraćeg izražavanja, kaže se da se nit nalazi u nekom redu čekanja.

Page 26: Operativni sistemi

Stanje spremnosti

next next

next

NULL

NULL

spremna spremna spremna

spremna spremna

prioritet=6 prioritet=6 prioritet=6

prioritet=1 prioritet=1

TID=123 TID=456 TID=789

TID=091 TID=234• Onoliko redova koliko ima prioriteta• Nazivaju se Ready Queues ili Run Queues• Obično se prvo prazni red višeg prioriteta,

zatim nižeg, itd.• Ako u red stalno dolaze nove niti višeg

prioriteta, niti nižeg proriteta će čekati dugo – izgladnjivanje (starvation).

• Svako procesorsko jezgro ima svoje redove spremnosti (između ostalog i na osnovu atributa “Afinitet”)

next

spremna

prioritet=6

TID=567

Page 27: Operativni sistemi

Stanje spremnosti

• Prioriteti se nitima dodeljuju na osnovu različitih kriterijuma. To npr. može da bude nit koja zahteva više procesorskog vremena, koja je više orijentisana na ulazno-izlazne operacije, ili se od nje zahteva odgovor u realnom vremenu.

• Ukoliko je potrebno dinamički menjati prioritete (dok je nit u redu čekanja), mogu se koristiti prioritetni redovi (Priority Queues).

• Ukoliko se pojavi nit višeg prioriteta, raspoređivač istiskuje nit nižeg proriteta i stavlja je na čelo reda njenog proriteta.

• Ukoliko je isteklo vreme za izvršavanje niti, raspoređivač je stavlja na začelje njenog reda proriteta.

• U svakom slučaju, niti se šalju na izvršenje prema prioritetu, a ne prema njihovoj privilegiji.

• Zaključak: Nit može da bude istisnuta i u prostoru korisnika i u prostoru kernela.

Page 28: Operativni sistemi

Blokirano stanje

next

next

NULL

NULL

tajmer

TID=135 TID=222 TID=333

TID=357 TID=469• Onoliko redova koliko ima događaja na koje se čeka

• Nisu vezani za neko procesorsko jezgro

NULL

disk

semafor A semafor A

tajmer

blokirana

TID=246

NULL

konzola

blokirana blokiranablokirana

blokirana blokirana

next

TID=980

semafor A

blokirana

Page 29: Operativni sistemi

Blokirano stanje

• Operacija WAIT– Nit eksplicitno poziva ovu operaciju. – Nit zatim menja svoje stanje iz izvršenja u blokirano stanje i

stavlja se u red čekanja blokiranih niti za odgovarajuću događaj. Ova operacija mora da bude atomična.

– Nit zatim eksplicitno startuje raspoređivač.– Raspoređivač određuje koja nit ide u koji red spremnih niti, a

zatim startuje nit sa početka reda najvišeg prioriteta.

Page 30: Operativni sistemi

Blokirano stanje

• Blokirajući sistemski poziv *– Nakon sistemskog poziva, nit ulazi u prostor kernela. – Ako je sistemski poziv nije blokirajući, RETF na kraju funkcije

vraća nit u korisnički prostor.– Ako je sistemski poziv blokirajući, a funkcija naiđe na deo koji

zavisi od nekog događaja koji se još nije desio (npr. raspoloživost nekog resursa), ona će pozvati operaciju WAIT.

• Zaključak: Nit može da ide u blokirano stanje samo kada je u prostoru kernela.

* Sistemski pozivi se koriste kada je iz korisničkog prostora potrebno pozvati funkciju kernela. Iz prostora kernela, kernel funkcije se pozivaju na običan način. Iz kernel prostora ne pozivaju se funkcije korisničkog prostora.

Page 31: Operativni sistemi

Izlaz iz blokiranog stanja

• Nit koja se nalazi u blokiranom stanju ne može sama sebe da probudi jer se ne izvršava na procesoru .

• Nju može da probudi samo raspoređivač.• On se startuje periodično ili na zahtev, ali svaki put proverava da li

je ispunjen uslov zbog koga je nit blokrana. Ako jeste, on briše nit iz reda blokiranih i stavlja je u red spremnih.

• Ali, kako raspoređivač zna da je ispunjen uslov?• To mu javlja neka druga nit ili servisna rutina nekog prekida.

Page 32: Operativni sistemi

Solaris niti (LWP)

IDL PINNED

ONPROC SLEEP

STOP ZOMBIE FREE

thread_create()

switch()

preempt()

prun()pstop() exit()

wakeup()

syscall()

reap()

intr()

RUN

Stanje kada su resursi koje zauzima task oslobođeni, ali je struktura sa atributima još u upotrebi.

Potpuno oslobađanje

Page 33: Operativni sistemi

Linux niti (tasks)

RUNNINGREADY

ZOMBIE

WAIT

CREATE

exec() switch()

preempt()

wait()wake_up()

exit()

uninterruptibleinterruptible

signal

signal STOPfork()

Page 34: Operativni sistemi

Windows XP (threads)

Standby

Ready

Transition

Running

Terminated

preempt

switch

pick

terminateunblockresursi raspoloživi

resursi su raspoloživi

unblockresursi nisu

raspoloživi ali će uskoro biti

Waiting

Init

preempt, quantum end

switch

initialize

Page 35: Operativni sistemi

Vista, Server 2008, Windows 7

Standby

DeferredReady

Transition

Running

Terminated

preempt

switch

pick

terminateunblockresursi raspoloživi

resursi su raspoloživi

unblockresursi nisu

raspoloživi ali će uskoro biti

Waiting, Gate

Waiting

Init

preempt, quantum end

switch

initialize

Ready

Page 36: Operativni sistemi

Konkurentno izvršavanje

Primer: Pretpostavimo da je početna vrednost globalne deljene celobrojne promenljive x = 0

Nit 1 Nit 2 Nit 3 Raspoređivanje sa istiskivanjem.

(1) x = 1 (2) x = 2 (3) y = x Mogu da se izvršavaju konkurentno na jednom ili više procesora.

Konačna vrednost promenljive y je nepredvidljiva, ali se očekuje da bude 0, 1, ili 2.

Evo nekih mogućih preplitanja prethodna tri iskaza:

(3), (1), (2) konačna vrednost y je 0

(2), (1), (3) konačna vrednost y je 1

(1), (2), (3) konačna vrednost y je 2

Page 37: Operativni sistemi

Nedeterministričko ponašanje

U slučaju konkurentnog izvršavanja, nedeterminističko ponašanje mogu izazvati jedna ili više sledećih situacija:

• Nepredvidljiva brzina napredovanja niti koje se izvršavaju na jednom jezgru procesora (zbog prebacivanja konteksta između niti)

• Nepredvidljiva brzina napredovanja niti koje se izvršavaju na različitim jezgrima ili različitim procesorima (zbog razlike u brzini jezgara ili procesora)

• Upotreba nedeterminističkih programskih konstrukcija, koje dozvoljavaju nepredvidljivi izbor između više mogućih akcija

Page 38: Operativni sistemi

Konkurentnost

• Posmatrajmo dva nepreklapajuća događaja A i B koji se izvršavaju konkurentno. Činjenica da su A i B konkurentni znači da oni mogu da nastupe u bilo kom redosledu. Znači, njihova konkurentnost može da se modeluje kao nedeterministički izbor između dva prepletena događaja:

(A iza koga sledi B) ili (B iza koga sledi A).

• Ovaj model konkurentnosti se koristi u nekim tehnikama za testiranje i verifikaciju ponašanja programa. Međutim, treba imati u vidu da broj ovakvih permutacija enormno raste sa porastom broja niti, tako da je potpuna kontrola, čak i malih programa, veoma teška.

• Sinhronizacija:

– Uzajamno isključivanje: Događaji A i B ne smeju da se dese u isto vreme.

– Serijalizacija: Događaj A mora da se desi pre događaja B.

Page 39: Operativni sistemi

Debagovanje

• Programeri se oslanjaju na ponovljivo, determinističko izvršavanje kako bi pronašli i otklonili greške u programu.

• Kada posmatramo grešku u jednonitnom programu, mi očekujemo da će se ona pod istim uslovima ponoviti i u budućnosti, tako da možemo da je lociramo i otklonimo.

• Ukoliko grešku ne možemo da reprodukujemo, to nam ukazuje na problem, s obzirom da samo neke greške u sekvencijalnim programima (npr. promenljive koje nisu inicijalizovane) proizvode nedeterminističke greške.

• Konkurentni programi su inherentno nedeterministički. Jedna od najvećih “glavobolja” programera ovakvih sistema je otkrivanje i otklanjanje grešaka.

Page 40: Operativni sistemi

Dve niti, jedan brojač

• Posmatrajmo jedan web server koji koristi višenitnu obradu pristiglih zahteva.

• Svaka nit inkrementira deljenu promenljivu - brojač, da bi pratila dnevni broj pristupa (pogodaka – hits) web sajta:

hits = hits + 1;

• Šta se događa kada dve niti izvrše ovaj kôd konkurentno?

• Prvo ćemo inicijalizovati deljenu promenljivu hits

xor eax,eaxmov dword [hits],eax ;hits=0

Page 41: Operativni sistemi

Dve niti, jedan brojač

; Pocetak niti #1mov dword eax,[hits] ;hits=0add eax,1mov dword [hits],eax ;hits=1iret

; Pocetak niti #2mov dword eax,[hits] ;hits=1add eax,1mov dword [hits],eax ;hits=2iret

vreme

Uspostavljena konekcija 1

Uspostavljena konekcija 2

Page 42: Operativni sistemi

Stanje trke

; Pocetak niti #1mov dword eax,[hits] ;hits=0add eax,1mov dword [hits],eax ;hits=1iret ; Pocetak niti #2

mov dword eax,[hits] ;hits=0add eax,1mov dword [hits],eax ;hits=1iret

vreme

Uspostavljena konekcija 1

Uspostavljena konekcija 2

Trebalo bi da bude hits=2

Stanje trke je vremenski zavisna greška. Da li će se javiti ili ne, zavisi od raspoređivanja.

Page 43: Operativni sistemi

Kritična sekcija

• Atomična operacija: sekvenca instrukcija koje se garantovano izvršavaju nedeljivo.

• Drugi naziv za ovo je kritična sekcija (Critical Section).

• Ako dve niti izvršavaju istu atomičnu operaciju u isto vreme, jedna nit će izvršiti celu sekvencu pre nego što druga počne – serijalizacija.

• “U isto vreme” znači paralelno kod sistema kod kojih svaka nit ima “svoje” procesorsko jezgro, a prepleteno ukoliko ima više niti nego procesorskih jezgara.

• Upotreba kritične sekcije jedan je od načina realizacije uzajamnog isključivanja (Mutual Exclusion).

Page 44: Operativni sistemi

Uslovi za kritičnu sekciju

• Samo jedna nit može da se izvršava unutar svoje kritične sekcije (uzajamno isključivanje).

• Kod više istovremenih zahteva za ulazak u kritičnu sekciju, jedan (i samo jedan) zahtev mora da bude zadovoljen.

• Svaka nit čeka na ulazak u svoju kritičnu sekciju konačno dugo (nema izgladnjivanja).

• Niti moraju da napreduju u svom izvršavanju tokom vremena (nema uzajamnog blokiranja).

• Broj procesora i njihova pojedinačna brzina ne smeju da imaju nikakvog uticaja.

• Nit ne sme da bude istisnuta (blokirana) dok se izvršava u svojoj kritičnoj sekciji.

• Da li nit u svojoj kritičnoj sekciji sme da bude prekinuta ?

• Da, ukoliko nijedna druga nit ne ulazi u istu kritičnu sekciju.

Page 45: Operativni sistemi

Zabrana prekida

; Pocetak niti #1climov dword eax,[hits] ;hits=0add eax,1mov dword [hits],eax ;hits=1stiiret

; Pocetak niti #2climov dword eax,[hits] ;hits=1add eax,1mov dword [hits],eax ;hits=2stiiret

vreme

Uspostavljena konekcija 1

Uspostavljena konekcija 2

Prekid se tretira kao nastupajući (pending)

Kritična sekcija

cli i sti su IOPL osetljive instrukcije. Mora da bude CPL ≤ IOPL (polje koje se nalazi u EFLAGS).

Često nije ispunjeno pa se cli i sti izvršavaju upotrebom sistemskih poziva.

Page 46: Operativni sistemi

Problem

; Pocetak niti #1clijmp $

vreme

Uspostavljena konekcija 1

Uspostavljena konekcija 2

Prekid se tretira kao nastupajući (pending) ali se nikada ne izvršava

“Zamrzavanje” programa na jednom procesorskom jezgru

Kod višeprocesorskog sistema zabrana prekida ne obezbeđuje uzajamno isključivanje, jer se ona odnosi samo na tekući procesor.

Page 47: Operativni sistemi

Rešenje

• Ključ (lock ili mutex)

• Kada nit uđe u kritičnu sekciju, ona je zaključava tako da ne može da uđe ni jedna druga nit. Kada izlazi, ona je otključava i vraća ključ.

• Koristi se deljena promenljiva tipa mutex nad kojom se, upotrebom sistemskih poziva, mogu izvršavati dve operacije:

– “uzimanje ključa” (acquire ili lock): nit ekskluzivno uzima ključ, a ako ga je neko drugi već uzeo, čeka u blokiranom stanju.

– “oslobađanje ključa” (release ili unlock): nit vraća ključ.

• Kako koristiti? Ograditi kritičnu sekciju odgovarajućim ključem:

mutex hit_lock;

...

acquire(hit_lock); hits = hits + 1; release(hit_lock);

kritična sekcija

Page 48: Operativni sistemi

Sistemski poziv

• acquire(hit_lock) sistemski poziv– Stavljanje broja sistemskog poziva u registar

– Softverski prekid za sistemski poziv (ili Fast Call)

– Skok na odgovarajuću funkciju kernela

– Verifikacija ispravnosti pointera na mutex promenljivu (prethodno je deklasirana - registrovana kod kernela)

– Spin N puta čekajući da mutex brzo bude otključan

– Ako je mutex zaključan, blokirati nit i staviti je u red čekanja za taj mutex

– U suprotnom, zaključati mutex

• Izvršavanje instrukcije hits = hits+1;

• release(hit_lock) sistemski poziv

• Koliki je broj N?

Ovo je zamena konteksta (skupa operacija)Zato se nadamo da do nje neće doći (čest slučaj)

Page 49: Operativni sistemi

Broj okretaja u spinu (N)

• Maksimalni broj okretaja Nmax odgovara vremenu potrebnom za zamenu konteksta (blokiranje). Više od toga se ne isplati.

• Ne treba ići na maksimalan broj okretaja, jer bismo onda mogli i da blokiramo nit bez dodatnog troška.

• Umesto toga treba ići na N < Nmax

• Koristimo verovatnoću, npr. Random Walk:– Krenemo od neke početne vrednosti (npr. Nmax/2)

– Dekrementiramo N ukoliko je poslednji poziv acquire() blokirao nit

– Inkrementiramo N ukoliko poslednji poziv acquire() nije blokirao nit

Page 50: Operativni sistemi

Mutex u korisničkom prostoru

• Neki operativni sistemi dozvoljavaju pokušaj dobijanja mutex-a u korisničkom prostoru, pa tek ako nije na raspolaganju, upotrebom sistemskog poziva ulazi se u kernel.

• Primer: Windows API funkcija EnterCriticalSection( ).

• Za pristup mutex promenljivoj kod IA32, koriste se atomične instrukcije koje se formiraju upotrebom prefiksa lock.

• Atomične instrukcije mogu da budu: ADD, ADC, AND, BTC, BTR, BTS, CMPXCHG, CMPXCH8B, DEC, INC, NEG, NOT, OR, SBB, SUB, XOR, XADD i XCHG.

• Ukoliko se XCHG koristi sa memorijskim operandom (što kod nas jeste slučaj), automatski se primenjuje protokol zaključavanja, bez obzira na prisustvo prefiksa lock i trenutne vrednosti IOPL.

• Počev od Intel Pentium Pro arhitekture, protokol zaključavanja se više ne odnosi na memorijske magistrale, već se zaključava programski kôd u L2 kešu.

Page 51: Operativni sistemi

XCHG

CPU

L1

L2

CPU

L1

CPU

L1

Memorija

CPU

L1

L2 L2

Više jezgaraSMP

. . .. . .

Svaki od ovih CPU mogao bi da bude sa više jezgara

XCHG zaključava L2 keš. Nakon razmene u kešu, mehanizam za keš koherenciju obezbeđuje da se promena pojavi u memoriji. Ako memorijska loakcija nije u kešu, zaključava se memorijska magistrala.

xchglock xchg

Page 52: Operativni sistemi

Mutex u korisničkom prostoru

acquire: ;edx sadrzi adresu mutex promenljive xor eax,eax lock xchg dword [edx],eax test eax,eax ;ako je eax=0, postavljen je ZF flag jnz uzimam_mutex call idi_u_kernel ;call yield kod korisnickih nitiuzimam_mutex: ret• U ovom primeru vrednost 0 se atomično razmenjuje sa mutex promenljivom. • Ako je dobijena vrenost iz razmene jednaka 1, mutex je slobodan i može da se

uđe u kritičnu sekciju. • Ako je dobijena vrednost iz razmene jednaka 0, mutex je zaključan i ulazi se u

kernel (ubrzo sledi blokiranje), ili se predaje kontrola raspoređivaču u korisničkom prostoru (yield), ako su u pitanju korisničke niti.

release: mov eax, 1 lock xchg dword [edx],eax ret

Page 53: Operativni sistemi

Pravila

• Mutex se uzima (zaključava) ekskluzivno. Nijedna nit ne može da uzme mutex, ako ga je neka druga nit već uzela.

• Mutex mora da oslobodi (otključa) isključivo ona niti koja ga je uzela (zaključala).

• Rekurzivno zaključavanje nije dozvoljeno.• Nit ne može da se završi bez prethodnog oslobađanja mutexa. • Deo kernel memorije u kojoj se nalazi mutex, ne sme da bude

oslobođen ukoliko se u njemu nalazi zaključani mutex. • Mutex mora da bude inicijalizovan (ili statički definisan) pre nego što

se zaključa.• Eksplicitno upisivanje u mutex promenljivu nije dozvoljeno. Kod viših

programskih jezika, ovo je osigurano odgovarajućim tipom za mutex, o čijoj upotrebi vodi računa prevodilac.

Page 54: Operativni sistemi

Spinlock

• Kernel ne koristi operacije koje zahtevaju dugotrajno zaključavanje (ne mešati ovo sa izvršavanjem niti koja je u prostor kernela došla iz korisničkog prostora, nakon sistemskog poziva).

• Zbog toga se za niti, koje se isključivo izvršavaju u kernelu, blokiranje zbog čekanja na mutex ne isplati. Kernel umesto toga koristi spinlock.

• spinlock ima smisla samo kod kernela koji su sa istiskivanjem, ili se izvršavaju na više procesorskih jezgara ili procesora.

• Ukoliko se kernel izvršava samo na jednom jezgru, kritična sekcija se osigurava zabranom istiskivanja u njoj.

• Kritična sekcija mora da bude zaključana u memoriji (isto važi i za promenljivu koja implementira spinlock), ne sme da ima reference na tabelu stranica, ne sme da poziva finkcije kernela, uključujući i sistemske pozive, i ne sme da generiše prekide ili izuzetke.

Page 55: Operativni sistemi

Spinlock primer

acquire: ;edx - adresa spinlock promenljive xor eax,eaxspin: lock xchg dword [edx],eax test eax,eax ;ako je eax=0, postavljen je ZF flag jz spin ret

release: je identičan kao za mutex.

• “Iskorišćenje” procesorskog jezgra u ovom kôdu je 100%, što je loše.

• Počev od Pentiuma 4, unutar petlje koristi se instrukcija PAUSE, koja predstavlja malo kašnjenje (kod starijih procesora ona se prevodi u NOP), smanjujući na taj način veliki broj memorijskih referenci.

• PAUSE obaveštava procesor sa HT (HyperThreaded) arhitekturom da logičko jezgro ne radi ništa i da više procesorskog vremena dodeli drugom logičkom jezgru.

Page 56: Operativni sistemi

Semafori

• Prethodno opisani mehanizam uzajamnog isključivanja (mutex) dobar je za obezbeđivanje kritične sekcije kada su u pitanju dve niti.

• Ukoliko imamo više niti koje čekaju na mutex, nastaje problem: kojoj niti će se dodeliti mutex kada bude oslobođen?

• Ukoliko je dodeljivanje slučajno, postoji verovatnoća da neke niti budu van svoje kritične sekcije vrlo dugo, možda čak i večno da budu blokirane.

• Semafori su generalizovano rešenje obezbeđivanja kritične sekcije.

Page 57: Operativni sistemi

Semafori

• Semafor je sličan celobrojnoj promenljivoj, uz sledeće razlike:– Nakon kreiranja i inicijalizacije semafora, dozvoljene su samo operacije

inkrementiranja (uvećanja vrednosti za jedan) ili dekrementiranje (umanjenja vrednosti za jedan).

– U nekim implementacijama semafora (npr. Posix Threads) tekuća vrednost semafora može da se pročita.

– Kada nit dekrementira semafor, ukoliko njegova vrednost postane negativna, nit se blokira i ne može se odblokirati sve dok neka druga nit ne inkrementira semafor.

• U praktičnoj ralizaciji, semafor je struktura koja, pored navedene celobrojne promenljive, sadrži i red čekanja za taj semafor.

• U red čekanja stavljaju se i oslobađaju niti po redosledu njihovih zahteva za semaforom – FIFO.

Page 58: Operativni sistemi

Operacije i sintaksa

Semaforske operacije su opisane različitim imenima u različitim okruženjima. Najčešće se koriste:

sem.up ( ) sema_up(&sem )sem.down( ) sema_down (&sem )

sem.signal( ) sema_signal (&sem ) ili sema_post (&sem ) sem.wait( ) sema_wait(&sem )

sem.V( ) sema_V(&sem )sem.P( ) sema_P(&sem )

gde je sem konkretna instanca nekog semafora.

Ima istorijskog razloga za ovakav pluralizam imena. up i down opisuju šta operacije rade (inkrement i dekrement). signal i wait opisuju za šta se one često koriste. V (verhoog - uvećaj) i P (prolaag – pokušaj da umanjiš) su originalna holandska imena koje je predložio Dijkstra.

Page 59: Operativni sistemi

Implementacija semafora

typedef struct { int brojac=1; FIFO queue; } semaphore;

void sema_init(semaphore *s,int i) {s->brojac=i; s->queue=EMPTY}

void sema_wait(semaphore *s) { if (--s->brojac<0) { tid = moj_tid(); stavi_na_kraj(tid,s->queue); block(tid); } }

void sema_signal(semaphore *s) { if (s->brojac++<0){ tid=uzmi_sa_pocetka(s->queue); ready(tid); }}

Page 60: Operativni sistemi

Implementacija semafora

• Za jedan konkretni semafor važe sledeća pravila:– sema_wait( ) i sema_signal( ) moraju da budu atomične

operacije.– Dve niti ne mogu da budu unutar sema_wait( ) ili sema_signal( )

istovremeno, čak ni jedna u sema_wait( ), a druga u sema_signal( ).

– To važi i za sisteme sa više procesorskih jezgara.

• Atomičnost ovih funkcija se postiže upotrebom mutex-a ili spinlock-a za zaštitu kritičnih sekcija. U kritične sekcije spadaju operacije inkremetiranja i dekrementiranja brojača, kao i operacije za rad sa redom čekanja.

Page 61: Operativni sistemi

Inicijalizacija semafora

Semafor može da se inicijalizuje na nenegativnu celu vrednost i to:

0 kada je potrebna sinhronizacija između niti (signalizacija)

1 za uzajamno isključivanje (ekvivalentno mutex-u)

> 1 kada postoji više instanci deljenog resursa (broj kojim se inicijalizuje semafor odgovara broju instanci)      

Inicijalizacija semafora na negativnu vrednost nije legalna.

Page 62: Operativni sistemi

Signalizacija

• Verovatno najjednostavnija upotreba semafora je signalizacija, što znači da jedna nit šalje signal drugoj niti da je obavesti da se nešto dogodilo.

• Signalizacija omogućuje garantovanu situaciju da će se deo kôda u jednoj niti izvršavati pre dela kôda u drugoj niti. Jednom rečju, semafor rešava problem serijalizacije.

Page 63: Operativni sistemi

Primer

Pretpostavimo da imamo semafor čije je ime sem i čija je inicijalna vrednost 0, i niti A i B imaju deljeni pristup ovom semaforu.

Nit A Nit B

citajsema_signal(&sem)

sema_wait(&sem )pisi

Pretpostavimo da citaj čita liniju teksta iz datoteke, a da pisi prikazuje ovu liniju na ekranu. Semafor u ovom programu garantuje da nit A završava citaj pre nego što nit B započne pisi.

Page 64: Operativni sistemi

Primer ...

• Evo kako stvar radi. Ako nit B dođe prva do iskaza sema_wait, naićiće na inicijalnu vrednost 0 i blokiraće. Kada nit A signalizira, nit B će nastaviti sa radom.

• Slično, ako nit A prva dođe do iskaza sema_signal, tada će se vrednost semafora inkrementirati i kada nit dođe do sema_wait, nastaviće sa radom odmah, bez blokiranja i čekanja.

• U oba slučaja, redosled operacija citaj i pisi je garantovan.

Page 65: Operativni sistemi

Uzajamno isključivanje

/* Uzajamno isključivanje n instanci istih niti *//* upotrebom semafora */

const int n = BROJ_NITI; semaphore sekcija;

sema_init(&sekcija,1)void N(int i) { while (true) {

sema_wait(&sekcija); /* kritična sekcija */

sema_signal(&sekcija); /* ostatak kôda */

}}

void main(){ parbegin (N(1), N(2), …, N(n)); }

Page 66: Operativni sistemi

Primer sa ispita

• Dve konkurentne niti, N1 i N2, sekvencijalno obrađuju znak po znak iste tekstualne datoteke (datoteka.txt) maksimalne veličine 56537 znakova.

• Učitani znak nit N1 obrađuje svojom procedurom proc1(znak), a nit N2 svojom procedurom proc2(znak).

• Potrebno je sinhronizovati ove niti tako da N2 obrađuje samo one znakove koje je N1 već obradila, tj. da N1 pri čitanju datoteke „uvek ide ispred“ N2.

• Napisati kôd za ove dve niti korišćenjem semafora.

Page 67: Operativni sistemi

Primer sa ispita

semaphore s; /* ime nije bas inventivno */

sema_init(&s,0);

/* Datoteka ima maksimalno 56537 znakova. Standardni *//* semafor (sa brojacem velicine 16-bita) je dovoljan. */

/* Nit N2 */

void N2(){ char znak; FILE *f; f = fopen(“datoteka.txt“,“r“); do { sema_wait(&s); znak = fgetc(f); proc2(znak); } while(znak!=EOF) flose(f);}

/* Nit N1 */

void N1(){ char znak; FILE *f; f = fopen(“datoteka.txt“,“r“); do { znak = fgetc(f); proc1(znak); sema_signal(&s); } while(znak!=EOF) flose(f);}

Page 68: Operativni sistemi

Unix

Kod klasičnog Unixa, taskovi maju i dodatne atribute (pored onih koje imaju prethodno opisane niti). To su npr.:•Grupni ID•Tekući direktorijum•Korenski direktorijum•ID sesije•Kontrolni terminal•Maska za signale i registrovane akcije•Promenljive okruženja•Otvorene datoteke•Dostupni resursi•Identifikator procesa (PID)•Alarmi•Tajmeri•Nastupajući signali•...

Page 69: Operativni sistemi

Unix procesi

• Task sa atributima jedne niti i prethodno opisanim dodatnim atributima zove se Unix proces.

• Svi atributi procesa čine strukturu koja se zove Kontrolni blok procesa (Process Control Block – PCB).

• Kod MS DOS-a, tek kada se završi jedan proces, započinje sa radom drugi proces. Komunikacija među njima je preko zajedničke datoteke.

• Kod Unix-a procesi se izvršavaju “istovremeno”. Procesi su maksimalno izolovani, sa izuzetkom jednog manjeg dela memorije koja se koristi za jednostavnu međuprocesnu komunikaciju.

• Više procesa može da se organizuje u grupu koja se naziva Job (posao). Job-u se pristupa na jedinstven način preko terminala i omogućena je centralizovana isporuka sinala njegovim procesima.

• Više Job-ova čini sesiju. Svaka sesija ima svoj kontrolni proces, najčešče Login Shell. U ovaj shell ulazi se putem kontrolnog terminala.

Page 70: Operativni sistemi

Unix procesi

spreman

PID=123

TSS123

text

data

BSS

heap

stack

text

data

BSS

heap

stack

spreman

PID=456

memorija za komunikaciju

Adresni prostori ova dva taska su razdvojeni, sem malog zajedničkog dela za komunikaciju

Task 1 (PID = 123)

Task 2 (PID = 456)

GID=1

/home1

/root

SID=12

tty1

env1->

files1->

GID=4

/home4

/root

SID=45

tty4

env4->

files4->

TSS456

……

……

Kontrolni blok

procesa

Deo kontrolnog bloka procesa, koji nije User Area, čini jednu stavku u tabeli procesa

Page 71: Operativni sistemi

Kontrolni blok procesa (PCB)

• Kontrolni blok procesa sadrži dve vrste polja:• Polja dostupna kernelu u svakom trenutku:

– svi atributi procesove niti, informacije o adresnom prostoru procesa, PID, UID, tabela neopsluženih signala, razni tajmeri, pointer na User Area (deo PCB dostupan procesu), itd.

• Polja dostupna samom procesu (User Area): – deskriptori otvorenih datoteka, kontrolni terminal, polja za greške

tokom sistemskog poziva, U/I parametri, tajmer za vreme izvršavanja u korisničkom i kernel prostoru, polja sa rutinama za obradu signala, itd.

Page 72: Operativni sistemi

Swapping

• Informacije iz user area biće dostupne samo kada je proces u memoriji.

• Ukoliko se proces ne izvršava (npr. blokiran je), kernel može, u nedostatku memorije, da donese odluku da ceo proces prebaci na disk.

• To obavlja swapper, a operacija se naziva swapping-out.• Ponovno učitavanje u memoriju naizva se swapping-in.

Tada se prostor u memoriji nalazi algoritmom First fit.

Page 73: Operativni sistemi

Kreiranje Unix procesa

• Jedini način da se iz korisničkog programa kreira novi proces je upotreba sistemskog poziva fork.

• Sintaksa: pid = fork ( )– Kernel proverava da li ima dovoljno resursa (prvenstveno

memorije) za kreiranje novog procesa

– Dodeljuje stavku u tabeli procesa

– Dodeljuje jedinstveni PID novom procesu

– Pravi logičku kopiju roditeljskog procesa. Neki delovi kodnog prostora mogu da budu deljeni

– Novi proces (potomak) nasleđuje sve atribute i memorijsku sliku od roditeljskog procesa, sa izuzetkom PID, alarma, tajmera i nastupajućih signala

Page 74: Operativni sistemi

fork ( )

• fork je funkcija sistemskog poziva koja vraća različite vrednosti u roditeljskom i kreiranom procesu (potomku).

• Nakon kreiranja procesa, kernel vrši modifikaciju povratne vrednosti tako što kod potomka stavlja nulu, a kod roditelja PID potomka.

• Roditelj i potomak proveravaju ove vrednosti i, u skladu sa njima, preduzmaju dalje akcije.

• Primer:

if(PID=fork()== 0)

{ /* nastavak programa potomka */}else{ /* nastavak programa roditelja */}

Page 75: Operativni sistemi

fork ( ) …

• Zašto se umesto fork jednostavno ne rezerviše potreban deo memorije, u njega ne učita nov program i tako napravi novi proces?

• Nema ko to da uradi. U izolovanom memorijskom prostoru procesa, samo taj proces može da pristupa svojoj memoriji, pa samim tim i izvršava potrebni deo kôda, kao što je npr. učitavanje novog programa.

• Nije moguće iz jednog procesa pozivati deo koda u drugom procesu, niti raditi bilo šta sa njegovom memorijom.*

* Izuzetak čine procesi koji su namenjeni baš ovakvom načinu komuniciranja, ali to spada u distribuirane sisteme. U tom slučaju nije važno da li se procesi nalaze čak i u istom računaru.

Page 76: Operativni sistemi

Konkurentno izvršavanje

#include <sys/types.h>#include <stdio.h>

int main(){ pid_t pid; pid = fork(); if (pid ==0) { printf(“A”); fork(); printf(“B”); } else if (pid > 0){ wait(NULL); printf(“C”); } }

ABABC ili ABCAB

#include <sys/types.h>#include <stdio.h>

int main(){ pid_t pid; pid = fork(); if (pid ==0) { printf(“A”); fflush(stdout); fork(); printf(“B”); } else if (pid > 0){ printf(“C”); } }

ABBC ili ACBB

Problem serijalizacije:

Page 77: Operativni sistemi

Stanja Unix procesa

• Atributi u PCB ukazuju da svaki Unix proces ima samo jednu nit koja se izvršava u korisničkom prostoru.

• Razlog za ovo je istorijski. Unix je razvijen na sistemima sa jednim procesorom, a po prirodi je višekorisnički (Multiuser, Time-sharing).

• Korisniku se dodeljuje jedan terminal, sa koga se, u okviru jedne sesije, pokreće jedan interaktivni proces.

• Zbog toga se kod klasičnih Unix sistema kaže da proces ima stanja, da se nalazi u redu čekanja i slično.

Page 78: Operativni sistemi

Stanja Unix procesa

ZOMBIE

returnpreempted

new

preempt

forkswap_ out

exit

wakeup

syscall

sleep

intr

swap_ out swap_ in

wakeup

schedule

return

newswapped

CREATED

RUNUSER

RUNKERNEL

READYMEMORY

SLEEPMEMORY

SLEEPSWAPPED

READYSWAPPED

Page 79: Operativni sistemi

init

Unix kernel

shell

C bibliotekaAPI

editor

hardver

Interfejs za sistemske pozive

Podsistem datoteka

Buffer cache

Znakovni U/I Blok U/I

Drajveri

httpd

Upravljanje memorijom

swapper

Upravljanje hardverom/dispečer prekida

Upravljanje procesima

Međuprocesna komunikacija

Raspoređivanje

Korisnički prostor

Prostor kernela

Nivo hardvera

...Unix procesi

Page 80: Operativni sistemi

Solaris procesi

• Solaris je savremena verzija Unix-a (potiče od Berkeley BSD, a kasnije od AT&T System V).

• Kao i drugi Unix sistemi, Solaris je zasnovan na paradigmi procesa.• Proces je okruženje u korisničkom memorijskom prostoru koje

obuhvata program i resurse potrebne za njegovo izvršavanje. • Memorijski prostor procesa obezbeđuje neophodnu izolaciju u

odnosu na druge procese. Samo mali deo memorije je zajdenički i preko njega se obavlja kontrolisana međuprocesna komunikacija.

• Svaki proces mora da sadrži makar jednu nit (a može da ih ima i više) koja se raspoređuje iz prostora kernela: kernel nit.

• Proces može da ima i niti koje raspoređuje korisnički program: korisničke niti.

• Proces je kontejner za niti koje se u njemu izvršavaju.

Page 81: Operativni sistemi

Solaris niti i procesi

Tradicionalni proces

Korisnički prostor

Prostor kernela

Hardver

= Nit = LWP = Procesor

Raspoređivanje kernel niti na veći broj procesora

Raspoređivanje korisničkih niti na veći broj virtuelnih procesora

Daemon nit

Jedini model počev od Solarisa 9

Page 82: Operativni sistemi

Solaris kernel

Solaris ima modularni kernel

• Osnovne komponente kernela su monolitne (ali su slojevite)• Komponente koje su modularne:

– Klase raspoređivanja

– Sistemi datoteka

– Neki sistemski pozivi

– Izvršni binarni formati

– STREAMS moduli

– Međuprocesna komunikacija

– Upravljački programi

Page 83: Operativni sistemi

Solaris kernel

Interfejs za sistemske pozive

hardver

Raspoređivanje niti i upravljanje procesima

Sistem virtuelne memorije

Translacija adresa

Redovi čekanja, časovnici, tajmeri

Kernel servisi

Umrežavanje

TCPIPsoketi

Upravljački programi uređaja i magistrala

Virtuelni sistem datoteka

TS

RT

IA

SHR UFS NFS FSspec

SD SDD

Page 84: Operativni sistemi

Linux niti i procesi

• Za Linux kernel, niti ne postoje. • Niti se tretiraju kao procesi koji dele resurse sa drugim procesima.• Procesi (pa samim tim i niti) se kod Linuxa zovu taskovi.• Svaka nit ima jedinstveni kontrolni blok task_struct, pa kernelu

izgleda kao normalni proces (koji sa drugim procesima deli resurse, kao što je npr. memorijski prostor).

• task_struct je relativno velika struktura podataka: oko 1.7 KB na 32-bitnoj mašini.

• S druge strane, ovo i nije tako veliko, imajući u vidu da ona sadrži sve informacije koje su kernelu potrebne o procesu.

• Kernel čuva sve informacije u kružnoj, dvostruko ulančanoj listi poznatoj pod imenom task lista.

Page 85: Operativni sistemi

Linux kernel

Linux ima modularni kernel

• Imajući u vidu da se Linux kernel izvršava u jedinstvenom zaštićenom domenu (prostoru kernela), može se zaključiti da je u pitanju monolitni kernel.

• Ipak, dodavanje novih funkcionalnosti kernelu ne zahteva njegovo ponovno prevođenje i linkovanje. To se postiže upotrebom kernel modula, koji se dodaju ili uklanjaju tokom izvršavanja sistema, slično operativnom sistemu Solaris.

Page 86: Operativni sistemi

Linux kernel

Interfejs za sistemske pozive

hardver

Platformski zavisan interfejs ka hardveru

Upravljanje memorijom

Virtuelni sistem datoteka

spec

Upravljanje procesima

Sistemi datoteka

Umrežavanje Upravljački programi

C bibliotekaKorisnički prostor

Kernel prostor

Modularni deo

Monolitni deo

Page 87: Operativni sistemi

Windows niti i procesi

• Windows je objektno-orijentisani operativni sistem*• Zbog toga on sledi klijent-server paradigmu• Objektima upravlja Object Manager• I niti i procesi su objekti• Objekti međusobno komuniciraju upotrebom poruka

* To ne znači da je napisan u nekom objektno-orijentisanom programskom jeziiku.

klijent proces klijent proces server proces

Korisnički prostor

Prostor kernela

Sistem za prenos poruka

Page 88: Operativni sistemi

Windows niti i procesi

Tip objekta

Atributi

Servisi

Thread

Client IDThread contextDynamic priorityBase priorityProcessor affinityExecution timeAlert statusSuspension countImpersonation tokenTermination portExit status

Create threadOpen threadQuery thread informationSet thread informationCurrent threadTerminate threadGet contextSet contextSuspendResumeAlert threadTest thread alertRegister termination port

Process

Process IDAccess tokenBase priorityDefault processor affinityQuota limitsExecution timeI/O countersVM operation countersException/debugging portsExit status

Create processOpen processQuery process informationSet process informationCurrent processTerminate processAllocate/free virtual memoryRead/write virtual memoryProtect virtual memoryLock/unlock virtual memoryQuery virtual memoryFlush virtual memory

Page 89: Operativni sistemi

System Service Dispatcher

Task Manager

Explorer

SvcHost.Exe

WinMgt.Exe

SpoolSv.Exe

Ob

jectM

gr.

WindowsUSER,

GDI

File

System

Cach

e

I/O Mgr

Environment Subsystems

UserApplication

Subsystem DLLs

System Processes Services Applications

SystemThreads

UserMode

KernelMode

NTDLL.DLL

Device &File Sys.Drivers

Session ManagerServices.Exe POSIX

Windows DLLs

Plu

g an

dP

lay Mg

r.

Po

wer

Mg

r.

Secu

rityR

eference

Mo

nito

r

Virtu

alM

emo

ry

Pro

cesses&

Th

reads

Lo

calP

roced

ure

Call Graphics

Drivers

Hardware Abstraction Layer (HAL)

(kernel mode callable interfaces)

Co

nfig

ura-

tion

Mg

r(reg

istry)OS/2

WindowsWin32

Windows NT arhitektura

Kernel

Page 90: Operativni sistemi

Windows kernel

• Kernel je zbunjujući termin kod Windows-a.

• Nekada se odnosi na sve što se izvršava u prostoru kernela.

• Drugi put se odnosi na NTOSKRNL.EXE, koji sadrži jezgro operativnog sistema – executive.

• Mi ćemo termin kernel koristiti za sloj unutar executive, obeležen crvenom bojom na prethodnoj slici.

• Interesantno je da se termin “kernel” nekada koristi i za biblioteku iz korisničkog prostora koja je u sklopu zaštićenog podsistema Win32 – KERNEL32.DLL

Page 91: Operativni sistemi

Windows kernel

Funkcionalnost Windows kernela:• Raspoređivanje niti*• Upravljanje rutinama za obradu prekida ili izuzetaka• Multiprocesorska sinhronizacija• Oporavak sistema nakon pada usled nestanka napajanja

• Windows kernel se uvek nalazi u memoriji• Windows kernel niko ne može da istisne sa procesora.

* Odnosi sa na kernel niti. Korisničke Windows niti zovu se fibers.

Page 92: Operativni sistemi

Mikrokernel

• Pretpostavimo da se u prostoru kernela nalazi samo kernel sa minimalnim funkcijama (raspoređivanje i dodeljivanje resursa), a da se ostale funkcionalnosti sistema (npr. sistemi datoteka, drajveri, itd.) realizuju kao korisnički procesi.

• Komunikacija među procesima vrši se razmenom poruka.• Ovakav pritup naziva se mikrokernel arhitektura.• Prednost: Visoka pouzdanst i robusnost. Pad nekog podistema (npr.

drajvera) ne izaziva krah čitavog sistema.• Nedostatak: Lošije performanse zbog česte promene nivoa

privilegije prilikom prenosa poruka (zavisno od hardverske podrške).• Windows nema mikrokernel arhitekturu (iako na nju podseća) jer se

kompletan executive, drajveri, pa i korisnički interfejs, izvršavaju u prostoru kernela.

• Operativni sistemi sa mikrokernel arhitekturom: Minix, QNX Neutrino, Symbian, Mach, MAC OS-X (hibridni, na bazi Mach-a).

Page 93: Operativni sistemi

Mikrokernel

Monolitni kernel Mikrokernel

hardver hardver

korisnički prostor

prostor kernela

aplikacija

aplikacijaIPC

VFS

IPC, sistem datoteka

raspoređivač, virtuelna memorija

drajveri uređaja, dispečer, ... IPC, raspoređivač, virtuelna memorija

UNIXserver

drajveruređaja

serverdatoteka

sistemski poziv

Problem može da nastane zbog kompleksnosti IPC meganizma i česte promene nivoa privilegije

Page 94: Operativni sistemi

Exokernel

• Exokernel ide dalje: napušta prvi postulat operativnih sistema – apstrakciju hardvera.

• Umesto toga, kompletno upravljanje resursima premešta se u korisnički prostor i vidu biblioteke LibOS.

• Ovu biblioteku može da menja i korisnik, a može istovremeno da postoji i više biblioteka.

• Ostatak kernela ima zadatak samo da eksportuje postojeći hardver - ne da ga viruelizuje. On to izvodi na bezbedan način (multipleksiranje hardvera).

• Razvojena je bezbednost od upravljanja resursima.• Kod jednokorisničkih, jednoprocesnih sistema, ni to multipleksiranje

nije nam potrebno (npr. RAF_OS).