Tema02-UpravljanjeProcesima

69
07:12:48 1 UPRAVLJANJE PROCESIMA I NITIMA OPERATIVNI SISTEMI

description

Operativni sistemi upravljanje procesima 2015-2016

Transcript of Tema02-UpravljanjeProcesima

Page 1: Tema02-UpravljanjeProcesima

04:17:40

1

UPRAVLJANJE PROCESIMA I NITIMA

OPERATIVNI SISTEMI

Page 2: Tema02-UpravljanjeProcesima

04:17:40

2

Procesi Rani računarski sistemi nisu omogućavali izvršenje više od jednog

programa istovremeno.

program je imao potpunu kontrolu nad sistemom i pristup svim resursima.

Danas: istovremeno prebacivanje više programa u memoriju njihovo konkurentno izvršavanje

Efikasnost

Prebacivanjem CPU između procesa, odnosno programa u izvršenju, operativni sistem postaje efikasniji.

Centralni koncept OS-a:

proces: apstrakcija jednog aktivnog programa.

Page 3: Tema02-UpravljanjeProcesima

04:17:40

3

Koncept procesa

Moderni računari

istovremeno više aktivnosti U multitasking sistemu CPU prelazi sa programa naprogram

U svakom trenutku na CPU samo jedan program Korisnik ima osjećaj paralelnog rada

kvaziparalelnosti pravu hardversku paralelnost u višeprocesorskim

sistemima proces - program u izvršenju

Proces se izvršava sekvencijalno

CPU jedna po jedna instrukcija

Page 4: Tema02-UpravljanjeProcesima

04:17:40

4

Koncept procesa

Proces je više od programskog koda trenutne aktivnosti prezentirane

vrijednošćuprogramskog brojača (program counter)

sadržajem procesorskih registara. program - pasivan entitet proces - aktivan entitet

Page 5: Tema02-UpravljanjeProcesima

04:17:40

5

Model procesa U ovom modelu je čitav softver a nekad takođe i operativni sistem

organizovan kao veliki broj sekvencijalnih procesa.

Svaki proces ima svoju virtualnu CPU.

(U realnosti CPU se prebacuje između procesa.)

Veliki broj (kvazi)- paralelnih procesa

Brzo prebacivanje CPU između programa se naziva multiprogramiranje.

Brzina kojom proces radi nije jedinstvena

Zbog prelaska CPU između procesa

nije moguće reproducirati kad se isti proces ponovo aktivira

Brzina izvršenja-pod uticajem relativne brzine različitih procesa

Proces je aktivnost - ima program, ulaz, izlaz i stanje

Page 6: Tema02-UpravljanjeProcesima

04:17:41

6

Model procesa

Memorija jednog računara koji paralelno računa 4 programa

4 procesa od kojih svaki ima neovisno upravljanje tokom, i radi nezavisno od drugih

Napredovanje svih procesa tokom dužeg vremenskog intervala iako je u jednom trenutku aktivan samo jedan proces

Page 7: Tema02-UpravljanjeProcesima

04:17:41

7

Model procesa

Svaki proces ima tri fundamentalna memorijska dijela: Programska sekcija koja se ne mijenja i koja

sadrži programski kod Stek sekcija (engl. steck section) koja sadrži

privremene podatke (parametre za procedura, povratne adrese, lokalne promjenjive)

Sekcija podataka (engl. data section) koja sadrži globalne promjenjive

Proces obuhvata vrijednost programskog brojača (engl. program counter)

Page 8: Tema02-UpravljanjeProcesima

04:17:41

8

Predstavljanje procesa

Proces je dinamička struktura

dio procesa su i podaci koji opisuju aktivnost procesa – neophodni za upravljanje procesom

Kontrolni blok procesa (Process Control Block, PCB)

vektor stanja – deskriptor procesa Kontrolni blok je dio radne memorije

memorijska struktura sa osnovnim informacijama o procesu

Zahvaljujući kontrolnom bloku izvršenje programa se može prekidati i nastavljati više puta

Page 9: Tema02-UpravljanjeProcesima

04:17:41

9

Implementacija procesa

Svaki proces u operativnom sistemu predstavljen kontrolnim blokom procesa

PCB- process control block

Page 10: Tema02-UpravljanjeProcesima

04:17:41

10

Process Control Block Proces predstavljen

process control block (PCB) - proces deskriptor

PCB sadrži važne informacije o određenom procesu

PCB - skladišni prostor

dozvoljava operativnom sistemu lociranje informacija o procesu.

struktura podataka koja definiše proces operativnom sistemu

Kontekst procesa

podaci koji se čuvaju prilikom oduzimanja procesora

snimanje stanja tekućeg procesa i pozivanje snimljenih podataka novog procesa

(engl. context switch) jezgro snima konetkst starog (tekućeg) procesa u PCB (Process Control Block) i puni sačuvani kontekst procesa koji je raspoređen za rad na CPU

Page 11: Tema02-UpravljanjeProcesima

04:17:41

11

PCB sadrži Trenutno stanje procesa: ready, running, waiting, i dr.

Jedinstvenu identifikaciju procesa (ime ili jedinstveni identifikator procesa PID)

Pokazivač na proces roditelj

Pokazivač na child proces (ako postoji)

Prioritet procesa (dio koji se odnosi na raspoređivanje CPU)

Pokazivač koji pokazuje na memoriju procesa

Područje registara

Informacije o memoriji procesa,

Lista otvorenih datoteka,

Status zauzetih ulazno-izlaznih resursa,

Procesor na kome radi (ako ima više procesora).

Page 12: Tema02-UpravljanjeProcesima

04:17:41

12

PCB Stanje procesa

može biti novi, spreman, aktivan, čeka, itd. Programski brojač

pokazuje adresu slijedeće instrukcije koja za ovaj proces treba biti izvršena. CPU registri

se mijenjaju kada je u pitanju tip ili veličina, zavisno od arhitekture računara. Informacija o raspoređivanju CPU

uključuje prioritet procesa i bilo koje druge parametre karakteristične za raspoređivanje CPU.

Informacija o upravljanju memorijom može uključivati informaciju o vrijednosti baznog i limit registra, tabele stranica

zavisno od memorijskog sistema koji se koristi. Accounting informacija

uključuje korišteno CPU vrijeme, realno korišteno vrijeme, vremenske limite, bro procesa itd.

Informacija o statusu U/I uključuje listu U/I uređaja dodijeljenih procesu, listu otvorenih datoteka itd.

Page 13: Tema02-UpravljanjeProcesima

04:17:41

13

Pokretanje procesa

Četiri događaja uzrokuju pokretanje jednog procesa:

1. Inicijalizacija sistema 2. Sistemski poziv za pokretanjem procesa

kroz neki drugi proces 3. Korisnički zahtjev za stvaranjem

procesa 4. Inicijalizacija batch poslova

Page 14: Tema02-UpravljanjeProcesima

04:17:41

14

Pokretanje procesa

Prilikom inicijalizacije sistema pokreće se više procesa.

Procesi koji rade u prvom planu koji komuniciraju sa korisnicima i završavaju

zadatke za njih. Pozadinski procesi

izvršavaju specijalne funkcije i ne pripadaju određenim korisnicima (deamons).

Primjer: proces može biti proces za prijem e-mail poruka

Page 15: Tema02-UpravljanjeProcesima

04:17:41

15

Pokretanje procesa

Aktivni procesi u sistemu:

Windows: kombinacija Ctrl-Alt-Del tipki prikazuje aktivne procese.

UNIX: ps (ps je skraćenica za Process Status) za prikaz svih aktivnih procesa.

$ ps

PID TTY TIME CMD

3511 pts/1 00:00:00 bash

3514 pts/1 00:00:00 ps

Page 16: Tema02-UpravljanjeProcesima

04:17:41

16

Pokretanje procesa

Često aktivni procesi pokreću sistemske pozive za stvaranje jednog ili više novih procesa

korisno podijeliti posao na više nezavisnih ali povezanih procesa

U interaktivnom sistemu korisnik:

pokreće program davanjem komande ili duplim klikom na ikonu.

Batch procesiranja u velikim mainframe računarima.

Korisnik prenosi batch job na sistem sistem odluči da ima dovoljno sredstava za obradu novog

zadatka pokreće novi proces

Page 17: Tema02-UpravljanjeProcesima

04:17:41

17

Završetak procesa

Prije ili kasnije proces završava na osnovu jednog od sljedećih uslova:

Normalni izlaz (dobrovoljno) Izlaz sa greškom (dobrovoljno) Fatalna greška (nije dobrovoljno) Ubijen (killed) od strane drugog procesa (nije

dobrovoljno)

Page 18: Tema02-UpravljanjeProcesima

04:17:41

18

Završetak procesa Većina procesa završavaju kad su ispunili svoj zadatak.

Grafički orijentisanih programa

dobrovoljni završetka (exit, close, quit).

Drugi razlog za završetak

značajna greška, npr. ulazni podaci ne postoje.

Treći razlog za završetak

greška prouzrokovana kroz sam proces (programske greške)

proces biva prekinut

Četvrti razlog za završetak

sistemski poziv od strane nekog drugog procesa koji upućuje operativni sistem da terminira neki proces.

Page 19: Tema02-UpravljanjeProcesima

04:17:41

19

Hijerarhija procesa

UNIX: proces zajedno sa svim

child procesima i njihovim child procesima gradi familiju

Windows: ne postoji hijerarhija

procesa Skupovi procesa se mogu

spojiti u job, koji od Windows 8 imaju hijerarhiju

Page 20: Tema02-UpravljanjeProcesima

04:17:41

20

Fork, wait, exec, exit Sistemskim pozivom fork() zahtijeva se kreiranje novog procesa.

Sistemski poziv wait() suspenduje izvršenje pozivajućeg procesa

dok neki od procesa djece završi (ili bude zaustavljen za vrijeme praćenja).

Ako proces dijete završi sa radom a roditelj ga ne čeka sa wait()

proces dijete neće nestati jer bi se onda izgubili podaci o tome sa kakvim exit kodom je završio

proces dijete postaje zombie proces i ps će za njega pod STAT ispisati Z.

exec() - proces koji se pozove prestaje sa izvođenjem trenutnog programa i počinje sa drugim (koji je naveden kao argument).

Postoje tri načina kako može završiti proces:

pozivom exit, primitkom signala ili padom sistema (nestanak napajanja ili slično).

Page 21: Tema02-UpravljanjeProcesima

04:17:41

21

Stanja procesa New - novi: proces je upravo kreiran. Running – aktivan ( izvršava se): instrukcije se

izvršavaju. Waiting (blocked) – čeka (blokiran): proces

čeka na pojavu nekog događaja kao što je neka U/I operacija.

Ready – spreman: proces čeka da bude dodijeljen procesoru.

Terminated – završen: proces je završio izvršenje.

Page 22: Tema02-UpravljanjeProcesima

04:17:41

22

Prelazi između stanja procesa running - waiting (blocked)

(izvršava se - blokiran)

ready - running

(spreman – izvršava se)

running - ready

(izvršava se – spreman)

waiting – ready

(blokiran – spreman)

Page 23: Tema02-UpravljanjeProcesima

04:17:41

23

Prošireni dijagram stanja procesa

(engl. suspend) – proces prestaje da se takmiči za resurse

Suspendovanje u stanjima wait i ready – dva dodatna stanja:

Suspended-ready (suspendovan u stanju čekanja na procesor)

Suspended-wait (suspendovan u stanju čekanja na resurs)

Page 24: Tema02-UpravljanjeProcesima

04:17:42

24

Prošireni dijagram stanja procesa

Nove tranzicije sa dijagrama ready - suspended ready wait - suspended waiting suspended waiting – suspended ready suspended ready - ready suspended waiting – waiting

Page 25: Tema02-UpravljanjeProcesima

04:17:42

25

Redovi raspoređivanja (scheduling queues)

Redova čekanja (engl. scheduling queues) Ovaj red se sastoji od svih procesa u

sistemu. ready queue – čekaju na CPU Lista procesa koji čekaju na neki uređaj se

zove device queue. Svaki uređaj ima svoj vlastiti red čekanja

Page 26: Tema02-UpravljanjeProcesima

04:17:42

26

Ready queue i različiti redovi čekanja uređaja (device queue)

Page 27: Tema02-UpravljanjeProcesima

04:17:42

27

Redovi čekanja na procesor

Dva reda čekanja: red čekanja na procesor i red čekanja na U/I

Proces koji se nalazi u stanju izvršavanja može:

Ostati bez procesora kada mu istekne vremenski kvantum

Napraviti novi proces i čekati u blokiranom stanju da se novi proces izvrši

Ostati bez procesora kad se dogodi prekid

Postaviti U/I zahtjev, nakon čega se prebacuje u red čekanja na ulazno-izlazni uređaj, tj. postaje blokiran

Page 28: Tema02-UpravljanjeProcesima

04:17:42

28

Dijagram raspoređivanja

Page 29: Tema02-UpravljanjeProcesima

04:17:42

29

Raspoređivači

Programi za raspoređivanje (engl. Schedulers) odlučuju o tome kada će proces ući u neki red čekanja ili napustiti taj red

Dugoročni (long-term) raspoređivač poslova izabira proces, puni ga u memoriju za izvršenje

Kratkoročni raspoređivač poslova (short-term scheduler)

bira između procesa koji su spremni za izvršenje i dodjeljuje CPU jednom od njih

Razlika u frekvenciji rada ova tri raspoređivača

Page 30: Tema02-UpravljanjeProcesima

04:17:42

30

Promjena konteksta procesa Prebacivanje CPU na drugi proces zahtjeva snimanje stanja starog

procesa i pozivanje snimljenog stanja novog procesa.

Ovaj zadatak se zove promjena konteksta

Vrijeme potrebno za promjenu konteksta veoma zavisi od hardverske podrške

Dispečer:

Pamti stanje procesa koji se prekida, kako bi se proces mogao kasnije nastaviti

Puni memoriju stanjem novog procesa kome se dodjeljuje procesor

Kontekst procesa

podaci koji se čuvaju prilikom oduzimanja procesora

omogućavaju nastavak izvršenja procesa

Kontrolni blok čuva stanje procesa prilikom zamjene konteksta

Page 31: Tema02-UpravljanjeProcesima

04:17:42

31

WINDOWS API ZA UPRAVLJANJE PROCESIMA

CreateProcess(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation)

Kreira novi proces. LpStartup info pokazuje na veliku strukturu koja opisuje dimenzije prozora i oznake ulaza/izlaza

CreateProcessAsUser(hToken, lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles,dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation)

Kreira novi proces kao drugi korisnik

ExitProcess(uExitCode)

Završava trenutni proces

GetCurrentProcessId ()

Dobavlja identifikator trenutnog procesa

OpenProcess(dwDesiredAccess, bInheritHandle, dwProcessId)

Otvara proces i dobija njegov rukovatelj

QueryFullProcessImageName( hProcess, dwFlags, lpExeName, lpdwSize)

Saznaje ime procesa iz rukovatelja

TerminateProcess(hProcess, uExitCode)

Prekida izvršenje drugog procesa

EnumProcesses(pProcessIds, wArraySize, pBytesReturned)

Očitava identifikatore svih procesa

Page 32: Tema02-UpravljanjeProcesima

04:17:42

32

POSIX API ZA UPRAVLJANJE PROCESIMA

fork();

Kreiraj dijete proces

execl( pcPath, pcArg, ...);

execlp( pcFile, pcArg, ...);

execv( pcPath, pcArgv[]);

execvp( pcFile, pcArgv[]);

Izvrši program iz datoteke

waitpid(idPid, piStatus, iOptions);

Čekaj završetak procesa

exit(iStatus);

Završi trenutni proces

int kill(idPid, iSig);

Šalji signal procesu

unsigned int sleep(uiSeconds);

Spavaj navedeni broj sekundi

int pause();

Čekaj signal

unsigned int alarm(uiSeconds);

Postavi alarm za slanje signala

getpid();

Dobavi identifikacjiju procesa

getppid();

Identifikacija roditeljskog procesa

Page 33: Tema02-UpravljanjeProcesima

04:17:42

33

WINDOWS API ZA UPRAVLJANJE GRUPAMA PROCESA

CreateJobObject( lpJobAttributes,lpName)

Kreira Job, grupni objekt kojim se može uticati na više procesa

OpenJobObject(dwDesiredAccess,bInheritHandles, lpName)

Otvara postojeći Job AssignProcessToJobObject(hJob, hProcess)

Dodaje proces u Job TerminateJobObject( hJob, uExitCode)

Prekida sve procese vezane u Job

Page 34: Tema02-UpravljanjeProcesima

04:17:42

34

POSIX API ZA UPRAVLJANJE GRUPAMA PROCESA

setpgid(iProcessId, iProcessGroup); Premješta proces u grupu procesa

getpgid(iProcessId); Vraća grupu procesa za proces

getpgrp(void); Vraća grupu procesa za trenutni proces

int kill(iProcessGroup, iSignal); Šalje signal grupi, ID grupe mora biti negativan

broj

Page 35: Tema02-UpravljanjeProcesima

04:17:42

35

Programske niti MMU (Memory Management Units)

sprečavaju da neki proces prepisuje adresni prostor drugog procesa

promjena konteksta – znači reprogramiranje MMU

Više procesa – više vremena na promjenu konteksta

Programske niti – da se izbjegne ovaj problem

Programske niti kao child procesi, ali dijele isti adresni porstor

Prednost programskih niti:

Nema zamjene adresnog prostora

Manje CPU vremena za prebacivanje

Lakša komunikacija- dijele isti adresni prostor

Page 36: Tema02-UpravljanjeProcesima

04:17:42

36

Programske niti (threads) Programska nit - laki proces (engl. lightweight process LWP)

Osnovni entiteti koji se izvršavaju na CPU

Unikatni resursi za niti:

poseban identifikator niti (engl. thread ID),

posebnu vrijednost programskog brojača,

vrijednosti drugih registara procesora i

poseban stek

Ostali resursi zajdenički za sve niti jednog procesa:

sekcija koda,

sekcija podataka,

otvorene datoteke,

signali...

Page 37: Tema02-UpravljanjeProcesima

04:17:42

37

Model programske niti Proširenje modela procesa

višestruka izvršenja u istom okruženju

Više niti aktivnih paralelno u jednom procesu <=> Više procesa koji su aktivni na jednom računaru

I slučaj: niti dijele adresni prostor, otvorene datoteke i druge resurse.

II slučaj: slučaju procesi dijele fizičku memoriju, diskove, printer i druge resurse.

Page 38: Tema02-UpravljanjeProcesima

04:17:42

38

Model programske niti

Višestruke niti (multithreading)

više niti unutar procesa

Multithreading

CPU se prebacuje između različitih niti stvarajući iluziju niti koji rade paralelno ali na CPU sporijoj od realne.

Niti manje nezavisne od porcesa

Niti imaju isti adresni prostor

dijele i iste globalne varijable

mogućnost da višestruke niti izvršenja dijele skup resursa tako da mogu zajedno blisko raditi, prilikom izvršavanja nekih zadata

Page 39: Tema02-UpravljanjeProcesima

04:17:42

39

Model programske niti

Svaki nit poziva različite procedure i ima različitu izvršnu istoriju zato joj je potreban vlastiti stek

Stanja: new, running, blocked, ready, terminated

Aktivna nit trenutno ima CPU Blokirana nit čeka na neki događaj koji

će ga deblokirati Prelasci između stanja niti su isti kao

između stanja procesa

Page 40: Tema02-UpravljanjeProcesima

04:17:42

40

Model programske niti

Kada je prisutan multithreading, proces normalno započinje sa jednom niti.

Ova nit ima sposobnost da kreira nove niti

automatski rade u adresnom prostoru niti koja ih kreira Hijerarhiju niti, sa roditrelj-child odnosom

Završetak rada korištenjem bibliotečne (library) procedure

Kreiranje i terminiranje niti su slični kreiranju i terminiranju procesa.

Niti mogu dobrovoljno predati CPU

Page 41: Tema02-UpravljanjeProcesima

04:17:43

41

Upotreba niti

Istovremeno više aktivnosti razlaganjem aplikacija na višestrukle sekvencijalne

niti koje rade kvazi-paralelno, programski model postaje jednostavniji

lakše kreirati a i uništiti u odnosu na procese do 100 puta brže u odnosu na kreiranje procesa

performanse preklapanje aktivnosti ubrzava aplikacije u sistemu

gdje postoji više CPU-a, gdje postoji realni paralelizam

Page 42: Tema02-UpravljanjeProcesima

04:17:43

42

Primjer upotrebe niti

Obrada teksta Program sa dvije niti Jedna nit komunicira sa

korisnicima Druga vrši formatiranje u

pozadini Treća nit – snimanje na

disk bez miješanja sa prve dvije niti

Page 43: Tema02-UpravljanjeProcesima

04:17:43

43

Primjer upotrebe niti

Sa tri niti programski model je mnogo jednostavniji

Prva nit samo komunicira sa korisnikom. Druga nit reformatira dokument kada mu je to naloženo. Treća nit periodično upisuje sadržaj RAM-a na disk.

Tri odvojena procesa ne bi funkcionisala ovde pošto sve tri niti operišu na istom dokumentu

Tri niti umjesto tri procesa

dijele istu memoriju i zato svi imaju pristup dokumentu koji seedituje

Analogna situacija postoji kod mnogo drugih interaktivnih programa

Page 44: Tema02-UpravljanjeProcesima

04:17:43

44

Primjer upotrebe niti

Server za World Wide Web Zahtjevi za stranicama dolaze na server i zahtjevane

stranice se šalju klijentima. Kod većine Web sajtova, obično postoje stranice

kojima se češće pristupa. Web serveri koriste ovu činjenicu da poboljšaju

performanse, čuvanjem ovakvih stranica u glavnoj memoriji da bi eliminisali potrebu da se one uzimaju sa diska. Takva kolekcija se zove cache i koristi se u mnogim drugim kontekstima.

Page 45: Tema02-UpravljanjeProcesima

04:17:43

45

Primjer upotrebe niti Nit dispečer čita dolazne

zahtjeve iz mreže

Dispečer bira prazanu (tj. blokiran) radnu nit i prosljeđuje joj zahtjev.

Dispečer onda budi uspavanu radnu nit, prebacujući je iz blokiranog u aktivno stanje.

Kada se worker (radna nit) probudi, provjerava da vidi da li zahtjev može biti zadovoljen Web page keša u koji sve niti imaju pristup.

Ako ne može onda započinje read operaciju da dobije stranicu sa diska i on blokira dok ova operacija nije završena.

Page 46: Tema02-UpravljanjeProcesima

04:17:43

46

Web server bez programskih niti

Jedna mogućnost je da radi kao jedna nit.

Osnovna petlja Web servera

dobiva zahtjev, pregleda ga i nastavlja do završetka prije uzimanja sljedećeg zahtjeva. server je prazan dok čeka na disk

manje zahtjeva može biti obrađeno

Niti postižu puno bolje performanse

svaka nit je programirana sekvencijalno na uobičajen način.

Page 47: Tema02-UpravljanjeProcesima

04:17:43

47

Moguća struktura procesa

Proces može biti struktuisan sa : Ulazna programska nit učitava podatke u ulazni

bafer. Nit za obradu uzima podatke iz bafera i

obrađuje ih. Izlazna programska nit piše rezultat na disk.

Na ovaj način ulaz, obrada i izlaz se mogu dešavati u isto vrijeme.

Page 48: Tema02-UpravljanjeProcesima

04:17:43

48

Implementacija

Načini za implementaciju programskih niti: u korisničkom prostoru (engl. user threads) u jezgru (engl. kernel threads) hibridna implementacija.

Page 49: Tema02-UpravljanjeProcesima

04:17:43

49

Implementacija niti u korisničkomprostoru

Prvi metod

paket programske niti postavi potpuno u korisnički prostor.

Jezgro ne zna ništa o njemu.

Prva prednost

mogu biti implementirane na operativnom sistemu koji ne podržava programske niti.

Većina operativnih sistema su bili u ovoj kategoriji a neki su još uvijek.

Page 50: Tema02-UpravljanjeProcesima

04:17:43

50

Implementacija niti u korisničkomprostoru

Podrška preko biblioteka za rad sa korisničkim nitima (engl.

user thread library) Niti rade na vrhu run-time sistema,

kolekcija procedura koje upravljaju nitima svaki proces treba svoju privatnu tabelu niti

da čuva zapis o programskim nitima procesa Analogija sa tabelom procesa

Page 51: Tema02-UpravljanjeProcesima

04:17:43

51

Implementacija niti u korisničkomprostoru

Ovom tabelom upravlja run-time sistem. Ako nit uradi nešto što može prouzrokovati da

ona bude lokalno blokiran, npr. čekanje na drugu nit u njenom procesu da završi posao poziva run-time sistemsku proceduru.

Ova procedura provjerava da vidi da li nit mora biti stavljena u stanje blokiran. Ako je tako snimi registre u tabelu niti, traži

u tabeli na nit koja je spremna na rad, i u registre puni sa vrijednostima nove niti.

Page 52: Tema02-UpravljanjeProcesima

04:17:43

52

Implementacija niti u korisničkomprostoru

Čim su se stek pointer i programski brojač prebačeni, nova nit automatski oživlja.

Ako mašina ima instrukciju da snimi sve registre i drugu instrukciju da ih napuni, sve može biti urađenu u nekoliko instrukcija.

Preusmjeravanje niti na ovaj način, je brže nego preskakanje u jezgro

značajan argument u korist programskih niti na korisničkom nivou

Procedura koja snima stanja niti i raspoređivač su samo lokalne procedure,

pozvati njih efikasnije neko praviti poziv jezgru. Ovo čini raspoređivanje niti veoma brzim.

Page 53: Tema02-UpravljanjeProcesima

04:17:43

53

Implementacija niti u korisničkomprostoru

Programske niti na korisničkom nivou: Prednost:

Dozvoljavaju svakom procesu da ima svoj algoritam raspoređivanja. Problem 1: Blokirajući sistemski pozivi

Uprkos boljim performansama, programske niti na korisničkom nivou imaju neke velike probleme.

Prvi od ovih je kako je blokirajući sistemski poziv implementiran. Zamislimo da nit čita sa tastature prije nego je pritisnuta neka tipka.

Dozvoliti niti da pozove blokirajući sistemski poziv je nedopustivo Kontradiktorno:

Glavna prednost korištenja niti je bila dozvoliti svima da koriste blokirajuće pozive

Potrebno spriječiti da jedna blokirana nit utiče na druge Moguće rješenje:

Svi sistemski pozivi mogu biti promjenjeni u neblokirajuće Ovakav zahtjev za promjenama u operativnom sistemu nije atraktivan, jer je

jedan argument u korist niti na korisničkom nivou - mogu raditi sa postojećim operativnim sistemima

Page 54: Tema02-UpravljanjeProcesima

04:17:43

54

Implementacija niti u korisničkomprostoru

Druga mogućnost u slučaju događaja gdje je moguće unaprjed reći da li će poziv blokirati.

U nekim verzijama UNIX-a postoji sistemski poziv select može reći da li će doći do blokiranja kod budućeg read poziva

sigurno da read neće blokirati on se izvodi ako je će ovaj poziv biti blokiran on se onda ne izvodi

Zahtijeva ponovno pisanje dijelova biblioteke sistemskih poziva, neefikasan je i neelegantan, ali nema puno izbora.

Kod postavljen oko sistemskog poziva da se izvrši provjera, zove se jacket i wrapper

Page 55: Tema02-UpravljanjeProcesima

04:17:43

55

Implementacija niti u korisničkomprostoru

Problem 2:

jedna programska nit počne rad ni jedna druga nit u tom procesu neće raditi osim ako prva nit ne prepusti CPU dobrovoljno.

Nema prekida na bazi sata, što ne daje mogućnost raspoređivanja na principu da svi dođu na red

Moguće rješenje:

run-time sistem zahtjeva signal sata (prekid) jednom u sekundi da preda kontrolu - problematično

Page 56: Tema02-UpravljanjeProcesima

04:17:43

56

Implementacija niti u jezgru

Jezgro ima tabelu programskih niti koja prati sve niti u sistemu

Kad nit želi da kreira ili da uništi postojeću nit, pravi poziv u jezgro

Jezgro kreira ili uništava niti tako što obnavlja njihovu tabelu

Page 57: Tema02-UpravljanjeProcesima

04:17:43

57

Implementacija niti u jezgru Implementacija niti u jezgru

Niti jezgra direktno podržava operativni sistem.

Tabela niti u jezgru, drži registre niti, stanja, i druge informacije

Informacije su iste ali sada nalaze u jezgru a ne u korisničkom prostoru

Ove informacije su podskup informacije koje uređuje jezgro o svojim jednonitnim procesima.

Jezgro uređuje i tradicionalnu tabelu procesa da sačuva informaciju o procesima.

Svi pozivi koji bi mogli blokirati niti su implementirani kao sistemski pozivi sa puno većom cijenom nego poziv u run-time sistem proceduru.

Page 58: Tema02-UpravljanjeProcesima

04:17:43

58

Implementacija niti u jezgru Kada nit blokira, jezgro može

pokrenuti drugu programsku nit iz istog procesa pokrenuti nit iz nekog drugog procesa

Sa nitima na korisničkom nivou, run-time sistem drži aktivnim niti iz vlastitog procesa dok mu jezgro ne oduzme CPU.

Recikliranje niti

Kad su niti uništeni označe se kao not runnable, a na strukturu podataka jezgra ne utiče se na neki drugi način.

Kasnije kada se nova nit mora kreirati, stara nit je reaktivirana.

Recikliranje je moguće i kod niti na korisničkom nivou - nema puno razloga da se ovo radi.

Page 59: Tema02-UpravljanjeProcesima

04:17:43

59

Hibridna implementacija Rezultat istraživanja i želje da se kombinuju prednosti niti na

korisničkom nivou sa nitima u jezgru.

Korištenje programskih niti u jezgru i multipleksiranje korisničkih tredova na neke ili sve niti u jezgru.

U ovom dizajnu jezgro je svjesno samo programskih niti u jezgru i bavi sa njihovim raspoređivanjem.

Neke od ovih niti mogu imati višestruke niti na korisničkom nivou multipleksirana na njima.

Niti na korisničkom nivou se kreiraju, uništavaju i raspoređuju kao niti na korisničkom nivou u procesu koji je aktivan u operativnom sistemu koji radi bez multithreading mogućnosti.

U ovom modelu svaka nit u jezgru ima neki skup niti na korisničkom nivou.

Page 60: Tema02-UpravljanjeProcesima

04:17:43

60

Tri višenitna modela

Model više u jednu (engl. Many-to-one) Više korisničkih niti se mapira u jednu nit u jezgru Upravljanje nitima se odvija na korisničkom nivou Ako neka niti obavi bilo koji blokirajući sistemski poziv, blokiraće se cio

proces, tj. sve niti Samo jedna nit može pristupati jezgru u jednom trenutku

ne može se iskoristiti višeprocesorska arhitektura Model jedna u jednu (engl. One-to-one)

Ovaj model karakterističan za Windows NT, Windows 2000/XP/2003 i OS/2

Svaka korisnička nit se mapira u jednu nit u jezgru Obezbjeđeno mnogo bolje konkurentno izvršavanje niti Više niti iz jezgra se mogu izvršavati paralelno na višeprocesorskoj

arhitekturi Mnogi sistemi ograničavaju maksimalan broj niti jezgra

Model više u više (engl. Many-to-many) Više korisničkih niti mapira se u manji ili isti broj niti jezgra Najkompleksniji i najkvalitetniji model

Page 61: Tema02-UpravljanjeProcesima

04:17:43

61

Pop-Up niti

Programske niti su često korisni u distribuiranim sistemima.

Jedan značajan primjer je kako se upravlja dolazećom porukom koja traži uslugu.

Tradicionalni pristup:

proces ili nit blokiranu na receive sistemski poziv čekajući na dolazeću poruku.

Kad poruka stigne on prihvata poruku i obrađuje je. Drugi pristup:

pristizanje poruke uzrokuje da sistem kreira novu nit koja će se baviti porukom: pop-up nit

Page 62: Tema02-UpravljanjeProcesima

04:17:44

62

Pop-Up niti

Ključna prednost pop-up niti:

Potpuno nove, nemaju nikave istorije (registri, stekovi itd.), koja mora biti pohranjena.

Svaka starta nova i identičan je sa ostalim.

Omogućava brzu kreaciju takve niti.

Nova nit je dodjeljena dolazećoj poruci.

Rezultat korištenja pop-up niti je da kašnjenje između pristizanja poruke i početka obrade može biti veoma kratko.

Page 63: Tema02-UpravljanjeProcesima

04:17:44

63

Pretvaranje jednonitnog u višenitni kod

Primjer: errno varijable korištenu u Unix-u

Kada proces ili nit pravi sistemski poziv koji ne uspjeva, kod o grešci se stavlja u errno.

nit 1 izvršava sistemski poziv access (dozvola pristupa datoteci)

Odgovor OS-u globalnoj varijabli errno.

Nakon što se kontrola vratila niti 1 ali prije nego što ima šansu da pročita errno, raspoređivač dodjeljuje CPU niti 2

Nit 2 izvršava jedan open poziv koji propada, ponovno upisivanja u errno

access kod niti 1 se gubi zauvjek

Kad nit 1 starta kasnije pročitaće pogrešnu vrijednost i ponašaće se nekorektno

Page 64: Tema02-UpravljanjeProcesima

04:17:44

64

Pretvaranje jednonitnog u višenitni kod

Mnogo postojećih programa - za jednonitne procese. Konvretovanje ovih u višenitne - komplikovano Niti se normalno sastoje od višestrukih procedura, upravo kao proces. Niti mogu imati

lokalne varijable, globalne varijable i proceduralne parametre.

Lokalne varijable i parametri ne prouzrokuju probleme Problem - varijable globalne za nit ali ne i za čitav program Ove varijable su globalne u smislu da ih mnoge procedure untar niti

koriste, a da ih druge niti ne koriste. Različita rješenja ovog problema: Jedno je da se zabrane globalne varijable potpuno.

u konfliktu sa većinom postojećeg softvera. Druga je dodjeljivanje svakoj niti njegove vlastite privatne globalne

varijable.

Page 65: Tema02-UpravljanjeProcesima

04:17:44

65

Pretvaranje jednonitnog u višenitni kod

Svaka nit ima svoju privatnu kopiju errno i druge globalne varijable tako da se izbjegavaju konflikti.

novo područje:

varijable vidIjive svim procedurama niti

postojeće područje:

varijabli vidljivih samo jednoj poceduri

varijable vidljive svuda u programu.

Page 66: Tema02-UpravljanjeProcesima

04:17:44

66

Pretvaranje jednonitnog u višenitni kod

Pristup privatnim globalnim varijablama je komplikovan većina programskih jezika ima način izražavanja

lokalnih i globalnih varijabli ali ne i neke međuforme

Moguće je odrediti blok memorije za globalne varijable i onda ove kao dodatne operacije predati niti. Iako ovo nije elegantno rješenje ono funkcioniše.

Alternativno bi se mogle uvesti nove bibliotečne procedure za kreiranje čitanje i postavljanje ovih za niti globalnih varijabli.

Page 67: Tema02-UpravljanjeProcesima

04:17:44

67

WINDOWS API ZA RAD S NITIMA U KORISNIČKOM PROSTORU

CreateFiber(dwStackSize,lpStartAddress,lpParameter)

Kreira objekt vlakna (niti koje raspoređuje korisnički program)

FiberProc(lpParameter)

Podprogram svakog vlakna SwitchToFiber(lpFiber)

Prelazi na podprogram vlakna DeleteFiber(lpFiber)

Uklanja postojeće vlakno

Page 68: Tema02-UpravljanjeProcesima

04:17:44

68

WINDOWS API ZA UPRAVLJANJE NITIMA U JEZGRU

CreateThread(lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags,lpThreadId)

Kreira programsku nit i vraća rukovatelj na nju

ExitThread(dwExitCode)

Završava nit koja je pozvala ovu funkciju

GetCurrentThread()

Vraća rukovatelj na nit koja je pozvala ovu funkciju

OpenThread(dwDesiredAccess, bInheritHandle, dwThreadId)

Uzima rukovatelj određene niti

ResumeThread(hThread)

Nastavlja suspendovanu nit

Sleep (dwMilliseconds)

Suspenduje nit na određeno vrijeme

SuspendThread(hThread)

Suspenduje navedenu nit

SwitchToThread()

Dobrovoljno predaje izvršenje drugoj niti

TerminateThread( hThread,dwExitCode)

Prekida navedenu nit

Page 69: Tema02-UpravljanjeProcesima

04:17:44

69

POSIX API ZA UPRAVLJANJE NITIMA

pthread_create (pThread, pAttr, pStart_routine,pArg)

Kreira nit

pthread_exit (pStatus) Prekida nit koja je pozvala ovu

funkciju i prosljeđuje status nitima koje su se povezale na nju

pthread_cancel (pThread) Prekida navedenu nit

pthread_attr_init (pAttr) pthread_attr_destroy (pAttr)

Kreira ili uništava objekt s atributim niti

pthread_join (pThreadid,ppStatus) Čeka da se navedena nit završi,

oslobodi njene resurse i nastavi izvršenje trenutne niti

pthread_detach (pThreadid)

Oslobađa resurse završene niti ili najavljuje oslobađanje kada bide završena

pthread_attr_setdetachstate (pAttr, iDetachState)

pthread_attr_getdetachstate (pAttr, pDetachState)

pthread_attr_getstacksize (pAttr, pStackSize) pthread_attr_setstacksize (pAttr, iStackSize) pthread_attr_getstackaddr (pAttr,

ppStackAddr) pthread_attr_setstackaddr (pAttr, pStackAddr)

Postavlja ili čita atribute niti: stanje oslobađanja resursa, veličinu steka i početnu adresu steka