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

Like dokumenter
Eksempler på ikke-blokkerende systemkall:

Kort notat om parallellstyring IN147

Tråder og concurrency i Linux

Oppgave 1 - Linux kommandolinje (%)

Deadlocks og mer om concurrencymekanismer

INF1010 Repetisjonskurs i tråder

Mer om C programmering og cuncurrency

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

Eksamen DAT 103. Oppgave 2. Kandidatnr.: 145 1) B 2) B 3) A 4) A 5) D 6) C 7) B 8) A 9) A 10) D

IN1010 våren Repetisjon av tråder. 15. mai 2018

HØGSKOLEN I SØR-TRØNDELAG

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.

INF1010 Tråder II 6. april 2016

Prosesser og Tråder. Ketil Danielsen January 16, en tråd arbeider sekvensielt gjennom program

HØGSKOLEN I SØR-TRØNDELAG

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Scheduling og prosesshåndtering

Stein Gjessing. Institutt for informatikk. Universitetet i Oslo. Institutt for informatikk

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

Begrepet kritisk region er sentralt i forbindelse med datamaskinsystemer.

Innhold. Introduksjon til parallelle datamaskiner. Ulike typer parallelle arkitekturer. Prinsipper for synkronisering av felles hukommelse

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

Faglig kontakt under eksamen: Orestis Gkorgkas

Operativsystemer, prosesser og tråder

2 Om statiske variable/konstanter og statiske metoder.

INF1010 Tråder J. Marit Nybakken Motivasjon. Å lage en tråd

Skisse til løsning for eksamensoppgave i TDT4186 Operativsystemer

UNIVERSITETET I OSLO

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

oppgavesett 4 INF1060 H16 Hans Petter Taugbøl Kragset Øystein Dale Christian Resell 27. september 2016 Institutt for informatikk, UiO

Threads Threads (tråder) threads vs prosesser threads vs prosesser Definisjoner av

DAT kandidatnummer: 142

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

Oppsummering av IN147 siste del Operativsystemer Parallellisering Veien videre

Operativsystemer og grensesnitt

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Side 1 av 11, prosesser, tråder, synkronisering, V. Holmstedt, HiO 2006

Tildeling av minne til prosesser

Samtidige prosesser. Prosessor modus. Hvordan kan OS effektivt kontrollere brukerprosesser? Hvordan kan OS. kontrollere brukerprosesser?

Eksamensinformasjon. Linux kommandolinje. Linux kommandolinje. Eksamensinformasjon. Fakultet: Teknologi, kunst og design. Tid: 3 t.

Synkronisering II. Kapittel 7. Betingelse oppfylt (0) liste. tråd-deskriptor. venteliste. tråd-deskriptor. tråd-deskriptor.

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

HØGSKOLEN I SØR-TRØNDELAG

INF2270. Input / Output (I/O)

INF2810: Funksjonell Programmering. Muterbare data

INF3140 Modeller for parallellitet INF3140/4140: Låser og Barrierer

D: Ingen trykte eller håndskrevne hjelpemiddel tillatt. Bestemt, enkel kalkulator tillatt.

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Litt om Javas class-filer og byte-kode

Tildeling av minne til prosesser

2 Om statiske variable/konstanter og statiske metoder.

Eksamen i TTK4145 Sanntidsprogrammering 12. august

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

Intel Core i7. Omid Mirmotahari 4

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

IN1020. Datamaskinarkitektur

TDT4258 Eksamen vår 2013

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Plan for dagen. Kræsj-kurs i sanntidsprogrammering. Måter å tenke på. Programmering intro. Tråder & synkronisering

IN våren 2018 Tirsdag 16. januar

IN våren 2019 Onsdag 16. januar

Del 1 En oversikt over C-programmering

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring

EKSAMENSOPPGAVE I FAG TDT4186 OPERATIVSYSTEMER. Faglig kontakt under eksamen: Svein Erik Bratsberg og Arvid Staupe

EKSAMEN. Operativsystemer. Kontroller at oppgaven er komplett før du begynner å besvare spørsmålene.

Forslag til løsning på oppgavesett for uke 40

INF1000 oppgaver til uke 38 (17 sep 23 sep)

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

Fakultet for informasjonsteknologi, Løsning på kontinuasjon i TDT4186 Operativsystemer August 2005,

INF våren 2017

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

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

INF2270. Input / Output (I/O)

4/5 store parallelle maskiner /4 felles hukommelse in 147, våren 1999 parallelle datamaskiner 1. når tema pensum.

MPIntroduksjon Et eksempel

Generiske mekanismer i statisk typede programmeringsspråk

Singletasking OS. Device minne Skjerm minne. Brukerprogram. Brukerdata/heap. Stack. Basis for flerprosess-systemer.

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

Definisjon av prosess

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

Del 4 Noen spesielle C-elementer

Dagens program. Sanntidsprogrammering med Linux. Embedded Linux: Begrensninger. Hvorfor Linux?

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

! Ytelsen til I/O- systemer avhenger av flere faktorer: ! De to viktigste parametrene for ytelse til I/O er:

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

Programmering Høst 2017

Liste som abstrakt konsept/datatype

INF2440 Uke 6, v2017. Arne Maus PSE, Inst. for informatikk

Oppgave 1 JK-flip-flop (Total vekt 20%)

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

Intel Core i7. Omid Mirmotahari 4

INF1000: Forelesning 7

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

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

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Oppgave 1. Sekvenser (20%)

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

Transkript:

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere Hardware-støttet alle softwareløsninger innebærer mange instruksjoner i tillegg til busy-waiting, som koster CPU-tid. I praksis brukes idag hardwarestøttede løsninger Kan lages med en egen instruksjon testandset (TSL). Tester og setter en verdi i samme maskininstruksjon. Låser minne-bussen slik at ikke andre CPUer kan endre eller lese verdien GetMutex() kan da implementeres med: GetMutex(lock) { while(testandset(lock)) {} } En context switch kan ikke ødelegge siden testen og endringen av lock skjer i samme instruksjon.

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere En semafor er en integer S som signaliserer om en ressurs er tilgjengelig. To operasjoner kan gjøres på en semafor: Signal(S): S = S + 1; # Kalles ofte Up(), V Wait(S): while(s <= 0) {}; S = S - 1; # Kalles ofte Down(), Signal og wait må være uninterruptible og implementeres med hardwarestøtte eller i kjernen for å være atomiske(umulige å avbryte).

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere Semafor og Binær semafor S = 0 eller 1 (som lock) (initialiseres til 1) Teller semafor S vilkårlig heltall (initialiseres til antall ressurser) Em semafor initialisert til S=1 kalles ofte en : Kan da brukes slik til å takle et kritisk avsnitt: Wait(S); KritiskAvsnitt(); Signal(S);

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere Implementasjon av semafor i OS Hvis en semafor implementeres i OS kan busy waiting unngås. Signal(S){ S = S + 1; if(s <= 0){ wakeup(prosess); # Sett igang neste prosess fra venteliste } } Wait(S){ S = S - 1; if(s < 0){ block(prosess); # Legg prosess i venteliste } }

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere Anta at semaforen S brukes til å beskytte en felles ressurs (variabel eller lignende) i et kritisk avsnitt. Prosess A og B må da kall Wait() før og Signal() etter kritisk avsnitt. PA A1 A2 A3 Wait(S) K1 K2 K3 Signal(S) A4 PB-kode B1 Wait(S) K1 K2 K3 Signal(S) B2 B3 B4

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere A B S B1 1 Wait(S) 0 K1 0 A1 = Context Switch 0 A2 0 A3 0 Wait(S) OS legger A i kø -1 Context Switch = K2-1 K3-1 Signal(S) 0 (A ut av kø) B2 0 B3 0 B4 0 K1 = Context Switch 0 K2 0 K3 0 Signal(S) 1 A4 1

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere til å synkronisere Anta prosess B (PB) må vente til prosess A (PA) er ferdig med noe i sin kode først da kan den kan gå videre (med kodelinje B2 i eksempelet). PA A1 A2 A3 Signal(S) A4 PB-kode B1 Wait(S) B2 B3 B4 Med en semafor S initialisert til 0, kan de da synkroniseres som følger:

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere A B S A1 0 A2 0 = B1 0 Wait(S) -1 A3 = -1 Signal(S) 0 A4 0 = B2 0 B3 0

Hardware-støttet Semafor og Implementasjon av semafor i OS til å synkronisere A B S A1 0 A2 0 A3 0 Signal(S) 1 A4 1 = B1 1 Wait(S) 0 B2 0 B3 0

Låse-mekanismer brukt i Linux-kjernen Monitorer og monitor av metode Message passing Låse-mekanismer brukt i Linux-kjernen Linux-kjernen kan selv skru av og på interrupts for å sikre at korte kode-biter ikke blir avbrutt. Flere CPUer kan samtidig kjøre kjerne-kode, derfor er låser mye i bruk for å unngå at datastrukturer aksesseres samtidig. Atomiske operasjoner Operasjonen kan ikke interruptes, eksempel: atomic_inc_and_test() Spinlocks Mest brukt. For korte avsnitt. Bruker busy waiting. Kjernen sover til semaforen blir ledig igjen om den er opptatt. Reader/Writer locks Samtidige prosesser kan lese, men bare en CPU av gangen kan skrive

Låse-mekanismer brukt i Linux-kjernen Monitorer og monitor av metode Message passing Monitorer og Monitorer er en del av et programmeringsspråk hele metoder eller kodeblokker synkroniseres Kun en monitor-metode kan kjøre av gangen Enklere for programmereren! I implementert med synchronized(objekt): public static int saldo; // Felles variabel, gir race condition public static Object lock = new Object(); // // Argumentet til synchronized må være et objekt synchronized(lock) { saldo += 1; // Synkronisert kode-blokk }

monitor Låse-mekanismer brukt i Linux-kjernen Monitorer og monitor av metode Message passing $ javap -private -c SaldoThreadS 11: getstatic #16 // Field MAX:I 14: if_icmpge 88 17: getstatic #17 // Field lock:ljava/lang/object; 20: dup 21: astore_2 22: monitorenter 23: getstatic #18 // Field saldo:i 26: iconst_1 27: iadd 28: putstatic #18 // Field saldo:i 31: aload_2 32: monitorexit 33: goto 41

Låse-mekanismer brukt i Linux-kjernen Monitorer og monitor av metode Message passing av metode En løsning på vårt problem kunne være å gjøre følgende: private static synchronized void upsaldo() { saldo++; } private static synchronized void downsaldo() { saldo--; } og bruke disse metodene istedet for å endre variabelen direkte. Da ville også koden bli threadsafe og alltid gi saldo lik null til slutt. Hvorfor er det viktig at denne metoden er static?

Message passing Låse-mekanismer brukt i Linux-kjernen Monitorer og monitor av metode Message passing Konkurrerende tråder eller prosesser synkroniseres da ved å sende signaler til hverandre. Virker også i distribuerte systemer Ulempe: ikke like effektivt som semaforer og monitorer.

Dining Philosophers Problem Dining Philosophers Problem Kriterier for at deadlock kan oppstå Mulige løsninger for deadlock Filosoftilstander: 1 tenker (uten gafler) 2 Spiser spaghetti med 2 gafler Tar opp en gaffel av gangen. Problem Programmer en filosofprosess slik at 5 prosesser kan spise og tenke i tidsrom av varierende lengde og dele ressursene (gaflene) uten at deadlock (vranglås) kan oppstå. En Applet demo kan sees på denne siden 1 1 http://www.doc.ic.ac.uk/ jnm/book/book applets/diners.html

Dining Philosophers Problem Kriterier for at deadlock kan oppstå Mulige løsninger for deadlock To eller fler prosesser venter på hverandre, ingen kommer videre. Eks. 1: P1 venter på P2, P2 venter på P3 og P3 venter på P1 (sirkulær venting) Eks. 2: med to semaforer S1 og S2, initialisert til 1: PA PB-kode Wait(S1) Wait(S2) Wait(S2) Wait(S1)...... Signal(S1) Signal(S2) Signal(S2) Signal(S1)

Dining Philosophers Problem Kriterier for at deadlock kan oppstå Mulige løsninger for deadlock Kriterier for at deadlock kan oppstå 1 Mutex: ressurser som ikke kan deles 2 En prosess kan beholde sine ressurser mens den venter på andre. 3 En prosess kan ikke tvinges til å gi opp sin ressurs (felles minne, disk, etc.) Med 1, 2 og 3 oppfylt, kan deadlock oppstå ved sirkulær venting!

Mulige løsninger for deadlock Dining Philosophers Problem Kriterier for at deadlock kan oppstå Mulige løsninger for deadlock 1 Forhindre. Internt i OS-kjernen må deadlock forhindres. Umulig å forhindre bruker-deadlock. 2 Løse opp deadlock. Generelt vanskelig. 3 Ignorere problemet (mest vanlig metode for et OS).