Föreläsning 15: Parallella subrutiner • Parallellitet • Processer och trådar • Semaforer, monitorer och synkroniseringsmeddelanden 2002-12-20 F. Drewes, Inst. f. datavetenskap 1 Parallellitet Ofta är det nödvändigt eller önskvärt att programdelar exekveras parallellt (jämlöpande, eng. concurrently). Det kan handla om • fysisk parallellitet – två eller fler processorer används • logisk parallellitet – konceptuell parallellitet som fysiskt kan vara sekventiell ("interleaving") Nivåer på vilka parallellitet kan förekomma är • instruktionsnivå – maskininstruktioner exekveras parallellt • satsnivå – enstaka programsatser exekveras parallellt • underprogramnivå – underprogram exekveras parallellt • programnivå – flera program exekveras parallellt 2002-12-20 F. Drewes, Inst. f. datavetenskap 2 Varför parallella underprogram? • De är "naturliga" Ofta avbildar program den parallella realiteten (t.ex. reaktiva system, simulationsprogram, osv.) • De ger bättre möjligheter att utnyttja datorn Om datorn har flera processorer utnyttjas de på det viset som programmet tjänar mest på • De behövs i många interaktiva system Om något komplext beräknas behöver inte användaren vänta utan kan jobba på eller eventuellt ingripa Lämpliga koncept i språket behövs 2002-12-20 F. Drewes, Inst. f. datavetenskap 3 Processer och trådar Exekveringen av ett parallellt program består av flera kontrollflöden som kallas trådar (eng. threads). En process (eng. ofta "task"=uppgift) är en enhet som kan exekveras parallellt med andra och som kontrollerar en tråd. Synkronisering behövs för att bearbeta gemensamma data • synkronisering garanterar att sats S av tråd T exekveras före eller efter sats S´ av tråd T´ • tävlande synkronisering (eng. competition synchronization) förekommer om en resurs (t.ex. skrivare) inte kan delas; turordningen är oviktig • samarbetande synkronisering (eng. cooperation synchronization) förekommer vid gemensamma mål; turordningen är viktig 2002-12-20 F. Drewes, Inst. f. datavetenskap 4 Semaforer En semafor (Dijkstra 1965) är en datastruktur med två atomära operationer wait och release. Ofta omger de kod som ska synkroniseras. En semafor har en kapacitet 0 och en väntekö (initialt tom) för blockerade processer Om en process P exekverar wait(s)… och semaforens kapacitet är > 0 minskas den med 1 annars ställs P i semaforens väntekö Om en process P exekverar release(s)… och väntekön är tom ökas dess kapacitet med 1 annars får första processen i väntekön fortsätta (och givetvis tas den bort från kön) 2002-12-20 F. Drewes, Inst. f. datavetenskap 5 Monitorer En monitor inkapslar datastrukturer och operationerna som ger access till dem. Endast en process i taget får tillträde till monitorn. För att möjliggöra samarbetande synkronisering finns det en datatyp queue vars operationer delay och continue endast kan exekveras i en monitor. • Om delay(q) exekveras blockerar processen. Den ställs i kön q och andra processer får tillträde till monitoren. • Om continue(q) exekveras släpper processen monitorn och första processen som väntar i q får fortsätta (om en sådan finns). 2002-12-20 F. Drewes, Inst. f. datavetenskap 6 Synkroniseringsmeddelanden I Ada kan processer skicka och ta emot synkroniseringsmeddelanden. Om både sändaren och mottagaren är beredda sker ett rendezvous, annars väntar den ena. • accept xyz(<parametrar>) <body> betyder "vänta tills någon process P skickar meddelandet xyz och exekvera <body> sedan, medan P är blockerad" • icke deterministiskt urval sker med select-strukturen: select when <villkor> => accept abc(…) … or when <villkor> => accept xyz(…) … … end select 2002-12-20 F. Drewes, Inst. f. datavetenskap 7 Jämförelse • Semaforer är primitiva och flexibla, känsliga för fel problemet är att olika programdelar måste samarbeta på mycket låg nivå. • Monitorer liknar ADT:er och har liknande fördelar men samarbetande synkronisering förblir komplicerad. • Synkroniseringsmeddelanden är enklare och flexiblare än monitorer, men minst lika strukturerade. De passar dessutom bra till distribuerade system. 2002-12-20 F. Drewes, Inst. f. datavetenskap 8 God jul och Gott Nytt År!!! (och intressanta gruppövningar ) 2002-12-20 F. Drewes, Inst. f. datavetenskap 9