Semaforit. Semaforit. semafori S S.arvo. alkuarvo P(S) S.joukko V(S)
|
|
- Kirsti Anna Uotila
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Semaforit Semaforit public public alkuarvo P(S) V(S) private private semafori S S.arvo S.joukko - P() aka WAIT() aka Down() jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue varattu, odota V() aka SIGNAL() aka Up() jos joku odottamassa, päästä joku odottajista etenemään, Jos odottajajoukko on tyhjä, vapauta kriittinen alue P ja V atomisia: samanaikaisesti vain yksi prosessi voi suorittaa niitä - Yleistä semaforeista Alkuperäinen idea: Dijkstra (6-luvun puoliväli) binäärisemaforit: vain arvot ja käytössä Operaatiot Alustus sem S=; sem forks[5] = ([5] ); P(S) (= passeren) V(S) (= vrijgeven) S.arvo vapaa / avoinna / etenemislupa varattu / suljettu / eteneminen kielletty S.joukko Etenemislupaa Blocked (Wait) -tilassa odottavat prosessit Toteutus: esim. PCB:t linkitetyssä listassa (=> jono) Yleiset semaforit: S.arvo ~ resurssilaskuri S.arvo > vapaiden yksiköiden lkm, etenemislupien määrä kuinka monta prosessia voi tehdä P()-operaation joutumatta Blocked tilaan ja semaforin jonoon S.arvo = ei vapaita [ jotkut toteutukset: S.arvo < ] jonossa odottavien prosessien lkm Ei operaatiota jonon käsittelyyn / pituuden kyselyyn! semaforin arvon kyselemiseen! jos tarve tietää, ylläpidä ko. tieto omassa muuttujassa - - P/V:n toteutus KJ:n ytimessä (Andrews Fig 6.5) P(S) V(S) if (S.arvo > ) S.arvo = S.arvo - else aseta prosessin tilaksi Blocked, lisää prosessi jonoon S.jono call Vuorottaja() if (isempty(s.jono)) S.arvo = S.arvo + else siirrä S.jonon ensimmäinen prosessi Ready-jonoon (tilaksi Ready) call Vuorottaja() -5 P/V:n toteutus (toinen tapa, Stallings Fig. 5.6 ja 5.7) P(S) V(S) S.arvo = S.arvo - if (S.arvo < ) aseta prosessin tilaksi Blocked, lisää prosessi jonoon S.jono call Vuorottaja() S.arvo = S.arvo + if (S.arvo >= ) siirrä S.jonon ensimmäinen prosessi Ready-jonoon call Vuorottaja() Miten ohjelmoijan huomioitava tämä toteutusero? -6
2 Poissulkeminen semaforia käyttäen sem mutex=; # vain perinteinen muuttujan nimi P(lock) process CS [i= to N] { # rinnakkaisuus! while (true){ ei kriittistä koodia; # varaa < critical section > # käytä (exclusive!) # vapauta V(lock) P(lock) P(lock) ei kriittistä koodia; V(lock) yksi semafori kullekin erilliselle kriittiselle alueelle huomaa oikea alkuarvo V(lock) -7-8 Esimerkki: Muistinhallinta () prosessi GET... REL GET... REL --- prosessi c c --- GET... REL --- koodi GET REL Muistinhallinta pagepool count addr pagepool[:max]; int count=max; addr function GET() { addr memaddr; memaddr = pagepool[count]; count = count-; return memaddr ; procedure REL(addr freepage) { count = count+; pagepool[count] = freepage; # vapaita muistitiloja ; käyttö pinona pagepool,7,,8,5,6,,9,.. count koodi -9 - Toimiikos tuo? addr pagepool[:max]; int count=max; framepool pagepool,7,,8,5,6,,9,.. 6 count addr function GET: addr function GET: { get memaddr = pagepool[count]; = { get memaddr = pagepool[count]; = pagepool[count]; pagepool[count]; count = count- count = count- GET==6 GET==6 Muistinhallinta (): poissulkeminen addr pagepool[:max]; int count=max; sem mutex=; addr function GET() { addr memaddr; memaddr = pagepool[count]; count = count-; return memaddr; procedure REL(addr freepage) { count = count+; pagepool[count] = freepage; pagepool,7,,8,5,6,,9,.. count mutex: - -
3 Ehtosynkronointi Synkronointi semaforia käyttäen Prosessi P käskyjä kerro tapahtumasta käskyjä Tapahtuma: mikä tahansa kiinnostava puskuri_täynnä, io_valmis, laskenta valmis, kriittinen alue vapaa (Looginen) tapahtuma Prosessi P käskyjä odota tapahtumaa käskyjä... semaforimuuttuja Kumpi ehtii ensin synkronointikohtaan? tarvitsee paikan missä odottaa (~jonottaa) sem A_Ready = ; ei ole tapahtunut, on tapahtunut Tuottaja tuota A V(A_ready); Kumpi ehtii ensin? Oikea alkuarvo? Kuluttaja P(A_ready); kuluta A - - Muistinhallinta (): ehtosynkronointi addr pagepool[:max]; int count=max; sem mutex=, avail=max; addr function GET() { addr memaddr; P(avail); memaddr = pagepool[count]; count = count- return memaddr; procedure REL(addr freepage) { count = count+; pagepool[count] = freepage; V(avail); pagepool,7,,8,5,6,,9,.. count mutex avail 6-5 aika Puomisynkronointi (barrier) n prosessia työskentelee yhdessä Iteratiivinen käsittely, synkronointi tietyn välivaiheen jälkeen Prosessi A synkronoi Prosessi B synkronoi Prosessi C synkronoi I II - 6 aika Worker[] synkronoi odota process Worker [i = to N] { while ( ) { käsittele vaihe x:n alku ; toimita synkronointitieto kaikille muille; odota synkronoititietoa kaikilta muilta; käsittele vaihe x:n loppu; Worker[] synkronoi odota odota Worker[] synkronoi - 7 Puomisynkronointi sem arrive =, arrive = ; process Worker { käsittele alkuosa V(arrive); # lähetä synkronointitapahtuma P(arrive); # odota toista prosessia käsittele loppuosa process Worker { käsittele alkuosa V(arrive); # lähetä synkronointitapahtuma P(arrive); # odota toista prosessia käsittele loppuosa Huomaa järjestys! Entä, jos ensin P ja sitten V? - 8
4 Väärin toteutettu puomisynkronointi! Entä toimiiko näin? Onko mitään haittaa? sem arrive =, arrive = ; sem arrive =, arrive = ; process Worker { käsittele alkuosa P(arrive); # odota toista prosessia V(arrive); # lähetä synkronointitapahtuma käsittele loppuosa process Worker { käsittele alkuosa P(arrive); # odota toista prosessia V(arrive); # lähetä synkronointitapahtuma käsittele loppuosa process Worker { käsittele alkuosa P(arrive); # odota toista prosessia V(arrive); # lähetä synkronointitapahtuma käsittele loppuosa Johtaa lukkiutumiseen: kumpikin vain odottaa toista!! - 9 process Worker { käsittele alkuosa V(arrive); # lähetä synkronointitapahtuma P(arrive); # odota toista prosessia käsittele loppuosa - Puomisynkronointi, yleiset semaforit Virheellinen puomisynkronointi! Miksi näin? sem arrive=, continue[:n] = ( [N] ); process Worker [i= to N] { käsittele alkuosa i V(arrive); # synkronointitapahtuma koordinaattorille P(continue[i]); # odota toisia prosesseja käsittele loppuosa i process Coordinator { count = ; while (count < N) { # odota, kunnes N synkronointitapahtumaa P(arrive); count++; for [i = to N] V(continue[i]); # synkronointitapahtuma prosesseille Entä jos vain yksi continue-semafori? - sem arrive=, continue= ; process Worker [i= to N] { käsittele alkuosa i V(arrive); # synkronointitapahtuma koordinaattorille P(continue); # odota toisia prosesseja käsittele loppuosa i process Coordinator { count = ; while (count < N) { # odota, kunnes N synkronointitapahtumaa P(arrive); count++; for [i = to N] V(continue); # synkronointitapahtuma prosesseille - Kilpailutilanne V(arrive); P(continue); Mitä tässä voi tapahtua? V(arrive); P(continue); koordinaattori P(arrive) OK kertaa! V(continue) kertaa! Rinnakkaisuuden hallinta resurssien varaus get/rel muuttujat hallinnan toteutus P/V semafori P/V:n toteutus LOCK/UNLOCK lukkomuuttuja GET {P(mutex) V(mutex) REL {P(mutex) V(mutex) P( ) LOCK(lock) UNLOCK(lock) pagepool mutex avail V( ) LOCK(lock) UNLOCK(lock) LOCK/UNLOCK toteutus test-and-set-käsky lukkomuuttuja LOCK loop..ts(x)... UNLOCK x = - -
5 buf: Esimerkkejä semaforin käytöstä Tuottajat ja kuluttajat Lukijat ja kirjoittajat Resurssien hallinta, vuoron antaminen Andrews Fig..: Producers and consumers using semaphores. (split binary semaphores) Toimiiko oikein? Mitä pitääkään tarkistaa? Halkaistu binäärisemafori (Split binary semaphore) semaforit empty ja full binäärisemaforeja, koska voivat saada vain arvoja ja koska aina toisella niistä on arvona ja toisella, niin niiden voidaan katsoa olevan yhdestä semaforista halkaistuja osia voidaan halkaista myös useampaa osaan: N kappaletta semaforeja, joista aina yhdellä on arvona ja muilla halkaistu binäärisemafori huolehtii myös keskinäisestä poissulkemisesta: vain yksi kerrallaan pääsee suorittamaan sen suojaamaa kriittistä aluetta, jos yhdellä semaforilla alkuarvona, muilla kaikilla prosesseilla koodissaan ensin P-operaatio semaforiinsa Se prosessi (yksi niistä prosesseista) aloittaa, jonka P- operaation kohteen semaforin arvo on. Sem empty =, full = ; ; Tuottaja i P(empty); buf=data; V(full);... Onko aloitus kunnossa? Kuluttaja j P(full) result = buf; V(empty)... Säilyykö oikea järjestys (tahdistus)? - saa tuottaa, vain jos kuluttaja lukenut - saa kuluttaa, vain jos tuottaja jotain tuottanut Tuleeko sekaannusta, jos usea tuottaja tai kuluttaja yrittää samaan aikaan käyttää puskuria? Pääseekö kumpikaan etenemään (lukkiutuminen)? Odotetaanko turhaan? Nälkiintyykö jompikumpi? N:n alkion puskuri; yksi tuottaja, yksi kuluttaja front rear Toimiiko jos usea tuottaja ja kuluttaja? Tarvitaan keskinäistä poissulkemista! Andrews Fig..: Bounded buffer using semaphores Entä, jos vain yksi Liisa Marttinen mutex? Andrews Fig..5: Multiple producers and consumers using semaphores. - 5
6 Lukijat ja kirjoittajat Yhteinen tietokanta DB tai joku muu objekti, esim. tiedosto, lista, Kaksi tietokantaan pääsystä kilpailevaa käyttäjäluokkaa Lukijat (readers) lukevat useita lukijoita voi olla käsittelemässä yhtäaikaa Kirjoittajat (writers) lukevat ja muuttavat vain yksi kerrallaan saa olla muuttamassa tietokantaa Luokka aktiivinen vain, jos toinen luokka passiivinen - Ratkaisu : R/W-poissulkemisongelmana Yksinkertaistettu ongelma, yksink. ratkaisu Poissulkeminen kaikille muille => semafori rw Turhan rajoittava Salli lukijoiden toimia rinnakkain Luokan poissulkeminen => semafori rw Ensimmäinen lukija varaa tietokannan lukijaluokalle, viimeinen lukija vapauttaa DB:n Kuka on ensimäinen / viimeinen? => laskuri nr testaa, varaa / vapauta => atominen: < > - Tehokkaampi ratkaisu lukijoita voidaan tarkastella yhtenä joukkona kun yksi on päässyt lukemaan, muut voivat tulla vapaasti perässä vain ensimmäisen lukijan täytyy varmistaa, ettei kukaan kirjoittaja ole kirjoittamassa eli varata kriittinen alue kun lukijoita ei enää ole, niin vuoro voidaan luovuttaa kirjoittajille viimeinen lukija vapauttaa kriittisen alueen tarvitaan laskuri ja sen päivittämistä, jotta tiedetään, mikä prosessi on ensimmäinen ja mikä viimeinen int nr = ; # lukijoiden lukumäärä nr=nr+; # kasvatetaan, kun mennään lukemaan nr=nr-; # vähennetään, kun poistutaan lukemasta if (nr = =) P(rw); # ensimmäinen varaa alueen if (nr == ) V(rw); # viimeinen vapauttaa sen -. lukija varaa tietokannan ja viimeinen lukija vapauttaa sen sem rw = ; int nr = ; sem mutex =; process Reader [i= to M] {... < nr = nr + ; if (nr = =) P(rw); > read the database; # ensimmäinen lukija < nr = nr -; if (nr = = ) V(rw); > # viimeinen process Writer [i= to N] {... P(rw); write the database; V(rw); RATKAISUN REILUUS? - Ratkaisu : R/W-ehtosynkronointiongelmana Odota, kunnes sopiva ehto tulee todeksi Toiminnallisuus: < await (ehto) lauseet; > Ehdon testaus ja lauseosa atomiseksi Tila BAD: (nr > and nw > ) or nw > RW: (nr == or nw ==) and nw <= RW muuttumaton, oltava voimassa aina (invariantti) nr = number of readers, nw = number of writers Ohjelmoi s.e. ehto RW on aina true saa lukea nw == (ei kukaan kirjoittamassa) saa kirjoittaa nr== and nw== (ei muita kirjoittajia eikä lukijoita) - 5 Jokaiselle odotukselle oma semafori! Tässä yksi poissulkeminen ja synkronointiehtoa. Andrews Fig..: A coarse-grained readers/writers solution
7 Jaettu binääriarvoinen semafori Liitä kuhunkin vahtiin (ehtoon) semafori ja laskuri : sem e, r, w; Vain yksi semafori kerrallaan auki ( <= (e+r+w) <= ) alussa: sem e =, r=, w=; await (nw==) nr = nr+ semafori: r = waiting place for readers laskuri: dr number of delayed readers await (nr== and nw==) nw = nw+ semafori: w = waiting place for writers laskuri: dw number of delayed writers poissulkeminen < > semafori: e = waiting place for entry laskurit: nr, nw numbers of readers and writers Ratkaisu, laajennettu Ota huomioon käyttövuorot Lukijat ensin, tai Vuoro prioriteetin perusteella: Kirjoittajat ensin! (jos muutokset tärkeitä; nälkiintymisvaara) Onko, joku odottamassa vuoroa? Ei voi kysyä semafori-operaatioilla omat laskurit: dw,dr Vuorojen toteutus omassa rutiinissa SIGNALNEXT Kriittinen alue vapautuu joku muu saa jatkaa, kuka? odottava lukija, odottava kirjoittaja, kokonaan uusi tulija process Reader { # <await (nw == ) nr = nr + ;> read the database; # <nr = nr -;> P(e); #varmistaa atomisuuden if (nw > ){ #joudutaan odottamaan dr = dr + ; V(e); P(r); nr=nr+; SIGNALNEXT; P(e); #varmistaa atomisuuden nr=nr-; process Writer { # <await (nw == ) nw = nw + ;> write the database; # <nw = nw -;> P(e); #varmistaa atomisuuden if (nr> or nw > ){ #joudutaan odottamaan dw = dw + ; V(e); P(w); nw=nw+; SIGNALNEXT; P(e); #varmistaa atomisuuden nw=nw- SIGNALNEXT; SIGNALNEXT; SIGNALNEXT - vuoron antaminen: Lukijat ensin! if (nw == and dr > ) { dr = dr -; V(r); # herätä odottava lukija, tai else if (nr == and nw == and dw > ) { dw = dw -; V(w); # herätä odottava kirjoittaja, tai else V(e); # päästä joku uusi etenemään Menetelmä: Viestikapulan välitys (Baton passing) - Viestikapulan välitys (Baton passing) semafori ~ viestikapula; koska semaforit e, r ja w muodostavat jaetun binäärisemaforin, niin kulloinkin yhdellä niistä on arvo ja muilla arvo Vain yksi etenee kerrallaan kriittisillä alueilla pyydettävä etenemislupaa: P(e) se etenee, joka saa haltuunsa semaforin e Muiden odotettava täysin uusi lukija tai kirjoittaja: P(e) vuoroaan jonottamaan jääneet lukijat ja kirjoittajat: Jos etenijän pyyntöön ei voi suostua: Lukijat: V(e); P(r) (jää odottamaan lukijan vuoroaan) Kirjoittajat: V(e); P(w) (jää odottamaan kirjoittajan vuoroaan) - 7
8 Etenijä aktivoi itse seuraavan viestikapulan haltijan (kohdassa SIGNALNEXT) jos vuoroaan odottavia, herätä odottaja semaforista: joko V(r) tai V(w) jätä sille poissulkemissemafori valmiiksi kiinni: älä tee V(e) jos ei odottajia, jätä viestikapula vapaaksi uusille tulijoille: V(e) Herätetty välittää aikanaan kapulan seuraavalle ja se seuraavalle ja... Takaa ettei kukaan pääse etuilemaan! Ehdot taatusti voimassa, kun jonottaja saa prosessorin SIGNALNEXT aktivoi vain yhden prosessin, kun ehto tuli todeksi FCFS - SIGNALNEXT - vuoron antaminen: Lukijat ensin! if (nw == and dr > ) { dr = dr -; V(r); # herätä odottava lukija, tai else if (nr == and nw == and dw > ) { dw = dw -; V(w); # herätä odottava kirjoittaja, tai else V(e); # päästä joku uusi etenemään Osa ehdoista on jo tiedossa, kun ollaan lukijassa tai kirjoittajassa => voidaan jättää pois eikä tarvitse enää testata! - Semaforin r jonossa odottavat lukijat Semaforin w jonossa odottavat kirjoittajat Entrysemaforin e jonossa odottavat Voiko mennä lukemaan / kirjoittamaan? Jos jonoon, vapautetaan entry-semafori seuraavalle. Jos ei, niin valitaan seuraava tietokannan käsittely lopputoimet: poistutaan ja valitaan seuraava kriittiselle alueelle pääsijä. laskurit dr ja dw kertovat odottavien lukumäärän. Päästetäänkö lukija, kirjoittaja vai uusi tulija? Jos päästetään odottava lukija tai kirjoittaja, niin päivitetään myös laskurit valniiksi! Lukijat ensin Tarpeettomat osat annetusta SIGNALNEXT-koodista poistettu Andrews Fig..: A readers / writers solution using passing the baton SIGNALNEXT - vuoron antaminen: Kirjoittajat ensin! Resurssien hallinta ja vuoronantaminen Reader: uusi lukija odottamaan, jos kirjoittaja odottamassa if (nw> or dw>) # DELAY { dr=dr+; V(e); P(r); Writer: herätä lukija vain, jos kirjoittajia ei odottamassa if (dw>) { # SIGNALNEXT dw = dw-; V(w); # herätä kirjoittaja elseif (dr>) { # herätä lukija dr = dr-; V(r); else V(e); # herätä uusi * Resurssi hyvin laajasti ymmärrettynä: mitä tahansa mitä prosessi joutuu odottamaan: Pääsy kriittiselle alueelle tai tietokantaan puskuritilaa muistia tulostimen käyttö * Vuoronantamisessa halutaan tarkemmin määrätä, mikä prosessi pääsee etenemään! Semafori itse pitää odottajat FIFO-jonossa! V-operaatio vapauttaa jonon ensimmäisen etenemään! Lukijat/kirjoittajat: lupa luokkakohtainen
9 Toimivatko rutiinit oikein Poissulkeminen? Ei lukkiutumista (deadlock/livelock)? Ei tarpeettomia viipeitä? Lopulta onnistaa? sem avail ~ resurssin varaus yksi kerrallaan; jos ei heti onnistu, niin jonoon odottamaan (FCFS), josta vuorollaan saa resurssin varatuksi sem mutex ~ resurssin käyttöönotto yksi kerrallaan; jos ei heti onnistu, niin FCFS- jonoon odottamaan, josta vuorollaan kirjaa resurssin haltuunsa vapautettaessa ensin kirjataan vapaaksi ja sitten annetaan muiden varattavaksi Missä järjestyksessä prosessit päästetään jatkamaan? - 9 Palvelujärjestys Semaforin jonot aina FCFS Ongelma? Jäljellä sivutilaa, eka haluaa, toka 5! Voiko semaforiin liittää prioriteetin? Jonotusjärjestys? Baton passing- tekniikka: eri luokille omat jonot Montako erilaista? Dynaaminen vuorottelu? Kaikki mahdolliset varattavat sivutilakoot ( N) Ratkaisu: yksityiset semaforit + oma jono Kullekin prosessille oma semafori, jossa odottaa yksin Vuoron antamiseen käytettävä tietorakenne (jono) erikseen alkiossa semafori ja yleensä tietoa, jonka perusteella valitaan Vuoron antaja valitsee sopivan semaforin vuorojonosta, ja päästää liikkeelle semaforissa odottavan asiakkaan - 5 SJN: Lyhyin työ seuraavaksi request(time,id): # käyttöaika, prosessin tunnus P(e); if (!free) DELAY; # ei ole vapaa => odotus free = false; # nyt omaan käyttöön! SIGNAL; # release(): # resurssin vapautus P(e); free = true; SIGNAL; # pienin käyttöaika ensin! DELAY: Odottajan ID ja TIME (suoritusaika) suoritusajan mukaan järjestettyyn jonoon (PAIRS) oikeaan kohtaan V(e) eli vapauta kriittinen alue jää odottamaan vuoroasi P(b[ID]) Tässä tarvitaan kullekin oma semafori, jotta pystytään herättämään oikea prosessi: b[n] = ([n] ) PAIRS-jono määrää järjestyksen: herätetään aina jonon ensimmäinen prosessi SIGNALNEXT: Reguest-vaihe vapauta kriittinen alue V(e) eli päästä joku uusi Requestvaiheeseen Release-vaiheen lopussa Jos jonossa odottajia, niin ota jonon ensimmäisen alkiopari (time, ID) ja herätä prosessi ID: V(b[ID]; muuten V(e) PAIRS: P P5 P P prosessin ID käyttöaika jono järjestetty käyttöajan pituuden mukaan REQUEST (6, P) b[n] n- P P P Oma semafori jokaiselle prosessille (n kpl): ID:t..n-. Prosessin odotus riippuu sen sijainnista PAIRS-jonossa. (Kun resurssi vapautuu, niin jonon. saa resurssin ja pääsee etenemään. Jono elää ja muuttuu uusien pyyntöjen mukana. ) - 5 Andrews Fig..: Shortest job next allocation using semaphores
10 Entä, jos resurssia enemmän kuin yksikkö? amount = montako yksikköä prosessi tarvitsee tai palauttaa avail = montako yksikköä on vapaana (~free) request: testattava, onko vapaana tarvittu määrä yksiköitä amount <= avail. Jos on, niin varataan, muuten talletetaan myös amount myös tässä voidaan vapauttaa odottavia prosesseja, jos vapaita resursseja on tarpeeksi release: vapautetaan jonosta ensimmäinen prosessi, jonka tarpeet pystytään tyydyttämään POSIX-kirjasto, pthread # include <pthread.h> pthread_mutex_init(), _lock(), _trylock(), _unlock(), _destroy() _mutexatrr_*(), pthread_rwlock_init(), _rwlock_rdlock(),_rwlock_tryrdlock(), _rwlock_wrlock(), _rwlock _trywrlock(), _rwlock_unlock(), _rwlock_destroy(), _rwlockattr_*(), # include <semaphore.h> sem_init(), sem_wait(), sem_trywait(), sem_post(), sem_getvalue(), sem_destroy(), c Lue man- / opastussivut c Andrews ch.6, Java.5 Aterioivat Filosofit (Dijkstra) java.util.concurrent Lukkoja, atomisia muuttujia Säikeiden synkroinointiin on tarjolla neljä luokkaa: Semaphore, CyclicBarrier, CountDownLatch ja Exchanger. semaforilta pitää saada lupa lohkon käyttöön kutsumalla acquire()-metodia, johon säie jää odottamaan, mikäli lupaa ei heti saada. Vastaavasti synkroinoitavan osuuden jälkeen lupa pitää palauttaa semaforille release()-metodilla. Kurssi: Ohjelmointitekniikka (Java) - 57 Filosofi: aattelepa ite ota kaksi haarukkaa... yksi kummaltakin puolelta syö, syö, syö spagettia palauta haarukat Kuinka varata haarukat ilman - lukkiutumista - turhaa odottamista - nälkiintymistä s.e. kaikki saavat olla paikalla? - 58 Ratkaisu : kullekin haarukalle oma semafori sem fork[..] = (,,,, ) Ratkaisu : vain yksi voi yrittää kerrallaan sem turn = # säätelee yritysvuoroja process P[i]: repeat think() P(fork[i]) P(fork[(i + ) mod 5]) eat() V(fork[i]) V(fork[(i+) mod 5]) until false Voi lukkiutua! Kukin ehtii ottaa yhden haarukan ja jää odottamaan Ei OK! Miksei? toista Liisa eikä Marttinen kukaan pääse syömään! process P[i]: repeat think() P(turn) P(fork[i]) P(fork[(i+) mod 5]) V(turn) eat() V(fork[i]) V(fork[(i+) mod 5]) until false Turhaa odotusta! Ei ihanok! Miksei?
11 Turhaa odotusta! Oletetaan, että ensin kaikki ajattelevat ja sitten haluavat syömään esim. järjestyksessä fil, fil, fil, fil, fil fil saa haarukat ja pääsee syömään, fil varaa itselleen varausvuoron ja jää odottamaan haarukkaa ja muut sitten vain odottavat, ensin varausvuoroa ja haarukoita fil joutuu ihan turhaan odottamaan, haarukat olisivat vapaina, mutta niitä ei pääse varaamaan! Mutta kukin pääsee varaamaan ja aikanaan syömään => ei ole nälkiintymistä! varaussemafori turn pitää varaukset FIFO-jonossa - 6 Ratkaisu : OK Andrews Fig..7-6 Entä onko turhaa odotusta? Korkeintaan filosofia saa haarukan käteensä: fil haarukan, fil haarukan, fil haarukan ja joko fil tai fil haarukan riippuen siitä kumpi ensiksi ehtii. Haarukka jää aina vapaaksi ja sen saa fil, joka siis pääsee syömään ja aikanaan vapauttaa hallussaan olevat haarukat ja päästää muut syömään. Näin estetään lukkiutuminen! Ratkaisu ei myöskään aiheuta nälkiintymistä. Suosii tosin fil:aa, mutta vain tässä erikoistilanteessa. - 6 Ratkaisu : OK, mutta... vrt. sem fork[5] = ([5] ); sem room = ; process Philosopfer[i= to ] { think(); P(room); P(fork[i]); P(fork[(i+) mod 5]); eat(); V(fork[i]); V(fork[(i+) mod 5]); V(room); Estää lukkiutumisen! Ei turhaa odotusta. Saavatko kaikki olla paikalla? Stallings Fig Ratkaisu 5: OK? Nälkiintyminen? Tanenbaum Fig Huom: down() = P(), up() = V() Tanenbaum Fig
12 Ratkaisu 5: Tapettaisko filosofi? Ratkaisu 6: OK, ei yhteisiä resursseja EATING HUNGRY Ostakaa 5 haarukkaa lisää! Filosofi[i]: aatteleppa ite ota kaksi haarukkaa yksi molemmilta puolilta syö, syö, syö spagettia palauta haarukat
Semaforit ja rinnakkaisuuden hallinta
Semaforit ja rinnakkaisuuden hallinta Tuottajat ja kuluttajat Resurssien hallinta, vuoron antaminen Lukijat ja kirjoittajat Andrews 4.2, 4.4-4.6 Tuottajat ja kuluttajat Andrews: ss.158-160 3-2 Toimiiko
LisätiedotSemaforit ja rinnakkaisuuden hallinta
Semaforit ja rinnakkaisuuden hallinta Tuottajat ja kuluttajat Resurssien hallinta, vuoron antaminen Lukijat ja kirjoittajat Andrews 4.2, 4.4-4.6 Tuottajat ja kuluttajat Andrews: ss.158-160 3-2 Toimiiko
LisätiedotSemaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Lukijat ja kirjoittajat. Andrews 4.2, 4.4-4.6 Rio 2004 / Auvo Häkkinen
Semaforit ja rinnakkaisuuden hallinta Tuottajat ja kuluttajat Resurssien hallinta, vuoron antaminen Lukijat ja kirjoittajat Tuottajat ja kuluttajat Andrews: ss.158-160 Andrews 4.2, 4.4-4.6 3-2 0 Toimiiko
Lisätiedotalkuarvo P(S) public V(S) public jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue varattu, odota
Semaforit 2-1 Semaforit public public alkuarvo P(S) V(S) private private semafori S S.arvo S.joukko P() aka WAIT() aka Down() jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue
LisätiedotSemaforit Liisa Marttinen 2-1
Semaforit 2-1 Semaforit public public alkuarvo P(S) V(S) private private semafori S S.arvo S.joukko P() aka WAIT() aka Down() jos kriittinen alue vapaa, lukitse se ja jatka eteenpäin jos kriittinen alue
LisätiedotSemaforit ja rinnakkaisuuden hallinta. Tuottajat ja kuluttajat. Halkaistu binäärisemafori (Split binary semaphore) semaforit empty ja full
Semaforit ja rinnakkaisuuden hallinta Tuottajat ja kuluttajat Andrews: ss.158-160 Esimerkkejä semaforin käytöstä: Tuottajat ja kuluttajat Lukijat ja kirjoittajat Resurssien hallinta, vuoron antaminen Andrews
LisätiedotOSA I: Yhteisten muuttujien käyttö. Prosessit samassa koneessa. Rio 2004 / Auvo Häkkinen 2-1
OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa 2-1 Sisältöä Poissulkeminen ja synkronointi Semaforit ja rinnakkaisuuden hallinta Lukkiutuminen Monitorit 2-2 Poissulkeminen ja synkronointi
LisätiedotOSA I: Yhteisten muuttujien käyttö. Sisältöä. Prosessit samassa koneessa. Poissulkeminen ja synkronointi. Semaforit ja rinnakkaisuuden hallinta
OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa 2-1 Sisältöä Poissulkeminen ja synkronointi Semaforit ja rinnakkaisuuden hallinta Lukkiutuminen Monitorit 2-2 Poissulkeminen ja synkronointi
LisätiedotOSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa. Sisältöä. Poissulkeminen. Halutut ominaisuudet 2-1. Rinnakkaiset, atomiset operaatiot
Sisältöä OSA I: Poissulkeminen ja nti Semaforit ja rinnakkaisuuden hallinta Yhteisten muuttujien käyttö Prosessit samassa koneessa Lukkiutuminen Monitorit 2-1 2-2 Poissulkeminen ja nti Rinnakkaiset, atomiset
LisätiedotOSA I: Sisältöä. Atomisuus (atomic action) v Poissulkeminen ja synkronointi. Kriittinen (koodi)alue (critical section)
Sisältöä OSA I: Yhteisten muuttujien käyttö Prosessit samassa koneessa Poissulkeminen ja nti Semaforit ja rinnakkaisuuden hallinta Lukkiutuminen Monitorit 2-1 2-2 Atomisuus (atomic action) v Poissulkeminen
LisätiedotMonitorit. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5
Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews 5.1-5.2, Stallings 5.5 Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla -
LisätiedotMonitorit. Tavoite. Monitori Synkronointimenetelmiä Esimerkkejä. Andrews , Stallings 5.5. Minimoi virhemahdollisuuksia
Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Andrews 5.1-5.2, Stallings 5.5 Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla -
LisätiedotOngelmakenttä. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan. Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus
Yhteenvetoa Ongelmakenttä Rinnakkaisuuden tarve Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus Kommunikointiin tarvitaan Yhteisiä muuttujia (data) Kommunikointikanavia one-to-one
LisätiedotOngelmakenttä. Yhteenvetoa. Ratkottava. Mekanismit. Lukkomuuttujat. Lukkomuuttujat, Spin Locks. Rinnakkaisuuden tarve. Kommunikointiin tarvitaan
Ongelmakenttä Yhteenvetoa Rinnakkaisuuden tarve Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus Kommunikointiin tarvitaan Yhteisiä muuttujia (data) Kommunikointikanavia one-to-one
LisätiedotYhteenvetoa. Ongelmakenttä
Yhteenvetoa Ongelmakenttä Rinnakkaisuuden tarve Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus Kommunikointiin tarvitaan Yhteisiä muuttujia (data) Kommunikointikanavia one-to-one
LisätiedotTaustaa. Lukkiutuminen. Seuraukset. Määritelmiä Lukkiuma (deadlock) päättymätön odotus BLOCKED-tilassa. prosessi P. prosessi Q. pyydä A? OK.
Lukkiutuminen Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely Taustaa prosessi P pyydä A? OK. pyydä B? Odota! yksityiskäyttöiset objektit objekti: puskuri, sivu, skanneri, levyajuri,
LisätiedotOngelmakenttä. Yhteenvetoa. Mekanismit. Ratkottava. Lukkomuuttujat, Spin Locks. Lukkomuuttujat. Rinnakkaisohjelmistot 2004 / Auvo Häkkinen 9-1
Ongelmakenttä Yhteenvetoa Rinnakkaisuuden tarve Ympäristö Suunnittelun yksinkertaistaminen Suorituskyky Luotettavuus Kommunikointiin tarvitaan Yhteisiä muuttujia (data) Kommunikointikanavia one-to-one
LisätiedotLukkiutuminen. Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely. Andrews 4.3 Stallings (tai mikä tahansa KJ-kirja)
Lukkiutuminen Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely Andrews 4.3 Stallings 6.1-6.6 (tai mikä tahansa KJ-kirja) prosessi P pyydä A? OK. pyydä B? Odota! Taustaa yksityiskäyttöiset
LisätiedotLukkiutuminen. Taustaa
Lukkiutuminen Andrews 4.3 Stallings 6.1-6.6 (tai mikä tahansa KJ-kirja) Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely prosessi P pyydä A? OK. pyydä B? Odota! Taustaa yksityiskäyttöiset
Lisätiedot4-13. Ratkaisu 4: OK, mutta... vrt. 2. Ratkaisu 3: OK. Ratkaisu 5: OK? Nälkiintyminen?
Taustaa prosessi P prosessi Q yksityiskäyttöiset objektit q Lukkiutuminen pyydä A? OK. Taustaa Aterioivat Filosofit Ennaltaehkäisy Havaitseminen Välttely A pyydä B? Odota! C Andrews. Stallings 6.-6.6 (tai
LisätiedotLiite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen
Helsingin Yliopisto, tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi (syksy 2006) Liite 1. Projektin tulokset (Semaforit Javassa) Jukka Hyvärinen Aleksanteri Aaltonen a. Käyttötarkoitus ja sovellusalue
LisätiedotKäyttöjärjestelmät: poissulkeminen ja synkronointi
Käyttöjärjestelmät: poissulkeminen ja synkronointi Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Lähteet Stallings, W. Operating Systems Haikala, Järvinen, Käyttöjärjestelmät Eri Web-lähteet
LisätiedotTavoite. Monitorit. Monitori Hoare 1974. Monitori. Minimoi virhemahdollisuuksia. Monitori Synkronointimenetelmiä Esimerkkejä
Tavoite Monitorit Andrews 5.1-5.2, Stallings 5.5 Monitori Synkronointimenetelmiä Esimerkkejä Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla -
LisätiedotOSA II: Hajautettu ympäristö. Sisältö, osa II. Ei yhteistä muistia. Sanomanvälitys. Etäproseduurikutsu. Rendezvous. Rio 2004 / Auvo Häkkinen
OSA II: Hajautettu ympäristö Ei yhteistä muistia 6-1 Sisältö, osa II Sanomanvälitys Etäproseduurikutsu Rendezvous 6-2 Sanomanvälitys Käsitteistöä Kanavat Asiakkaat ja Palvelijat Kommunikointitapoja Andrews
LisätiedotSemaforit Javassa. Mari Kononow, Eveliina Mattila, Sindi Poikolainen HELSINGIN YLIOPISTO
Semaforit Javassa Mari Kononow, Eveliina Mattila, Sindi Poikolainen 13.12.2008 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Ohjetta saa käyttää opetukseen ja jatkokehitykseen Johdanto Semaforeja
Lisätiedot5. Luento: Rinnakkaisuus ja reaaliaika. Tommi Mikkonen, tommi.mikkonen@tut.fi
5. Luento: Rinnakkaisuus ja reaaliaika Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Perusongelmat Jako prosesseihin Reaaliaika Rinnakkaisuus Rinnakkaisuus tarkoittaa tässä yhteydessä useamman kuin yhden
LisätiedotOppimistavoitteet kurssilla Rinnakkaisohjelmointi
17.5.2006 1/5 Oppimistavoitteet kurssilla Rinnakkaisohjelmointi Rinnakkaisuus ja rinnakkaisuuden soveltaminen tietojenkäsittelyjärjestelmissä Kurssin Tietokoneen toiminta perusteella ymmärtää, miten ohjelman
Lisätiedotpoissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia pois ohjelmoijalta kääntäjälle
Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia
LisätiedotMonitorit. Monitori Synkronointimenetelmiä Esimerkkejä
Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia
LisätiedotTavoite. Monitorit. Semafori perusmekanismi synkronointiin. Hyötyjä:
Monitorit Monitori Synkronointimenetelmiä Esimerkkejä Tavoite Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla - meniköhän oikein? Yksityiskohtia
LisätiedotRinnakkaisohjelmointi, Syksy 2006
Rinnakkaisohjelmointi, Syksy 2006 17.12.2006 Opintopiiri WTF Mika Holmström Paula Kemppi Janne Piippo Lasse Lukkari Javan semaforit 1. Menetelmän käyttötarkoitus ja sovellusalue Semaforin idea kehitettiin
LisätiedotOSA II: Hajautettu ympäristö. Ei yhteistä muistia. Rio 2004 / Auvo Häkkinen
OSA II: Hajautettu ympäristö Ei yhteistä muistia 6-1 Sisältö, osa II Sanomanvälitys Etäproseduurikutsu Rendezvous 6-2 Sanomanvälitys Käsitteistöä Kanavat Asiakkaat ja Palvelijat Kommunikointitapoja Andrews
LisätiedotJavan semaforit. Joel Rybicki, Aleksi Nur mi, Jara Uitto. Helsingin yliopisto
Javan semaforit Joel Rybicki, Aleksi Nur mi, Jara Uitto 16.12.2007 Helsingin yliopisto Tietojenkäsittelytieteen laitos Tätä ohjetta saa käyttää ja jatkokehittää opetustarkoituksiin. Javan semaforitoteutus
LisätiedotOSA II: Hajautettu ympäristö. Sisältö, osa II. Sanomanvälitys. Käsitteistöä. Sanomanvälitys. Kommunikointi. Sanomanvälitys. Etäproseduurikutsu
Sisältö, osa II OSA II: Sanomanvälitys Etäproseduurikutsu Hajautettu ympäristö Ei yhteistä muistia Rendezvous 6-1 6-2 Sanomanvälitys Käsitteistöä Käsitteistöä Kanavat Asiakkaat ja Palvelijat Kommunikointitapoja
LisätiedotTavoite. Monitorit. Semafori perusmekanismi synkronointiin
Tavoite Monitorit Andrews 5.1-5.2, Stallings 5.5 Monitori Synkronointimenetelmiä Esimerkkejä Minimoi virhemahdollisuuksia poissulkeminen ohjelmoijan vastuulla P():t ja V():t siellä, täällä ja tuolla -
LisätiedotHajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä
Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä 4-1 Sisältö, osa II Sanomanvälitys kanavat (channel), joihin lähetetään dataa (sanomia) sanomanvälitysprimitiivejä (send, receive)
LisätiedotHajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä
Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä 4-1 Sisältö, osa II Sanomanvälitys kanavat (channel), joihin lähetetään dataa (sanomia) sanomanvälitysprimitiivejä (send, receive)
Lisätiedot1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 2. p 1. lock write 1
T-79.179 Rinn. ja haj. digitaaliset järjestelmät Laskuharjoitus #7 15.3.2002 Laatinut: Esa Kettunen 1. Tarkastellaan seuraavaa stokastista Petri-verkkoa: p 1 p 2 getlock 1 getlock 2 lock write 1 write
LisätiedotSisältö, osa II. Sanomanvälitys. Kanavat. Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä.
Sisältö, osa II Hajautettu ympäristö Ei yhteistä muistia Kommunikointi sanomien välityksellä Sanomanvälitys kanavat (channel), joihin lähetetään dataa (sanomia) sanomanvälitysprimitiivejä (send, receive)
LisätiedotJaana Diakite Projekti 1 JAVA-Monitorit 1(13) Rinnakkaisohjelmointi Anu Uusitalo
Jaana Diakite Projekti 1 JAVA-Monitorit 1(13) JAVA MONITORIT Monitorien käyttötarkoitus ja sovellusalue Monitorit ovat Java ohjelmointikielen sisäänrakennettu mekanismi säikeiden rinnakkaisuuden hallintaan.
Lisätiedot2 Konekieli, aliohjelmat, keskeytykset
ITK145 Käyttöjärjestelmät, kesä 2005 Tenttitärppejä Tässä on lueteltu suurin piirtein kaikki vuosina 2003-2005 kurssin tenteissä kysytyt kysymykset, ja mukana on myös muutama uusi. Jokaisessa kysymyksessä
LisätiedotKäyttöjärjestelmät II
LUENTO 1 Käyttöjärjestelmät II Kertaus: KJ-I ja RIO (KJ2 n osalta) Ch 1-8, 11-12 [Stal05] Kustakin luvusta enemmän tai vähemmän alkuosa Jos jokin asiat tässä tuntuvat hatarilta, niin (a) kysykää ja/tai
LisätiedotPalvelut. Sulautetut järjestelmät Luku 2 Sivu 1 (??) Sulautetut käyttöjärjestelmät
Sulautetut järjestelmät Luku 2 Sivu 1 (??) Palvelut Käyttöjärjestelmän tehtävänä on tarjota ohjelmoijalla erilaisia palveluita Tyypillisin palvelu, jota sulautetut käyttöjärjestelmät tarjoavat on prosessien
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 19: Rinnakkaisuus Riku Saikkonen (merkityt ei-laajan kurssin kalvot: Otto Seppälä) 24. 3. 2011 Sisältö 1 Säikeet 2 Lukot 3 Monitorit 4 Muuta säikeisiin
LisätiedotPino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:
Pino (stack) Pino: viimeisenä sisään, ensimmäisenä ulos (LIFO, Last In, First Out) -tietorakenne kaksi perusoperaatiota: alkion lisäys pinon päälle (push), ja päällimmäisen alkion poisto (pop) Push(alkio)
LisätiedotKaksiloppuinen jono D on abstrakti tietotyyppi, jolla on ainakin seuraavat 4 perusmetodia... PushFront(x): lisää tietoalkion x jonon eteen
Viimeksi käsiteltiin pino: lisäys ja poisto lopusta jono: lisäys loppuun, poisto alusta Pinon ja jonon yleistävä tietorakenne: kaksiloppuinen jono alkion lisäys/poisto voidaan kohdistaa jonon alkuun tai
LisätiedotRinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti
Rinnakkaisohjelmointi kurssi Opintopiiri työskentelyn raportti Opintopiiri: Heikki Karimo, Jesse Paakkari ja Keijo Karhu Päiväys: 15.12.2006 Ohjelmointitehtävä C i C i : Säikeet ja kriittisen vaiheen kontrollointi
Lisätiedot4. Luento: Prosessit ja säikeets. Tommi Mikkonen, tommi.mikkonen@tut.fi
4. Luento: Prosessit ja säikeets Tommi Mikkonen, tommi.mikkonen@tut.fi Agenda Prosessi Säikeet Keskeytykset Keskeytyskäsittely Käyttöjärjestelmäkutsut Prosessielementti Prosessin hallinta Suunnittelunäkökohtia
Lisätiedot811312A Tietorakenteet ja algoritmit , Harjoitus 2 ratkaisu
811312A Tietorakenteet ja algoritmit 2017-2018, Harjoitus 2 ratkaisu Harjoituksen aiheena on algoritmien oikeellisuus. Tehtävä 2.1 Kahvipurkkiongelma. Kahvipurkissa P on valkoisia ja mustia kahvipapuja,
LisätiedotAlkuarvot ja tyyppimuunnokset (1/5) Alkuarvot ja tyyppimuunnokset (2/5) Alkuarvot ja tyyppimuunnokset (3/5)
Alkuarvot ja tyyppimuunnokset (1/5) Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int luku = 123; Alkuarvon on oltava muuttujan tietotyypin mukainen, esimerkiksi int-muuttujilla kokonaisluku,
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2011 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2011 1 / 39 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle
Lisätiedot12. Javan toistorakenteet 12.1
12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu
Lisätiedot11. Javan toistorakenteet 11.1
11. Javan toistorakenteet 11.1 Sisällys Laskuri- ja lippumuuttujat. Sisäkkäiset silmukat. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin
LisätiedotRinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka
Rinnakkaisuus parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa Rinnakkaisuuden etuja: laskennan nopeutuminen (sarjoittuvat operaatiojonot) ilmaisuvoima (ongelman
LisätiedotYleiskuva. Käyttöjärjestelmät II. Tietokonejärjestelm. rjestelmä. KJ ja laitteistopiirteet. KJ ja laitteistopiirteitä.
Kertaus: : KJ-I ja RIO (KJ2 n osalta) Ch 1-8, 11-12 12 [Stal05] Kustakin luvusta enemmän n tai vähemmv hemmän n alkuosa Jos jokin asiat tässt ssä tuntuvat hatarilta, niin (a) kysykää ja/tai (b) kerratkaa
LisätiedotIT K 1 45 K ä yt t öj ä rj estelmät
IT K 1 45 K ä yt t öj ä rj estelmät Tenttikysymyksiä ja vastauksia Aliohjelman suoritusperiaate, ts. selvitä pinon käyttö ja paluuarvon välittäminen (3p) 1. Ennen aliohjelman aloittamista kutsuja tallettaa
LisätiedotKäyttöjärjestelmät II
LUENTO 1 Käyttöjärjestelmät II Kertaus: : KJ-I ja RIO (KJ2 n osalta) Ch 1-8, 11-12 12 [Stal05] Kustakin luvusta enemmän n tai vähemmv hemmän n alkuosa Jos jokin asiat tässt ssä tuntuvat hatarilta, niin
LisätiedotMonitorit -projekti Rinnakkaisohjelmointi
Monitorit -projekti Rinnakkaisohjelmointi 13.12.2006 Jaakko Louhio, Lari Sorvo Projektin tuloksia, kertaustehtäviä ja koodeja saa käyttää opetukseen yliopistolla vapaasti omalla vastuulla. 3. MONITORIT
LisätiedotOhjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
LisätiedotSisältöä SÄIKEET, SMP
LUENTO 5 Sisältöä SÄIKEET, SMP Stallings, Luku 4 Prosessi vs. säie Miksi säikeitä? ULT: Käyttäjätason säikeet KLT: Säikeiden toteutus ytimessä SMP Windowsin säikeet 1 2 Säikeet (multithreading) Prosessi
Lisätiedot13. Loogiset operaatiot 13.1
13. Loogiset operaatiot 13.1 Sisällys Loogiset operaatiot AND, OR, XOR ja NOT. Operaatioiden ehdollisuus. Bittioperaatiot. Loogiset operaatiot ohjausrakenteissa. Loogiset operaatiot ja laskentajärjestys.
LisätiedotSisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä
Sisällys 11. Javan toistorakenteet Laskuri- ja lippumuuttujat.. Tyypillisiä ohjelmointivirheitä: Silmukan rajat asetettu kierroksen verran väärin. Ikuinen silmukka. Silmukoinnin lopettaminen break-lauseella.
Lisätiedot815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 3 vastaukset Harjoituksen aiheena ovat imperatiivisten kielten muuttujiin liittyvät kysymykset. Tehtävä 1. Määritä muuttujien max_num, lista,
LisätiedotOhjelmoinnin peruskurssien laaja oppimäärä
Ohjelmoinnin peruskurssien laaja oppimäärä Luento 11: Rinnakkaisuus Riku Saikkonen (osa kalvoista on suoraan ei-laajan kurssin luennoista) 25. 4. 2012 Sisältö 1 Rinnakkaisuusmalleja: säie ja prosessi 2
LisätiedotGraafisen käyttöliittymän ohjelmointi Syksy 2013
TIE-11300 Tietotekniikan vaihtuva-alainen kurssi Graafisen käyttöliittymän ohjelmointi Syksy 2013 Luento 10 Rinnakkaisuus käyttöliittymäohjelmoinnissa Juha-Matti Vanhatupa Rinnakkaisuus ja käyttöliittymäohjelmointi
LisätiedotA274101 TIETORAKENTEET JA ALGORITMIT
A274101 TIETORAKENTEET JA ALGORITMIT PERUSTIETORAKENTEET LISTA, PINO, JONO, PAKKA ABSTRAKTI TIETOTYYPPI Tietotyyppi on abstrakti, kun se on määritelty (esim. matemaattisesti) ottamatta kantaa varsinaiseen
LisätiedotProjekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla
Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla Lasse Leino ja Marko Kahilakoski Helsingin Yliopisto Tietojenkäsittelytieteen laitos Rinnakkaisohjelmointi 18. joulukuuta 2006 Sisältö 1 Säikeet
LisätiedotRinnakkaisohjelmointi
Rinnakkaisohjelmointi Liisa Marttinen 5.6.2006 5.6.2006 Liisa Marttinen 1 Missä rinnakkaisuutta? tietokoneiden käyttöjärjestelmissä I/O-toiminta WWW-palvelin palvelee samanaikaisesti useita asiakkaita
LisätiedotRinnakkaisohjelmointi
Missä rinnakkaisuutta? Rinnakkaisohjelmointi Liisa Marttinen 5.6.2006 tietokoneiden käyttöjärjestelmissä I/O-toiminta WWW-palvelin palvelee samanaikaisesti useita asiakkaita hajautettu laskenta SETI-projekti,
LisätiedotRinnakkaisohjelmointi
Rinnakkaisohjelmointi Liisa Marttinen 5.6.2006 5.6.2006 Liisa Marttinen 1 Missä rinnakkaisuutta? tietokoneiden käyttöjärjestelmissä I/O-toiminta WWW-palvelin palvelee samanaikaisesti useita asiakkaita
Lisätiedot12. Javan toistorakenteet 12.1
12. Javan toistorakenteet 12.1 Sisällys Yleistä toistorakenteista. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirheitä. Silmukan rajat asetettu
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 3.3.2010 T-106.1208 Ohjelmoinnin perusteet Y 3.3.2010 1 / 44 Kertausta: tiedoston avaaminen Kun ohjelma haluaa lukea tai kirjoittaa tekstitiedostoon, on ohjelmalle
LisätiedotProsessi perinteisesti
Käyttöjärjestelmät t I Luento 11: SÄIKEETS Stallings, Luku 4.1 Sisält ltöä Prosessi vs. säie Miksi säikeitä? ULT: Käyttäjätason säikeet KLT: Säikeiden toteutus ytimessä Säikeen tilat Käyttöjärjestelmän
LisätiedotTarkennamme geneeristä painamiskorotusalgoritmia
Korotus-eteen-algoritmi (relabel-to-front) Tarkennamme geneeristä painamiskorotusalgoritmia kiinnittämällä tarkasti, missä järjestyksessä Push- ja Raise-operaatioita suoritetaan. Algoritmin peruskomponentiksi
LisätiedotKoottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.
2. Ohjausrakenteet Ohjausrakenteiden avulla ohjataan ohjelman suoritusta. peräkkäisyys valinta toisto Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet
LisätiedotAlgoritmit 2. Luento 7 Ti Timo Männikkö
Algoritmit 2 Luento 7 Ti 4.4.2017 Timo Männikkö Luento 7 Joukot Joukko-operaatioita Joukkojen esitystapoja Alkiovieraat osajoukot Toteutus puurakenteena Algoritmit 2 Kevät 2017 Luento 7 Ti 4.4.2017 2/26
LisätiedotStallings, Luku 4.1. KJ-I I S2005 / Tiina Niklander, kalvot Auvo HäkkinenH
Käyttöjärjestelmät t I Luento 11: SÄIKEETS Stallings, Luku 4.1 KJ-I S2005 / Tiina Niklander, kalvot Auvo Häkkinen 11-1 Sisält ltöä Prosessi vs. säie Miksi säikeitä? ULT: Käyttäjätason säikeet KLT: Säikeiden
LisätiedotLohkot. if (ehto1) { if (ehto2) { lause 1;... lause n; } } else { lause 1;... lause m; } 16.3
16. Lohkot 16.1 Sisällys Tutustutaan lohkoihin. Muuttujien ja vakioiden näkyvyys sekä elinikä erityisesti operaation lohkossa. Nimikonfliktit. Muuttujat operaation alussa vai myöhemmin? 16.2 Lohkot Kaarisulut
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 1.4.2009 T-106.1208 Ohjelmoinnin perusteet Y 1.4.2009 1 / 56 Tentti Ensimmäinen tenttimahdollisuus on pe 8.5. klo 13:00 17:00 päärakennuksessa. Tämän jälkeen
Lisätiedot812315A Ohjelmiston rakentaminen. Asynkronisuus
812315A Ohjelmiston rakentaminen. Asynkronisuus Ari Vesanen ari.vesanen (at) oulu.fi Yleistä moduulista Tällä kertaa sisältää Java-kielistä monisäieohjelmointia Suoritustapa: Neljästä ohjelmointitehtävästä
LisätiedotAlgoritmit 1. Luento 4 Ke Timo Männikkö
Algoritmit 1 Luento 4 Ke 18.1.2017 Timo Männikkö Luento 4 Tietorakenteet Pino Pinon toteutus Jono Jonon toteutus Lista Listaoperaatiot Algoritmit 1 Kevät 2017 Luento 4 Ke 18.1.2017 2/29 Pino Pino, stack,
Lisätiedot10 Lock Lock-lause
10 Lock Avainsanan lock (Lock keyword) avulla voidaan toteuttaa prosessien ja säikeiden välisessä keskinäisessä kommunikoinnissa käytettäviä synkronointi- ja poissuljentarakenteita. Tämän niin sanotun
LisätiedotKäyttöjärjestelmät: prosessit
Käyttöjärjestelmät: prosessit Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Lähteet Stallings, W. Operating Systems Haikala, Järvinen, Käyttöjärjestelmät Eri Web-lähteet Käyttöjärjestelmä
Lisätiedot811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
LisätiedotEhto- ja toistolauseet
Ehto- ja toistolauseet 1 Ehto- ja toistolauseet Uutena asiana opetellaan ohjelmointilauseet / rakenteet, jotka mahdollistavat: Päätösten tekemisen ohjelman suorituksen aikana (esim. kyllä/ei) Samoja lauseiden
LisätiedotJaetun muistin muuntaminen viestin välitykseksi. 15. lokakuuta 2007
Jaetun muistin muuntaminen viestin välitykseksi Otto Räsänen 15. lokakuuta 2007 1 Motivaatio 2 Valtuuden välitys Peruskäsitteitä 3 Kolme algoritmia Valtuuden välitys käyttäen laskuria ilman ylärajaa Valtuuden
LisätiedotOsio 2: Luennot 4-7 Muistinhallinta
Käyttöjärjestelmät I Osio 2: Luennot 4-7 Muistinhallinta Tiina Niklander; kalvot Auvo Häkkinen Tietojenkäsittelytieteen laitos Helsingin yliopisto Käyttöjärjestelmät t I YKSINKERTAINEN MUISTINHALLINTA
LisätiedotOsio 2: Luennot 5-8 Muistinhallinta
Käyttöjärjestelmät I Osio 2: Luennot 5-8 Muistinhallinta Tiina Niklander; kalvot Auvo Häkkinen Tietojenkäsittelytieteen laitos Helsinin yliopisto "!$#%#'&)(*+,(.-0/1#'-243 0# 5 Stallins, Luku 7 KJ-I S2004
Lisätiedot815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 5 Vastaukset Harjoituksen aiheena ovat aliohjelmat ja abstraktit tietotyypit sekä olio-ohjelmointi. Tehtävät tehdään C-, C++- ja Java-kielillä.
LisätiedotPythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b
Pythonin Kertaus Cse-a1130 Tietotekniikka Sovelluksissa Versio 0.01b Listat 1/2 esimerkkejä listan peruskäytöstä. > lista=['kala','kukko','kissa','koira'] ['kala','kukko','kissa','koira'] >lista.append('kana')
LisätiedotOhjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
Lisätiedotuseampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero
Alkioiden avaimet Usein tietoalkioille on mielekästä määrittää yksi tai useampi ns. avain (tai vertailuavain) esim. opiskelijaa kuvaavassa alkiossa vaikkapa opintopistemäärä tai opiskelijanumero 80 op
LisätiedotSisällys. 12. Javan toistorakenteet. Yleistä. Laskurimuuttujat
Sisällys 12. Javan toistorakenteet Ylstä toistorakentsta. Laskurimuuttujat. While-, do-while- ja for-lauseet. Laskuri- ja lippumuuttujat. Tyypillisiä ohjelmointivirhtä. Silmukan rajat asetettu kierroksen
LisätiedotSisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2
4. Attribuutit 4.1 Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2 Yleistä Luokan lohkossa, mutta metodien ulkopuolella esiteltyjä muuttujia ja vakioita. Esittely
LisätiedotTietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
LisätiedotJohdantoa. Miksi rinnakkaisuutta? Laitteistoarkkitehtuureja. Rinnakkaisuus - Samanaikaisuus. Peräkkäisyyteen perustuvat sovellukset
Rinnakkaisuus - Samanaikaisuus Johdantoa Rinnakkaisuus vs. samanaikaisuus Laitearkkitehtuureja Prosessien välinen kommunikointi Yhteiskäyttöinen muisti Sovellusten luokittelua Ohjelmointiparadigmoja, syntaksia
LisätiedotTieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)
Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset 1 Tieto ja sen osoite (3) X DC LOAD, =X LOAD R2, X int x =; symbolin X arvo muuttujan X arvo
LisätiedotLuento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS
Käyttöjärjestelmät t I Luento 5: YKSINKERTAINEN SEGMENTOINTI JA SIVUTUS Stallings, Luku 7 KJ-I S2005 / Tiina Niklander; kalvot Auvo Häkkinen 5-1 Sisält ltöä (Luennot 5&6) Yleistä muistinhallinnasta (luku
LisätiedotJohdantoa. Andrews, Ch 1
Johdantoa Andrews, Ch 1 Rinnakkaisuus vs. samanaikaisuus Laitearkkitehtuureja Prosessien välinen kommunikointi Yhteiskäyttöinen muisti Sovellusten luokittelua Ohjelmointiparadigmoja, syntaksia Rinnakkaisuus
LisätiedotJohdantoa. Rinnakkaisuus - Samanaikaisuus. Peräkkäisyyteen perustuvat sovellukset
Johdantoa Andrews, Ch 1 Rinnakkaisuus vs. samanaikaisuus Laitearkkitehtuureja Prosessien välinen kommunikointi Yhteiskäyttöinen muisti Sovellusten luokittelua Ohjelmointiparadigmoja, syntaksia Rinnakkaisuus
Lisätiedot