Mer om C programmering og cuncurrency Lars Vidar Magnusson September 23, 2011 Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 1 / 19
Oversikt Mer om C programmering 1 Mer om C programmering Funksjoner Main funksjonen Pekere 2 Mer om concurrency 3 Semaphore 4 Binary semaphore 5 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 2 / 19
Mer om C programmering Funksjoner Funksjoner En funksjon i C er den eneste byggesteinen som beskriver logikken i programmet. Bare et nivå med funksjoner i.e. ingen barn. Finnes ikke medlemsmetoder. Alle funksjoner er definert globalt Alle funksjoner har en header og en body. // En mal f o r en f u n k s j o n s h e a d e r RETURTYPE NAVN ( ARG1TYPE ARG1NAVN,... ) ; // En mal f o r en f u n k s j o n med baade header og kropp RETURTYPE NAVN ( ARG1TYPE ARG1NAVN,... ) return RETURTYPE; // Bare h v i s RETURTYPE i k k e e r v o i d Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 3 / 19
Main funksjonen Mer om C programmering Main funksjonen Alle programmer må han en main funksjon, siden det er der kjøringen av programmet starter. // Main f u n k s j o n uten argumenter i n t main ( ) ; // Main f u n k s j o n med argumenter. i n t main ( i n t argc, const char argv [ ] ) ; Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 4 / 19
Mer om C programmering Pekere Pekere En peker er en spesiell datatype i C som alltid inneholder en adresse. Størrelse på enten 64 eller 32 bit (avhengig av arkitektur og OS) Kan peke på hva som helst, uavhengig av størrelse, siden pekeren bare er en adresse. Kan også peke på en peker. Har to operatorer * benyttes både til å angi at en variabel er en peker og for å se på verdien til hva enn pekeren peker på. & benyttes til å hente ut adressen til hva enn det står foran i.e. den returnerer en peker. Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 5 / 19
Oversikt Mer om concurrency 1 Mer om C programmering 2 Mer om concurrency Mekanismer for concurrency 3 Semaphore 4 Binary semaphore 5 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 6 / 19
Mer om concurrency Mekanismer for concurrency Mekanismer for concurrency Forrige gang snakket vi om hva concurrency er. I dag skal vi snakke om hvilke mekanismer som er vanlige for å oppnå concurrency. Semaphore - Et heltall som benyttes til kommunikasjon mellom prosesser. Binary semaphore - Som en semaphore, men bare med verdi på enten 1 eller 0. Mutex - Minner om binary semaphore, men må avsluttes av samme prosess som starter den. Condition variable - En datatype som brukes til å låse til et spesielt forhold blir sant. Monitor - En abstrakt datatype som kan brukes til å sette critical sections Event flag - Et word som kan benyttes bitwise for å kommunisere Mailbox/messages - En kommunikasjonslinje Spinlocks - mutual exclusion med busy-wait mekanisme. Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 7 / 19
Oversikt Semaphore 1 Mer om C programmering 2 Mer om concurrency 3 Semaphore Beskrivelse Mutual exclusion med semaphore 4 Binary semaphore 5 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 8 / 19
Semaphore Beskrivelse Beskrivelse En semaphore kan sees som en signal mekanisme mellom prosser (Dijkstra) Et heltall som typisk indikerer hvor mange prosesser kan aksessere uten å låse. Låser når verdien blir negativ. Har tre definerte operasjoner initialize setter initialverdi. semwait minker verdien. Hvis den blir negativ blir prosessen låst. semsignal øker verdien. Hvis den blir negativ eller 0 så blir en av prosessene som venter satt i gang. Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 9 / 19
Semaphore En enkel implementasjon av en semaphore i C s t r u c t semaphore i n t count ; queuetype queue ; ; Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 10 / 19
Semaphore Her er et enkelt eksempel på operasjonene som er definert for en semaphore. void semwait ( semaphore s ) s. count ; i f ( s. count < 0) // B l o k k e r og p l a s s e r p r o s e s s e n i koen ; void s e msignal ( semaphore s ) s. count++; i f ( s. count <= 0) // F j e r n e en p r o s e s s f r a koen og s e t t den t i l r e a d y Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 11 / 19
Semaphore Mutual exclusion med semaphore Mutual exclusion med semaphore Man kan benytte en semaphore til å sørge for mutual exclusion. semaphore s =. count=1 ; void P( ) while (TRUE) semwait ( s ) ; // C r i t i c a l s e c t i o n s e msignal ( s ) ; // Non c r i t i c a l s e c t i o n Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 12 / 19
Oversikt Binary semaphore 1 Mer om C programmering 2 Mer om concurrency 3 Semaphore 4 Binary semaphore Beskrivelse 5 Spinlocks Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 13 / 19
Binary semaphore Beskrivelse Beskrivelse Ligner på en vanlig semaphore, men kan bare ha to verdier. Kan brukes der to verdier er nok (låst, ikke låst) Minner også om en mutex Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 14 / 19
Binary semaphore En enkel implementasjon av en binary semaphore i C s t r u c t b i n a r y s e m a p h o r e enum zero, one v a l u e ; queuetype queue ; ; Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 15 / 19
Binary semaphore Her er et enkelt eksempel på operasjonene som er definert for en semaphore. void semwait ( b i n a r y s e m a p h o r e s ) i f ( s. v a l u e == 1) s. v a l u e = 0 ; e l s e // B l o k k e r og p l a s s e r p r o s e s s e n i koen ; void s e msignal ( b i n a r y s e m a p h o r e s ) i f ( s. queue. i s e m p t y ( ) ) s. v a l u e = 1 ; e l s e // F j e r n e en p r o s e s s f r a koen og s e t t den t i l r e a d y Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 16 / 19
Oversikt Spinlocks 1 Mer om C programmering 2 Mer om concurrency 3 Semaphore 4 Binary semaphore 5 Spinlocks Beskrivelse Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 17 / 19
Spinlocks Beskrivelse Beskrivelse En enkel mekanisme som bruker busy-wait metoden. Bygd rundt et heltall som har verdien 0 (ledig) eller 1 (opptatt) Egner seg best når ventetiden er kort. Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 18 / 19
Spinlocks av hvordan en spinlock fungerer s t r u c t s p i n l o c k enum zero, one v a l u e ; void l o c k ( s p i n l o c k s ) while ( s. v a l u e > 0) ; s. v a l u e = 1 ; void u n l o c k ( s p i n l o c k s ) s. v a l u e = 0 ; Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 19 / 19