11.07.2015 Views

Principper for Samtidighed og Styresystemer - Processer og Tråde

Principper for Samtidighed og Styresystemer - Processer og Tråde

Principper for Samtidighed og Styresystemer - Processer og Tråde

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Principper</strong> <strong>for</strong> <strong>Samtidighed</strong> <strong>og</strong> <strong>Styresystemer</strong><strong>Processer</strong> <strong>og</strong> TrådeRené Rydhof HansenFeb 2011PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 1 / 19


MålAt kunne <strong>for</strong>klare hvad tråde <strong>og</strong> processer erAt kunne <strong>for</strong>klare hvad gensidig udelukkelse er <strong>og</strong> hvordan det opnåsPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 2 / 19


Hvad er en proces?Definition (Proces)Den omgivelse et pr<strong>og</strong>ram udføres i ([English])Et kørende pr<strong>og</strong>ramEn “virtuel maskine”?OS Understøttelse af processerModerne OS’er understøtter (masser af) samtidige processerKommunikation mellem processer?“Clipboard”COMShared MemoryPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 3 / 19


Hvad er en proces?Definition (Proces)Den omgivelse et pr<strong>og</strong>ram udføres i ([English])Et kørende pr<strong>og</strong>ramEn “virtuel maskine”... men med begrænset adgang til bl.a. processor <strong>og</strong> I/O enhederIsoleret mod andre processerOS Understøttelse af processerModerne OS’er understøtter (masser af) samtidige processerKommunikation mellem processer?“Clipboard”COMShared MemoryPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 3 / 19


Hvor<strong>for</strong> tråde?Hvad skal tråde bruges til?Delt hukommelseLet intern kommunikation (bl.a., gennem delt hukommelse)Lavere responstidBedre arkitekturDefinition (Tråd)Den del af processen der udføres ([English])Den størrelse der udføres af styresystemet“Letvægtsprocesser”Example (Trådunderstøttelse i (moderne) styresystemer)WindowsLinux(?)PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 4 / 19


Eksekvering af trådeThread 1Localdata <strong>for</strong>thread 1Pr<strong>og</strong>ramThread 3Localdata <strong>for</strong>thread 3Thread 2Localdata <strong>for</strong>thread 2Process 1Process 2Tråd-lokale data?Proces-lokale data?Delte data?PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 5 / 19


Eksekvering af trådeThread 1Localdata <strong>for</strong>thread 1Pr<strong>og</strong>ramThread 3Localdata <strong>for</strong>thread 3Thread 2Localdata <strong>for</strong>thread 2Process 1Process 2Tråd-lokale data? tråd-ID, prioritet, stakProces-lokale data? adresserum, heap, åbne filer, proces-ID, parent,ejerskab, CPU reg. (kopi)Delte data? Pr<strong>og</strong>ramtekstPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 5 / 19


Multithreading <strong>og</strong> Multipr<strong>og</strong>rammeringDefinition (Multithreading)En opdeling af processer i flere trådeAltid mindst een tråd pr. process (<strong>og</strong>så i systemer udenmultithreading)Definition (Multipr<strong>og</strong>rammering)Opdeling af tasks der kan udføres samtidigt på delte processorerImplementeres ved hurtige skift mellem de enkelte tasksPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 6 / 19


Tråde i JavaExamplepublic class MyThread extends Thread {public void run() {<strong>for</strong>(int i=1; i


Hvad er resultatet af følgende pr<strong>og</strong>ram?Exampleint i = 0;void thread() {<strong>for</strong>(int j = 0; j < 10000;j++) {i++;}}t1 = run(thread);t2 = run(thread);wait(t1);wait(t2);print(i);// ofte nødvendigt <strong>for</strong> resultatPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 8 / 19


Hvad er resultatet af følgende pr<strong>og</strong>ram?Exampleint i = 0;void thread() {<strong>for</strong>(int j = 0; j < 10000;j++) {i++;// i++ er ikke-atomisk}}t1 = run(thread);t2 = run(thread);wait(t1);wait(t2);print(i);// ofte nødvendigt <strong>for</strong> resultatPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 8 / 19


Atomicitet <strong>og</strong> Race-Conditions i Højniveauspr<strong>og</strong>Kommandoer/instruktioner i højniveauspr<strong>og</strong> er ikke atomiskeExamplea = a + 1ld a, r1add r1,1st r1,aSamtidig skrivning/læsning til/fra delt lagercelle giver u<strong>for</strong>udsigeligtresultatProcessorinstruktioner kan antages(!) at være atomiskeIkke nødvendigvis sandt i moderne processorarkitekturLøsning?PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 9 / 19


Atomicitet <strong>og</strong> Race-Conditions i Højniveauspr<strong>og</strong>Kommandoer/instruktioner i højniveauspr<strong>og</strong> er ikke atomiskeExamplea = a + 1ld a, r1add r1,1st r1,aSamtidig skrivning/læsning til/fra delt lagercelle giver u<strong>for</strong>udsigeligtresultat... race condition!Processorinstruktioner kan antages(!) at være atomiskeIkke nødvendigvis sandt i moderne processorarkitekturLøsning?PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 9 / 19


Atomicitet <strong>og</strong> Race-Conditions i Højniveauspr<strong>og</strong>ExampleKommandoer/instruktioner i højniveauspr<strong>og</strong> er ikke atomiskea = a + 1ld a, r1add r1,1st r1,aLøsningSamtidig skrivning/læsning til/fra delt lagercelle giver u<strong>for</strong>udsigeligtresultat... race condition!Processorinstruktioner kan antages(!) at være atomiskeIkke nødvendigvis sandt i moderne processorarkitekturSørg <strong>for</strong> at kun een tråd har adgang til variablen: gensidig udelukkelsePSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 9 / 19


Gensidig udelukkelse — Vigtige begreberRace ConditionTilstand hvor resultatet afhænger af den relative hastighed af deenkelte trådeDet vil sige af den faktiske ordning (interleaving) af hændelserne itrådeneVanskeligt at fejlfindeKritisk regionPr<strong>og</strong>ramfragment der giver anledning til race conditionsEngelsk: “Critical sections” eller “critical regions”Kritiske regioner skal udføres under gensidig udelukkelse!Gensidig udelukkelseEn tilstand hvor der blandt en mængde tråde kun er en enkelt tråd derkan tilgå en bestemt ressource eller udføre en bestemt del afpr<strong>og</strong>ramtekstenEngelsk: “mutual exclusion”AtomiskHændelse eller sekvens af hændelser der sker uafbrydeligtPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 10 / 19


Hvordan sikres gensidig udelukkelse?Examplebool flag[2] = { false, false };thread P0 { thread P1 {while flag[1] { } while flag[0] { }flag[0] = true;flag[1] = true;/* kritisk region */ /* kritisk region */flag[0] = false;} }flag[1] = false;PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 11 / 19


Hvordan sikres gensidig udelukkelse?Examplebool flag[2] = { false, false };thread P0 { thread P1 {while flag[1] { } while flag[0] { }flag[0] = true;flag[1] = true;/* kritisk region */ /* kritisk region */flag[0] = false;} }flag[1] = false;“Algoritmen” er <strong>for</strong>kert!PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 11 / 19


An algoritme der virkerExample (Dekker’s mutex-algoritme (1965))bool flag[2] = {false, false};int turn = 0;process P0 { process P1 {flag[0] = true;flag[1] = true;while flag[1] { while flag[0] {if(turn == 1) { if(turn == 0) {flag[0] = false;flag[1] = false;while(turn == 1) { } while(turn == 0) { }flag[0] = true;flag[1] = true;} }} }/* kritisk region */ /* kritisk region */turn = 1; turn = 0;flag[0] = false;flag[1] = false;} }PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 12 / 19


Dekker’s AlgoritmeUlemperGenerelt ikke særlig effektivCompiler kan allokere visse variable til registre (dermed ikke deltmellem trådene)Vanskelig at skalere til mere en to processerFordeleDen virkerEffektiv når der ikke skal blokeresPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 13 / 19


En bedre algoritme: Peterson’sExample (Peterson’s mutex-algoritme (1981))bool flag[2] = { false, false };int turn;process P0 { process P1 {flag[0] = true;flag[1] = true;turn = 1; turn = 0;while(flag[1] &&while(flag[0] &&turn == 1) { turn == 0) {} }/* kritisk region */ /* kritisk region */flag[0] = false;flag[1] = false;} }PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 14 / 19


Peterson’s AlgoritmeUlemperCompiler kan allokere visse variable til registre (dermed ikke deltmellem trådene)FordeleDen virkerKan skaleres til mere end to processerGaranterer fairnessSårbar over<strong>for</strong> compiler optimering af hukommelsestilgangPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 15 / 19


Hardwareunderstøttelse: Test and SetExampleint mutex = 0;thread P0 { thread P1 {while(test_and_set(mutex)==1) while(test_and_set(mutex)==1){ } { }/* kritisk region */ /* kritisk region */mutex = 0; mutex = 0;} }test and set findes ofte som en atomisk processorinstruktionBusy waitingPSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 16 / 19


Busy WaitingDefinition (Busy Wait)En “no-op” løkke der venter på en betingelse bliver opfyldtExample (Løsning: suspend)int mutex = 0;thread P0 { thread P1 {while(test_and_set(mutex)==1) while(test_and_set(mutex)==1){ {suspend();suspend();} }/* kritisk region */ /* kritisk region */mutex = 0; mutex = 0;} }PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 17 / 19


Exchangexchange(a,b) bytter a <strong>og</strong> bHvis xchange er atomisk, hvordan kan den så bruges til at sikregensidig udelukkelse?PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 18 / 19


Opsummering <strong>og</strong> næste gang<strong>Processer</strong> <strong>og</strong> trådeGensidig udelukkelseNæste gang: sema<strong>for</strong>er, synkronisering, ...PSS2011 (Forelæsning 03) <strong>Processer</strong> <strong>og</strong> Tråde Feb 2011 19 / 19

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!