38
OPERATIVNI SISTEMI 1 Procesi i niti 1 - pregled

procesi i niti pregled

Embed Size (px)

DESCRIPTION

processi i niti

Citation preview

Page 1: procesi i niti pregled

OPERATIVNI SISTEMI 1Procesi i niti 1 - pregled

Page 2: procesi i niti 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

Nemanja
Sticky Note
Proces je skup aktivnosti i/ili operacija koji određene ulaze (input) pretvaraju u izlaze (output). Proces se prepoznaje po promjenama koje se zbivaju tokom obavljanja aktivnosti i operacija. Rezultati tih promjena su izlazi. Na procesnom pristupu bazira se suvremeni pogled u proučavanje sustava.
Page 3: procesi i niti pregled

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

Nemanja
Sticky Note
Sam operativni sistem je takođe sastavljen od niza procesa. Svaki proces ima 3 fundamentalna memorijska dela, to jest sekcije: · Programska ili tekstualna sekcija, koja se ne menja (read only) i koja sadrži progamski kôd. · Stek sekcija (stack section), koja sadrži privremene podatke (parametre za procedure, povratne adrese, lokalne promenljive) · Sekcija podataka (data section), koja sadrži globalne promenljive Osim memorijskih sekcija, proces obuhvata i vrednost programskog brojača (program counter)kao i vrednost ostalih važnih registara procesora. Proces obuhvata i ulazno-izlazne resurse koje eventulano koristi, kao što su datoteke i razne vrste ulazno-izlaznih uređaja.
Nemanja
Sticky Note
U multiprogramiranim sistemima, opeativni sistemi imaju jednostavnu ulogu da prebacuju kontrolu sa jednog posla na drugi. Kada je potrebno da jedan job čeka na neki resurs ili neku operaciju, CPU prebaci kontrolu na drugi posao. Bitno je naglasiti da je multiprogramiranje prva instanca gdje operativni sistem mora donositi odluku za korisnika.
Nemanja
Sticky Note
Kod multiprogramiranih operativnih sistema se susreću dva nova pojma: job scheduling - što bi se moglo prevesti kao raspoređivanje poslova CPU scheduling - podrazumijeva dodjeljivanje procesora po određenom pravilu različitim poslovima, drugim riječima znači raspoređivanje procesora Prvi pojam, job scheduling susreće se situaciji kada je potrebno dovesti nekoliko poslova koji se nalaze na nekom rezervnom skladištu, a koje se nazava job pool, u glavnu memoriju koja nije dovoljna da prihvati sve poslove odjednom. Tada operativni sistem treba odlučiti koje će poslove dovesti u memoriji. Drugi pojam se odnosi na situaciju kada su već određeni poslovi dovedeni u memoriju i čekaju na izvršenje. Tada CPU treba odlučiti koje poslove da usluži, a da se sačuva ravnopravnost u izvršavanju različitih poslova.
Page 4: procesi i niti pregled

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

Nemanja
Highlight
Page 5: procesi i niti pregled

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

Page 6: procesi i niti pregled

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.

Page 7: procesi i niti pregled

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).

Nemanja
Sticky Note
korisnički procesi (izvode korisnički kod) i procesi OS-a (izvode sistemski kod).
Nemanja
Sticky Note
In multitasking computer operating systems, a daemon (/ˈdeɪmən/ or /ˈdiːmən/)[1] is a computer program that runs as a background process, rather than being under the direct control of an interactive user. A daemon is usually created by a process forking a child process and then immediately exiting, thus causing init to adopt the child process. In addition, a daemon, or the operating system, typically must perform other operations, such as dissociating the process from any controlling terminal (tty). Such procedures are often implemented in various convenience routines such as daemon(3) in Unix. Systems often start daemons at boot time and serve the function of responding to network requests, hardware activity, or other programs by performing some task. Daemons can also configure hardware (like udevd on some GNU/Linux systems), run scheduled tasks (like cron), and perform a variety of other tasks.
Nemanja
Sticky Note
A foreground process is different from a background process in two ways: Some foreground processes show the user an interface, through which the user can interact with the program. The user must wait for one foreground process to complete before running another one.
Page 8: procesi i niti pregled

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),

Nemanja
Sticky Note
System call fork() is used to create processes. It takes no arguments and returns a process ID. The purpose of fork() is to create a new process, which becomes the child process of the caller. After a new child process is created, both processes will execute the next instruction following the fork() system call. Therefore, we have to distinguish the parent from the child. This can be done by testing the returned value of fork(): If fork() returns a negative value, the creation of a child process was unsuccessful. fork() returns a zero to the newly created child process. fork() returns a positive value, the process ID of the child process, to the parent. The returned process ID is of type pid_t defined in sys/types.h. Normally, the process ID is an integer. Moreover, a process can use function getpid() to retrieve the process ID assigned to this process.
Nemanja
Sticky Note
A child process in computing is a process created by another process (the parent process). This technique pertains to multitasking operating systems. There are two major procedures for creating a child process: the fork system call (preferred in Unix-like systems and the POSIX standard) and the spawn (preferred in the modern (NT) kernel of Microsoft Windows, as well as in some historical operating systems).
Page 9: procesi i niti pregled

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)

Page 10: procesi i niti pregled

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

Page 11: procesi i niti pregled

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,

Nemanja
Sticky Note
In Unix-based computer operating systems, init (short for initialization) is the first process started during booting of the computer system. Init is a daemon process that continues running until the system is shut down. It is the direct or indirect ancestor of all other processes and automatically adopts all orphaned processes. Init is started by the kernel using a hard-coded filename, and if the kernel is unable to start it, a kernel panic will result. Init is typically assigned process identifier 1.
Page 12: procesi i niti pregled

Hijerarhija procesa - komanda pstree

Page 13: procesi i niti pregled

Hijerarhija procesa - komanda tasklist i Task Manager

Page 14: procesi i niti pregled

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

Page 15: procesi i niti pregled

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

Nemanja
Sticky Note
In systems programming, an interrupt is a signal to the processor emitted by hardware or software indicating an event that needs immediate attention. An interrupt alerts the processor to a high-priority condition requiring the interruption of the current code the processor is executing (the current thread). The processor responds by suspending its current activities, saving its state, and executing a small program called an interrupt handler (or interrupt service routine, ISR) to deal with the event. This interruption is temporary, and after the interrupt handler finishes, the processor resumes execution of the previous thread.
Page 16: procesi i niti pregled

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.

Nemanja
Sticky Note
There are two types of interrupts: A hardware interrupt is an electronic alerting signal sent to the processor from an external device, either a part of the computer itself such as a disk controller or an external peripheral. For example, pressing a key on the keyboard or moving the mouse triggers hardware interrupts that cause the processor to read the keystroke or mouse position. Unlike the software type (below), hardware interrupts are asynchronous and can occur in the middle of instruction execution, requiring additional care in programming. The act of initiating a hardware interrupt is referred to as an interrupt request (IRQ).
Nemanja
Sticky Note
A software interrupt is caused either by an exceptional condition in the processor itself, or a special instruction in the instruction set which causes an interrupt when it is executed. The former is often called a trap or exception and is used for errors or events occurring during program execution that are exceptional enough that they cannot be handled within the program itself. For example, if the processor's arithmetic logic unit is commanded to divide a number by zero, this impossible demand will cause a divide-by-zero exception, perhaps causing the computer to abandon the calculation or display an error message. Software interrupt instructions function similarly to subroutine calls and are used for a variety of purposes, such as to request services from low level system software such as device drivers. For example, computers often use software interrupt instructions to communicate with the disk controller to request data be read or written to the disk.
Nemanja
Sticky Note
Each interrupt has its own interrupt handler. The number of hardware interrupts is limited by the number of interrupt request (IRQ) lines to the processor, but there may be hundreds of different software interrupts. Interrupts are a commonly used technique for computer multitasking, especially in real-time computing. Such a system is said to be interrupt-driven.[1]
Page 17: procesi i niti pregled

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

Page 18: procesi i niti pregled

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

Page 19: procesi i niti pregled

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)

Nemanja
Sticky Note
The exit command terminates a script, just as in a C program. It can also return a value, which is available to the script's parent process. Every command returns an exit status (sometimes referred to as a return status or exit code). A successful command returns a 0, while an unsuccessful one returns a non-zero value that usually can be interpreted as an error code. Well-behaved UNIX commands, programs, and utilities return a 0 exit code upon successful completion, though there are some exceptions.
Page 20: procesi i niti pregled

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.

Nemanja
Sticky Note
In computing, a fatal error or fatal exception error is an error that causes a program to abort and may therefore return the user to the operating system. When this happens, data that the program was processing may be lost. A fatal error is usually distinguished from a fatal system error[1][2] (colloquially referred to by the error message it produces as a "blue screen of death"). A fatal error occurs typically in any of the following cases: An illegal instruction has been attempted Invalid data or code has been accessed An operation is not allowed in the current ring or CPU mode A program attempts to divide by zero. (Only for integers; with the IEEE floating point standard, this creates an infinity instead)
Page 21: procesi i niti pregled

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

Nemanja
Sticky Note
In computing, kill is a command that is used in several popular operating systems to send signals to running processes in order to request the termination of the process.
Page 22: procesi i niti pregled

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,

Nemanja
Highlight
Nemanja
Sticky Note
POSIX je zajednički naziv za skupinu IEEE standarda kojima se definira sučelje za programiranje (API) softvera usklađenog s različitim izvedenicama operacijskog sustava UNIX.
Page 23: procesi i niti pregled

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.

Page 24: procesi i niti pregled

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

Nemanja
Sticky Note
Нити у рачунарству представљају задатке који се истовремено извршавају у оквиру једног процеса. Инструкције које сачињавају једну нит се извршавају у исто вријеме са инструкцијама које сачињавају друге нити (ако у рачунару постоји више процесора) или је та истовременост само привидна (ако у рачунару постоји само један процесор). Niti je dio procesa koji se odvaja od glavnog toka i zapocinje vlastiti tok, tj. proces se dijeli na dvije aktivnosti koje se paralelno iyvrsavaju.Tada imamo glavni tok i pomocni tok koji osluskuje aktivnosti glavog toka.
Nemanja
Highlight
Nemanja
Sticky Note
Linux koristi istu internu reprezentaciju za procese i niti - nit (thread) je jednostavno novi proces koji deli adresni prostor roditelja. Za razliku od novog procesa koji pomou sistemskog poziva fork formira novi kontekst sa jedinstvenim adresnim prostorom, nit nastaje pomou sistemskog poziva clone koji kreira novi kontekst, ali dozvoljava novom procesu da deli adresni prostor roditelja.
Page 25: procesi i niti pregled

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)

Page 26: procesi i niti pregled

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).

Nemanja
Highlight
Page 27: procesi i niti pregled

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)

Nemanja
Sticky Note
nit (thread) je jednostavno novi proces koji deli adresni prostor roditelja. Za razliku od novog procesa koji pomou sistemskog poziva fork formira novi kontekst sa jedinstvenim adresnim prostorom, nit nastaje pomou sistemskog poziva clone koji kreira novi kontekst, ali dozvoljava novom procesu da deli adresni prostor roditelja.
Page 28: procesi i niti pregled

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

Page 29: procesi i niti pregled

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

Page 30: procesi i niti pregled

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,

Nemanja
Sticky Note
http://pubs.opengroup.org/7908799/xsh/pthread_create.html
Nemanja
Sticky Note
The pthread_exit() function terminates the calling thread and makes the value value_ptr available to any successful join with the terminating thread. Any cancellation cleanup handlers that have been pushed and not yet popped are popped in the reverse order that they were pushed and then executed
Page 31: procesi i niti pregled

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

Page 32: procesi i niti pregled

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,

Page 33: procesi i niti pregled

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,

Page 34: procesi i niti pregled

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,

Nemanja
Highlight
Page 35: procesi i niti pregled

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).

Page 36: procesi i niti pregled

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

Page 37: procesi i niti pregled

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.

Nemanja
Sticky Note
Scheduler Activations is a threading mechanism that, when implemented in an operating system's process scheduler, provides kernel-level thread functionality with user-level thread flexibility and performance. This mechanism uses a so-called "N:M" strategy that maps some N number of application threads onto some M number of kernel entities, or "virtual processors." This is a compromise between kernel-level ("1:1") and user-level ("N:1") threading. In general, "N:M" threading systems are more complex to implement than either kernel or user threads, because both changes to kernel and user-space code are required.
Page 38: procesi i niti pregled

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