Operativsystem - Processkommuikatio Mats Björkma 2017-01-20
Iehåll Processer (föreläsig 2) Processmodell Processtillståd Trådar Processkommuikatio (föreläsig 3, de här) Semaforer Moitorer Meddeladesystem Skedulerig/schemaläggig (föreläsig 4) Kriterier för e skedulerare Skedulerigsalgoritmer Operativsystem, Mats Björkma, MDH 2
Lärademål Varför behövs processkommuikatio och processykroiserig? Race coditio, ömsesidigt uteslutade, kritiska avsitt Mekaismer för kommuikatio/ sykroiserig Semaforer, meddeladeöverförig, delat mie Operativsystem, Mats Björkma, MDH 3
Mer begrepp Prioritet: Olika processer ka ha tilldelats olika prioritet, vilket betyder att skedulerare tar häsy till detta i valet av ästa process att köra (mer i ästa föreläsig) Operativsystem, Mats Björkma, MDH 4
Förtydligade: Multitrådade käror Modera OS-käror är oftast multitrådade, vilket betyder att flera aktiviteter ka vara på gåg samtidigt i OS-kära Detta är e aledig till att varje process behöver e ege kerel stack, exv. ka flera processer ha systemarop som pågår samtidigt Operativsystem, Mats Björkma, MDH 5
Multitaskig=> samtidighet Wikipedia: Sychroizatio "I computer sciece, especially parallel computig, sychroizatio meas the coordiatio of simultaeous threads or processes to complete a task i order to get correct rutime order ad avoid uexpected race coditios." Operativsystem, Mats Björkma, MDH 6
Multitaskig=> samtidighet Processer som är omedveta om varadra: Oberoede tillämpigar Kokurrerar om samma resurser Processer medveta om varadra: Samarbetar geom att dela resurser E process ka vara beroede av ifo frå e aa Operativsystem, Mats Björkma, MDH 7
Processkommuikatio och sykroiserig Varför kommuikatio och sykroiserig? Odelbara resurser (ömsesidigt uteslutade) Sykroisera aktiviteter Udvika baklås (deadlock/livelock) i systemet Kommuikatio mella processer Operativsystem, Mats Björkma, MDH 8
Processkommuikatio och sykroiserig forts. Kommuikatiosmetoder Semaforer Meddeladeöverförig Delat mie Operativsystem, Mats Björkma, MDH 9
Ömsesidigt uteslutade Det fis resurser (s.k. kritiska resurser) som edast e process i taget bör få aväda (exv. ekel skrivare uta ege haterig av samtidiga utskriftsjobb) Ömsesidigt uteslutade (mutual exclusio) kallas egeskape vi vill garatera för dessa resurser Operativsystem, Mats Björkma, MDH 10
Ömsesidigt uteslutade Garati iebär att det aldrig får fias e risk för att mer ä e process aväder resurse samtidigt Operativsystem, Mats Björkma, MDH 11
Exempel ur verklighete(?) Frå e gammal OS-kurs i Uppsala: E ekelspårig järvägssträcka i Adera mella Peru och Bolivie (sic) måste ha ett sigalsystem för att garatera att max ett tåg i taget är ute på lije Operativsystem, Mats Björkma, MDH 12
Exempel ur verklighete Vi måste hitta e lösig som garaterar ömsesidigt uteslutade uta att resultera i baklås Dessutom skall de vara fri frå svält, d.v.s. att ett tåg blir ståede för alltid Ett öskemål till är att lösige skall vara rättvis, d.v.s. att tåg frå båda håll skall ha samma chas att få köra Operativsystem, Mats Björkma, MDH 13
Exempel ur verklighete Problemet uppstår förstås är det kommer tåg frå båda hålle precis samtidigt Operativsystem, Mats Björkma, MDH 14
Kritiskt avsitt E typisk mekaism för att åstadkomma ömsesidigt uteslutade i kod är kritiska avsitt (critical regio el. critical sectio) Kritiska avsitt är kodavsitt som bara e process i taget får exekvera i Exempel: Kode som exekveras för att skriva ut på skrivare Operativsystem, Mats Björkma, MDH 15
Ömsesidigt uteslutade Exempel uta kritiskt avsitt: Process A Process B Börjar skriva ut ett dokumet på skrivare. Blir avbrute av process B som har högre prioritet. Avbryter A och skriver ut sitt dokumet. Blir klar och avslutar. Fortsätter utskrifte av det första dokumetet. Resultatet blir ihopbladade utskrifter. Operativsystem, Mats Björkma, MDH 16
Ömsesidigt uteslutade Lösige blir att hela de kod som skriver ut på skrivare måste vara ett kritiskt avsitt, så att ite process B ka skriva ut är A reda börjat skriva ut, uta B måste väta tills A är klar Operativsystem, Mats Björkma, MDH 17
Ömsesidigt uteslutade Ett aat exempel hadlar om åtkomst till delade variabler Operativsystem, Mats Björkma, MDH 18
Ömsesidigt uteslutade forts. Race coditio Sceario 1 Example: it saldo= 1000; 900 1900 Thread A Thread B void A(void){ void B(void){ it peg; it peg; peg=saldo; peg=saldo; peg=peg-100; peg=peg+1000; saldo=peg; saldo=peg; } } RESULTAT: saldo=1900 Operativsystem, Mats Björkma, MDH 19
Ömsesidigt uteslutade forts. Race coditio Sceario 2 Example: it saldo= 1000; 2000 900 Thread A Thread B void A(void){ void B(void){ it peg; it peg; peg=saldo; peg=saldo; peg=peg-100; peg=peg+1000; saldo=peg; saldo=peg; } } RESULTAT: saldo=900 Operativsystem, Mats Björkma, MDH 20
Ömsesidigt uteslutade Äve i detta exempel gäller det att skapa ett kritiskt avsitt, i detta fall är det kode frå ia processe läser saldot tills efter de har skrivit det ya saldot som behöver utgöra ett kritiskt avsitt Operativsystem, Mats Björkma, MDH 21
Ömsesidigt uteslutade geom kritiska avsitt Operativsystem, Mats Björkma, MDH 22
Ömsesidigt uteslutade Nu behöver vi ågra mekaismer som hjälper oss att skapa kritiska avsitt Operativsystem, Mats Björkma, MDH 23
Ömsesidigt uteslutade forts. Fyra krav: 1. Aldrig fler ä e process samtidigt i kritiska avsittet 2. Iga atagade om processhastighet eller atal CPU:er 3. Ige process som ite är i kritiska avsittet får blockera e aa process 4. Ige process skall behöva väta i evighet på exekverig Udvik baklås, svält och busy waitig ( rastlös väta ) Hur ka detta lösas? Algoritmiskt i tillämpige Algoritmiskt i tillämpige + hårdvarustöd Iterrupt disable Test Ad Set-primitiv OS-stöd: semaforer, meddeladeöverförig Operativsystem, Mats Björkma, MDH 24
Ömsesidigt uteslutade - Algoritm i tillämpige it tur = 0; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code while(tur!=0) ; while(tur!=1) ; // Critical Sectio // Critical sectio tur = 1; tur = 0; } } } } Fugerar dea algoritm? Fis det ackdelar med dea lösig? Operativsystem, Mats Björkma, MDH 25
Ömsesidigt uteslutade - Algoritm i tillämpige it tur = 0; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code while(tur!=0) ; while(tur!=1) ; // Critical Sectio // Critical sectio tur = 1; tur = 0; } } } } Fugerar dea algoritm? Fis det ackdelar med dea lösig? Operativsystem, Mats Björkma, MDH 26
Ömsesidigt uteslutade - Algoritm i tillämpige it tur = 0; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code while(tur!=0){} //spi while(tur!=1){} //spi // Critical Sectio // Critical sectio tur = 1; tur = 0; } } } } Fugerar dea algoritm? Fis det ackdelar med dea lösig? Operativsystem, Mats Björkma, MDH 27
Ömsesidigt uteslutade - Algoritm i tillämpige (bättre?) boolea iterested[2] = {false,false}; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code iterested[0] = true; iterested[1] = true; while(iterested[1]){} while(iterested[0]){} // Critical Sectio // Critical sectio iterested[0] = false; iterested[1] = false; } } } } Fugerar dea algoritm? Fis det ackdelar med dea lösig? Operativsystem, Mats Björkma, MDH 28
Ömsesidigt uteslutade - Algoritm i tillämpige (u då?) it loser; boolea iterested[2] = {false,false}; void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code iterested[0] = true; iterested[1] = true; loser = 0; loser = 1; while(loser==0 && while(loser==1 && iterested[1]) {} iterested[0]) {} // Critical Sectio // Critical sectio iterested[0] = false; iterested[1] = false; } } } } Fugerar dea algoritm? Fis det ackdelar med dea lösig? Operativsystem, Mats Björkma, MDH 29
Ömsesidigt uteslutade - Algoritm i tillämpige med hårdvarustöd void thread0(){ void thread1(){ while(1){ while(1){ // some code // some code iterrupt_disable(); iterrupt_disable(); // Critical Sectio // Critical sectio iterrupt_eable(); iterrupt_eable(); } } } } Fugerar dea algoritm? Fis det ackdelar med dea lösig? Operativsystem, Mats Björkma, MDH 30
Ömsesidigt uteslutade - Algoritm i tillämpige med hårdvarustöd Test ad Set (TAS) Sätter e variabel och returerar gamla värdet Läsige av gamla värdet och sättige av ya är garaterat atomärt (odelbart) it TAS(char *flag){ it result; asm{ tas flag be alreadyset move #0,&result bra exit alreadyset: move #1,&result exit: } retur result; } Operativsystem, Mats Björkma, MDH 31
Ömsesidigt uteslutade - Algoritm i tillämpige med hårdvarustöd char flag=0; void thread0(){ void thread1(){ it TAS(char *flag){ while(1){ while(1){ it result; // some code // some code asm{ while(tas(&flag)==1){} while(tas(&flag)==1){} tas flag // Critical Sec. // Critical sec. be alreadyset flag=0; flag=0; move #0,&result } } bra exit } } alreadyset: move #1,&result exit: } retur result; Fis det ackdelar med dea lösig? } Operativsystem, Mats Björkma, MDH 32
Test ad set Variater på test ad set ka heta: Compare ad swap Atomic exchage Samma pricip: e odelbar operatio där e variabel ädras och det gamla värdet kotrolleras Operativsystem, Mats Björkma, MDH 33
Busy wait Alla lösigar (hittills) har avät busy wait, de process som måste väta ligger i e tight loop och kollar och kollar och kollar Slöseri med CPU-tid, vem ka hjälpa? Operativsystem, Mats Björkma, MDH 34
Ta-daa! Is it a spi lock? Is it a test-ad-set istructio? No! It s The Operatig System! Operativsystem, Mats Björkma, MDH 35
OS-stöd för kommuikatio och sykroiserig 36
Semaforer Ett verktyg för att åstadkomma ömsesidigt uteslutade Fis i så gott som alla operativsystem Operativsystem, Mats Björkma, MDH 37
Semaforer Två versioer: Biära semaforer ka vara 0 eller 1 Räkade semaforer ka vara 0 Operativsystem, Mats Björkma, MDH 38
Semaforer Biära semaforer aväds är det fis e istas av e resurs och de ka avädas av e process i taget Exempel: Lås på toadörr. E avädare ka gå i på toa och vrida om låset. Övriga får då väta till dess de som aväder toa låser upp dörre Operativsystem, Mats Björkma, MDH 39
Semaforer Räkade semaforer aväds är det fis flera istaser av resurse och/ eller flera processer ka samsas Exempel: E ut/e i på kroge. Det fis ett maximalt atal tillåta samtidiga besökare. När maxatalet är uppfyllt måste ästa besökare väta på att ågo lämar lokale. Operativsystem, Mats Björkma, MDH 40
Semaforer forts. E semafor har två operatioer: wait(semaphore); räkar er sigal(semaphore); räkar upp Alterativa am: take/give, acquire/ release, dow/up, P/V (hollädska Probere/Verhoge försök/höj) Operativsystem, Mats Björkma, MDH 41
Mutex (MUTual EXclusio) E biär semafor kallas iblad mutex E mutex aväds som ett lås (kom ihåg toadörre), operatioera kallas iblad mutex_lock (wait) respektive mutex_ulock (sigal) Operativsystem, Mats Björkma, MDH 42
Semaforer forts. Om e semafor är 1 (eller mer) och e process aropar wait( ), så kommer semafore att räkas ed och processe får fortsätta Operativsystem, Mats Björkma, MDH 43
Semaforer forts. Om e semafor är 0 och e process aropar wait( ), så kommer processe att flyttas till ett vätetillståd (wait/sleep) och sättas i e kö associerad till semafore Processe blir kvar i kö till dess e aa process aropar sigal( ) Operativsystem, Mats Björkma, MDH 44
Semaforer forts. När e process aropar sigal( ) tittar operativsystemet om det fis ågo process i vätelista till de semafore. Om det fis ågo i kö, så väcks de första processe i kö upp och får fortsätta exekvera (processe flyttas till ready-kö) Om vätelista är tom, räkas semafore upp med 1 Operativsystem, Mats Björkma, MDH 45
Semaforer forts. OS:et löser problemet med busy wait: När e process måste väta behöver de ite ligga och spia rut rut och testa om de får fortsätta Operativsystemet försätter istället processe i ett vätetillståd, och lovar att väcka upp processe är de ka fortsätta Systemet slipper slösa CPU-tid på busy wait Operativsystem, Mats Björkma, MDH 46
Semaforer forts. Operativsystemet tillhadahåller äve rättvisa: Om flera processer med samma prioritet blir vätade på wait( ), så kommer operativsystemet att först väcka de som aropade wait( ) först (Vid busy wait och exv. test_ad_set är det slumpmässigt vilke av de vätade som har tur att testa precis vid rätt tid) Operativsystem, Mats Björkma, MDH 47
Semaforer forts. Semaforoperatioera måste vara odelbara (atomära) Operativsystemet garaterar detta Vätade processer sätts tillstådet till vätade (wait/sleep) läggs i i vätelista på e semafor Operativsystem, Mats Björkma, MDH 48
Semaforer forts. Problem med semaforer Priority iversio: e process med hög prioritet ka bli vätade på e semafor som e process med lägre prioritet har låst Baklås: Process 0 har låst semafore A och vätar på semafore B, Process 1 har låst semafore B och vätar på semafore A Operativsystem, Mats Björkma, MDH 49
Semaforer forts. Skrivarproblemet löst med semaforer: Process A Process B Ett skrivarjobb begärs. Processe aropar wait(lpr). Eftersom skrivare är ledig räkas semafore er till 0. Utskrifte startar. A blir avbrute av process B som har högre prioritet. B vill också skriva ut. B aropar wait(lpr). Eftersom semafore reda är 0 blir B försatt i vätetillståd (wait/sleep). A slutför utskrifte av det första dokumetet. Aropar sigal(lpr). B plockas ut ur semaforkö och ka skriva ut. Aropar sigal(lpr). Operativsystem, Mats Björkma, 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örkma, MDH 51
Processykroiserig Uppgift: sykroisera aktiviteter som måste ske i viss ordig Exempel: Producet/kosumetproblemet E process producerar meddelade Meddeladea placeras i e kö E aa process läser meddeladea Problem: Begräsad köstorlek Operativsystem, Mats Björkma, MDH 52
Producet/kosumet När producete har producerat ett meddelade skall kosumete kua kosumera det När kö är full måste producete väta tills kosumete kosumerat ett meddelade När kö är tom måste kosumete väta tills producete producerat ett meddelade Operativsystem, Mats Björkma, MDH 53
Producet/kosumet Exempel: Vi aväder tre semaforer: E räkade semafor för atalet tomma platser E räkade semafor för atalet fulla platser E biär semafor (mutex) för att få ömsesidigt uteslutade vid åtkomst till de delade kö Operativsystem, Mats Björkma, MDH 54
Producet/kosumetproblemet med semaforer #defie N 100 semaphore mutex = 1; semaphore empty = N; semaphore full = 0; void producer(void) { it item; /* Number of slots i the buffer */ /* Mutual exclusio */ /* Number of empty slots i the buffer */ /* Number of full slots i the buffer */ void cosumer(void) { it item; } while(true){ produce_item(&item); wait(&empty); wait(&mutex); eter_item(item); sigal(&mutex); sigal(&full); } } while(true){ wait(&full); wait(&mutex); remove_item(&item); sigal(&mutex); sigal(&empty); cosume_item(item); } Operativsystem, Mats Björkma, MDH 55
Producet/kosumetproblemet med semaforer felaktigt #defie N 100 semaphore mutex = 1; semaphore empty = N; semaphore full = 0; void producer(void) { it item; /* Number of slots i the buffer */ /* Mutual exclusio */ /* Number of empty slots i the buffer */ /* Number of full slots i the buffer */ void cosumer(void) { it item; } while(true){ produce_item(&item); wait(&empty); wait(&mutex); eter_item(item); sigal(&mutex); sigal(&full); } while(true){ wait(&mutex); wait(&full); remove_item(&item); sigal(&mutex); sigal(&empty); cosume_item(item); } Operativsystem, Mats Björkma, MDH 56 }
Semaforer Semaforer i kerel space vs user space Semaforer i kerel space => systemarop till OS:et Avädbara för sykroiserig mella processer Kräver ite delat mie mella processera Widows: CreateSemaphore(), CreateMutex() Uix: semget() Semaforer i user space => hateras i tillämpige Avädbara för sykroiserig mella trådar i samma process Aväder delat mie (plus ofta ågo form av stöd frå OS:et) Widows: CriticalSectio() aropar edast kära är ågo behöver ställa sig i kö Liux Futex (Fast userspace mutex): kräver TAS el. likade + systemarop för köhaterig Operativsystem, Mats Björkma, MDH 57
Meddeladesystem Processkommuikatio geom meddelade Två primitiver sed receive Direkt kommuikatio, eller Idirekt kommuikatio Operativsystem, Mats Björkma, MDH 58
Meddeladesystem - Direkt kommuikatio Process to Process IPC Sed(toProcess, message); Receive(fromProcess, message); Skicka broadcast till flera mottagade processer Sykro överförig (Redezvous) Ige buffrig, processera blockeras tills överförige sker Aalogi: Telefo Asykro överförig Buffrad kommuikatio, ige blockerig Aalogi: telefosvarare Operativsystem, Mats Björkma, MDH 59
Meddeladesystem - Idirekt kommuikatio Kommuikatio via brevlåda (mailbox) E mailbox iehåller E buffert Ett am Två möjligheter Mailboxe ägs av e process Mailbox owed by the process P1 P2 Mailbox owed by the OS Mailboxe ägs av OS:et P1 P2 P3 Operativsystem, Mats Björkma, MDH 60
Producet/kosumetproblemet med meddeladeöverförig #defie N 100 void producer(void){ } it item; message m,toke; while(1){ produce_item(&item); receive(cosumer,&toke); build_mesg(&m,&item); } sed(cosumer, &m); void cosumer(void){ } it item, i; message m,toke; for(i=0;i<n;i++) sed(producer,&toke); while(1){ receive(producer,&m); } extract_item(&m); sed(producer, &toke); cosume_item(item); Operativsystem, Mats Björkma, MDH 61
Delat mie De flesta operativsystem stöder det Speciella primitiver för skapade och åtkomst Felkällor: sykroiserig måste bli rätt Ite bra för distribuerade system Dock sabbt och effektivt om processera ka dela fysiskt mie Operativsystem, Mats Björkma, MDH 62
Delat mie Det delade miet mappas i i båda processeras adressrymd P1 P2 Shared Memory Widows: CreateFileMappig(), MapViewOfFile() Liux/Uix: shm_ope(), mmap() Operativsystem, Mats Björkma, MDH 63
Lärademåle ige Varför behövs processkommuikatio och processykroiserig? Race coditio, ömsesidigt uteslutade, kritiska avsitt Mekaismer för kommuikaito/ sykroiserig Semaforer, meddeladeöverförig, delat mie Operativsystem, Mats Björkma, MDH 64