Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilOliver Špringl
1
13AMP 6. přednáška Ing. Martin Molhanec, CSc.
2
Co jsme se naučili naposled Synchronizace procesů Synchronizace procesů Producent-Konzument Producent-Konzument Posílání zpráv Posílání zpráv MAILBOX MAILBOX
3
Podpora v programových jazycích PROČ ? Bezpečnost Bezpečnost Nelze chybovat. Například na nějaký příkaz zapomenout. Srozumitelnost Protože je méně příkazů, je programový kód snáze pochopitelný. Opět je výsledkem méně chyb. Srozumitelnost Protože je méně příkazů, je programový kód snáze pochopitelný. Opět je výsledkem méně chyb.
4
Bez podpory Standardní Pascal, C, C++ Standardní Pascal, C, C++ Implementace pomocí stávajících prostředků (procedury, funkce). Nejčastější řešení, nemá ovšem mnohé výhody a eleganci. PROTO Vznik speciálních jazyků, které mají na programování paralelismu speciální jazykovou podporu!
5
S podporou Speciální a moderní jazyky, například Ada, Modula, Java, … Speciální a moderní jazyky, například Ada, Modula, Java, … Tyto jazyky obsahují speciální jazykové konstrukce na podporu programování paralelismu (semafory, monitory, …)
6
Druhy podpory Vytváření úloh (procesů, tásků) Vytváření úloh (procesů, tásků) Práce s kritickou sekcí (semafory, monitory nebo podobné prostředky) Práce s kritickou sekcí (semafory, monitory nebo podobné prostředky) Synchronizace Synchronizace Zprávy Zprávy
7
Podpora vytváření procesů Programové konstrukce, které dovolí definovat, které části programového kódu se budou vykonávat současně (paralelně). Programové konstrukce, které dovolí definovat, které části programového kódu se budou vykonávat současně (paralelně).
8
FORK, JOIN prikaz_1; FORK L1; prikaz_2; GOTO L2; L1: prikaz_3; L2: JOIN 2; prikaz_4; prikaz_1; prikaz_2; prikaz_3; prikaz_4; POZOR: Tento FORK není totožný s fork z UNIXu!
9
COBEGIN prikaz_1; COBEGINprikaz_2;prikaz_3;COEND; prikaz_4; prikaz_1; prikaz_2; prikaz_3; prikaz_4; POZOR: příkaz_2 i přikaz_3 mohou být procedury!
10
Deklarace TASK nebo … Programovací jazyk dovoluje definovat procedury nebo funkce, které se budou vykonávat současně (nahrazuje to naší „registraci“). Programovací jazyk dovoluje definovat procedury nebo funkce, které se budou vykonávat současně (nahrazuje to naší „registraci“). Například (jazyk podobný Pascalu): Například (jazyk podobný Pascalu): procedure X; task; begin … … end; end; POZOR: musíme se nějak postarat o jejich spuštění!
11
Deklarace TASK nebo … Statická definice Statická definice V programu neexistuje hlavní program, všechny definované tasky se spustí současně. Program se ukončí až se všechny tasky ukončí. Dynamická definice Dynamická definice Program má hlavní program, který většinou vykonává nějakou inicializaci. Existuje příkaz pro spuštění všech nebo jednotlivých tasků.
12
Podpora práce s kritickou oblastí Programové konstrukty, které umožňují ošetřit problém současného přístupu úloh (tásků) ke sdíleným prostředkům. Například paměti, periferiím, …. Programové konstrukty, které umožňují ošetřit problém současného přístupu úloh (tásků) ke sdíleným prostředkům. Například paměti, periferiím, …. Mimo samotného SEMAFORU, se využívají konstrukce vyššího typu: Kritická oblast a Monitor Mimo samotného SEMAFORU, se využívají konstrukce vyššího typu: Kritická oblast a Monitor
13
Kritická oblast (Hansen, Hoare - 1972) { jazyk podobný Pascalu } Var X: shared integer; {sdílený zdroj - paměť} … Region X do {kritická sekce} Begin X := 25; End; POZOR: S proměnnou X je možné pracovat pouze v bloku REGION X! Přístup do bloku hlídá semafor!
14
Kritická oblast (Hansen, Hoare - 1972) Přepsáno pomocí semaforu! Přepsáno pomocí semaforu! Var X: integer; Var X_sem: semafor; Init(X_sem, 1); …Wait(X_sem); X := 25; X := 25;Signal(X_sem); NEVÝHODA: Musíme si vytvořit vlastní semafor a pracovat s nim. Nikdo nehlídá, kde se s proměnnou X pracuje!
15
MONITOR (využívají jazyky: Modula II a Ada) Monitor X{jazyk podobný Pascalu} Var Z: integer; Procedure PLUS; begin Z := Z+1; end; Procedure MINUS; begin Z := Z-1; end; End; Monitor je spojení sdílených zdrojů a procedur nebo funkcí, které s nimi pracují! Syntaxí se podobá definici třídy! Proměnná Z je dostupná pouze procedurám nebo funkcím v monitoru!
16
MONITOR Přepsáno pomocí semaforu! Var Z: integer; Var X_sem: semafor; Init(X_sem, 1); … Procedure PLUS; Begin Wait(X_sem); Z := Z+1; Signal(X_sem); End; Procedure MINUS; Begin Wait(X_sem); Z:=-1;Signal(X_sem); End; Jak je vidět monitor vkládá kód všech procedur a funkcí mezi volání Wait a Signal automaticky vytvořeného semaforu příslušného k danému monitoru!
17
Podpora synchronizace Základní podpora synchronizace je založen na principu tzv. randezvous čili schůzce – setkání. Základní podpora synchronizace je založen na principu tzv. randezvous čili schůzce – setkání. Tento princip obsahuje například jazyk ADA. Tento princip obsahuje například jazyk ADA.
18
Synchronizace (obecně) Process A; Var X: data; …Begin… B ! X; …End; Process B; Var Y: data; …Begin… A ? Y; …End; X Přijmy z procesu A data a ulož je do Y. Data z X pošli procesu B.
19
Synchronizace (ADA) process A; var X: data; begin…B.send(X);…end; process B; var Y: data; begin… accept send(in X: data); Y := X; end;…end; X Přijmy z procesu A data a ulož je do Y. Data z X pošli procesu B. POZOR: Tento způsob nám umožňuje definovat tzv. channel s názvem send!
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.