Upload
danielko6
View
260
Download
2
Embed Size (px)
DESCRIPTION
processi i niti
Citation preview
OPERATIVNI SISTEMI 1Procesi i niti 1 - pregled
Proces
• centralni koncept operativnog sistema,
• apstrakcija pokrenutog programa,
• koncept koji podržava konkurentno izvršavanje čak i u slučaju jednoprocesorskih sistema,
• procesor izvršava jedan proces u datom trenutku, ali vrši brze izmjene aktivnog procesa - pseudoparalelizam
Model procesa
• proces je instanca izvršnog programa,
• svaki program se sastoji iz jednog ili više procesa,
• svaki proces koristi svoje vrijednosti programskog brojača i ostalih registara - privid postojanja različitih procesora za svaki proces,
• prebacivanje konteksta - promjena aktivnog procesa,
• multiprogramiranje
Model procesa
• proces ne utiče na raspoređivanje procesorskog vremena,
• nije moguće predvidjeti trenutak u kojem će neki procesor dobiti procesorsko vrijeme, ni njegovo trajanje,
• sa stanovišta procesora, proces koji se izvršava dva puta je posmatran kao dva odvojena procesa,
• procesi dobijaju procesorsko vrijeme u intervalima (kvantumima) na osnovu prioriteta ili pod uticajem nekog drugog algoritma za raspodjelu
Model procesa
• proces je određen hardverskim kontekstom, softverskim kontekstom i adresnim prostorom,
• hardverski kontekst čine registri procesora:– PSW (Program Status Word) - registar koji sadrži
statusne informacije o procesu,
– PC (Program Counter, Instruction Pointer) - adresa sljedeće instrukcije koja treba biti izvršena.
• prilikom promjene konteksta (zamjene aktivnog procesa), sadržaj registara se čuva u glavnoj memoriji,
• ovim se omogućava izvršavanje više procesa na istom procesoru
Model procesa
• softverski kontekst procesa čine:– identifikacija procesa - proces je identifikovan
imenom i numeričkim identifikatorom (Process ID, PID),
– prioritet,
– potrošnja resursa,
– privilegije,
– kvote itd.
Kreiranje procesa
• proces se kreira u jednom od sljedećih situacija:– inicijalizacija sistema,
– upućivanje odgovarajućeg sistemskog poziva za kreiranje procesa od strane drugog pokrenutog procesa,
– korisnički zahtjev za kreiranjem novog procesa,
– pokretanjem batch posla (eng. batch job) - u ranijim generacijama skup pripremljenih zadataka, u današnje vrijeme batch skripta
• proces može biti kreiran kao:
– korisnički (eng. foreground),
– pozadinski (eng. background, daemon).
Kreiranje procesa
• sistemski poziv za kreiranje procesa:– UNIX-bazirani operativni sistemi: fork,
– Windows-bazirani operativni sistemi: CreateProcess,
• kreiranje procesa se sastoji iz dva koraka:
– kreiranje samog procesa (novi proces je označen kao child proces),
– učitavanje programskog koda i pravljenje kopije adresnog prostora,
• parent i child procesi imaju odvojene adresne prostore (ne dijele podatke), ali mogu dijeliti ostale resurse (npr. pristupanje datotekama),
Stanja procesa
• stanje u kojem se proces nalazi zavisi od spremnosti ulaznih podataka i stanja ostalih procesa od kojih trenutni proces zavisi,
• osnovna stanja procesa:– proces se izvršava (trenutno koristi procesor, eng.
running),
– proces je blokiran (eng. wait ili blocking),
– proces je spreman za izvršavanje (eng. ready)
• moguće je definisati i dodatna stanja (npr. stanje suspenzije)
Stanja procesa
1. proces se blokira jer čeka na ulazne podatke,
2. ulazni podaci su dostupni, proces prelazi u stanje čekanja na procesorsko vrijeme,
3. proces dobija procesorsko vrijeme i izvršava se,
4. proces prelazi u fazu čekanja na procesorsko vrijeme (drugi procesi dolaze na red za izvršavanje)
RUNNING READY
WAIT
1 2
4
3
NEW TERMINATED
Hijerarhija procesa
• način logičke organizacije procesa se razlikuje za različite operativne sisteme,
• Linux-bazirani procesi sve procese organizuju u vidu stabla,• korijenski element stabla je proces init, koji se prvi pokreće
prilikom pokretanja operativnog sistema,• zadatak procesa init je prelazak iz jednokorisničkog načina
rada (u kojem se nalazi pri pokretanju) u višekorisnički (u kojem normalno radi), a nakon toga pokretanje terminala,
• svaki sljedeći pokrenuti proces se u hijerarhiji nalazi ispod init procesa,
• Windows-bazirani sistemi ne kreiraju hijerarhiju procesa (svi procesi se kreiraju u istom nivou),
• izuzetak je roditeljski (parent) proces, koji prilikom kreiranja child procesa ima referencu putem koje ih može kontrolisati,
Hijerarhija procesa - komanda pstree
Hijerarhija procesa - komanda tasklist i Task Manager
Eksterni događaji pri izvršavanju procesa
• u zavisnosti od načina generisanja i mogućnosti obrade, postoje različite vrste eksternih događaja,
• osnovna podjela:– sinhroni - rezultat rada procesa koji se izvršava. Mogu
biti predvidljivi (prediktabilni) ili jednokratni (dešavaju se samo jednom),
– asinhroni - ne nastaju pod uticajem procesa koji se izvršava, pa se ne mogu predvidjeti
Eksterni događaji pri izvršavanju procesa
• izuzetak je situacija koja nastaje obavještavanjem procesora o sinhronom događaju,
• prekid (interrupt) - je situacija koja nastaje obavještavanjem procesora o postojanju asinhronog događaja,
• u oba slučaja dolazi do suspenzije trenutnog procesa,
• procesu se mora se omogućiti reakcija na izuzetak ili prekid,
• exception handler,
• ISR - interrupt service routine
Eksterni događaji pri izvršavanju procesa
• tipovi izuzetaka:
– fault - izuzetak koji je moguće ispraviti u trenutku događanja, nakon čega se izvršavanje procesa može nastaviti kao da se ništa nije desilo. Primjer: page fault, division by zero, general protection fault,
– abort - greška koja prekida izvršavanje procesa. Nakon ove greške nije moguće nastaviti izvršavanje procesa,
– trap - servisira se nakon završetka instrukcije koja ga je generisala. Primjer: breakpoint kod debug-ovanja.
Eksterni događaji pri izvršavanju procesa
• prekidi:– način obavještavanja o postojanju asinhronog događaja,
– definisani su zbog činjenice da nije moguće predvidjeti trenutak u kojem će doći do asinhronog događaja,
– umjesto da provjerava da li postoji događaj, proces biva obaviješten o tome da se prekid desio (IRQ, Interrupt ReQuest),
– trenutno izvršavanje se prekida ako je nižeg prioriteta od prekida,
– nakog izvršavanja prekidne rutine, nastavlja se sa prethodnim zadatkom,
– vektor prekida i tabela vektora prekida
– sistemski pozivi u Linux operativnom sistemu predstavljaju prekidnu rutinu koja se u tabeli vektora prekida nalazi na adresi 80h
Kraj (uništavanje) procesa
• okolnosti pod kojim dolazi do završetka izvršavanja procesa:
– ispravan završetak (iniciran od strane procesa),
– neispravan završetak (iniciran od strane procesa),
– kritična greška (bez uticaja programa),
– uništavanje od strane drugog procesa.
• za prve dvije okolnosti se može reći da predstavljaju normalan završetak procesa
Normalan završetak procesa
• sistemski poziv exit na UNIX-baziranim sistemima,• sistemski poziv TerminateProcess na Windows-baziranim
sistemima,• u zavisnosti od okolnosti završetka, funkcije imaju argument
koji predstavlja status,• status 0 uglavnom predstavlja uspješan završetak,• ostali statusi označavaju grešku, pa se na osnovu
vrijednosti utvrđuje kakva je greška u pitanju,• u oba slučaja je proces došao do normalnog završetka, bez
prekida izvršavanja,• primjer: kopiranje datoteke (rezultat zavisi od postojanja
polaznih i odredišnih lokacija)
Završetak procesa u slučaju greške
• eng. fatal error,
• greška izazvana od strane procesa, uglavnom izuzetak,
• operativni sistem može dozvoliti procesu da reaguje na ovakvu grešku,
• ako proces reaguje na grešku, tada je samo prekinut, a ne i uništen kad se desi takva situacija.
Završetak procesa na zahtjev drugog procesa
• zahtjev drugog procesa se najčešće realizuje slanjem signala,
• signal služi kao obavještenje o nekom eksternom događaju,• može se eksplicitno implementirati korištenjem sistemskog
poziva kill na UNIX-baziranim sistemima,• sistemski poziv šalje odgovarajući signal procesu,• signal predstavlja kratku poruku specijalnog značenja,• pozivajući proces mora imati dovoljne privilegije za slanje
signala drugom procesu (moraju biti pokrenuti od strane istog korisnika ili administratora),
• u zavisnosti od tipa signala, proces može prihvatiti ili ignorisati signal
POSIX signali
• signali za kontrolu procesa se mogu koristiti bez obzira na korišteni komandni interpreter (bash ili neki drugi),
• svi signali imaju slična značenja, ali često zavise od implementacije i od akcije koju aplikacija (ne) preduzima pri prijemu signala,
• specifikacija (POSIX) definiše veći broj signala, najvažniji su:
– terminate (SIGTERM) - signal koji izaziva prekid procesa koji prima signal. Proces može ignorisati dati signal,
– kill (SIGKILL) - signal za bezuslovno uništenje procesa koji prima signal. Procesi ne mogu ignorisati ovaj signal,
POSIX signali
– interrupt (SIGINT) - interaktivni signal prekida koji se šalje pritiskom na Ctrl+C na tastaturi. Proces može reagovati na ovaj signal,
– quit (SIGQUIT) - interaktivni signal koji se šalje pritiskom na Ctrl+\ na tastaturi,
– hang-up (SIGHUP) - ovaj signal se uglavnom šalje u trenutku kad se proces odvoji od aktivnog terminala (nakon što se korisnik odjavi iz terminala u kojem je pokrenut proces). Ne predstavlja u pravom smislu signal za prekidanje procesa, nego pokazuje da je veza sa korisnikom prekinuta,
– segmentation fault (SIGSEGV) - signal koji se šalje nakon pristupa nedozvoljenoj memorijskoj adresi.
Programske niti (Threading)● niti predstavljaju različite programske tokove u okviru istog
procesa,
● niti dijele isti adresni prostor procesa,
● koriste se za izolovanje aktivnosti koja bi mogla odvesti kompletan proces u stanje blokiranja (čekanja),
● lakša upravljivost procesima,
● kreiranje niti je do 100 puta brže od kreiranja procesa,
● niti (kao i kompletni procesi) mogu koristiti mogućnosti višeprocesorskih arhitektura u domenu paralelizacije,
● primjer: chat aplikacija, proizvođač/potrošač modeli
Programske niti (Threading)
Korisnički prostor (user-space)
Prostor kernela (kernel-space)
Korisnički prostor (user-space)
Prostor kernela (kernel-space)
Procesi
Niti Niti
Proces
Multiprogramiranje (više procesa sa po jednom niti)
Višenitnost (multithreading) (jedan proces sa više niti)
Programske niti (Threading)● niti imaju veću međusobnu zavisnost od procesa,
● resursi kojim se upravlja na nivou procesa su zajednički za sve niti u tom procesu,
● zajednički elementi niti:– adresni prostor,
– globalne varijable,
– otvorene datoteke,
– child procesi,
– signali.
● elementi koji su odvojeni za svaku nit:– programski brojač,
– vrijednosti registara,
– stek,
– statusne informacije (flegovi).
Programske niti - rad sa stekom● sve niti funkcionišu u istom adresnom prostoru, pa je potrebno
napraviti dodatna ograničenja da bi se omogućilo korištenje različitih stekova za svaku nit,
● operativni sistem ograničava dijelove adresnog prostora za stek svake niti,
● svaka pozvana procedura odvaja dio steka u kojem se nalazi povratna adresa,
● osim povratne adrese, na steku se mogu nalaziti argumenti i lokalne promjenljive,
● dužnost procedure je da prije povratka očisti memoriju na steku, kako bi sljedeća slobodna lokacija sadržavala povratnu adresu,
● blok memorije odvojen za proceduru na steku naziva se stek frejm (eng. stack frame)
Programske niti - stanja niti
● stanja niti su vrlo slična stanjima procesa,
● implementacije u različitim programskim jezicima mogu kreirati dodatna stanja niti,
● kreirana nit se nalazi u stanju NEW prije početka izvršavanja,
● stanja RUNNING, READY, BLOCKING odgovaraju istoimenim stanjima procesa,
● nit se može nalaziti u stanju čekanja na notifikaciju od druge niti (ograničen ili neograničen vremenski period - WAITING ili TIMED_WAITING),
● u stanju terminacije (TERMINATED), nit se više ne može pokrenuti
POSIX niti● IEEE definiše specifikaciju sistemskih poziva koji omogućavaju
portabilnost programa koji rade sa nitima,
● standard IEEE 1003.1c,
● podržan na većini UNIX-baziranih sistema,
● specifikuje preko 60 sistemskih poziva,
● definiše biblioteku funkcija Pthread,
● viši programski jezici mapiraju svoje funkcije na ovu biblioteku
POSIX niti
● najvažnije funkcije:
– pthread_create - kreira novu programsku nit iz niti koja poziva funkciju. Funkcija vraća numerički identifikator niti. Način funkcionisanja je sličan funkcionisanju sistemskog poziva funkcije fork,
– pthread_exit - završava izvršavanje niti koja je pozvala funkciju. Nakon poziva funkcije, nit prestaje sa radom i oslobađa svoj stek,
– pthread_join - pauzira izvršavanje trenutne niti dok se ne završi izvršavanje niti čiji je identifikator proslijeđen kao parametar. Ova funkcija se koristi kad rezultat jedne niti uslovljava nastavak izvršavanja druge,
– pthread_yield - oslobađa procesor i prepušta izvršavanje sljedećoj niti,
Implementacija niti
● sa stanovišta operativnog sistema, postoje tri implementacije višenitnih programa:
– implementacija korištenjem korisničkih niti,
– implementacija korištenjem kernel niti,
– hibridna implementacija
● implementacije se razlikuju u brzini izvršavanja, kompleksnosti sistema, privilegijama pojedinih niti i zauzeću sistemskih resursa
Implementacija niti - korisničke niti
● kompletna nit se kreira i izvršava u korisničkom prostoru (user-space),
● sa stanovišta kernela, radi se o procesu koji ima samo jednu nit,
● omogućava implementaciju niti na operativnom sistemu koji svojim dizajnom ne podržava višenitnost,
● niti se izvršavaju iznad biblioteke za upravljanje nitima (runtime system),
● raspoređivanje niti zavisi od korisničkog procesa - nije pod uticajem kernela,
● svaki proces ima sopstvenu tabelu u memoriji za čuvanje stanja niti prilikom izvršavanja,
Implementacija niti - korisničke niti
● svaki proces može imati sopstvenu implementaciju algoritma za raspoređivanje (eng. scheduling),
● prilikom poziva operacije za blokiranje, sve niti mogu biti blokirane (jer se blokiranje obavlja na nivou kernela, koji u ovom slučaju nema uvida u rad korisničkih niti),
● kod aplikacija koje ne koriste sistemske pozive, ovakav pristup je znatno brži,
● nije pogodan za implementaciju sistema koji često izvršavaju sistemske pozive (npr. serverski procesi),
● moguće je da se zbog lošeg sistema raspoređivanja izvršava samo jedna nit,
Implementacija niti - kernel niti
● niti se izvršavaju na nivou kernela,
● postoji zajednička tabela za upravljanje resursima niti,
● sve procedure za rad sa nitima (kreiranje, uništavanje, itd.) se izvršavaju pozivanjem sistemskih funkcija,
● funkcionisanje je skuplje u smislu utrošenog vremena na rad sa nitima,
● prilikom blokiranja neke niti, kernel će procesorsko vrijeme dati drugoj niti iz istog procesa (ako postoji i ako je spremna) ili nekoj niti iz drugog procesa,
● algoritam za raspoređivanje je zajednički za sve niti i procese,
Implementacija niti - kernel niti
● moguće je implementirati “recikliranje” niti, kako bi se uštedilo procesorsko vrijeme na kreiranju,
● potencijalni problemi:
– određivanje koliko niti ima proces koji se dobija fork-ovanjem originalnog procesa,
– koja programska nit obrađuje signal koji je upućen procesu (djelimično se rješava uvođenjem registrovanja za prijem signala - signal handler).
Implementacija niti - hibridni pristup
● podrazumijeva multipleksiranje više korisničkih niti na jednu kernel nit,
● kompromis između prethodno opisanih pristupa,
● najveća prednost ovakvog pristupa je fleksibilnost
Implementacija niti - scheduler activation
● tehnika koja minimizuje gubitak brzine prilikom sistemskog poziva upućenog iz kernel niti,
● kada se desi poziv koji blokira trenutnu nit, kernel obavještava runtime system (aktivira ga), koji onda može nastaviti izvršavanje druge niti,
● kod standardne implementacije korisničkih niti, ovo se ne dešava jer kernel ne obavještava slojeve iznad sebe o stanju niti (zbog toga se može desiti da su sve niti procesa blokirane),
● ovakva aktivacija runtime sistema od strane kernela se naziva upcall,
● problem: narušavanje principa slojevitosti u arhitekturi operativnog sistema.
Implementacija niti - pop-up niti
● koriste se u situacijama koje uključuju klijent server komunikaciju,
● primarna nit očekuje zahtjeve klijenata,
● prijem zahtjeva rezultuje kreiranjem nove (pop-up) niti čija je svrha obrada zahtjeva,
● svaka novokreirana nit je ista kao i ostale.
glavna nit pop-up niti