Tråder og concurrency i Linux Lars Vidar Magnusson September 27, 2011 Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 1 / 14
Oversikt Tråder i Linux 1 Tråder i Linux Repetisjon om tråder Repetisjon om Pthreads Pthreads API 2 Pthread mutex 3 Atomic operations 4 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 2 / 14
Tråder i Linux Repetisjon om tråder Repetisjon om tråder Linux kjernen skiller ikke mellom tråder og prosesser. Prosesser kan grupperes sammen slik at de kan dele operere i det samme minnet. Nye prosesser lages med clone. Kan benytte Pthreads for enklere lage tråder (prosesser). Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 3 / 14
Tråder i Linux Repetisjon om Pthreads Repetisjon om Pthreads Pthreads er en del av POSIX (Portable Operating Systems Interface) som er en standard API for UNIX lignende OS. Pthreads tilbyr et enklere interface enn clone(). Samme API på kryss av platform. Ikke i standard manpages Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 4 / 14
Pthreads API Tråder i Linux Pthreads API Det trengs to systemkall for å bruke Pthreads. #i n c l u d e <p t h r e a d. h> i n t p t h r e a d c r e a t e ( p t h r e a d t thread, const p t h r e a d a t t r t a t t r, void ( s t a r t r o u t i n e ) ( void ), void arg ) ; i n t p t h r e a d j o i n ( p t h r e a d t thread, void r e t v a l ) ; Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 5 / 14
Oversikt Pthread mutex 1 Tråder i Linux 2 Pthread mutex Pthreads mutex API 3 Atomic operations 4 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 6 / 14
Pthread mutex Pthreads API har også støtte for mutex operasjoner. Ligner en binary semaphore Ikke i standard manpages Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 7 / 14
Pthreads mutex API Pthread mutex Pthreads mutex API En pthreads mutex opereres med fire funksjoner. #i n c l u d e <p t h r e a d. h> i n t p t h r e a d m u t e x i n i t ( p t h r e a d m u t e x t mutex, p t h r e a d m u t e x a t t r t a t t r ) ; i n t p t h r e a d m u t e x d e s t r o y ( p t h r e a d m u t e x t mutex ) ; i n t p t h r e a d m u t e x l o c k ( p t h r e a d m u t e x t mutex ) ; i n t p t h r e a d m u t e x t r y l o c k ( p t h r e a d m u t e x t mutex ) ; Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 8 / 14
Oversikt Atomic operations 1 Tråder i Linux 2 Pthread mutex 3 Atomic operations Atomic integers 4 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 9 / 14
Atomic operations En atomic operasjon er en operasjon som ikke kan avbrytes. Kan brukes for å unngå race conditions Inneholder automatisk sikring mot aksess fra flere prosessorer To typer Integer - Opererer med et heltall (32/64 bit) Bitmap - Opererer med en bit i en serie av bits. Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 10 / 14
Atomic integers Atomic operations Atomic integers Under er et utvalg av tilgjengelige operasjoner på atomic integers. ATOMIC INIT ( i n t i ) i n t a t o m i c r e a d ( a t o m i c t v ) ; void a t o m i c s e t ( a t o m i c t v, i n t i ) ; void atomic add ( i n t i, a t o m i c t v ) ; void a t o m i c s u b ( i n t i, a t o m i c t v ) ; Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 11 / 14
Oversikt Spinlocks 1 Tråder i Linux 2 Pthread mutex 3 Atomic operations 4 Spinlocks Bruke spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 12 / 14
Spinlocks Enkel mekanisme for å sørge for mutual exclusion fra critical sections. Bruker busy-wait når en prosess må vente Enkel men kan skade ytelsen. Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 13 / 14
Bruke spinlocks Spinlocks Bruke spinlocks Spinlocks settes opp med et funksjonskall. DEFINE SPINLOCK ( varname ) s p i n l o c k (&varname ) ; // C r i t i c a l s e c t i o n s p i n u n l o c k (&varname ) ; Lars Vidar Magnusson () Forelesning i Operativsystemer 27.09.2011 September 27, 2011 14 / 14