1 / 45

III Upravljanje procesima

III Upravljanje procesima. Jezgro Procesi i niti Sinhronizacija i komunikacija između procesa. Jezgro operativnog sistema i upravljanje procesima.

nevaeh
Télécharger la présentation

III Upravljanje procesima

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. III Upravljanje procesima Jezgro Procesi i niti Sinhronizacija i komunikacija između procesa

  2. Jezgro operativnog sistema i upravljanje procesima Jezgra(nukleus ili kemel) osnovni je deo svakog operativnog sistema. U hijerarhijskom (slojevitom) modelu, jezgro je najbliže hardveru i predstavlja vezu, tj. interfejs između hardvera i ostalih slojeva operativnih sistema. Jezgro se može definisati i kao deo operativnog sistema koji omogućava programima da na siguran način pristupe hardveru. Procesje jedan od najvažnijih koncepata operativnih sistema. To je program ili deo programa u stanju izvršavanja, zajedno sa svim resursima potrebnim za rad programa.

  3. JEZGRO Osnovna funkcija jezgra je upravljanje procesima, tj. stvaranje okruženja u kome mogu postojati procesi, dodeljivanje procesora procesima i obezbeđivanje mehanizama za interprocesnu komunikaciju. Na nivou hardvera postoje komponente koje omogućavaju nadogradnju hardvera jezgrom. U te komponente spadaju: 1) Mehanizam prekida(obezbeđuje izvršenje upravljačkog programa, to jest prebacivanje kontrole izvršavanja s korisničkog na upravljački program) 2) Zaštitni mehanizam adresiranja memorije(sprečava pogrešno adresiranje, tj. onemogućava da jedan proces upiše svoje prateće podatke u deo memorije koji je dodeljen drugom procesu) 3)Skup privilegovanih instrukcija(čine sve instrukcije koje su dostupne operativnom sistemu, ali ne i korisničkim programima) 4) Časovnik realnog vremena(pomoću satnog mehanizma realnog vremena kontroliše se i evidentira potrošnja resursa računara za sve pojedinačne procese)

  4. Delovi jezgra Moze se podeliti na tri osnovne celine: 1) Prvi nivo obrade prekida(čine rutine za određivanje izvora prekida i iniciranje servisa, tj. opsluživanje pojedinih vrsta prekida) 2) Dispečer sistema -planer poslova niskog nivoa (dispečer je deo jezgra koji dodeljuje procesor procesima) 3) Rutine za ostvarivanje interprocesne komunikacije(deo jezgra operativnog sistema koji obezbeđuje komunikaciju među procesima)

  5. Procesi i niti Pojam procesa Operacije nad procesima Implementacija procesa Pojam niti Implementacija niti

  6. PROCESI Računarski sistem koji ima samo jedan procesor može da izvršava samo jednu instrukciju u jednom trenutku. Proces predstavlja jedan od najvažnijih koncepata operativnih sistema. Proces je program ili deo programa u stanju izvršavanja, zajedno sa svim resursima koji su potrebni za rad programa. Svaki proces ima tri fundamentalna memorijska dela, tj. sekcije: 1) programska ili tekstualna sekcija, koja se ne menja (eng.read only) i koji sadrži programski kod; 2) stek sekcija (eng. stack section), koja sadrži privremene podatke (parametre za procedure, povratne adrese, lokalne promenljjive); 3) sekcija podataka (eng. data section), koja sadrži globalne promenljive.

  7. PREDSTAVLJANJE PROCESA Za razliku od programa, proces je dinamička struktura i najjednostavnije se može opisati kao program u stanju izvršenja, tj. kao niz aktivnosti koje su posledica izvršenja programa. Kontrolni blok je deo radne memorije, to jest memorijska struktura sa osnovnim informacijama o procesu, koje operativni sistem koristi za upravljanje tim procesom. U informacije iz kontrolnog bloka spadaju: - ime ili jedinstveni identifikator procesa (PIO); - kontekst (okruženje) procesa; - prioritet procesa; - informacije o memoriji procesa; - lista otvorenih datoteka; - status zauzetih ulazno-izlaznih resursa; - trenutno stanje procesa.

  8. Dijagram stanja procesa Proces se može naći u nekoliko stanja (pet ili sedam, zavisno od konačnog automata koji je korišćen za opisivanje stanja) a sledeća tri su najznačajnija: • Stanje izvršavanja (RUN, RUNNING) Procesor izvršava instrukcije ovog procesa. • Stanje čekanja na procesor (READY, RUNNABLE) Proces je dobio sve potrebne resurse osim procesora, spreman je za rad i čeka da mu se dodeli procesor. • Stanje čekanja na resurs (WAIT, UNRUNNABLE) Proces čeka na neki događaj (na primer, da se završi štampanje), jer su za dalje izvršavanje procesa potrebni resursi koji trenutno nisu na raspolaganju. Takođe, proces može ući li stanje WAIT ukoliko čeka završtak neke ulazno-izlazne operacije ili rezultat nekog drugog procesa.

  9. Prošireni dijagram stanja procesa Ovaj model automata karakterističan je za operativne sisteme UNIX.Osnovna pretpostavka je da korisnik koji inicira proces ima pravo da privremeno zaustavi njegovo izvršenje (eng!. suspend). Izvršenje procesa se može prekinuti samo ustanjima WAIT i READY. Na taj način, formiraju se dva dodatna stanja : 1.SUSPENDED - READY(u ovo stanje proces dolazi ukoliko je suspendovan u stanju čekanja na procesor) 2. SUSPENDED - WAIT(u ovo stanje proces dolazi ukoliko je suspendovan u stanju čekanja na resurs)

  10. RASPOREĐIVANJE PROCESA Podela vremena (engl. time-sharing) poseban je oblik multiprograrniranja koji omogućava da svaki korisnik radi interaktivno na računaru preko posebnog terminala kome pripada dodeljeno procesorsko vreme. Posle isteka vremenskog kvantuma, tj. dodeljene količine procesorskog vremena, procesor se dodeljuje drugom terminalu. Operativni sistem treba da obezbedi odgovarajući mehanizam za dodelu procesora različitim procesima. Delovi tog mehanizma su redovi čekanja na procesor i planeri poslova.

  11. Redovi čekanja na procesor • Svi procesi koju su spremni za rad i nalaze se u radnoj memoriji čuvaju se u redu čekanja na procesor, to jest u redu čekanja spremnih procesa. • Redovi čekanja na procesor po pravilu se realizuju kao povezane liste, formirane od kontrolnih blokova procesa sa definisanim redosledom izvršenja procesa. • Proces koji se nalazi u stanju izvršavanja može: - ostati bez procesora kada mu istekne vremenski kvantum; - napraviti nov proces i čekati u blokiranom stanju da se novi proces izvrši; - ostati bez procesora kada se dogodi prekid; - postaviti U/I zahtev, nakon čega se prebacuje u red čekanja na ulazno-izlazni uređaj, to jest postaje blokiran.

  12. Planer poslova i dispečer sistema Planer poslova obavlja sledeće funkcije: - deli poslove na procese; - na osnovu određenih algoritama dodeljuje prioritete procesima; - dovodi procese u red čekanja na procesor. Planer poslova se poziva samo kada se pojave novi procesi ili kada jedan ili više procesa završi aktivnosti. Reguliše stepen multiprogramiranja, tj. broj simultanih procesa u memoriji. Od njega se očekuje da pravi dobru selekciju procesa koji će dobiti memoriju kako bi sistem što efikasnije funkcionisao. Zadatak dispečer sistema je da dodeljuje procesor procesima koji se nalaze u procesorskom redu.Dispečer dodeljuje procesor kad god tekući proces pređe iz stanja RUN u stanje WAIT ili READY. Najjednostavnije rečeno, dispečer odlučuje koji će proces dobiti procesor, kada će ga dobiti i koliko dugo.

  13. Zamena konteksta procesa Prilikom dodele procesora drugom procesu, to jest zamene procesa koji se trenutno izvršava, dispečer: - pamti stanje procesa koji se prekida, kako bi se proces mogao kasnije nastaviti; - puni memoriju stanjem novog procesa kome se dodeljuje procesor. Konteks procesa čine podaci koji se čuvaju prilikom oduzimanja procesora, a koji omogućuju nastavak izvršenja procesa, kao što su registri procesora, memorijske sekcije i lista otvorenih datoteka.

  14. OPERACIJE NAD PROCESIMA Ranije opisani koncept jezgra, uz korišćenje kontrolnih blokova procesa, dozvoljava operativnom sistemu da nad procesima izvrši sledeće operacije: - izrada novog procesa (pravijenjem kontrolnog bloka i ažuriranjem procesne liste); - izrada veza proces - proces roditelj; - uništenje procesa (brisanjem kontrolnog bloka iz proces ne liste); - promena stanja procesa (obavljanje tranzicija u dijagramu stanja, kao što je dodela procesora); - promena prioriteta procesa.

  15. Izrada procesa Proces koji pravi nove procese jeste roditeljski proces (eng!. parent process), dok se proces koji je roditelj napravio naziva dete proces (eng!. child process). Svaki proces koji je dete drugog procesa može dalje stvarati nove procese - na taj način se formira hijerarhijska struktura procesa, tj. stablo aktivnih procesa. Odnos proces – proces roditelj može se opisati na osnovu načina deljenja resursa i načina izvršavanja. Prema deljenju resursa, procesi roditelj i dete mogu se naći u sledećim relacijama: - procesi roditelj i dete dele sve resurse; - procesi roditelj i dete dele podskup resursa roditeljskog procesa; - procesi roditelj i dete ne dele resurse.

  16. RUTINE ZA INTERPROCESNU KOMUNIKACIJU Rutine za interprocesnu komunikaciju moraju se implementirati u jezgru kako bi bile dostupne svim procesima i kako bi imale direktan pristup dispečeru. Interprocesna komunikacija se može ostvariti na više načina, semaforskim tehnikama, slanjem poruka, korišćenjem deljive memorije (na primer, bafera) i imenovanih cevi.

  17. Nezavisni i kooperativni procesi U odnosu na međusobnu zavisnost toka izvršavanja, procesisemogu podeliti na: - nezavisne procese; - kooperativne; Proces je nezavisan ukoliko ne utiče direktno na izvršenje drugih procesa i ukoliko na njegovo izvršenje direktno ne utiču drugi procesi. Kooperativni procesi su oni koji jedni na druge utiču, a to su svi procesi koji dele podatke ili bilo kakve resurse. Kooperativni procesi zahtevaju specijalan tretman i okruženje iz sledećih razloga: -Deljenje informacija(mora se obezbediti okruženje koje će omogućiti pravilan konkurentni pristup podacima ) -Ubrzavanje rada( ukoliko i se neki posao podelio na više delova, i ako bi se ti delovi izvršavali konkurentno, poboljšale bi se performanse) -Modularnost(sistemske funkcije mogu modularno da se podele na odvojene procese i niti) -Pogodnost(korisnik može da obavlja više stvari istovremeno) Konkurentno izvršavanjre kooperativnih procesa zahteva mehanizam koji će dozvoliti procesim da komuniciraju između sebe i da sinhronizuju svoje akcije.

  18. Slanje poruka Procesi mogu komunicirati i slanjem poruka, čime se omogućava sinhronizacija aktivnosti bez upotrebe deljive memorije. Ovaj način komunikacije je veoma podesan u distribuiranim okruženjima gde se procesi odvijaju na različitim računarima. Da bi procesi mogli da komuniciraju slanjem poruka, neophodno je u jezgro implementirati sledeće dve osnovne operacije: -slanje poruke -prijem poruke Poruke koje se razmenjuju između procesa mogu biti fiksne ili promenljive veličine. Postoje različite šeme za realizaciju ovih osnovnih operacija, a ove dve operacije su dominantna: - sinhrono ili blokirajuće slanje i primanje poruka - asihrono ili neblokirajuće slanje i primanje poruka Da bi dva procesa mogla da razmenjuju poruke, između njih mora postojati komunikaciona veza -direktna komunikacija -indirektna komunikacija preko poštanskih sandučića Bilo da je u pitanju direktna iliindirektna komunikacija, poruke koje se razmenjuju čuvaju se u privremenim redovima čekanja.

  19. Direktna komunikacija U direktnoj šemi, procedure za slanje i primanje moraju eksplicitno da sadrže ime procesa s kojim žele da komuniciraju. Postoji i asimetrična varijanta adresiranja, u kojoj pošiljalac mora da navede ime primaoca, dok primalac ne mora da navede ime pošiljaoca. Pravila direktne komunikacije su sledeća: - veza se automatski uspostavlja između para procesa koji žele da komuniciraju; - jedna veza se uspostavlja samo za dva procesa Nedostatak direktne komunikacije je ograničena modularnost definicija procesa, pri čemu promena imena procesa povlači ispitivanje svih procesnih definicija.

  20. Indirektna komunikacija Pri indirektnoj komunikaciji, poruke se šalju ili primaju preko sandučića ili priključaka. Svako sanduče ima svoju identifikaciju. U indirektnoj šemi proces može komunicirati s procesom preko više različitih sandučića. U indirektnoj šemi, osobine komunikacije su: - veza se uspostavlja između para procesa koji dele sanduče - vezi se mogu pridružiti više od dva procesa - između svakog para procesa može postojati više različitih veza, gde svaka veza odgovara jednom sandučetu. Sandučići mogu biti vlasništvo procesa ili operativnog sistema. Da bi se indirektno komuniciralo slanjem poruka, operativni sistem mora obezbediti mehanizme za pravljenje novog sandučeta za svaki par procesa koji želi da komunicira, te omogući slanje i primanje poruka kroz sanduče i brisanje sandučeta.

  21. Semafori Semafor je celobrojna nenegativna promenljiva, čija vrednost štiti neki resurs i omogućava komunikaciju između procesa. Vrednost semafora određuje da lije resurs koji taj semafor štiti slobodan ili zauzet. Svaki semafor ima svoju početnu vrednost, a nad njim se mogu izvršiti dve nedeljive operacije, koje su radi jednostavnosti predstavljene kao signal (s) i wait(s). Operacije signal (s) i wait (s) ne mogu se podeliti na više ciklusa, tako da dva procesa ne mogu istovremeno izvršavati ove operacije nad semaforom. Vrednost semafora s se u svakom trenutku može odrediti formulom val(s) = c (s) + ns(s)- nw(s). Vrednost semafora kojim je zaštićen resurs koji istovremeno može koristiti N procesa, nalazi se u intervalu [0,N-1].

  22. Pojam procesa • Proces(process) je izvršavanje programa nad datim podacima: • program: statičan zapis intrukcija • proces: jedno izbršavanje (instanca, “inkarnacija”) datog programa za dati skup podataka – sa jednim adresnim prostorom • moguće je kreirati više procesa nad istim programom, svaki radi nad svojim podacima – svaki ima svoj adresni prostor • Svaki proces odlikuje: • pozicija u izvršavanju – mesto u programu dokle je izvršavanje stiglo (Program Counter) • stanje – podaci nad kojima proces radi – adresni prostor • Pojam posao(job) u suštini znači isto što i proces, samo što je arhaičan (paketni sistemi) • Pojam zadatak(task) ima različito značenje u različitim sistemimam i programskim jezicima, ali uglavnom znači isto što i proces

  23. Operacije nad procesima • Kreiranje procesa: roditeljski(parent) proces kreira proces-dete (child) sistemskim pozivom • Varijante dozvoljavanja korišćenja resursa: • proces-dete može da traži bilo koji resurs od OS • proces-dete može da koristi samo podskup resursa roditelja • Varijante izvršavanja: • kada kreira potomka, roditeljski proces se suspenduje (zaustavlja izvršavanje) sve dok se svi potomci ne završe • kada kreira potomka, roditeljski proces nastavlja izvršavanje uporedo sa svojim potomcima • Varijante formiranja adresnog prostora: • potomak dobija kopiju adresnog prostora roditelja – “kloniranje” • potomak ima nezavisan program i (novi, prazan) adresni prostor (uključujući i prazan stek)

  24. Operacije nad procesima • Primer – Unix: • ID procesa – jedinstveni int • sistemski poziv za kreiranje procesa: fork() • proces-dete dobija kopiju adresnog prostora roditelja i kompletan kontekst, pa nastavlja izvršavanje od istog mesta kao i roditelj • fork() vraća 0 u procesu-detetu, a ID deteta (!=0) u roditelju • sistemski poziv wait() vrši sinhronizaciju procesa – proces-roditelj čeka da se proces-dete završi da bi nastavio dalje • primer: koliko ukupno procesa kreira sledeći kod? int pid[N]; for (int i=0; i<N; i++) {pid[i] = fork();}...wait(...)...;

  25. Operacije nad procesima • sistemski poziv execlp() zamenjuje program pozivajućeg procesa drugim programom – učitava programski kod iz fajla u adresni prostor procesa pozivaoca i počinje njegovo izvršavanje: char* programName = “...”;void main () { int pid = fork(); if (pid<0) { // Error printf(“Fork failed.\n”); exit(-1); } else if (pid==0) // Child process execlp(programName); else { // Parent process wait(NULL); printf(”Child complete.\n”); exit(0); }}

  26. Operacije nad procesima • MS Windows podržava oba načina: • roditeljski adresni prostor se klonira • roditelj specifikuje ime programa nad kojim se kreira nov proces • Gašenje procesa: • kada završi izvršavanje glavnog programa (main() u jeziku C/C++) • kada sam proces to eksplicitno zatraži, npr. sistemski poziv exit() • jedan proces gasi (“ubija”) neki drugi proces; moguća su ograničenja, npr. to može da uradi samo roditeljski proces; mogući razlozi: • potomak je iscrpeo svoje resurse • nije više potreban • roditelj treba da se ugasi, a OS ne dozvoljava da njegovi potomci dalje rade (kaskadno gašenje) • OS gasi proces zbog neke nedozvoljene operacije • Primer – Unix: wait() vraća ID završenog potomka

  27. Trenutno se izvršava – ima procesor Implementacija procesa • Stanja procesa tokom životnog veka: Terminated New Interrupt or Non-blocking system call Admitted Exit Ready Running Dispatch I/O completed or Event occurred I/O or Event wait Blocked Spreman na izvršavanje, čeka da dobije procesor Čeka na I/O ili događaj (Suspended, Waiting, Blocked)

  28. PCB ID Processor context Memory params I/O info Scheduling params Accounting params ... Implementacija procesa • Kontekst procesa (process context): sve informacije potrebne da OS nastavi izvršavanje procesa, kao i da ga kontroliše i ugasi: • ID – interna identifikacija procesa unutar OS • kontekst procesora (PC, SP, programski dostupni registi) • memorijski parametri: veličina i pozicija dodeljenog memorijskog bloka ili PMTP/SMTP itd. • informacije o I/O resursima: spisak otvorenih fajlova, zauzetih resursa itd. • podaci potrebni za raspoređivanje: prioritet, dodeljeno CPU vreme, itd. • podaci potrebni za obračunavanje • ... • Struktura podataka u kojoj se čuvaju ove informacije za svaki poces unutar OS – Process Control Block (PCB)

  29. Implementacija procesa X Ready queue running PCB2 X ready PCB1 PCB4 PCB5 PCB6 X Device queue Disk waiting PCB7 PCB9 Event queue X Event X waiting PCB0 PCB3 PCB8

  30. Implementacija procesa • Promena konteksta (context switch): Process B Process A Interrupt or system call Lock Save context to running.PCB Select other running Restore context from running.PCB Unlock and Return

  31. X PCB1 Lock Save context to running.PCB X PCB3 PCB3 PCB2 PCB0 PCB4 PCB4 Restore context from running.PCB Unlock and Return Implementacija procesa Interrupt or System call • Promena konteksta: running ready Select other running Kako? Problem raspoređivanja!

  32. X X running running PCB1 PCB3 X X ready ready PCB2 PCB3 PCB2 PCB0 PCB0 PCB4 PCB4 PCB1 Implementacija procesa • Promena konteksta:

  33. Implementacija procesa • Zašto su potrebne lock/unlock primitive? • Da li se sme dozvoliti da se tokom promene konteksta prekine izvršavanje i procesor preuzme neko drugi? • Šta bi se dogodilo ako se dogodi prekid i počne da se izvršava isti sistemski kod za preuzimanje? • Šta bi se dogodilo sa strukturama podataka OS-a? • Kako implementirati lock/unlock? • Na jednoprocesorskom sistemu, jednostavno maskirati prekide – prekid je jedini izvor asinhronog preuzimanja procesora! • Na multiprocesorskim sistemima, HW mora da obezbedi odgovarajuću podršku! (Detalji kasnije)

  34. Implementacija procesa • Promena konteksta je čist režijski trošak – sistem ne radi ništa korisno za aplikacije? Ali koliko “košta”? • Zavisi od procesora: šta treba sačuvati kao kontekst i kakva je HW podrška (instrukcije, registri); primer: Sun UltraSPARC sadrži više registarskih fajlova i instrukciju za promenu tekućeg • Zavisi od OS: koliko informacija treba čuvati kao kontekst procesa i šta još treba uraditi • od 1 do 1000 mikrosekundi • Kako smanjiti ove troškove? Umesto procesa na nivou OS, kad god je moguće koristiti niti

  35. Pojam niti • Nit (thread) predstavlja jedno izvršavanje nekog dela koda programa unutar adresnog prostora nekog procesa kreiranog unutar OS-a • Proces na nivou OS-a (teški proces, heavyweight process): jedno izvršavanje jednog programa sa sopstvenim adresnim prostorom • Nit (laki proces, lightweight process): jedno izvršavanje dela koda programa unutar adresnog prostora “okružujućeg” procesa • Više niti može biti kreirano unutar istog procesa: • svaka ima svoj tok kontrole(thread of control) – svoju poziciju izvršavanja u programskom kodu • sve niti dele isti adresni prostor i resurse – otvorene fajlove, globalne podatke programa • svaka ima svoje lokalne podatke za pozive potprograma • Obično se kreiraju nad pozivom jednog potprograma (i svim ugnježdenim pozivima)

  36. Pojam niti • Primer – Java: • Nit se kreira kao objekat klase izvedene iz bibliotečne klase Thread • Nit se pokreće pozivom operacije start() • Telo niti (programski kod) predstavlja polimorfna operacija run() public class UserInterface{ public int newSetting (int Dim) { ... } ...}public class Arm{ public void move(int dim, int pos) { ... }}

  37. Pojam niti public class Control extends Thread{ private int dim;UserInterface ui = new UserInterface();Arm robot = new Arm(); public Control(int dimension) { super(); dim = dimension; } public void run(){ int position = 0; int setting; while(true){ robot.move(dim,position); setting = ui.newSetting(dim); position = position + setting; } }}

  38. Pojam niti int xPlane = 0; int yPlane = 1;int zPlane = 2;Control c1 = new Control(xPlane);Control c2 = new Control(yPlane);Control c3 = new Control(zPlane);c1.start();c2.start();c3.start(); • Primeri upotrebe - ista aplikacija, isti proces, isti program, ali više uporednih aktivnosti-niti: • tekst-procesor: snima dokument u pozadini, proverava gramatiku u pozadini, uporedo obrađuje pritiske tastera i druge akcije korisnika • Web Browser: dovlači slike ili drugi sadržaj, prikazuje dohvaćeno, obrađuje akcije korisnika • server: po jedna nit nad istim programom za svaki zahtev klijenta

  39. Pojam niti • Koristi: • Bolji odziv interaktivne aplikacije: duge aktivnosti se mogu raditi “u pozadini”, a uporedo prihvatati akcije korisnika • Deljenje resursa: niti dele memoriju (adresni prostor) i otvorene fajlove • Ekonomičnost: kreiranje procesa, promena konteksta, alokacija memorije i ostalih resursa je skupo; niti te režijske troškove ili eliminišu, ili drastično smanjuju; npr. Solaris: kreiranje 30:1, promena konteksta 5:1

  40. Implementacija niti • Podrška nitima može biti: • na nivou korisničkog programa (user threads): niti podržava izvršno okruženje ili biblioteka programskog jezika, OS nema koncept niti; prednosti: efikasnost i jednostavnost mane: kada se jedna nit blokira na sistemskom pozivu, ceo proces se blokira • na nivou OS-a (jezgra, kernel threads): OS direktno podržava koncept niti • Ako su podržane na oba nivoa, modeli preslikavanja: • više u jedan (many-to-one): više korisničkih implementira jedna sistemska nit ili proces • jedan na jedan (one-to-one): jednu korisničku nit implementira jedna sistemska nit • više u više (many-to-many): više korisničkih implementira isti ili manji broj sistemskih niti

  41. Implementacija niti • Niti u okviru istog procesa imaju zajedničko: • adresni prostor – globalne podatke • programski kod • resurse – fajlove i druge sistemske resurse • Niti u okviru istog procesa imaju sopstveno: • poziciju u izvršavanju – PC i trag izvršavanja – stek (SP) • podatke lokalne za potprograme – stek (SP) i promenljive alocirane u registe • Sledi: kontekst niti svodi se na kontekst procesora – PCB (TCB) je jednostavniji, promena konteksta je jednostavnija

  42. Implementacija niti • Primer niti na jeziku C++ - “Školsko jezgro”: • korisničke niti implementirane bibliotekom za dati jezik • semantika i upotreba slična nitima u Javi • može se izvršavati i bez OS-a, na “goloj” mašini #include "kernel.h" // uključivanje deklaracija Jezgra#include <iostream.h>void threadBody () { for (int i=0; i<3; i++) { cout<<i<<"\n"; dispatch(); // Eksplicitno preuzimanje - yield }}void userMain () { Thread* t1=new Thread(threadBody); Thread* t2=new Thread(threadBody); t1->start(); t2->start(); dispatch();}

  43. Implementacija niti • Mana ovakvog “proceduralnog” stila kreiranja niti: niti nad istim kodom (istom funkcijom) ne mogu se razlikovati jer polazna funckija nema argumente • Moguće rešenje: omogućiti argument funkcije, ali unapred definisanog tipa (npr. void* na strukturu argumenata). Problem: nije tipizirano i nije u duhu OOP • Objektno rešenje – poput Jave: class Thread {public: Thread (); Thread (void (*body)()); void start ();protected: virtual void run () {}};

  44. Implementacija niti • Promena konteksta na način nezavisan od procesora i prevodioca: • zaglavlje <setjmp.h>sadrži potrebne deklaracije • tip jmp_bufpredstavlja PCB za nit (TCB), tako da sadrži sve programski dostupne registre koje koristi dati prevodilac na datoj mašini (obavezno PC i SP) • int setjmp(jmp_buf context): smešta kontekst procesora u TCB dat kao argument i vraća 0 • void longjmp (jmp_buf context, int value): restaurira kontekst dat kao argument, a koji je snimljen pomoću setjmp(); pošto se time skače unutar setjmp(), tada setjmp() vraća vrednost value koja mora biti !=0

  45. Implementacija niti Promena konteksta: void Thread::dispatch () { lock (); if (setjmp(runningThread->context)==0) { Scheduler::put(runningThread); runningThread = Scheduler::get();longjmp(runningThread->context,1); } else { unlock ();return;} Problem: da li je ovaj pristup moguć kod asinhronog preuzimanja (zbog prekida)? Šta onda?

More Related