os2

15

Click here to load reader

Upload: api-3759825

Post on 11-Apr-2015

154 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: os2

Procesi

Definicija

Postoje mnogo definicija procesa, navedimo neke :• Sekvencijalni tok izvršavanja u svom adresnom prostoru.• Apstrakcija operacijskog sustava koja reprezentira sve što je potrebno za izvođenje

programa.• Program u izvršavanju.

Treba naglasiti suštinsku razliku između programa i procesa :

Proces je dinamičan objekt, mijenja svoja stanja u vremenu, za razliku od programa koji je statičan i nepromjenjiv. Možemo pokrenuti više instanci neke aplikacije npr. web-preglednika i učitati različite stranice, očito je da se isti program nalazi u nekoliko potpuno različitih stanja koje se uz to mogu dinamički mijenjati.

Višezadaćnost

Jedno od glavnih svojstava modernih operacijskih sustava je mogućnost da se izvodi više od jedne aplikacije istodobno.

• Jednozadaćnost – može se izvršavati samo jedan proces u vremenu (MS-DOS).• Višezadaćnost – više procesa se može izvršavati paralelno

Bez uvođenja procesa kao objekta operacijskog sustava ostvarivanje višezadaćnosti bi bilo jako teško.

Resursi potrebni procesu

Da bi se neka aplikacija mogla izvršavati potrebni su joj različiti resursi računalnog sustava. Navedimo najvažnije resurse koji su potrebni procesu za njegovo izvršavanje:• Svakom procesu se dodijeljuje njegov adresni prostor (kod Win32, proces

posjeduje 4 GB). U taj memorijski prostor smještaju se instrukcije programa (Code) koje proces izvršava, podaci i stek.

• Procesu je potreban dio CPU vremena da se može izvršavati.• Proces može pristupati I/O uređajima, datotekama i drugim objektima operacijskog

sustava te mu OS mora osigurati pristup tim objektima.

Prilikom kreiranja procesa operacijski sustav mora alocirati sve potrebne resurse. Tijekom izvršavanja proces može tražiti dodatne resurse, npr. zbog potrebe pristupa I/O uređajima. Kada proces završi s radom, alocirani resursi se oslobađaju. Ovdje treba biti pažljiv jer se kod nekih operacijskih sustava može dogoditi da se ne oslobode svi resursi koje je proces alocirao, npr. u slučaju nepredviđenog završetka rada procesa.

1

Page 2: os2

Kreiranje procesa

Postoji nekoliko načina da se kreira novi proces.

Korisnik može pokrenuti proces na različite načine:• Unošenjem imena aplikacije iz komandne linije.• Preko grafičkog sučelja (npr. Start menija, Run dijaloga kod Microsoft Windows

obitelji operacijskih sustava).• Klikom na ikonu aplikacije.

Novi proces može kreirati i proces koji se trenutno izvršava tako što će pozvati odgovarajuću funkciju operacijskog sustava (pozivamo fork funkciju kod UNIX-a, odnosno CreateProcess kod Windows-a). Novokreirani proces može biti slika procesa (kopira se adresni prostor roditelja), ili potpuno nova aplikacija čiji se kod učitava s diska (u ovom slučaju kod UNIX-a se mora pozvati i funkcija execlp).

I sam operacijski sustav može stvoriti različite sistemske procese neovisno o akciji korisnika ili korisničke aplikacije. Ti procesi se obično stvaraju prilikom podizanja OS-a i rade u pozadini.

Kako doznati koji se procesi trenutno izvršavaju ?

Kod UNIX operacijskih sustava najlakše je pozvati ps program, dok kod Windows operacijskih susutava možemo pokrenuti task manager program (CTRL-ALT-DELETE kombinacija tipki).

Stanja procesa

Kako je proces dinamičan on u računalnom sustavu može biti u jednom od nekoliko mogućih stanja :• New – novokreirani proces.• Ready – proces čeka na izvršavanje kad procesor/procesori postane slobodan

(neki drugi proces se trenutno izvršava).• Running – proces izvršava instrukciju (za jednoprocesorski sustav može biti samo

jedan proces u ovom stanju).• Blocked/Waiting – proces čeka na neki eksterni događaj (ne može se izvršavati dok

se događaj ne izvrši).• Terminated – proces je završio sa izvršavanjem.

Primjeri dinamičkog mijenjanja stanja procesa:• Kada proces koji se izvršava bude prekinut nakon što je potrošeno dodijeljeno mu

vrijeme, njegovo stanje se mijenja iz Running u Ready. • Novokreirani proces može preći iz stanja New u Ready.• Kada proces koji se izvršava pristupa I/O uređaju, OS prekida njegovo izvršavanje i

stanje se mijenja iz Running u Waiting. Tek kad se I/O operacija izvrši proces može dalje nastaviti s izvršavanjem. Kako se u tom trenutku vjerojatno neki drugi proces izvršava blokirani proces prvo prelazi u stanje Ready.

2

Page 3: os2

Operacije nad procesima

Da bi se ostvarili različiti zahtjevi kao što su stvaranje i uništavanje procesa višezadaćnost, komunikacija među procesima, operacijski sustav mora implementirati neke osnovne funkcije za rad s procesima.

Uobičajene operacije su:• stvori, uništi • izađi• prekini, nastavi• pošalji, primi poruku• pogledaj/izmjeni stanje

Dijagram stanja procesa

Pogledajmo kako proces može prijeći iz jednog stanja u drugo.

Ready Running

Waiting (Blocked)

došao na red za izvođenje

prekid (npr. isteklo dodijeljeno vrijeme)

čekanje na događaj ili I/O operaciju

I/O operacija završena ili događaj signaliziran

Treba napomenuti da proces može prijeći iz stanja New u Ready prilikom kreiranja, te iz stanja Running u Terminated prilikom okončanja izvršavanja.

Kontrolni blok procesa (PCB – Process Control Block)

PCB je interna struktura podataka operaciskog susutava koja sadrži relevantne informacije o procesu. Svaki proces koji se izvršava treba PCB, odnosno određen je svojim kontrolnim blokom.

Operacijski sustav čuva listu svih PCB-a (za sve procese) kao internu strukturu. Kad se novi proces kreira OS automatski kreira i odgovarajući PCB i ubacuje u listu.Kako je PCB struktura koja u potpunosti opisuje proces, spremanje PCB-a nekog procesa prije nego što se njegovo izvršavanje prekine i poslije njegovo ponovno učitavanje je netransparentno od strane korisnika (sa stanovišta izvršavanja aplikacije ne vidi se nikakva razlika).

3

Page 4: os2

Uobičajene informacije koje se čuvaju u PCB-u su:• Lokacija u memoriji gdje je proces smješten.• Stanje procesa.• PC (program counter registar).• Drugi CPU registri.• PID – jedinstveni identifikacijski broj procesa• Prioritet procesa.• Neki podaci pridruženi procesu (npr. lista otvorenih datoteka, tablica stranica, TLB).

Proces 1 OS Proces 2

Prekid ili sistemski poziv()

Pokreni proces()

Prekid ili sistemski poziv()

Pokreni proces()

- spremi stanje procesa u PCBul- odaberi novi proces- ucitaj stanje procesa iz PCBiz

- spremi stanje procesa u PCBul- odaberi novi proces- ucitaj stanje procesa iz PCBiz

UML dijagram prikazuje tijek izvršavanja dva procesa koji se simultano izvršavaju na jednom procesoru.

4

Page 5: os2

Threads - niti, dretve

Thread-ovi su uvedeni kad se shvatilo da proces ima više nego jednu zadaću.• Proces se ponaša kao objekt koji dohvaća i koristi računalne resurse.• Proces također predstavlja put/tok izvršavanja (execution path) programa. Dakle,

procesu se mora dodijeliti vrijeme procesora za izvršavanje.

Postalo je jasno da se ove dvije stvari mogu odvojiti, tako da je objekt koji predstavlja put izvršavanja dobio ime thread. Naime uvođenjem thread-ova omogućava se da jedan proces može imati više puteva izvršavanja.

Definicija

Thread je poseban (jedan od) tok izvršavanja procesa. Proces sadrži bar jedan thread, ako postoji više od jednog thread-a onda oni dijele resurse procesa kao što su memorija (adresni prostor), I/O uređaji i sl. Thread je objekt koji se uvijek izvršava unutar procesa i ne može se izvršavati samostalno.

Pored korisničkih thread-ova koji su objekti procesa koji je kreirao korisnik i mogu pristupati samo resursima alociranim od tog procesa, postoje i tkz. jezgrini sistemski thread-ovi koji imaju pristup svoj memoriji i resursima alociranim untar jezgre operacijskog sustava. Ti jezgrini thread-ovi se kreiraju unutar različitih sistemskih procesa i upravljačkih programa (device drivers) koji moraju pristupati internim strukturama podataka jezgre OS-a.

Prednosti thread-ova

Thread-ovi imaju mnoge prednosti nad procesima u smislu izvršavanja:

• Jednostavnija zamjena konteksta (context switch - TCS). Kako thread-ovi dijele resurse unutar procesa, nije nužno da se spreme sve informacije o procesu da bi uradili TCS. Isto tako samo kreiranje thread-a je puno jeftinije od kreiranja procesa.

• Omogućavaju paralelno izvršavanje unutar jednog programa. To nam omogućava da neke poslove obavljamo u pozadini. Na primjer, program čita podatke s mrežnog priključka (network port) ili obavlje neke složene proračune dok čeka na ulaz s tipkovnice ili miša.

• Rješavanje problema koji zahtijevaju paralelizam. Web serverska aplikacija mora zadovoljiti mnogo upita u isto vrijeme i kad ne bi bio implementirana u više paralelnih thread-ova upiti korisnika bi se zadovoljavali jedan po jedan.

• Poboljšavanje odziva prema korisniku i iskoristivosti procesora. Na primjer, program za obradu teksta želi izvršiti back-up datoteka. Bez upotrebe thread-ova program

5

Page 6: os2

bi morao čekati da se spremanje završi i unos s tipkovnice bi bio nemoguć. Razdvajanje aplikacije u više thread-ova nam omogućavaju da istovremeno unosimo tekst i vršimo spremanje (dok mi utipkamo dva znaka moderni procesori mogu izvršiti milijune operacija).

Stanja

Treba napomenuti da postoje stanja i resursi koja dijele svi thread-ovi unutar jednog procesa:• adresni prostor procesa - globalne varijable, memorijski heap (dinamičku alocirana

memorija)• deskriptori datoteka• razni drugi resursi operacijskog sustava koje je proces alocirao (semafori, mutex-i).

Postoje i stanja “privatna” za svaki thread – svaki thread ima svoju kopiju tih stanja:• PC,• ostali registri procesora• stek izvršavanja (execution stack), no muguće mu je pristupiti i iz drugih threadova

Stek izvršavanja – mjesto u memoriji gdje se parametri, privremene varijable i PC koji treba vratiti čuvaju dok se pozvana funkcija izvršava.Lokalne varijable i parametri funkcija u programskom jeziku C (i u mnogim drugim programskim jezicima) se alocirani na steku.

Što se događa prilikom poziva funkciju ?

• Parameri funkcije se stavljaju na stek (push asemblerska naredba).• Poziva se funkcija (call asemblerska naredba, u PC se stavlja adresa funkcije, te

se u poseban registar sprema povratna adresa).• Alocira se prostor na steku za lokalne varijable (unutar tijela funkcije).• Izvodi se tijelo funkcije.• Sa steka se skidaju parametri funkcije i lokalne varijable.• Povratak iz funkcije, u PC se stavlja povratna adresa i nastavlja se s izvršavanjem

van tijela funkcije.

Kontrolni blok (Thread Control Block – TCB)

Struktura podataka koja sadrži informacije o threadu i koja ga u potpunosti opisuje zove se kontrolni blok threada. Ako thread prekinemo i spremimo njegov TCB te ga ponovo pokrenemo nakon što smo učitali kontrolni blok, nema nikakve razlike sa stanovišta korektnosti izvršavanja.

Uobičajene informacije koje se čuvaju u TCB-u su:• stanje izvršavanja – (registri, PC, SP)• stanje u kojem se thread nalazi(slično kao kod PCB).• thread ID - identifikator• neke dodatne informacije (kod Win32 lista kreiranih prozora)

6

Page 7: os2

Treba naglasiti da thread može biti u istim stanjima kao i proces (pogledaj prethodno poglavlje).

Pokretanje i izvršavanje thread-ova

Kod operacijskih sustava koji podržavaju višezadaćnost mora postojati način da se ostvari izvršavanje kreiranih threadova. Za to je obično odgovoran poseban dio operacijskog sustava. Taj modul može izvršavati beskonačnu petlju:

PETLJAPokreni ThreadSpremi stanje (u TCB)Odaberi novi thread za pokretanjeUčitaj njegovo stanje iz TCB

Kako uopće pokrećemo odabrani thread (odabrani mora biti iz skupa thread-ova koji su u stanju ready) ?Učitava se njegovo stanje (registre, PC, SP) u CPU i radi se skok na odgovarajuću memorijsku adresu (gdje pokazuje PC).

Zamjena konteksta – spremanje/učitavanje stanja thread-a koja mogu biti “zaprljana” (TCB) dok se neki drugi thread izvršava. Uobičajena stanja su:

• PC registar• status registar• SP (pokazivač steka) registar• pokazivač na adresni prostor u kojem se thread izvršava.

Važno je napomenuti da se prilikom prelaska iz korisničkog u jezgrin mod OS-a ne događa zamjena konteksta, odnosno sprema se samo minimalni kontekst procesora što je samo podskup stanja TCB-a.

Dispatcher – to je modul (može biti i skup različitih funkcija) unutar jezgre operacijskog sustava koji implementira:

• Zamjenu konteksta - spremaju se stanja jednog thread-a i učitavaju se stanja novog.

• Pokretanje izvršavanja novog thread-a – ako treba vrši se povratak u korisnički mod te se nastavlja izvršavanje sa memorijske lokaciju na koju pokazuje PC registar.

Nakon pokretanja thread-a postavlja se pitanje kako dispatcher dobiva kontrolu nazad.Postoje dva suštinska načina :

1. Thread sam izaziva događaje kojim predaje kontrolu.

- Thread ide u stanje Waiting čekajući na I/O (čeka na disk I/O, ili tekst procesor čeka na unos s tipkovnice).

7

Page 8: os2

- Thread se blokira čekajući da neki drugi thread nešto napravi (sinkronizacija, npr. WaitForSingleObject Windows funkcija).

- Sleep() – dobrovoljno prepuštanje CPU-a nekom drugom thread-u koji je u stanje ready.

- Iznimka (npr. dijeljenje nulom, pogreška stranice) – CPU detektira iznimku i skače na OS exception handler kod.

- Završetak izvođenja thread-a.

Što ako thread nikad ne radi neki I/O, ne čeka, ne zove Sleep() i nikad ne generira iznimku? Da bi višezadaćnost funkcionirala dispatcher mora nekako opet dobiti kontrolu. Zbog toga moraju postojati vanjski događaji na koje thread koji se izvršava ne može utjecati.

2. Događaji izazvani bez utjecaja thread-a koji se trenutno izvršava.

- Prekidi - (pritisak tipke, disk I/O završen) dispatcher se budi i može izabrati neki drugi thread da se izvršava.

Timer može biti taj koji generira prekide u točno određenim vremenskim intervalima što je posebno značajno za ostvarivarenje naprednog tipa višezadaćnosti.

8

Page 9: os2

Raspoređivanje vremena procesora - CPU Scheduling

Da bi operacijski sustav ostvario bilo koji oblik višezadaćnosti mora postojati način da se raspodijeli vrijeme procesora među zadaćama koje se izvršavaju u danom vremenu.Kako većina modernih operacijskih podržava thread-ove na razine jezgre OS-a, smatraćemo da se vrijeme procesora dodjeljuju thread-ovima (iako svi razmatrani postupci i algoritmi vrijede i u slučaju procesa – Linux slučaj).

Iznuđena (preemptive) i neiznuđena (non-preemptive) višezadaćnost

Postoje dvije suštinski različite vrste višezadaćnosti :

• Iznuđena višezadaćnost znači da neki thread koji se trenutno izvodi može biti prekinut (preempted) u izvršavanju (prelazak iz running u ready stanje). Nakon zamjene konteksta počinje se izvršavati neki drugi thread. Svojstva:

- timer može biti uzrok zamjene konteksta

- manje efikasna od neiznuđene (više zamjena konteksta)

- sofisticiranija i naprednija (svi moderni operacijski sustavi koriste ovu vrstu višezadaćnosti)

• Neiznuđena višezadaćnost znači da kad neki thread započne s izvođenjem može se izvoditi sve dok ne završi (osim ako sam ne dodijeli CPU nekom drugom pozivom funkcija čekaj() – wait() ili predaj() -yield()). Kod ove vrste višezadaćnosti aplikacije moraju surađivati da bi dobili osjećaj paralelizma, zato se još naziva i kooperativna višezadaćnost.Svojstva:

- efikasnija i lakša za implementaciju

- otvara mnogo problema (beskonačna petlja ili duga operacija u jednoj aplikaciji dovodi do smrzavanja drugih aplikacija)

- primjer su Miscrosoft Windows 3.1, stari Apple Macintosh OS

Ciljevi raspoređivanja vremena procesora

Glavni ciljevi koji se moraju zadovoljiti kod odabira strategije i algoritama raspoređivanja vremena procesora su:

• Minimiziranje vremena odziva.• Maksimiziranje broja korisnih operacija u sekundi (povećanje iskoristivosti

procesora).• Pravednost.

9

Page 10: os2

Minimiziranje vremena odziva

Vrijeme odziva je vrijeme potrebno da se neka operacija/posao završi. To je zapravo vrijeme izvršavanja onoga što korisnik vidi :

• Vrijeme prevođenja programa.• Vrijeme od pritiska tipke do prikaza odgovarajućeg znaka na ekranu.• Vrijeme iscrtavanja 3D objekta.

Ovaj kriterij je jako bitan kod aplikacija gdje postoji interakcija između korisnika i sustava (GUI aplikacije).

Maksimiziranje broja korisnih operacija u sekundi

Cilj je povećati iskoristivost procesora (vrijeme kad procesor radi koristan posao/ ukupno proteklo vrijeme). Dva načina da se poveća :

• Smanjiti ukupno vrijeme potrošeno na zamjenu konteksta između thread-ova. • Smanjivanjem frekvencije zamjene konteksta povećava se iskoristivost

procesora.

Pravednost

Raspodjela vremena procesora između thread-ova treba biti izvedena na jednak/pravedan način. Na primjer, ako korisnik kaže da je operacija A višeg prioriteta nego operacija B, onda je pravedno da OS da više resursa operaciji A nego operaciji B. Zahtjev je spriječiti izgladnjivanje (starvation) – stanje u kome je thread beskonačno blokiran. Sustav koji izbjegava izgladnjivanje garantira da će svi poslovi u stanju ready doći na red za izvršavanje.

Treba naglasiti da se ne mogu uvijek zadovoljiti sva tri cilja istodobno. Nekad možemo poboljšati prosječno vrijeme odziva tako što ćemo smanjiti pravednost sustava.

Strategije raspoređivanje vremena procesora

FIFO

First in - first out, alternativni naziv je FCFS first come, first serve.

Glavno obilježje ove strategije je da thread/proces drži CPU sve dok ne ode u stanje Waiting (ide u “red čekanja”).

Glavna prednost ove strategije je njena jednostavnost. Objekti koji predstavljaju thread-ove (kontrolni blok thread-a) se smještaju u obični red (FIFO queue). Kad novi thread dođe smješta se na rep (tail) reda. S druge strane kad procesor postane slobodan odabire s thread s glave (head) reda.

10

Page 11: os2

glava TCB TCB TCB TCB rep TCB

stavi thread u red cekanja()pokreni thread iz reda cekanja()

FIFO red thread-ova koji čekaju na izvršavanje (predstavljenih TCB strukturom).

Prednosti ove strategije su što je broj zamjena konteksta mali pa je i iskoristivost procesora dobra. Prednost strategije je i to što ne može doći do izgladnjivanja zbog čuvanja redoslijeda thread-ova/procesa koje čekaju u redu.

Međutim postoji i ozbiljan nedostatak: U slučaju da na red dođe thread koji obavlja CPU-intenzivnu zadaću koja dugo traje i ne pristupa I/O uređajima druge zadaće mogu zapeti. Treba napomenuti da je FIFO strategija primjer neiznuđene višezadaćnosti (thread ne može biti prekinut u izvođenju vanjskim događajem).

Round Robin

Round Robin strategija je primjer iznuđene višezadaćnosti. Naime, svakom threadu se dodijeljuje vremenski interval (quantum) za izvršavanje instrukcija procesora. Ako taj vremenski interval istekne a thread nije završio, OS prekida njegovo izvršavanje i dodijeljuje procesor nekom drugom thread-u (thread ide iz stanja running u ready). Da bi ostvarili RR strategiju moramo koristiti timer, u određenim vremenskim intervalima generira se hardverski prekid – timer interrupt tako da dio operacijskog sustava koji upravlja raspodjelom vremena procesora može dobiti kontrolu natrag i odabrati neki drugi thread.

Red u kojem thread-ovi čekaju na izvršavanje je sada kružni, znači thread koje je bio prekinut se stavlja na rep reda a za izvršavanje se odabire sljedeća glava reda i tako u krug dok svi thread-ovi ne okončaju sa izvršavanjem.

11

Page 12: os2

glava TCB

TCB

TCB

TCB

rep TCB TCB

TCB

TCBCPU

RR kružni red thread-ova koji čekaju na izvršavanje.

Glavno pitanje je kako pravilno odabrati vremenski interval prekida.

• Ako je preveliki vrijeme odziva je loše (drugi thread-ovi čekaju predugo). Krajnji slučaj (beskonačan vremenski interval) je zapravo FIFO strategija.

• Ako je interval premali iskoristivost procesora je loša (svo vrijeme se troši na zamjenu konteksta). Krajnji slučaj je da thread-ovi izvršavaju samo jednu instrukciju u danom vremenskom intervalu.

U stvarnosti treba nam neki balans. Tipičan vremenski interval je 10-100 milisekundi, dok je tipično vrijeme za zamjenu konteksta oko 100-1000 CPU instrukcija, tako da se maksimalno 10% vremena troši na zamjenu konteksta. Odabir duljine vremenskom intervalu u mnogome ovisi o tipu operacijskog sustava, npr. kod Windows-a 2000 Server verzije iznosi oko 120 ms, dok kod XP verzije iznosi 20 ms. Naime, ako je naglasak na interakciji s korisnikom (XP varijanta) zanima nas što kraće vrijeme odziva pa se odabire kraći vremeski interval, a ako je naglasak na serverskim aplikacijama onda je iskoristivost procesora mnogo važnija pa odabiremo duži interval.

Glavne prednosti RR strategije je to što osigurava pravednost (svaki thread dobiva isti vremenski interval) te uz pravilno odabranu dužinu vremenskog intervala iskoristivost procesora je prilično dobra (obično 90% od maksimalne).

Međutim u pojedinim slučajevima prosječno vrijeme odziva može biti bitno lošije nego kod drugih strategija. Ako imamo više thread-ova čije je vrijeme izvršavanja različito prosječno vrijeme odziva je dobro (kraći poslovi će završiti brzo, dok za duge vrijeme odziva nije puno gore od optimalnog). Problem se javlja kad poslovi zahtijevaju isto vrijeme za izvršavanje.

Primjer:

12

Page 13: os2

10 thread-ova, svaki zahtjeva 100 sekundi vremena procesora. RR vremenski interval je 1 s, vrijeme koje se troši na zamjenu konteksta je 0 s. Svi počinju u isto vrijeme.

Thread Vrijeme završetka - FIFO Vrijeme završetka - RR1 100 9912 200 9923 300 993... ... ...9 900 99910 1000 1000

RR izvršava svaki thread po jednu sekundu prije nego što ponovo ode na prvi, tako da svaki thread akumulira 99 sekundi procesorskog vremena prije nego što bar jedan završi. I RR i FIFO završavaju u isto vrijeme, ali je prosječno vrijeme odziva puno bolje za FIFO.

Prosječno vrijeme izvršavanja za FIFO – 550 s.Prosječno vrijeme izvršavanja za RR – 995 s.

STCF/SRTCF

Osnovna ideja ove strategije ja da odabiremo za izvršavanje onaj thread/proces koji će se prvi završiti.Postoje dvije varijante:

• STCF- shortest time to completion first. Izvrši prvo thread-ove koji zahtijevaju najmanje vremena. Ovo je neiznuđena verzija, thread koji se izvršava ne može biti prekinut.

• SRTCF- shortest remaining time to completion first. Iznuđena verzija STCF - ako novokreirani thread ima manje vremena do okončanja nego onaj koji se trenutno izvršava, onda se izvršava taj novi thread.

Ideja je da se što prije riješimo kratkih poslova.Strategija ima veliki utjecaj na kratke poslove, mali na duge. Kao rezultat imamo jako dobro prosječno vrijeme odziva (zapravo najbolje moguće).

Iako je prosječno vrijeme odziva optimalno i iskoristivost CPU dobra može doći do izgladnjivanja, naime puno kratkih poslova koji se stalno kreiraju može spriječiti da se dugi poslovi izvršavaju.

Ipak najveći problem je kako predvidjeti budućnost, odnosno kako znati koliko će se neki thread izvršavati.

Naravno, ovakav algoritam se ne može direktno implementirati, najviše što možemo učiniti je da iskoristimo prošlost da bi se predvidjela budućnost.

Prioriteti

13

Page 14: os2

Svakom thread-u/procesu možemo dodijeliti prioritet. Kod ove strategije uvijek se izvršavaju thread-ovi najvećeg prioriteta, tek kad svi oni završe odnosno odu u stanje Waiting (nema ni jednog thread-a najvećeg prioriteta u stanje Ready) ide se na izvršavanje thread-ova nižeg prioriteta (naravno takvih koji su u stanju Ready).

SRTCF spada u politike prioritetnog raspoređivanja vremena procesora gdje je prioritet P = predviđeno vrijeme do kraja.

Standardna implementacija je takva da se thread-ovi najvećeg prioriteta izvršavaju u RR krugu (tako je implementirano kod Win32 operacijskih sustava). Kod Windows 2000 imamo 32 razine prioriteta (0-31) s tim da je 0 najniži prioritet.

Kada se događa zamjena konteksta ?Navedimo standardne događaje koji izazivaju zamjenu konteksta:

• istek vremenskog intervala• završetak rada thread-a• dobrovoljan odlazak thred-a u stanje čekanja

Sada imamo još jedan slučaj, naime thread većeg prioriteta (novokreirani ili onaj koji je prešao iz stanja Waiting u Ready) može prekinuti izvršavanje thread nižeg prioriteta. Zbog te činjenice možemo imati problem sa izgladnjivanjem jer thread-ovi nižeg prioriteta čekaju da thread-ovi višeg prioriteta završe i možda nikada ne dođu na red. Srećom pokazalo se da interaktivne aplikacije većinu vremena provode u čekanju na neki događaj (obično akciju korisnika), pa kada OS detektira da svi poslovi najvećeg prioriteta čekaju, dodijeljuje CPU poslovima nižeg prioriteta.

Kako bi mogli riješiti problem izgladnjivanja?Postoje različite varijante algoritama kod kojih kako vrijeme odmiče povećavamo prioritet thread-ova koji ne mogu doći na red za izvršavanje.

Windows 2000 primjenjuje sljedeću strategiju:Postoji poseban sistemski thread (balance set manager) koji svake sekunde provjerava da li postoje thread-ovi u stanju Ready koji predugo čekaju (taj interval izgladnjivanja je obično 3 sekunde). Ako se pronađe takav thread privremeno mu se povećava prioritet. Nakon što taj thread izvrši svoj quantum povećani prioritet mu se vraća na staru vrijednost.

Višerazinski redovi s povratnom vezom (multilevel feedback)

Da bi riješili problem izgladnjivanja razne verzije UNIX-a koriste ovu strategiju.Imamo više redova s thread-ovima/procesima koji su u stanju Ready, svaki s različitim prioritetom i svaki sa različitim vremenskim intervalom izvršavanja.Za svaku razinu (red) prioriteta primjenjuje se RR strategija. Izvršavaju se prvo poslovi najvišeg prioriteta i tek ako je red najvišeg prioriteta prazan prelazi se na sljedeći niži nivo. Naravno thread nižeg prioriteta može biti prekinut u izvršavanju (preempted) ako se pojavi thread višeg prioriteta.

Glavna značajka ove strategije je da se pojedinom thread-u može dinamički mijenjati prioritet (odnosno može biti smješten u različite redove).

RR vremenski intervali povećavaju se eksponencijalno kako se prioritet smanjuje.

14

Page 15: os2

Red thred-ova u stanju Ready

Prioritet reda (1 najveći prioritet)

Vremenski interval

xxx0 1 1xxxxx 2 2

xx 3 4xxxxxxx 4 8

Tijekom vremena prioritet pojedinog thread-a se prilagođava :• počinje se s najvećim prioritetom 1• ako vremenski interval istekne a thread nije završio, smanji prioritet za 1• ako “timeout izgladnjivanja” istekne a posao nije došao na red, povećaj prioritet za

1.

Primjenom ove strategije interaktivni thread-ovi (koji većinu vremena provode u stanju čekanja) osciliraju oko najvišeg prioriteta, dok thread-ovi koji intenzivno koriste CPU (serverski procesi, numeričke aplikacije) osciliraju oko najnižeg prioriteta.

15