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