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



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

Tentamen i ID2206, ID2200 samt IS1350 Operativsystem

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

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

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

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

Operativsystem ID hp, ID2200 6hp

Institutionen för elektro- och informationsteknologi, LTH

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

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

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

Outline. Datorsystemtekni. Kravspecifikation. Kravspecifikation (forts.)

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

Operativsystem. IS hp. Jim Dowling Docent, PhD [Bilder av Robert Rönngren]

Introduktion till hårdvara, mjukvara och operativsystem

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

Datorteknik ERIK LARSSON

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

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

Synkronisering. Föreläsning 8

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

Operativsystem - Processkommunikation

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

Datorsystem 5. På denna föreläsning skall vi prata om Operativsystem Exempel på tenta (typ fjolårets)

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

Posix Threads. En studie i förvirring eller Halleluja! Peter Eriksson, Signum Support AB 1

Operativsystem (IS1350) :00-12:00

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

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

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

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

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

Design och trender. Föreläsning 12

Tentamen den 18 mars svar Datorteknik, EIT070

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

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

Föreläsning 2 Datastrukturer (DAT037)

Synkronisering. Ordning och reda

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Lösningsförslag till tentamen i IS1350 Operativsystem

Operativsystem ID1200/06 Tentamen :00-18:00

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

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

Operativsystem - input/output, skydd, virtualisering

Trådar. Aktiva objekt

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

MESI i Intel Core 2 Duo

Föreläsning 2. Operativsystem och programmering

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Operativsystem (ID2200/06) XX XX:00-XX:00

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

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

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

Operativsystem Introduktion

Lunds Tekniska Högskola Datorarkitektur med operativsystem EITF60. Superscalar vs VLIW. Cornelia Kloth IDA2. Inlämningsdatum:

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Programmering B med Visual C

TDDC77 Objektorienterad Programmering

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

Lärare. Operativsystem. Handledning. Kurssajt. Schema. Lektioner. Jan Erik Moström

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

Realtidsstöd i Minix. En laborationrapport. Oktober 2012

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Datorteknik ERIK LARSSON

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Classes och Interfaces, Objects och References, Initialization

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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)

Föreläsning 1 Datastrukturer (DAT037)

Översikt. Datorarkitekturer med operativsystem. Inledning. Inledning

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

Datakom II (MNP) ht 1998 Bengt Ahlgren 1. Vad är speciellt med implementering av kommunikationsprotokoll?

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

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Strategier för att utnytja parallella system. Peter Kjellström NSC Upplysning

Systembeskrivning. Systemskiss. Moduler.

Realtidsprogrammering Ordinarie tentamen

Datorarkitekturer med operativsystem ERIK LARSSON

Grundläggande datavetenskap, 4p

Tentamen Nätverksprogrammering Lösningsförslag

Operativsystem ID2200/06 omtentamen :00-18:00

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

Operativsystem ID2200/06 omtentamen :00-12:00

SMD 134 Objektorienterad programmering

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

Datastrukturer. föreläsning 3. Stacks 1

Schemaläggnings metoderna AMP & SMP i en Multiprocessor

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

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

Tentamen Nätverksprogrammering Lösningsförslag

Sockets. Processkommunikation Sammanfattning. Sockets. Domän, typ och protokoll

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Definition DVG A06. Varför operativsystem? Operativsystem. Översikt. - Vad är ett operativsystem?

DIG IN TO Dator och nätverksteknik

Typkonvertering. Java versus C

Operativsystem ID1200/06 Tentamen :00-18:00

Parallellism, återblick

Transkript:

Trådar och Multiprocessorer Föreläsning 6

Trådar och multiprocessorer Hur skriver man program som hanterar många saker samtidigt, t.ex. en web-server som hanterar många samtidiga begäran från olika klienter? Hur kan vi bygga snabbare/kraftfullare datorer? Hur kan vi lösa större beräkningsproblem? Trådar en programmeringsmodell Trådar i Pthreads, Solaris och Windows Multiprocessorer Behovet av synkronisering Kap: 2.2-2.3, 8.1-8.2 Multiprocessorer och trådar 2

Trådar (threads)

Trådar - en programmeringsmodell Att tillåta flera processer att exekvera på en dator ger flera fördelar: Tillåter flera samtidiga användare/tasks Kan överlappa beräkning och I/O Återanvänd idén: - många applikationer kan modelleras enklare/bättre om man har processer i processen Multiprocessorer och trådar 4

Exempel på program som blir lättare att skriva med trådar Simuleringar Modellerar ofta flera parallella processer Ex: simulering av del av Internet med användardatorer, routrar etc. Serverapplikationer Ex: Webb-server, spelserver Men även många vanliga interaktiva applikationer Ordbehandlare, kalkylprogram... Program med flera fönster, t.ex. grafisk debugger Multiprocessorer och trådar 5

Processer och trådar Text (kod) Heap (data) Filer Text (kod) Heap (data) Filer Register Stack Register Stack Register Stack Register Stack tråd Enkeltrådad process (det vi sett hittills) Multitrådad process Trådarna delar kod, heap och filer Multiprocessorer och trådar 6

Vad är en tråd? En tråd kan ses som en virtuell CPU eller lättviktsprocess Programräknare Register Stack En process kan ses som en virtuell maskin Adressrymd (minne) En eller flera trådar Multiprocessorer och trådar 7

Trådar - fördelar Responstid hantering av blockerande systemanrop En multitrådad interaktiv/server applikation kan svara på input även om delar (någon/gra trådar) är blockerade eller utför någon tidskrävande operation Dela resurser Flera aktiviteter kan dela kod, data etc. i en process Ekonomi Trådar kräver inte lika mycket egna resurser och är enklare/billigare att skapa och att switcha mellan (ex: Solaris 2 process/tråd: tid för att skapa 30/1, context switch 5/1) Utnyttja datorer med flera processorer Trådar kan (enkelt) utnyttja datorarkitekturer med flera processorer för att exekvera snabbare Multiprocessorer och trådar 8

Var implementerar man trådar - i OS-kärnan eller i användarläge (user-space) I användarläge Trådoperationerna är biblioteksrutiner Schemaläggningen görs av run-time system Trådhantering, skapande/dödande omhändertagande av terminerade trådar etc. sköts via biblioteksrutiner och run-time system I kärnan Trådoperationerna är systemanrop Schemaläggningen görs av kärnan trådhantering, skapande/dödande omhändertagande av terminerade trådar etc. sköts via systemanrop och kärnan Multiprocessorer och trådar 9

Trådar i kernel-space resp. user-space Run-time system Run-time system Trådtabell User-space User-space OS-kärna Process tabell OS-kärna Process tabell Tråd tabell User threads (användartrådar) Kernel threads Multiprocessorer och trådar 10

Om trådar i användarläge Schemaläggning, trådbyte sköts utan systemanrop Färre context switchar ger bättre prestanda Kärnan vet ej om att det finns trådar Kan användas även med gamla operativsystem Schemaläggning i två nivåer Kärnan bestämmer vilken process som skall köra Trådbiblioteket bestämmer vilken tråd inom processen som kör Multiprocessorer och trådar 11

Mera om trådar i användarläge Nackdelar med trådar i användarläge Blockeras en tråd så blockeras hela processen dvs. alla trådar i processen Schemaläggning är oftast icke avbrytande (nonpreemptive) Ingen sann parallellitet på multiprocessorer Multiprocessorer och trådar 12

Trådar i kärnan Fördelar Kan ha preemptiv schemaläggning Om en tråd blockeras kan en annan tråd i samma process schemaläggas Kärnan kan utnyttja trådar för att själv bli effektivare Kan schemaläggas på olika processorer i en multiprocessor utnyttja sann parallellitet Nackdelar Trådoperationer är systemanrop - tar längre tid att utföra och kostar mer t.ex i context switch Multiprocessorer och trådar 13

Hybrider Hybridformer är vanligast i moderna operativsystem Kärnan tillhandahåller ett visst antal trådar En eller flera användartrådar mappas på en eller flera trådar i kärnan Multiprocessorer och trådar 14

Att mappa trådar - användartrådar på kärntrådar Flera användatrådar på en kärntråd ex: Solaris green threads En användartråd på en kärntråd ex: Windows 2000, NT Många användartrådar på en grupp av kärntrådar ex: Solaris, HP-UX, True64 UNIX Multiprocessorer och trådar 15

Några praktiska funderingar kring trådar och Systemanrop Trådpooler exec, fork Signaler, kancellering

Trådar och systemanrop Exempel: En webserver hämtar en begäran åt gången och utför den Om en begäran medför diskaccess kan servern inte ta emot en ny begäran förr än dess att diskaccessen är klar Slöseri av flera skäl Om man har flera diskar kan de arbeta parallelt Om efterföljande begäran inte behöver diskaccess är det onödigt att de skall vänta Låt servern starta en ny tråd för varje begäran Multiprocessorer och trådar 17

Trådar och systemanrop Otrådad server while ( True ) { recieve(&request); handle(request); } Trådad server while ( True ) { recieve(&request); create_thread(&handle,request); } Multiprocessorer och trådar 18

Hur många trådar kan man skapa? - trådpooler Oftast finns en övre begränsning Hur gör vi i exemplet med webb-servern? Ha en pool av trådar Den tråd som tar emot en begäran kan göra så här: 1 Om det finns ledig tråd i trådpoolen 2 Ta emot begäran 3 Väck en tråd ur trådpoolen som behandlar begäran 4 Börja om från 1 Den tråd som väcks behandlar sin begäran och lägger sig sedan att sova i trådpoolen Multiprocessorer och trådar 19

Trådar som exekverar exec eller fork En tråd exekverar fork Två val: 1. Den nya processen får en tråd 2. Den nya processen blir en exakt kopia av den gamla med lika många trådar En tråd exekverar exec Vanligast är att hela processen, dvs alla trådar, börjar exekvera det nya programmet Multiprocessorer och trådar 20

Att döda (kancellera) trådar Inte helt problemfritt... Vad gör man om: Tråden har resurser knutna till sig lämnas de till - processen? - tar OS:et tillbaka dem? Tråden håller på med något som andra trådar väntar på, eller kan komma att vänta på Multiprocessorer och trådar 21

Feltolerans Går det att bygga feltoleranta system genom att utnyttja flera trådar i en process? Frågan att fundera över: Överlever systemet/processen att en tråd får t.ex ett exekveringsfel som segmentation fault eller bus error? Har man behov av att systemet överlever hårda fel kan det vara bättre att bygga på processer som isoleras bättre från varandra Multiprocessorer och trådar 22

Att skicka signaler till trådar Om man skickar en signal till en tråd vad gör man då? Levererar signalen bara till den berörda tråden Levererar signalen till varje tråd i processen Levererar signalen till några utvalda trådar i processen Utser en speciell tråd att ta hand om alla signaler (Solaris) Multiprocessorer och trådar 23

Exempel på trådimplementationer Pthreads Solaris2 Windows 2000 Java

Pthreads POSIX standard som beskriver gränssnitt och beteende (inte hur det ska implementeras) Trådbibliotek och run-time system på användarnivå Allmänt använt på olika UNIX system Multiprocessorer och trådar 25

Pthread exempel HELT UTAN FELKONTROLLER... #include <pthread.h> #include <stdio.h> int sum = 0; // shared variable void runner(char *); void main(int argc, char *argv[]) { pthread_t tid; pthread_attr_t attr; void runner(char *arg1) { int upper = atoi(arg1); int i; if(upper <= 0) { printf( talet måste vara > 0\n ); pthread_exit(1); } } pthread_attr_init(&attr); pthread_create(&tid, &attr, runner, argv[1]); pthread_join(tid, NULL); printf( Summa: %d\n, sum); } sum = 0; for(i=1; i <= upper; i++) sum += i; pthread_exit(0); Multiprocessorer och trådar 26

Solaris2 Tre nivåer av trådar Tråd på användarnivå: trådid, register, stack och prioritet LWP light weight process Datastruktur i kärnan med - registeruppsättning för den användartråd som exekverar i LWPn, minne och accounting info Tråd i kärnan Liten datastruktur med liten stack Pekare till ansluten LWP Multiprocessorer och trådar 27

Solaris2 forts. Processer (tasks) Användartrådar LWP Kärnan Kärntrådar Processorer Multiprocessorer och trådar 28

Kan man tjäna något på att använda trådar? SUN designade om telnet-servern till att använda trådar för att hantera telnetförbindelser På en större server kunde man öka antalet samtidiga uppkopplingar från några hundra till några tusen Multiprocessorer och trådar 29

Windows 2000 Ett-till-ett mappning av användartrådar till kärntrådar Flera trådar i en process (tråd schemaläggningsenhet) Bibliotek för fibers möjlighet att köra flera trådar i en användartråd Datastrukturer Tråd ID Registeruppsättning Användarstack (för exekvering i user-mode) Kärnstack (för exekvering i kernel-mode) Privat dataarea Multiprocessorer och trådar 30

JAVA Implementerar trådar i den virtuella maskinen Svårt att klassificera som användar- eller kärntrådar Ett sätt att skapa trådar är genom att Ärva från Thread klassen Överlagra run metoden i Thread klassen Multiprocessorer och trådar 31

JAVA exempel HELT UTAN FELKONTROLLER... class Summation extends Thread { public Summation(int n) { } upper = n; public void run() { int sum = 0; } if(upper > 0) for(int i = 1; i <= upper; i++) sum += i; public class ThreadTester { } public static void main(string[] args) { } Summation thrd = new Summation( Integer.parseInt(args[0])); thrd.start(); } private int upper; Multiprocessorer och trådar 32

Multiprocessorer Hur bygger vi snabbare datorer?

Snabbare datorer Möjliga vägar: Öka klockfrekvensen Minska storleken pga fysiska begränsningar (ljushastigheten) när det gäller att kunna distribuera klockan Problem med värmeproduktion Öka antalet processorer Multiprocessordatorer (hårt kopplade) Datorer i nätverk Flera processorer på ett chip Multiprocessorer och trådar 34

Multiprocessorer CPU CPU CPU CPU CPU CPU CPU CPU Buss eller nät I/O Minne Minne Minne Minne I/O Multiprocessorer och trådar 35

Multiprocessorer - intressanta designval/parametrar Sammanbindningsnät Buss begränsar antalet processorer till ~20 Nät: crossbar, switch - antal procesorer upp mot 1000 Fördröjningstid i nätet vid minnessaccess - uniform/icke-uniform, kort/lång Delat minne eller privat Delat minne allt minne kan accessas direkt av alla processorer anses ofta enklare att programmera Privat minne kommunikation med meddelanden Multiprocessorer och trådar 36

Cachning i multiprocessorer CPU CPU CPU Cachear minskar lasten på sammanbindningsnätet/bussen cache cache cache I/O Minne Minne Men: - Hur håller man informationen konsistent? - False-sharing problematik Multiprocessorer och trådar 37

Schemaläggning på multiprocessorer Frågan är inte bara när utan också var en tråd eller process skall köras För lastbalansering och rättvisa är det bäst att köra en tråd varsomhelst (en ready-kö) För effektivt utnyttjande av processorernas cacheminne/sidhantering/tlb är det bäst att köra en tråd på samma processor som förra gången (en ready-kö för varje processor) Multiprocessorer och trådar 38

Varför trådar från samma jobb bör få exekvera samtidigt... Trådar från samma jobb synkroniserar ofta Om schemaläggaren tar ifrån en tråd dess CPU medan den håller ett lås och andra trådar i den processen vill ha låset och systemet använder lås med busy waiting så kommer övriga trådar att få vänta länge Multiprocessorer och trådar 39

Schemaläggning forts. Mål: Lastdelning ingen processor bör vara för lite/mycket lastad Rättvis processerna ska få sin rättmätiga del av CPU tiden Effektivt utnyttjande av resurser Kommunicerande processer bör få köra samtidigt! Varianter: En gemensam ready-kö blir lätt flaskhals men bra lastdelning Varje processor har egen ready-kö - lastdelning t.ex. genom att underutnyttjade CPU:er kan fråga andra om de har jobb som de vill bli av med Gängschemaläggning Multiprocessorer och trådar 40

Gängschemaläggning (gang scheduling) Alla trådar i en process kör samtidigt på olika CPU:er Alla CPU:er byter process samtidigt Om en tråd blir BLOCKED blir dess CPU idle (ingen annan tråd körs) Kan kombineras med space sharing där olika processer körs på olika grupper av CPUer Multiprocessorer och trådar 41

Löst kopplade multiprocessorer/datorer Sammankopplade med nät som har förhållandevis lång fördröjning Nu finns stort intresse för GRID-computing beräkningar på vanliga datorer i nät (Internet) Problemet är att inte få för dålig prestanda pga fördröjningar i nätet Olika applikationer är olika känsliga... Multiprocessorer och trådar 42

En första titt på - ömsesidig uteslutning och synkronisering

Behovet av ömsesidig uteslutning Antag en gemensam ready-kö i en multiprocessor Process struct A Array av ready köer med olika prioriteter Process struct B Kod för att hämta en process med prioritet i ready kö new = ready[i]; tmp = new -> next; ready[i] = tmp; Multiprocessorer och trådar 44

Ready-kön: Behovet av mutual exclusion Om två processorer samtidigt vill ta ut en ny process ur ready-kön kan följande hända: Den första processorn sätter den lokala variabeln new att peka på process struct A Den andra processorn sätter sin lokala variabel new att peka på samma struct A Bägge processorerna sätter ready[i] att peka på process struct B Bägge processorerna börjar köra samma process! Inte bra... Resultatet beror av i vilken ordning processorerna exekverar race-condition Multiprocessorer och trådar 45

Ömsesidig uteslutning - mutual exclusion Man använder lås Ett lås kan vara ledigt eller upptaget Man kan låsa och låsa upp lås Om man försöker låsa ett låst lås får man vänta till dess att den som låst det låser upp det Med ett lås för ready-kön gör man så här Lås låset Plocka ut en process Lås upp Multiprocessorer och trådar 46

Implementation av lås på multiprocessor lock: test_and_set tmp, (lock_ptr) branch_not_zero tmp, lock unlock: store (lock_ptr), 0 Multiprocessorer och trådar 47

Implementation av lås på multprocessor test_and_set tmp, (lock_ptr) är en maskininstruktion som skriver värdet 1 till minnet på adress lock_ptr läser in gamla värdet till registret tmp låser bussen så att ingen annan processor kommer emellan Denna instruktion kan användas till andra typer av lås också Multiprocessorer och trådar 48

Implementation av lås på multiprocessor Om låset är låst hoppar man tillbaka och försöker igen Denna typ av lås kallas spin-locks och gör busy waiting Lämpliga på multiprocessorer, men mycket olämpliga på en-processormaskiner Endast en annan process kan låsa upp låset Man spinner resten av time-slice Andra typer av lås gör processen BLOCKED om låset är upptaget Multiprocessorer och trådar 49

Synkronisering

Bakom kulisserna i en pipe En pipe implementeras som en buffer i kärnan Finns alltid i huvudminnet Har en viss storlek (några sidor) Om en process vill skriva till en pipe vars buffer är full måste den vänta Om en process vill läsa från en pipe vars buffer är tom måste den vänta Exempel på synkronisering (ofta inbyggt i systemanrop i Unix) Multiprocessorer och trådar 51

Bakom kulisserna i en pipe Man måste hålla reda på hur mycket data det finns i bufferten Liknande problem som vid exemplet med ready-kön Semaforer kan användas Multiprocessorer och trådar 52

Semaforer En semafor är en räknare som har operationerna upp: öka värdet med ett ner: minska värdet med ett om det ej är noll, vänta i så fall En semaforoperation är odelbar Ingen annan tråd eller process kan komma in emellan Väntande trådar kan läggas i kö Multiprocessorer och trådar 53

Bakom kulisserna i en pipe med semaforer Två semaforer används ledig_plats visar mängden ledigt utrymme färdigt_data visar mängden färdigt data Varje operation antas för enkelhets skull skriva eller läsa en byte Multiprocessorer och trådar 54

Bakom kulisserna i en pipe med semaforer skriv(data) { ner(ledig_plats) lägg data i buffer uppdatera skrivpekare upp(färdigt_data) } läs() { ner(färdigt_data) ta ut data ur buffer uppdatera läspekare upp(ledig_plats) returnera data } Multiprocessorer och trådar 55

Behov av synkronisering och ömsesidig uteslutning Synkronisering och ömsesidig uteslutning behövs också i vanliga en-processors system! Viktigt och klurigt problem att lösa Gör man fel får man ofta fel som är sporadiska och svåra att hitta... Multiprocessorer och trådar 56

Summering vad vi pratat om idag Trådar Multiprocessorer En första titt på synkronisering och ömsesidig uteslutning Multiprocessorer och trådar 57

Nästa föreläsning Interprocesskommunikation IPC Remote Procedure Call RPC Distribuerade system Distribuerade filsystem Multiprocessorer och trådar 58