Operativsystem - Processkommunikation



Relevanta dokument
Operativsystem - Processkommunikation

Mekanismer. (implementation)

Synkronisering. Ordning och reda

Realtidssystem. - Semaforer, trådsynkronisering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 2

Summering av fält. Synkronisering. Summering av fält. Bounded Buffer. Bounded Buffer (get) Bounded Buffer (put)

Föreläsning 15: Parallella subrutiner. Parallellitet. Varför parallella underprogram?

Realtidssystem. - Semaforer, trådsynkronisering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Trådar och Multiprocessorer. Föreläsning 6

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Datorteknik ERIK LARSSON

Tentamen. Datorteknik och realtidssystem

Synkronisering - Semaforen. Om att vänta men inte i onödan

Exam Concurrent and Real-Time Programming

Operativsystem. Hierarkin för hårdvara läses nerifrån

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Operativsystem - Processer I

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

Några gamla tentamensuppgifter: Processer. 3. Antag givet ett system i vilket rent CPU-bundna processer med följande egenskaper exekveras.

Vad är viktigast? Sammanfattning. Processer och trådar. Processer och trådar. Flerprocessorsystem. Schemaläggning. Interprocesskommunikation.

Trådar. Aktiva objekt

Summering av fält 1.1. Synkronisering - Semaforen. Summering av fält 1.3. Summering av fält 1.2. Summering av fält 2.3 (INTE GK)

Tentamen i TDIU16 Process- och operativsystemprogrammering

Operativsystem - Processkedulering

Realtidssystem. - Dödläge - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 5

Dagens OS. Unix, Linux och Windows. Unix. Unix. En översikt av dagens OS Titt på hur de gör. Många varianter Mycket gemensamt. En del som skiljer

Deluppgift 10 Starta den första processen (3.5h förarbete, 30min kodning)

Realtidssystem. - Meddelanden och händelsehantering - EDAF85 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 4

Fö 2 TSEA81 Datorteknik och realtidssystem

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Schemaläggning Unix. Minneshantering etc. Linux. Schemaläggning av trådar (kernel threads) Detaljer. Operativsystem - Lektion 7

Operativsystem - input/output, skydd, virtualisering

Olika OS. Unix, Linux och Windows. Unix. Unix. En översikt av ett par OS. Titt på hur de gör. Många varianter. Mycket gemensamt. En del som skiljer

Objektorienterad Programkonstruktion. Föreläsning dec 2015

Examensarbete för magisterexamen 160p i datateknik

Operativsystem. Informationsteknologi sommarkurs 5p, Agenda. Slideset 7. Exempel på operativsystem. Operativsystem

Realtidssystem. - Monitorer, synkroniserade metoder - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp

Fö 4 TSEA81. Monitors and Message passing

TDDIU81. Processer och trådar. Andreas Dahlberg, Jonathan Doherty, Tony Magnusson, Patrik Ottosson, Rasmus Siljedahl

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Synkronisering. Föreläsning 8

Fö 5+6 TSEA81. Reflektion av Lab 2. clock.c (module) Real-time kernel + Real-time OS

Tentamen Lösningar EDA698 Realtidssystem

Operative system. LRU-algoritm (2 p) Svar: 7 fel. c) Optimal algoritm (2 p) Svar: 6 fel

Deluppgift 17 Processhantering: exec, sleep, exit, plist

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

DIG IN TO Dator och nätverksteknik

Flera processer. Minneshantering. Trashing kan uppstå ändå. Ersätta globalt

Tentamen. Datorteknik och realtidssystem

Concurrency Saker händer samtidigt. Process En instans av ett program

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Datorteknik ERIK LARSSON

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Hjälpmedel: Inga hjälpmedel förutom penna, suddgummi och glatt humör.

Fö 4 TSEA81. Monitors and Message passing. Condition variables - händelsevariabler

(Lösningsförslag finns sist i denna fil.)

Reservföreläsningen inställd

Översikt. Datorarkitekturer med operativsystem. Inledning. Inledning

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Realtidsstöd i Minix. En laborationrapport. Oktober 2012

Operativsystem. Innehåll. Operativsystemets funktion. Vad är ett OS? Vart hittar men ett OS? OS hanterar processorns resurser

Java: kort introduktion. Trådar. Något om mutex, Dekkers algoritm och monitorer. Javas ("inbyggda monitor") synchronized.

Trådar i Java. Johan Ånäs. Seminarieuppsats Institutionen för informationsbehandling Åbo Akademi

Fö 7 TSEA81. Scheduling

Operativsystem Lektion 1. Lärare. Schema. Kurssajten Finns på adressen. Jan Erik Moström. Set Norman

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

Fö 7: Operativsystem. Vad är ett operativsystem? Målsättning med operativsystem. Styr operativsystemet datorn?

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Karlstads Universitet, Datavetenskap 1

Lösningar till tentamen i EIT070 Datorteknik

Operativsystem (IS1350) :00-12:00

Föreläsning 7 Datastrukturer (DAT037)

syftar till att förbättra prestanda. Den kan avse något eller flera av följande mått.

Fö 8: Operativsystem II. Minneshantering. Minneshantering (1) Minneshantering (2) Minneshantering och Virtuelltminne.

Tentamen. Datorteknik och realtidssystem

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Försättsblad till skriftlig tentamen vid Linköpings Universitet Cover page for written exam at Linköping University

Tentamen. Datorteknik Y, TSEA28

Tentamen Nätverksprogrammering Lösningsförslag

En problemställning är att realisera primitiver (funktioner) som måste programmeras vid inträde i och vid utträde ur (godtyckliga) kritiska avsnitt.

Realtidssystem. - Introduktion, jämlöpande exekvering - EDA698 - Realtidssystem (Helsingborg) Elin A. Topp. Föreläsning 1

F4. programmeringsteknik och Matlab

Datorsystemteknik Föreläsning 7DAVA14

Föreläsning 3: Booleans, if, switch

1.1 Runnable och Thread

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Processer och trådar. Rasmus Cronstrand Per Jonsson Ante Wall Fabian Åberg

Tentamen vid Institutionen för Datavetenskap, Linköpings universitet

Tentamen Nätverksprogrammering Lösningsförslag

Operativsystem ID2200/06 tentamen och omtentamen :00-12:00

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Namn: (Ifylles av student) Personnummer: (Ifylles av student) Tentamensdatum: Tid: Hjälpmedel: Inga hjälpmedel

Signaler. Icke tillförlitliga signaler. Vad göra?

Operativsystem ID1200/06 (ID2200/06 6hp) Tentamen :00-18:00

Föreläsning 4. Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö

Tentamen, Distribuerade System/Programvaruarkitektur

Parallellism, återblick

Transkript:

Operativsystem - Processkommunikation Mats Björkman 2015-01-26

Innehåll Processer (föreläsning 2) Processmodell Processtillstånd Trådar Processkommunikation (föreläsning 3, den här) Semaforer Monitorer Meddelandesystem Skedulering/schemaläggning (föreläsning 4) Kriterier för en skedulerare Skeduleringsalgoritmer Operativsystem, Mats Björkman, MDH 2

Lärandemål Varför behövs processkommunikation och processynkronisering? Race condition, ömsesidigt uteslutande, kritiska avsnitt Mekanismer för kommunikation/ synkronisering Semaforer, meddelandeöverföring, delat minne Operativsystem, Mats Björkman, MDH 3

Mer begrepp Prioritet: Olika processer kan ha tilldelats olika prioritet, vilket betyder att skeduleraren tar hänsyn till detta i valet av nästa process att köra (mer i nästa föreläsning) Operativsystem, Mats Björkman, MDH 4

Förtydligande: Multitrådade kärnor Moderna OS-kärnor är oftast multitrådade, vilket betyder att flera aktiviteter kan vara på gång samtidigt i OS-kärnan Detta är en anledning till att varje process behöver en egen kernel stack, exv. kan flera processer ha systemanrop som pågår samtidigt Operativsystem, Mats Björkman, MDH 5

Multitasking=> samtidighet Wikipedia: Synchronization "In computer science, especially parallel computing, synchronization means the coordination of simultaneous threads or processes to complete a task in order to get correct runtime order and avoid unexpected race conditions." Operativsystem, Mats Björkman, MDH 6

Multitasking=> samtidighet Processer som är omedvetna om varandra: Oberoende tillämpningar Konkurrerar om samma resurser Processer medvetna om varandra: Samarbetar genom att dela resurser En process kan vara beroende av info från en annan Operativsystem, Mats Björkman, MDH 7

Processkommunikation och synkronisering Varför kommunikation och synkronisering? Odelbara resurser (ömsesidigt uteslutande) Synkronisera aktiviteter Undvika baklås (deadlock/livelock) i systemet Kommunikation mellan processer Operativsystem, Mats Björkman, MDH 8

Processkommunikation och synkronisering forts. Kommunikationsmetoder Semaforer Meddelandeöverföring Delat minne Operativsystem, Mats Björkman, MDH 9

Ömsesidigt uteslutande Det finns resurser som endast en process i taget bör få använda (exv. enkel skrivare utan egen hantering av samtidiga utskriftsjobb) Ömsesidigt uteslutande (mutual exklusion) kallas egenskapen vi vill garantera för dessa resurser Operativsystem, Mats Björkman, MDH 10

Ömsesidigt uteslutande Garantin innebär att det aldrig får finnas en risk för att mer än en process använder resursen samtidigt Operativsystem, Mats Björkman, MDH 11

Exempel ur verkligheten Ur en gammal OS-kurs i Uppsala: En enkelspårig järnvägssträcka i Anderna mellan Peru och Bolivien (sic) måste ha ett signalsystem för att garantera att max ett tåg i taget är ute på linjen Operativsystem, Mats Björkman, MDH 12

Exempel ur verkligheten Problemet uppstår förstås när det kommer tåg från båda hållen precis samtidigt Vi måste hitta en lösning som garanterar ömsesidigt uteslutande utan att resultera i baklås Operativsystem, Mats Björkman, MDH 13

Exempel ur verkligheten Lösningen skall passa att koda in i en algoritm Ofta ställs dessutom kraven att algoritmen skall vara rättvis och fri från svält Operativsystem, Mats Björkman, MDH 14

Kritiskt avsnitt En typisk mekanism för att åstadkomma ömsesidigt uteslutande i kod är kritiska avsnitt (critical region el. critical section) Kritiska avsnitt är kodavsnitt som bara en process i taget får exekvera i Exempel: Koden som exekveras för att skriva ut på skrivaren Operativsystem, Mats Björkman, MDH 15

Ömsesidigt uteslutande Exempel utan kritiskt avsnitt: Process A Process B Börjar skriva ut ett dokument på skrivaren. Blir avbruten av process B som har högre prioritet. Avbryter A och skriver ut sitt dokument. Blir klar och avslutar. Fortsätter utskriften av det första dokumentet. Resultatet blir ihopblandade utskrifter. Operativsystem, Mats Björkman, MDH 16

Ömsesidigt uteslutande Lösningen blir att hela den kod som skriver ut på skrivaren måste vara ett kritiskt avsnitt, så att inte process B kan skriva ut när A redan börjat skriva ut, utan B måste vänta tills A är klar Operativsystem, Mats Björkman, MDH 17

Ömsesidigt uteslutande Ett annat exempel handlar om åtkomst till delade variabler Operativsystem, Mats Björkman, MDH 18

Ömsesidigt uteslutande forts. Race condition Scenario 1 Example: int saldo= 1000; 900 1900 Thread A Thread B void A(void){ void B(void){ int peng; int peng; peng=saldo; peng=saldo; peng=peng-100; peng=peng+1000; saldo=peng; saldo=peng; } } RESULTAT: saldo=1900 Operativsystem, Mats Björkman, MDH 19

Ömsesidigt uteslutande forts. Race condition Scenario 2 Example: int saldo= 1000; 2000 900 Thread A Thread B void A(void){ void B(void){ int peng; int peng; peng=saldo; peng=saldo; peng=peng-100; peng=peng+1000; saldo=peng; saldo=peng; } } RESULTAT: saldo=900 Operativsystem, Mats Björkman, MDH 20

Ömsesidigt uteslutande Även i detta exempel gäller det att skapa ett kritiskt avsnitt, i detta fall är det koden från innan processen läser saldot tills efter den har skrivit det nya saldot som behöver utgöra ett kritiskt avsnitt Operativsystem, Mats Björkman, MDH 21

Ömsesidigt uteslutande genom kritiska avsnitt Operativsystem, Mats Björkman, MDH 22

Ömsesidigt uteslutande Nu behöver vi några mekanismer som hjälper oss att skapa kritiska avsnitt Operativsystem, Mats Björkman, MDH 23

Ömsesidigt uteslutande forts. Fyra krav: 1. Aldrig fler än en process samtidigt i kritiska avsnittet 2. Inga antaganden om processhastighet eller antal CPU:er 3. Ingen process som inte är i kritiska avsnittet får blockera en annan process 4. Ingen process skall behöva vänta i evighet på exekvering Undvik baklås, svält och busy waiting ( rastlös väntan ) Hur kan detta lösas? Algoritmiskt i tillämpningen Algoritmiskt i tillämpningen + hårdvarustöd Interrupt disable Test And Set-primitiv OS-stöd: semaforer, meddelandeöverföring Operativsystem, Mats Björkman, MDH 24

Ömsesidigt uteslutande - Algoritm i tillämpningen int turn = 0; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code while(turn!=0) ; while(turn!=1) ; // Critical Section // Critical section turn = 1; turn = 0; } } } } Fungerar denna algoritm? Finns det nackdelar med denna lösning? Operativsystem, Mats Björkman, MDH 25

Ömsesidigt uteslutande - Algoritm i tillämpningen int turn = 0; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code while(turn!=0) ; while(turn!=1) ; // Critical Section // Critical section turn = 1; turn = 0; } } } } Fungerar denna algoritm? Finns det nackdelar med denna lösning? Operativsystem, Mats Björkman, MDH 26

Ömsesidigt uteslutande - Algoritm i tillämpningen int turn = 0; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code while(turn!=0){} //spin while(turn!=1){} //spin // Critical Section // Critical section turn = 1; turn = 0; } } } } Fungerar denna algoritm? Finns det nackdelar med denna lösning? Operativsystem, Mats Björkman, MDH 27

Ömsesidigt uteslutande - Algoritm i tillämpningen (bättre?) boolean interested[2] = {false,false}; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code interested[0] = true; interested[1] = true; while(interested[1]){} while(interested[0]){} // Critical Section // Critical section interested[0] = false; interested[1] = false; } } } } Fungerar denna algoritm? Finns det nackdelar med denna lösning? Operativsystem, Mats Björkman, MDH 28

Ömsesidigt uteslutande - Algoritm i tillämpningen (nu då?) int int loser; boolean interested[2] = {false,false}; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code interested[0] = true; interested[1] = true; loser = 0; loser = 1; while(loser==0 && while(loser==1 && interested[1]) {} interested[0]) {} // Critical Section // Critical section interested[0] = false; interested[1] = false; } } } } Fungerar denna algoritm? Finns det nackdelar med denna lösning? Operativsystem, Mats Björkman, MDH 29

Ömsesidigt uteslutande - Algoritm i tillämpningen med hårdvarustöd void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code interrupt_disable(); interrupt_disable(); // Critical Section // Critical section interrupt_enable(); interrupt_enable(); } } } } Fungerar denna algoritm? Finns det nackdelar med denna lösning? Operativsystem, Mats Björkman, MDH 30

Ömsesidigt uteslutande - Algoritm i tillämpningen med hårdvarustöd Test and Set (TAS) Sätter en variabel och returnerar gamla värdet Läsningen av gamla värdet och sättningen av nya är garanterat atomärt (odelbart) int TAS(char *flag){ int result; asm{ tas flag bne alreadyset move #0,&result bra exit alreadyset: move #1,&result exit: } return result; } Operativsystem, Mats Björkman, MDH 31

Ömsesidigt uteslutande - Algoritm i tillämpningen med hårdvarustöd char flag=0; void thread0(){ void thread1(){ int TAS(char *flag){ while(1){ while(1){ int result; // some code // some code asm{ while(tas(&flag)==1){} while(tas(&flag)==1){} tas flag // Critical Sec. // Critical sec. bne alreadyset flag=0; flag=0; move #0,&result } } bra exit } } alreadyset: move #1,&result exit: } return result; Finns det nackdelar med denna lösning? } Operativsystem, Mats Björkman, MDH 32

Test and set Varianter på test and set kan heta: Compare and swap Atomic exchange Samma princip: en odelbar operation där en variabel ändras och det gamla värdet kontrolleras Operativsystem, Mats Björkman, MDH 33

Busy wait Alla lösningar (hittills) har använt busy wait, den process som måste vänta ligger i en tight loop och kollar och kollar och kollar Slöseri med CPU-tid, vem kan hjälpa? Operativsystem, Mats Björkman, MDH 34

Ta-daa! Is it a spin lock? Is it a test-and-set instruction? No! It s The Operating System! Operativsystem, Mats Björkman, MDH 35

OS-stöd för kommunikation och synkronisering 36

Semaforer Ett verktyg för att åstadkomma ömsesidigt uteslutande Finns i så gott som alla operativsystem Operativsystem, Mats Björkman, MDH 37

Semaforer Två versioner: Binära semaforer kan vara 0 eller 1 Räknande semaforer kan vara 0 Operativsystem, Mats Björkman, MDH 38

Semaforer Binära semaforer används när det finns en instans av en resurs och den kan användas av en process i taget Exempel: Lås på toadörr. En användare kan gå in på toa och vrida om låset. Övriga får då vänta till dess den som använder toan låser upp dörren Operativsystem, Mats Björkman, MDH 39

Semaforer Räknande semaforer används när det finns flera instanser av resursen och/ eller flera processorer kan samsas Exempel: En ut/en in på krogen. Det finns ett maximalt antal tillåtna samtidiga besökare. När maxantalet är uppfyllt måste nästa besökare vänta på att någon lämnar lokalen. Operativsystem, Mats Björkman, MDH 40

Semaforer forts. En semafor har två operationer: wait(semaphore); räknar ner signal(semaphore); räknar upp Alternativa namn: take/give, acquire/ release, down/up, P/V (holländska Proberen/Verhogen försök/höj) Operativsystem, Mats Björkman, MDH 41

Mutex (MUTual EXclusion) En binär semafor kallas ibland mutex En mutex används som ett lås (kom ihåg toadörren), operationerna kallas ibland mutex_lock (wait) respektive mutex_unlock (signal) Operativsystem, Mats Björkman, MDH 42

Semaforer forts. Om en semafor är 1 (eller mer) och en process anropar wait( ), så kommer semaforen att räknas ned och processen får fortsätta Operativsystem, Mats Björkman, MDH 43

Semaforer forts. Om en semafor är 0 och en process anropar wait( ), så kommer processen att flyttas till ett väntetillstånd (wait/sleep) och sättas i en kö associerad till semaforen Processen blir kvar i kön till dess en annan process anropar signal( ) Operativsystem, Mats Björkman, MDH 44

Semaforer forts. När en process anropar signal( ) tittar operativsystemet om det finns någon process i väntelistan till den semaforen. Om det finns någon i kön, så väcks den första processen i kön upp och får fortsätta exekvera Om väntelistan är tom, räknas semaforen upp med 1 Operativsystem, Mats Björkman, MDH 45

Semaforer forts. OS:et löser problemet med busy wait: När en process måste vänta behöver den inte ligga och spinna runt runt och testa om den får fortsätta Operativsystemet försätter istället processen i ett väntetillstånd, och lovar att väcka upp processen när den kan fortsätta Systemet slipper slösa CPU-tid på busy wait Operativsystem, Mats Björkman, MDH 46

Semaforer forts. Operativsystemet tillhandahåller även rättvisa: Om flera processer med samma prioritet blir väntande på wait( ), så kommer operativsystemet att först väcka den som anropade wait( ) först (Vid busy wait och exv. test_and_set är det slumpmässigt vilken av de väntande som har tur att testa precis vid rätt tid) Operativsystem, Mats Björkman, MDH 47

Semaforer forts. Semaforoperationerna måste vara odelbara (atomära) Operativsystemet garanterar detta Väntande processer sätts tillståndet till väntande (wait/sleep) läggs in i väntelistan på en semafor Operativsystem, Mats Björkman, MDH 48

Semaforer forts. Problem med semaforer Priority inversion: en process med hög prioritet kan bli väntande på en semafor som en process med lägre prioritet har låst Baklås: Process 0 har låst semaforen A och väntar på semaforen B, Process 1 har låst semaforen B och väntar på semaforen A Operativsystem, Mats Björkman, MDH 49

Semaforer forts. Skrivarproblemet löst med semaforer: Process A Process B Ett skrivarjobb begärs. Processen anropar wait(lpr). Eftersom skrivaren är ledig räknas semaforen ner till 0. Utskriften startar. A blir avbruten av process B som har högre prioritet. B vill också skriva ut. B anropar wait(lpr). Eftersom semaforen redan är 0 blir B försatt i väntetillstånd (wait/sleep). A slutför utskriften av det första dokumentet. Anropar signal(lpr). B plockas ut semaforkön och kan skriva ut. Anropar signal(lpr). Operativsystem, Mats Björkman, MDH 50

Semaforer forts. WAIT(S) SIGNAL(S) LOCK LOCK S > 0 Y N FIND CURRENT PROCESS DESCRIPTOR EMPTY SEMAPHORE QUEUE Y N DEQUEUE PROCESS DESCRIPTOR S = S - 1 S = S + 1 MOVE FROM! READY QUEUE! TO WAITING ADD TO READY QUEUE ADD TO SEMAPHORE QUEUE UNLOCK UNLOCK EXIT TO DISPATCHER EXIT TO DISPATCHER Operativsystem, Mats Björkman, MDH 51

Processynkronisering Uppgift: synkronisera aktiviteter som måste ske i viss ordning Exempel: Producent/konsumentproblemet En process producerar meddelanden Meddelandena placeras i en kö En annan process läser meddelandena Problem: Begränsad köstorlek Operativsystem, Mats Björkman, MDH 52

Producent/konsument När producenten har producerat ett meddelande skall konsumenten kunna konsumera det När kön är full måste producenten vänta tills konsumenten konsumerat ett meddelande När kön är tom näste konsumenten vänta tills producenten producerat ett meddelande Operativsystem, Mats Björkman, MDH 53

Producent/konsument Exempel: Vi använder tre semaforer: En räknande semafor för antalet tomma platser En räknande semafor för antalet fulla platser En binär semafor (mutex) för att få ömsesidigt uteslutande vid åtkomst till den delade kön Operativsystem, Mats Björkman, MDH 54

Producent/konsumentproblemet med semaforer #define N 100! semaphore mutex = 1;! semaphore empty = N;! semaphore full = 0;!! void producer(void)! {! int item;!! while(true){! produce_item(&item);! wait(&empty);! wait(&mutex);! enter_item(item);! signal(&mutex);! signal(&full);! }! }! /* Number of slots in the buffer */! /* Mutual exclusion */! /* Number of empty slots in the buffer */! /* Number of full slots in the buffer */!! void consumer(void)! {! int item;!! while(true){! wait(&full);! wait(&mutex);! remove_item(&item);! signal(&mutex);! signal(&empty);! consume_item(item);! }! }! Operativsystem, Mats Björkman, MDH 55

Producent/konsumentproblemet med semaforer felaktigt #define N 100! semaphore mutex = 1;! semaphore empty = N;! semaphore full = 0;!! void producer(void)! {! int item;!! while(true){! produce_item(&item);! wait(&empty);! wait(&mutex);! enter_item(item);! signal(&mutex);! signal(&full);! }! }! /* Number of slots in the buffer */! /* Mutual exclusion */! /* Number of empty slots in the buffer */! /* Number of full slots in the buffer */!! void consumer(void)! {! int item;!! while(true){! wait(&mutex);! wait(&full);! remove_item(&item);! signal(&mutex);! signal(&empty);! consume_item(item);! }! }! Operativsystem, Mats Björkman, MDH 56

Semaforer Semaforer i kernel space vs user space Semaforer i kernel space => systemanrop till OS:et Användbara för synkronisering mellan processer Kräver inte delat minne mellan processerna Windows: CreateSemaphore(), CreateMutex() Unix: semget() Semaphore Standard POSIX: sem_init() Semaforer i user space => hanteras i tillämpningen Användbara för synkronisering mellan trådar i samma process Använder delat minne (plus ofta någon form av stöd från OS:et) Windows: CriticalSection() anropar endast kärnan när någon behöver ställa sig i kö Linux Futex (Fast userspace mutex): kräver TAS el. liknande + systemanrop för köhanterning Operativsystem, Mats Björkman, MDH 57

Meddelandesystem Processkommunikation genom meddelanden Två primitiver send receive Direkt kommunikation, eller Indirekt kommunikation Operativsystem, Mats Björkman, MDH 58

Meddelandesystem - Direkt kommunikation Process to Process IPC Send(toProcess, message); Receive(fromProcess, message); Skicka broadcast till flera mottagande processer Synkron överföring (Rendezvous) Ingen buffring, processerna blockeras tills överföringen sker Analogi: Telefon Asynkron överföring Buffrad kommunikation, ingen blockering Analogi: telefonsvarare Operativsystem, Mats Björkman, MDH 59

Meddelandesystem - Indirekt kommunikation Kommunikation via brevlåda (mailbox) En mailbox innehåller En buffert Ett namn Två möjligheter Mailboxen ägs av en process Mailbox owned by the process P1 P2 Mailbox owned by the OS Mailboxen ägs av OS:et P1 P2 P3 Operativsystem, Mats Björkman, MDH 60

Producent/konsumentproblemet med meddelandeöverföring #define N 100 void producer(void){ } int item; message m,token; while(1){ produce_item(&item); receive(consumer,&token); build_mesg(&m,&item); } send(consumer, &m); void consumer(void){ } int item, i; message m,token; for(i=0;i<n;i++) send(procucer,&token); while(1){ receive(producer,&m); } extract_item(&m); send(producer, &token); consume_item(item); Operativsystem, Mats Björkman, MDH 61

Delat minne De flesta operativsystem stöder det Speciella primitiver för skapande och åtkomst Felkällor: synkronisering måste bli rätt Inte bra för distribuerade system Dock snabbt och effektivt om processerna kan dela fysiskt minne Operativsystem, Mats Björkman, MDH 62

Delat minne Det delade minnet mappas in i båda processernas adressrymd P1 P2 Shared Memory Windows: CreateFileMapping(), MapViewOfFile() Linux/Unix: shm_open(), mmap() Operativsystem, Mats Björkman, MDH 63

Lärandemålen igen Varför behövs processkommunikation och processynkronisering? Race condition, ömsesidigt uteslutande, kritiska avsnitt Mekanismer för kommunikaiton/ synkronisering Semaforer, meddelandeöverföring, delat minne Operativsystem, Mats Björkman, MDH 64