16
1 Operacijski sustavi Osnovni koncepti višenitnosti Mr.sc. Jelena Nakić, 2010. [email protected]

OS-Visenitnost_5-01-2014

  • Upload
    a-ne-ta

  • View
    217

  • Download
    2

Embed Size (px)

DESCRIPTION

jeziscni procesori visenitnost

Citation preview

Page 1: OS-Visenitnost_5-01-2014

1

Operacijski sustavi

Osnovni koncepti višenitnosti

Mr.sc. Jelena Nakić, 2010.

[email protected]

Page 2: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

2

Konkurentnost

Računala izvršavaju više akcija konkurentno. (kompajiranje programa, ispisivanje nekog dokumenta, i primanje e-mail-a izvršava se konkurentno)

Mnogi programski jezici ne omogućavaju programske konstrukcije za specificiranje konkurentnih aktivnosti. Programski jezici, općenito, osiguravaju samo jednostavan skup kontrolnih iskaza koji omogućavaju programerima da izvrše jednu akciju u jednom trenutku, nastavljajući sa sljedećom akcijom kada je prethodna završena.

Konkurentnost koju računala izvršavaju danas, općenito se implementira korištenjem “primitiva” operacijskog sustava, što uobičajeno obavljaju su samo iskusni “sistemski programeri”. U toj činjenici leži razlog zašto se principi višenitnog programiranja uče u okviru predmeta Operacijski sustavi.

Page 3: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

3

Konkurentnost

Konkurentno izvršavanje je konkurentno (simultano) izvršavanje više zadataka.

Ovi zadaci mogu biti implementirani kao odvojeni programi, ili kao skup procesa ili niti (thread). Zadaci se mogu izvršavati na jednom ili više procesa, ili distribuirano kroz mrežu.

Ključni faktori prilikom dizajniranja konkurentnih računalnih sustava:

– korektni slijed interakcija ili komunikacija između različitih zadataka

– koordinacija između zadataka

Pioniri u polju konkurentnog računarstva su Edsger Dijkstra, Per Brinch Hansen, i C. A. R. Hoare.

Page 4: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

4

Komunikacija između konkurentnih komponenti

U nekim konkurentnim sustavima komunikacija između konkurentnih komponenti je sakrivena od programera, dok u drugima se mora njome upravljati eksplicitno.

Eksplicitna komunikacija je podijeljena u dvije klase komunikacije:

1. Dijeljena memorija

Konkurentne komponente komuniciraju preko sadržaja dijeljenih memorijskih lokacija. Ovaj stil konkurentnog programiranja obično zahtjeva u okviru aplikacije neku formu zaključavanja kao što su npr: semafori ili monitori da koordiniraju između niti.

Page 5: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

5

Page 6: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

6

Komunikacija između konkurentnih komponenti

2. Poruke

Konkurentne komponente komuniciraju razmjenom poruka.

Razmjena poruka može se obavljati:

– asinhrono (pošiljac šalje poruku bez čekanja na odgovor primaoca o primanju iste)

– sinhrono (pošiljac se blokira dok primaoc ne primi poruku).

Page 7: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

7

Koordinacija pristupa resursima

Jedan od osnovnih zadataka u konkurentnom izvršavanju je sprječavanje neadekvatnog utjecaja konkurentnih procesa u procesu pristupa zajedničkim resursima.

Npr, podizanje novca sa računa koji je predstavljen sa dijeljenim resursom balance:

1 bool podizanje(int iznos)

2 {

3 if( balance >= iznos )

4 {

5 balance -= iznos;

6 return true;

7 }

8 return false;

9 }

Page 8: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

8

Koordinacija pristupa resursima

Pretpostavimo da je balance=500 (iznos novca na računu), i da dva konkurentna procesa pozivaju podizanje(300) i podizanje(350).

Ako se linija 3 u obje operacije izvrši prije linije 5, i jedna i druga će naći da je balance > iznos i evaluirati izraz na true, što će prouzrokovati oduzimanje iznosa sa računa.

Međutim, pošto oba procesa izvršavaju operaciju podizanja novca sa računa, realno možemo dobiti situaciju da su podigli više novca nego što je bilo na računu.

Ova vrsta problema sa dijeljenim resursima zahtjeva korištenje kontrole konkurentnog izvršavanja.

Page 9: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

9

Koordinacija pristupa resursima

Pošto su konkurentni sustavi zasnovani na korištenju dijeljenih resursa, programiranje za konkuretno izvršavanje zahtjeva korištenje neke forme arbitraže u implementaciji pristupa resursima.

Iako postoje mnogi načini za rješavanje pristupa korištenja zajedničkog resursa, veliki broj takvih rješenja ima problem konflikta prilikom konkurentnog pristupa zajedničkom resursu, kada najčešće nastupa mrtva petlja (deadlock) tj. situacija kada su svi procesi blokirani za izvršavanje (npr. svi čekaju oslobađanje istog zajedničkog resursa).

Page 10: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

10

Objektno orijentirani konkurentni programi

Svi noviji operacijski sustavi osiguravaju mogućnosti kreiranja konkurentnih procesa.

Svaki proces je ustvari jedan program. Međutim, u zadnje vrijeme postoji tendencija da se osiguraju mogućnosti da se procesi kreiraju unutar programa.

Suvremeni operacijski sustavi dozvoljavaju kreiranje procesa unutar istog programa, da bi imali pristup dijeljenjenoj memoriji (bez restrikcije), takvi procesi se nazivaju niti (threads).

Treba razlikovati konkurentnost između programa (procesa) i konkurentnost unutar programa (tj. između niti).

Page 11: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

11

Niti (threads)

Niti (engl. threads), predstavljaju bazične cjeline za izvršavanje koda pod suvremenim operacijskim sustavima.

Nit je programska cjelina koja treba obaviti jedan zadatak. Niti (jedna ili više) pripadaju jednom složenijem procesu.

Niti kao “laki procesi” i dijelovi jednog procesa imaju svoje jedinstvene resurse i zajedničke resurse sa ostalim nitima istog procesa.

Jedinstveni resursi niti su:

– poseban identifikator niti (engl. thread ID),

– posebna vrijednost programskog brojača (PC),

– vrijednosti drugih registara procesora,

– poseban stog.

Page 12: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

12

Niti (threads)

Korištenje višenitnog koncepta ima sljedeće prednosti:

[1] Manje vremena odziva. Višenitna tehnika omogućava interaktivnim aplikacijama da nastave rad čak i kada je dio programa blokiran ili izvršava neku dugotrajnu specifičnu operaciju. Na primjer, višenitni web preglednik može nastaviti interakciju s korisnikom u jednoj niti, dok druga nit simultano učitava neku veliku sliku s interneta, treća sljedeću sliku itd.

[2] Ekonomičnost. Ogleda se u dijeljenju prostora i resursa kao i uštedi vremena koje također drastično utječe na performanse. Niti dijele memoriju i sve ostale resurse koji pripadaju istom procesu.

[3] Iskorištavanje višeprocesorske arhitekture. Bilo koje niti mogu se istovremeno izvršavati, svaka na različitom procesoru.

Page 13: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

13

Višenitno programiranje

Višenitno programiranje predstavlja pisanje takvih programa koji se sastoje od više kooperativnih procesa i niti koje se izvršavaju simultano ili paralelno, pri tom koristeći zajedničke resurse računalnog sustava.

U višenitnim aplikacijama, niti su distribuirane preko više procesora (ako su raspoloživi), tako da se više zadataka može izvršavati konkurentno, omogućavajući aplikacijama postizanje veće učinovitosti.

Višenitnost može također povećati perfomanse na jednoprocesorskim sustavima simulirajući konkurentnost: kada jedna niti ne može nastaviti, druga može za to vrijeme koristiti procesor.

Page 14: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

14

Višenitno programiranje

Primjeri nekih aplikacija koje zahtijevaju konkurentno programiranje sa više niti:

Kada program preuzima velike datoteke s interneta, kao audio ili video isječke, korisnik obično ne želi čekati da se cijeli proces preuzimanja datoteke završi, prije pokretanja datoteke.

Da bi riješili ovaj problem, trebamo više niti, jedna preuzima isječak a druga ga prikazuje. Ove aktivnosti se izvršavaju konkurentno.

Potrebno je i da sinkroniziramo niti da npr. ne počne 'player' nit dok nema dovoljan dio isječka u memoriji da zaposli player nit.

Page 15: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

15

Višenitno programiranje

Drugi primjer višenitnosti je CLR automatsko skupljanje smeća (garbage collector). C i C++ zahtjevaju da programeri oslobode dinamički alociranu memoriju eksplicitno.

CLR osigurava „garbage-collector thread‟ (nit za skupljanje smeća), koja oslobađa dinamički alociranu memoriju koja nije

više potrebna.

Page 16: OS-Visenitnost_5-01-2014

© 2009 Jelena Nakić Operacijski sustavi 2009/10 PMF, Split

16

Razvojna okruženja

Za pisanje konkurentnih programa mogu poslužiti mnogobrojna razvojna okruženja, među kojima su i programski jezik Java, i C++, C#.

Programiranje sa nitima u Javi i C# (C++) je veoma slično i može se reći da imaju iste mogućnosti izražavanja.

.NET Framework biblioteka klasa osigurava konkurentne primitive. Specificira se da aplikacije sadrže niti za izvršavanje, pri čemu je svaka od njih dizajnirana tako da dio programa izvršava konkurentno sa ostalim nitima. Ova sposobnosti se naziva višenitnost (eng. multithreading).

Višenitnost je raspoloživa za .NET programske jezike, uključujući C#, Visual Basic i Visual C++.

.NET Framework Class Library u namespace System.Threadingsadrži osnovne metode za rad sa nitima.