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