Mer om C programmering og cuncurrency



Like dokumenter
Tråder og concurrency i Linux

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Concurrency. Lars Vidar Magnusson. September 20, Lars Vidar Magnusson () Forelesning i Operativsystemer September 20, / 17

Forslag til løsning på oppgavesett for uke 40

Kapittel 1 En oversikt over C-språket

GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Del 1 En oversikt over C-programmering

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Oppsummering av IN147 siste del Operativsystemer Parallellisering Veien videre

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Deadlocks og mer om concurrencymekanismer

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Lars Vidar Magnusson. October 11, Lars Vidar Magnusson () Forelesning i Operativsystemer October 11, / 28

Nybegynnerkurs i C. Øyvind Grønnesby. 14. oktober Introduksjon Typer Operatorer Kontrollstrukturer Pekere Makroer Lenker

2. Pekere og referanser.

Oversikt over IN147(A):

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

Programmeringsspråket C

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Del 4 Noen spesielle C-elementer

INF2810: Funksjonell Programmering. Muterbare data

IN 147 Program og maskinvare

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Pekere og referanser.

Oppgave 1 - Linux kommandolinje (%)

Løsningsforslag for eksamensoppgave, våren 2004

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

MPIntroduksjon Et eksempel

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Objekter og referanser

Del 2 Tabeller, arrays, strenger

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

En prosess kan sees på som et stykke arbeid som skal utføres på datamaskinen. Ofte vil det være flere prosesser/tråder på datamaskinen samtidig.

Oversikt. Historie Struktur Moderne UNIX systemer Moderne UNIX kernel struktur 1 UNIX. 2 Linux. 3 Process. 4 Process models

INF1000: Forelesning 4. Mer om arrayer Metoder

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Programmeringsspråket C Del 2. Hans Petter Taugbøl Kragset

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Objektorientert programmering i Python

INF1060 Introduksjon til operativsystem og datakommunikasjon

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Introduksjon til objektorientert programmering

Eksempler på ikke-blokkerende systemkall:

INF1000 (Uke 5) Mer om løkker, arrayer og metoder

Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Tråder Repetisjon. 9. og 13. mai Tråder

Java-kurs. Andreas Knudsen Nils Grimsmo 9th October 2003

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF Notater. Veronika Heimsbakk 10. juni 2012

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

Repetisjon - Modul 1

Minnehåndtering. Lars Vidar Magnusson. October 4, Lars Vidar Magnusson () Forelesning i Operativsystemer October 4, / 20

En oppsummering (og litt som står igjen)

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

AlgDat 10. Forelesning 2. Gunnar Misund

Programmeringsspråket C Del 3

Dagens tema C, adresser og pekere

Programmeringsspråket C Del 2

TDT4102 Prosedyreog objektorientert programmering Vår 2016

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Forelesning III Kap 8 & 7; Dagsplan. Gjenbruk. Condition synchronization. Gjennomgående eksempler. Kode: Design: Verktøy

Oversikt. Beskrivelse Bash. 1 UNIX shell. 2 Kommandolinje som brukergrensesnitt. 3 Input og output. 4 Bash builtins. 5 Linux utilities.

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

Løsningsforslag til eksamen i IN147(A)

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

TDT4110 IT Grunnkurs Høst 2015

EKSAMEN. Operativsystemer. 1. Læreboken "A Practical Guide to Red Hat Linux" av Mark Sobell 2. Maks. tre A-4 ark med selvskrevne notater.

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Transkript:

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