Osnova prednášky  Synchronizácia v Jave  Príklady riešenia synchronizačných nástrojov  Solaris  Windows XP  Linux  Pthreads Operating System Concepts 6.1 ©2009 Synchronizácia v Jave  Synchronizované príkazy 

Download Report

Transcript Osnova prednášky  Synchronizácia v Jave  Príklady riešenia synchronizačných nástrojov  Solaris  Windows XP  Linux  Pthreads Operating System Concepts 6.1 ©2009 Synchronizácia v Jave  Synchronizované príkazy 

Osnova prednášky
 Synchronizácia v Jave
 Príklady riešenia synchronizačných nástrojov
 Solaris
 Windows XP
 Linux
 Pthreads
Operating System Concepts
6.1
©2009
Synchronizácia v Jave
 Synchronizované príkazy
 – metóda wait
 – metóda notify
 Násobné notifikácie
 Synchronizácia blokov programov
 Java a semafory
 Java a monitory
Operating System Concepts
6.2
©2009
Java, synchronizovaný príklad
 Veľmi podobný princíp monitorom
 S každým objektom sa druží zámok
 Pokiaľ metóda, ktorá je definovaná v objekte, NIE JE označená
ako synchronizovaná, zámok sa ignoruje
 Pokiaľ metóda, ktorá je definovaná v objekte, JE označená ako
synchronizovaná, volajúci požaduje zámok exkluzívne získať a
pokiaľ zámok už niekto drží, volajúci sa umiestni do fronty na
zámok, a plánovač JVM ho vyberie na vykonávanie podľa svojej
vlastnej politiky
 Je tu typicky FIFO režim
 Zámok sa odomyká pri výstupe procesu (vlákna) zo
synchronizovanej metódy
Operating System Concepts
6.3
©2009
Java, metódy wait() a notify()
 Ak vlákno volá metódu wait( ), vykoná sa:

- vlákno uvoľní držaný zámok objektu

- vlákno prejde do stavu blokované

- vlákno sa umiestni do množiny čakajúcich – do wait set
 Ak vlákno volá metódu notify( ) , vykoná sa:

- vyberie sa niektoré vlákno T z množiny wait set

- vybrané vlákno T sa presunie do množiny pripravených – entry set

- označí vlákno T ako pripravené – runnable

- T teraz opäť môže začať súperiť o zámok
 Zmyslom je zabrániť uviaznutiu
Operating System Concepts
6.4
©2009
Java, násobné notifikácie
 notify() vyberie niektoré vlákno z wait set
- nemusí to byť práve to vlákno, ktoré sme chceli, aby sa vybralo
 Java neumožňuje špecifikovať, ktoré vlákno sa má vybrať
 notifyAll()
- vyberie všetky vlákna z wait set a
- umiestni ich do entry set
To vláknam umožňuje, aby sa rozhodli, ktoré bude pokračovať vo
vykonávaní
 notify all() je konzervatívna stratégia ktorá najlepšie pracuje práve
vtedy, keď vo wait set sa môže nachádzať viac procesov
Operating System Concepts
6.5
©2009
Synchronizácia blokov programov
 Doba zamknutia (Scope of lock) je časový interval medzi
získaním a uvoľnením zámku
 blok – časť programu, v žiadnom prípade však nie celá metóda,
sa môže deklarovať ako synchronizovaný
- realizácia blokov je vcelku kratšia ako realizácia metódy
Operating System Concepts
6.6
©2009
Java a semafory
 Java semafory nepodporuje.
 Semafor je ale možné skonštruovať pomocou synchronizačných
mechanizmov podporovaných Javou, napr. – nasledujúci úsek programu
Operating System Concepts
6.7
©2009
Operating System Concepts
6.8
©2009
Príklady riešenia synchronizačných nástrojov
 Solaris
 Windows XP
 Linux
 Pthreads
Operating System Concepts
6.9
©2009
Solaris, synchronizácia
 Čo vie Solaris:
- výpočty v reálnom čase
- viacero vlákien
- viacero procesov
 Implementuje širšiu škálu zámkov (lock) s cieľom podporovať:
- multitasking,
- multivláknovanie (multithreading) vrátane real-time vlákien, a
- multiprocessing
Operating System Concepts
6.10
©2009
Solaris, synchronizácia
Synchronizačné nástroje, ktoré používa:
 Adaptívne mutexy – ochranu dát pre krátke segmenty kódu, (pre krátke
kritické sekcie) podporujú semafory – adaptívne mutexy
Viac procesorov – štartuje ako štandardný semafor, t.j. ako cyklický zámok
(spinlocks)
Jeden procesor – ako pre viac procesorov
 Podmienkové premenné – pre dlhé segmenty kódu (dlhé kritické sekcie)
ponúka monitory s podmienkovými premennými a zámky typu readerswriters (čitateľ –pisateľ zámky)
 Rafinované semafory – pre dlhé segmenty kódu
 Čitateľ – pisateľ zámky – dáta ku ktorým sa zvyčajne pristupuje iba readonly spôsobom
 Turniket – je frontová štruktúra obsahujúca vlákna blokované na zámok.
Solaris2 používa turniket na určenie poradia frontu vlákien čakajúcich na
získanie buď adaptívneho mutexu alebo čitateľ-pisateľ zámku.
Operating System Concepts
6.11
©2009
Windows XP, synchronizácia

Čo vie Windows:
- výpočty v reálnom čase
- viacero vlákien
- viacero procesov

Synchronizačné nástroje ktoré poskytuje:
- 1 procesor – maskovanie prerušení
- viac procesorov:
- V jadre – cyklické zámky
- Mimo jadra – dispečerov objektov

Dispečer objektu
- mutex
- semafor
- udalosť

Udalosť – druh dispečerského objektu, ktorý sa správa podobne ako podmienkové
premenné.
Operating System Concepts
6.12
©2009
Windows XP, synchronizácia
 multivláknové jadro – s podporou real-time apôikácií a multiprocesingu
 Na jednoprocesorovom stroji chráni globálne zdroje maskovaním prerušení.
 V multiprocesorových konfiguráciách používa spin-locks (pre krátke
kritické sekcie)
 Podporujú sa dispečerské objekty, ktoré fungujú de facto ako všeobecné
semafory alebo binárne semafory (mutexy)
 Dispečerské objekty môžu podporovať events (udalosti). Events pracujú
podobne ako monitory s podmienkovými premennými.
Operating System Concepts
6.13
©2009
Linux, synchronizácia
 Linux:

Pred jadrovou verziou 2.6, zakazoval prerušenia pre implementáciu
krátkych kritických sekcií

Verzie 2.6 a neskoršie, úplne preemptívne
 Linux poskytuje:

semafory

cyklické zámky (spin locks)
Operating System Concepts
6.14
©2009
Linux, synchronizácia
 Krátke kritické sekcie na monoprocesore sa riešia zamaskovaním
prerušení
 Multiprocesing sa podporuje pomocou cyklických zámkov
 Dlhé kritické sekcie (v jadre) riešia semafory
Operating System Concepts
6.15
©2009
Synchronizácia vlákien Pthreads
 Na operačnom systéme nezávislé API implementované vo
viacerých OS
 Podporujú sa (poskytuje):

mutex locks

Binárne semafory

Monitory s podmienkovými premennými
 Neportabilné rozšírenia podporujú:

Zámky čítacích a zapisovacích operácií

spin locks (cyklické zámky)
Operating System Concepts
6.16
©2009