10. előadás Párhuzamos programozási kérdések. Az Ada taszkok (1).

Hasonló dokumentumok
Programozási nyelvek (ADA)

11. előadás Szinkronizációs feladatok. Az Ada taszkok (2).

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

Folyamatok. 6. előadás

Bevezetés a párhuzamos programozási koncepciókba

Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Kommunikáció. 3. előadás

Operációs rendszerek. Az Executive és a kernel Policy és mechanizmusok szeparálása Executive: policy - objektum kezelés Kernel: mechanizmusok:

12. előadás Szinkronizációs feladatok (2). Védett egységek. Álvéletlenszámok. OOP az Adában.

6. előadás Hatókör, láthatóság, élettartam. Változók leképzése a memóriára. Blokkszerkezetes nyelvek. Kivételkezelés.

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Programozási nyelvek (ADA)

Programozási nyelvek I. (Az Ada) Kozsik Tamás

Matematikai és Informatikai Intézet. 4. Folyamatok

Szenzorhálózatok programfejlesztési kérdései. Orosz György

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

8. előadás Dinamikus memóriakezelés. Mutatók. Láncolt adatszerkezetek.

15. Programok fordítása és végrehajtása

Programozási nyelvek Java

Operációs rendszerek Folyamatok 1.1

CSOMAG. Az Ada csomag két részből áll: csomag specifikáció csomag törzs. -- specifikációs rész: PACKAGE név IS. -- a csomag kívülről nem látható része

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Párhuzamos programozási platformok

2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok

Változók élettartama

Operációs rendszerek. Folyamatok ütemezése

Java programozási nyelv 9. rész Kivételkezelés

... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.

Operációs rendszerek II. Folyamatok ütemezése

Párhuzamos programozási platformok

Concurrency in Swing

Termelő-fogyaszt. fogyasztó modell

Alprogramok, paraméterátadás

Flynn féle osztályozás Single Isntruction Multiple Instruction Single Data SISD SIMD Multiple Data MISD MIMD

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

OPERÁCIÓS RENDSZEREK I. BEVEZETÉS Koczka Ferenc -

Operációs rendszerek. Az NT folyamatok kezelése

UNIX: folyamatok kommunikációja

Occam 1. Készítette: Szabó Éva

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

Operációs rendszerek. Folyamatok

Eljárások, függvények

9. MPI

(kernel3d vizualizáció: kernel245_graph.mpg)

A programozás alapjai

6. Közös változóval rendelkező párhuzamos program, Közös változó,

Irányítástechnika Elıadás. PLC-k programozása

Windows ütemezési példa

Kommunikáció. Kommunikáció. Folyamatok. Adatfolyam-orientált kommunikáció. Kommunikáció típusok (1) Kommunikáció típusok (2) Média. Folyamok (Streams)

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Operációs rendszerek. Bemutatkozás

Programozás alapjai. 5. előadás

OPERÁCIÓS RENDSZEREK 1. PROCESSZKEZELÉS

Elosztott rendszerek. Az elıadás. Az elosztott rendszer definíciója. Köztesrétegként felépülı elosztott rendszer

Bevezetés a programozásba I.

Párhuzamos és Grid rendszerek

LabView Academy. 4. óra párhuzamos programozás

Ütemezés (Scheduling),

Alapszintű formalizmusok

Podoski Péter és Zabb László

5. előadás Parametrikus polimorfizmus. Generikus programozás. Az Ada sablonok.

Objektumorientált Programozás III.

Iman 3.0 szoftverdokumentáció

Operációs Rendszerek II.

S04-2 Elosztott alkalmazások készítése

Programozási nyelvek és módszerek Java Thread-ek

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Osztott rendszer. Osztott rendszer informális definíciója

8.4 Többszálú alkalmazások készítése

Kifejezések. Kozsik Tamás. December 11, 2016

A C programozási nyelv II. Utasítások. A függvény.

Informatika terméktervezőknek

Haladó DBMS ismeretek 1

7. előadás Paraméterátadás. Paraméterek az Adában. Túlterhelés. Felüldefiniálás. Kifejezések.

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

A szemantikus elemzés elmélete. Szemantikus elemzés (attribútum fordítási grammatikák) A szemantikus elemzés elmélete. A szemantikus elemzés elmélete

Ütemezés (Scheduling),

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

Egy Erlang refaktor lépés: Függvényparaméterek összevonása tuple-ba

OOP. Alapelvek Elek Tibor

Kivételkezelés a C++ nyelvben Bevezetés

Párhuzamos és Grid rendszerek

Feladatok (task) kezelése multiprogramozott operációs rendszerekben

Programozási nyelvek Java

Java II. I A Java programozási nyelv alapelemei

Tartalomjegyzék. Előszó... 10

Operációs rendszerek. Az X Window rendszer

Operációs Rendszerek II.

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Funkcionális Nyelvek 2 (MSc)

Előadás_#02. Előadás_02-1 -

Java II. I A Java programozási nyelv alapelemei

C# Szálkezelés. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) C# Szálkezelés / 21

S z á m í t ó g é p e s a l a p i s m e r e t e k

PL/SQL blokk. [címke] [DECLARE deklarációs utasítás(ok)] BEGIN végrehajtható utasítás(ok) [EXCEPTION kivételkezelő] END [név];

A LEGO Mindstorms EV3 programozása

Átírás:

10. előadás Párhuzamos programozási kérdések. Az Ada taszkok (1).

Párhuzamos programozás Program: több tevékenység egyidőben Önálló folyamatok Együttműködnek Többféle lehetőség Elosztott rendszer (distributed system) Többszálú program (multithreaded program) Célok Hatékonyság növelése A feladat egyszerűbb megoldása 2

Elosztott rendszer Több számítógép hálózatba szervezve A folyamatok elosztva a hálózaton Kliens-szerver programok Elosztott objektumrendszer (CORBA, DCOM) PVM, MPI, messaging rendszerek Ada 95: Partíciók Kommunikáció: Távoli eljáráshívás (Remote Procedure Call) Üzenetküldés 3

Megosztott memóriájú rendszer Shared memory system Szemben az elosztott (memóriájú) rendszerrel Egy gépen belül több processzor Egyszerűbb kommunikáció 4

Többszálú programok Egy processzen belül több végrehajtási szál Pehelysúlyú folyamatok (light-weight processzek) a heavy-weight processzben Operációs rendszerek is támogathatják Programozási nyelvi eszközök (Ada, Java) Egy tárterületen belül futnak A processzhez rendelt memóriában Megosztott memóriás modell Saját végrehajtási verem 5

Mire jó a több szál Ha több tevékenységet kell végezni egyszerre Egymástól függetlenül fogalmazhatjuk meg ezeket Összehangolásra szükség van: Szinkronizáció Kommunikáció Példák Több kliens kiszolgálása a szerverben Webböngésző: a felhasználói felület kezelése + letöltés Szimulációk 6

Problémák Elméleti nehézség (programhelyesség) Gyakorlati nehézség (nemdeterminisztikusság) tesztelés, nyomkövetés Ütemezés Interferencia Szinkronizáció Kommunikáció Holtpont és kiéheztetés 7

Ada taszkok A többszálú programozáshoz nyelvi eszköz Gazdag lehetőségek task A; task body A is begin for I in 1..10000 loop Put_Line("Szia!"); end loop; end A; 8

Taszk programegység Specifikáció és törzs Különválik (mint a csomag és a sablon) task A; task body A is end A; Specifikáció: hogyan lehet vele kommunikálni Törzs: hogyan működik Nem lehet könyvtári egység (be kell ágyazni más programegységbe) 9

Kétszálú program with Ada.Text_IO; use Ada.Text_IO; procedure Kétszálú is task Egyik; task body Egyik is begin loop Put_Line("Szia!"); end loop; end Egyik; begin loop Put_Line("Viszlát!"); end loop; end Kétszálú; 10

11 Lehetséges kimenetek Szia! Viszlát! Szia! Viszlát! Szia! Viszlát! Szia! Viszlát! Szia! Viszlát! Szia! Szia! Szia! Szia! Viszlát! Viszlát! Viszlát! Viszlát! Szia! Szia! Szia! Szia! Szia! Viszlát! Szia! Szia! Viszlát! Viszlát! Viszlát! Viszlát! Szia! Szia! Szia! Szia! Szia! Szia! Szia! Szia! Szia! Szia! SziViszla! át! Szia! Szia! Viszlát! ViszSzia! lászit!a! Szia! Szia!

Jellemző kimenet Sokszor az egyik (például Viszlát!) Utána sokszor a másik Nem ugyanannyiszor Változik futás közben, hogy melyikből mennyi Futásról futásra is változik 12

Ütemezés A futtató rendszer ütemezi a szálakat Vagy az oprendszer, vagy az Ada rendszer Co-rutinok: programozó ütemez (Simula 67) Az Ada nyelv nem tesz megkötést arra, hogy egy adott Ada implementációban az ütemezés milyen algoritmussal történik Jó program: bármely ütemezésre jó 13

Időosztásos ütemezés Nem valódi párhuzamosság Egy processzor: egyszerre csak egyet Időszeletek (time slicing) Gyorsan váltogatunk, párhuzamosság látszata Egyenlő időszeletek: pártatlanság Kooperatív viselkedés 14

Kompetitív viselkedés Fusson, amíg van mit csinálnia Amíg számol, addig övé a vezérlés Vezérlés elvétele: csak speciális pontokon (blokkolódás, szinkronizáció) Hatékonyabb, mint az időszeletes ütemezés Kevesebb kontextusváltás (context switch) Nem pártatlan: egy taszk kisajátíthatja az erőforrásokat 15

Prioritás A magasabb prioritású szálak előnyben Ada: Real-Time Systems Annex Set_Priority, Get_Priority alprogramok 16

Pártatlanság, kooperáció Egy taszk lemondhat a vezérlésről delay utasítás loop Put_Line("Szia!"); delay 0.0; end loop; Jellemző kimenet: felváltva írnak ki 17

Várakozás Egy időre felfüggeszthető a taszk A delay utasítással: delay 2.4; A delay után Duration típusú érték van Predefinit valós fixpontos típus A másodperc megfelelője Legalább ennyi ideig nem fut a taszk Szimulációkban gyakran használjuk Használjuk szinkronizációs utasításokban 18

Taszk elindulása és megállása procedure P is task T; task body T is begin end T; begin end P; itt indul a T P itt bevárja T-t 19

Szülő egység Az a taszk / alprogram / könyvtári csomag / blokk, amelyben deklaráltuk (!) Elindulás: a szülő deklarációs részének kiértékelése után, a szülő első utasítása előtt A szülő nem ér véget, amíg a gyerek véget nem ér Függőségi kapcsolatok 20

Taszk befejeződése Bonyolult szabályok Fogalmak: komplett, abortált, terminált Például: elfogytak az utasításai (akár kivétel miatt) és a tőle függő taszkok már termináltak T Callable T Terminated 21

Ha több egyforma szál kell with Ada.Text_IO; use Ada.Text_IO; procedure Háromszálú is task Egyik; task body Egyik is begin loop Put_Line("Szia!"); end loop; end Egyik; task Másik; task body Másik is begin end Másik; begin loop Put_Line("Viszlát!"); end loop; end Háromszálú; 22

Taszk típussal with Ada.Text_IO; use Ada.Text_IO; procedure Háromszálú is task type Üdvözlő; task body Üdvözlő is begin loop Put_Line("Szia!"); end loop; end Üdvözlő; Egyik, Másik: Üdvözlő; begin loop Put_Line("Viszlát!"); end loop; end Háromszálú; 23

Taszk típus Taszkok létrehozásához Ugyanazt csinálják, ugyanolyan utasítássorozatot hajtanak végre Saját példánnyal rendelkeznek a lokális változókból Korlátozott (limited) típusok Cím szerint átadandó, ha alprogram-paraméter Programegységek Mint a taszk programegységek Specifikáció és törzs különválik Nem lehet könyvtári egység (be kell ágyazni más programegységbe) 24

Taszk típus diszkriminánsai Mint a rekordok esetében Lehet a diszkrimináns mutató típusú is Taszkok létrehozásakor aktuális task type T ( Id: Integer ); task body T is begin Put(Id); end T; X: T(13); 25

Mutató típusú diszkrimináns with Ada.Text_IO; use Ada.Text_IO; procedure Háromszálú is type PString is access String; task type Üdvözlő ( Szöveg: PString ); task body Üdvözlő is begin loop Put_Line(Szöveg.all); end loop; end Üdvözlő; Egyik: Üdvözlő(new String ("Szia!")); Másik: Üdvözlő(new String ("Hello!")); begin loop Put_Line("Viszlát!"); end loop; end Háromszálú; 26

Taszkok létrehozása allokátorral Taszk típusra mutató típus: task type Üdvözlő ( Szöveg: PString ); type Üdvözlő_Access is access Üdvözlő; P: Üdvözlő_Access; A mutató típus gyűjtőtípusa egy taszk típus Az utasítások között: P := new Üdvözlő( new String ("Szia!") ); 27

Taszk elindulása és megállása procedure Fő is task type Üdvözlő ( Szöveg: PString ); type Üdvözlő_Access is access Üdvözlő; P: Üdvözlő_Access; task body Üdvözlő is begin end; begin P := new Üdvözlő( new String ("Szia!") ); end Fő; Fő itt bevárja 28 itt indu l

Szülő egység Az a taszk / alprogram / könyvtári csomag / blokk, amelyben deklaráltuk amely a mutató típust deklarálta Elindulás: a szülő deklarációs részének kiértékelése után, a szülő első utasítása előtt az allokátor kiértékelésekor A szülő nem ér véget, amíg a gyerek véget nem ér Függőségi kapcsolatok, befejeződés 29

Komplett taszk Ha véget ért a törzs utasításainak végrehajtása normálisan kivételes eseménnyel és nincs kivételkezelő rész vagy van, de nincs megfelelő ág benne vagy van, és a kivételkezelő ág lefutott Ha a taszk elindítása során kivétel lépett fel 30

Abnormális állapotú taszk Az abort utasítással kilőhető egy taszk akár magát is kilőheti: öngyilkos Nem túl szép módja egy taszk leállításának begin task type T( Id: Integer ); task body T is... end T; X: T(1); Y: T(2); abort X, Y; 31

Egy taszk terminál, ha komplett, és az összes tőle függő taszk terminált már abnormális állapotba jutott és törlődött a várakozási sorokból terminate utasításhoz ért, és a taszk olyan programegységtől függ, amely már komplett, és a leszármazottai termináltak már, komplettek, vagy szintén terminate utasításnál várakoznak 32

Szülő terminálása Egy szülő addig nem terminálhat, amíg az általa létrehozott taszkok nem terminálnak Miután befejezte saját utasításainak végrehajtását (azaz kompletté vált), megvárja, hogy a tőle függő taszkok is termináljanak (az end-nél várakozik) 33

Információcsere taszkok között Nonlokális (globális) változókon keresztül Nem szeretjük... Biztonságosabbá tehető különféle pragmák segítségével (Atomic és Volatile) Randevúval Ezt fogjuk sokat gyakorolni Aszimmetrikus, szinkron, pont-pont, kétirányú kommunikációt tesz lehetővé Védett egységek használatával 34

Nonlokális változón keresztül procedure P is N: Natural := 100; task type T; task body T is begin end T; A, B: T; begin end P; if N > 0 then N := N-1; end if; legfeljebb N-szer szabadna 35

Interferencia Ha a taszkok önmagukban jók De együttes viselkedésük rossz Szinkronizáció segíthet 36

Randevú Szinkronizációhoz és kommunikációhoz Egyik taszk: belépési pont (entry) és accept utasítás Másik taszk: meghívjuk a belépési pontot Aszimmetrikus Szinkron Pont-pont Kétirányú 37

Fiú és lány taszkok task Lány is entry Randi; end Lány; task body Lány is begin accept Randi; end Lány; task Fiú; task body Fiú is begin Lány.Randi; end Fiú; 38

Fiú és lány taszkok task Lány is entry Randi; end Lány; task body Lány is begin accept Randi; end Lány; task Fiú is end Fiú; task body Fiú is begin Lány.Randi; end Fiú; 39

Pont-pont kapcsolat Egy randevúban mindig két taszk vesz részt Egy fiú és egy lány Szerepek Egy taszk lehet egyszer fiú, másszor lány Nincs "broad-cast" jellegű randevú 40

Aszimmetrikus Megkülönböztetjük a hívót és a hívottat (fiú és lány) Egész másként működik a két fél A szintaxisban is kimutatható a különbség A hívó ismeri a hívottat, de fordítva nem 41

Az accept törzse A randevú az accept utasítás végrehajtásából áll Ez alatt a két taszk együtt van A fogadó taszk hajtja végre az accept-et Az accept-nek törzse is lehet, egy utasítássorozat 42

Huzamosabb randevú task Lány is entry Randi; end Lány; task body Lány is begin accept Randi do end; end Lány; task Fiú; task body Fiú is begin Lány.Randi; end Fiú; 43

Szinkronitás A randevú akkor jön létre, amikor mindketten akarják Bevárják egymást a folyamatok az információcseréhez Az aszinkron kommunikációt le kell programozni, ha szükség van rá 44

A fiú bevárja a lányt (1) Fiú Lány Lány.Randi; accept Randi do end Randi; 45

A fiú bevárja a lányt (2) Fiú Lány Lány.Randi; accept Randi do end Randi; 46

A fiú bevárja a lányt (3) Fiú Lány Lány.Randi; accept Randi do end Randi; 47

A fiú bevárja a lányt (4) Fiú Lány Lány.Randi; accept Randi do end Randi; 48

A fiú bevárja a lányt (5) Fiú Lány Lány.Randi; accept Randi do end Randi; 49

A fiú bevárja a lányt (6) Fiú Lány Lány.Randi; accept Randi do end Randi; 50

A lány bevárja a fiút (1) Fiú Lány Lány.Randi; accept Randi do end Randi; 51

A lány bevárja a fiút (2) Fiú Lány Lány.Randi; accept Randi do end Randi; 52

A lány bevárja a fiút (3) Fiú Lány Lány.Randi; accept Randi do end Randi; 53

A lány bevárja a fiút (4) Fiú Lány Lány.Randi; accept Randi do end Randi; 54

A lány bevárja a fiút (5) Fiú Lány Lány.Randi; accept Randi do end Randi; 55

A lány bevárja a fiút (6) Fiú Lány Lány.Randi; accept Randi do end Randi; 56

Kommunikáció A randevúban információt cserélhetnek a taszkok Paramétereken keresztül Entry: formális paraméterek Hívás: aktuális paraméterek A kommunikáció kétirányú lehet, a paraméterek módja szerint (in, out, in out) Az alprogramok hívására hasonlít a mechanizmus (fontos különbségek!) 57

Várakozási sor Egy entry-re több fiú is várhat egyszerre De a lány egyszerre csak eggyel randevúzik Egy entry nem olyan, mint egy alprogram, mert nem re-entráns A hívó fiúk bekerülnek egy várakozási sorba Minden entry-nek saját várakozási sora van Ha a hívott lány egy accept utasításhoz ér, a legrégebben várakozóval randevúzik (vagy, ha nincs várakozó, akkor maga kezd várni) 58

A belépési pontok Minden belépési ponthoz tartoznia kell legalább egy accept utasításnak a törzsben Akár több accept utasítás is lehet a törzs különböző pontjain elhelyezve (Egy hívóban több entry-hívás is lehet) Az entry várakozási sorának aktuális hossza: Count attribútum Randi Count 59

Több belépési pont is lehet task Tároló is entry Betesz( C: in Character ); entry Kivesz( C: out Character ); end Tároló; 60

Egyelemű buffer task body Tároló is Ch: Character; begin loop accept Betesz( C: in Character ) do Ch := C; end Betesz; accept Kivesz( C: out Character ) do C := Ch; end Kivesz; end loop; end Tároló; 61

Így használhatjuk task body T is Ch: Character; begin... Get(Ch); Tároló.Betesz(Ch);... Tároló.Kivesz(Ch); Put(Ch);... end T; 62

Aszinkron kommunikáció task body A is Ch: Character; begin... Get(Ch); Tároló.Betesz(Ch);... end A; task body B is Ch: Character; begin... Tároló.Kivesz(Ch); Put(Ch);... end B; 63