581332 Rinnakkaisohjelmointi (ohtk 25.8.2011)

Pääteemat Esitiedot Lähestyy oppimistavoitetta Saavuttaa oppimistavoitteet Syventää oppimistavoitteita
Rinnakkaisuus ja rinnakkaisuudesta aiheutuvat ongelmat

Osaa selittää, missä rinnakkaisuutta esiintyy ohjelmissa ja järjestelmissä, miten rinnakkaisohjelmien suorituksia kuvataan ja mitä ongelmia rinnakkaisuudesta voi seurata.

Osaa selittää prosessorin toiminnan konekäskyjen suorittajana.
(Tietokoneen toiminta)

Osaa selittää, miten
kaksi ohjelmaa voi
edetä konekäskytasolla
rinnakkain. Osaa selittää, miten prosessien rinnakkainen eteneminen perustuu  laitteistokeskeytyksiin
ja käyttöjärjestelmän
vuoronantopäätöksiin.
(Tietokoneen toiminta)
 

Osaa selittää säikeiden/prosessien yhteiskäyttöisen muistialueen käytön.

Osaa selittää rinnakkaisuuden tarpeen sovelluksessa. Osaa selittää, mitkä tekijät johtavat rinnakkaisiin toimintoihin laitteisto-
ja ohjelmistotasolla.

Osaa antaa esimerkkejä rinnakkaisuuden esiintymistä järjestelmän eri tasoilla.

Osaa selittää erilaisten suoritusskenaarioiden merkityksen rinnakkaisohjelmien suoritusta tutkittaessa.

Osaa antaa esimerkkejä yleisistä ongelmista, joihin virheellinen rinnakkaisratkaisu voi johtaa.

Osaa selittää prosessien suorituksen etenemisen epädeterministisen luonteen ja sen vaikutukset.

Osaa selittää rinnakkaisuuden problematiikan tavoitteet (esim. rinnakkaisuuden edut ja haitat, rinnakkaisuuden toteutustasot sekä rinnakkaisohjelmien oikeaksi tai virheelliseksi osoittaminen).

Osaa selittää rinnakkaisuusongelmien ratkaisuille asetettavat vaatimukset (esim. oikeellisuuden määrittely ja oikeellisuus kaikissa skenaarioissa).

Osaa ottaa huomioon järjestelmän arkkitehtuurin vaikutuksen rinnakkaistamiseen.

Osaa selittää rinnakkaisuuden erilaisen luonteen laitteisto-, ohjelmisto- ja verkkotasojen toiminnoissa.

Osaa arvioida sovelluksen rinnakkaistettavuuden.

Osaa maksimoida rinnakkaisuuden määrän sovelluksessa.
 

Rinnakkaisohjelmoinnin peruskäsitteistö ja perusmallit

Osaa selittää rinnakkaisen suorituksen ongelma-alueet, yleiset ratkaisumallit sekä usein käytetyt malliesimerkit.
 

Osaa ohjelmoida yksisäikeisiä ohjelmia.
(Ohjelmoinnin perusteet)

Osaa selittää käyttöjärjestelmän toiminnan prosessien vuoronannossa ja resurssien jakelijana.
(Tietokoneen toiminta)
 

Osaa kuvata esimerkkejä käyttäen
  • rinnakkaisen suorituksen peruskäsitteet (esim. synkroninen, asynkroninen, atominen, kriittinen vaihe, synkronointi, kommunikointi, lukkiutuvuus, lukkomuuttuja, busy-wait ja tavallinen odotus),
  • rinnakkaisohjelmoinnin perusmallit (esim. poissulkemisongelma, lukijat-kirjoittajat, tuottaja-kuluttaja, asiakas-palvelin, puomisynkronointi, käyttäjäluokkakohtainen synkronointi, aktiivipalvelin), ja
  • rinnakkaisohjelmoinnin klassiset ongelmaesimerkit (esim. aterioivat filosofit, nukkuva parturi, leipurin vuorolappu).

Osaa selittää semaforin ja monitorin rakenteen sekä käyttää niitä oikein sovelluksissa.

Osaa selittää poissulkemis-, synkronointi- ja kommunikointiongelmien merkityksen rinnakkaisohjelmoinnissa.

Osaa suunnitella poissulkemisongelman ratkaisun ympäristöön ja sovellukseen parhaiten sopivalla menetelmällä.

Osaa kuvata esimerkkejä käyttäen lukkiutumistilanteen synnyn sekä selittää välttämättömät ja riittävät ehdot lukkiutumiselle. Osaa algoritmitasolla selittää, kuinka lukkiutuminen voidaan havaita sekä kuinka siitä voidaan toipua.

Osaa selittää prosessien käyttäytymisen perusteella rinnakkaisuuteen liittyvien ongelmien synnyn. Osaa soveltaa perusmalleja erilaisissa ongelmanratkaisutilanteissa.

Osaa selittää semaforin ja monitorin erityispiirteet sekä käyttää niitä oikein sovelluksissa. Osaa ohjelmoida rinnakkaisuuden hallinnan sovelluksen, ohjelmointikielen ja käyttöjärjestelmän tasoilla.
Osaa valita oikeat menetelmät poissulkemis-, synkronointi- ja kommunikointiongelmien ratkaisuun.

Osaa perustella rinnakkaisohjelmien oikeellisuuden perusmalleja soveltavissa algoritmeissa erilaisten ehtojen säilyvyyden (invarianttien) avulla.
Osaa perustella lukkiutumisen käsittelymenetelmien rajalliset mahdollisuudet todellisissa ympäristöissä. Osaa selittää, kuinka lukkiutuminen voidaan (ennakolta) ehkäistä.
 

Osaa arvioida perusmallien käyttökelpoisuutta erilaisilla laitteisto- ja ohjelmistoalustoilla.

Osaa ohjelmoida semaforin ja monitorin lukkomuuttujia käyttäen. Osaa ohjelmoida monitorin semaforeja käyttäen.

Osaa todistaa monimutkaisten rinnakkaisalgoritmien toimivuuden.

Rinnakkaisohjelmointi hajautetussa järjestelmässä

Osaa selittää hajautetun järjestelmän erityispiirteet rinnakkaisohjelmointiin ja kuinka rinnakkaisohjelmoinnin perusmallit voidaan toteuttaa hajautetussa järjestelmässä.
 

Osaa selittää, kuinka käyttöjärjestelmä välittää sanomia prosessilta toiselle.
(Tietokoneen toiminta)

Osaa selittää, kuinka aliohjelmat on toteutettu.
(Tietokoneen toiminta)
 

Osaa selittää rinnakkaisohjelmoinnin peruskäsitteet hajautetussa järjestelmässä (esim. sanomanvälitys, kanavat, RPC, vartioitu rinnakkaisodotus, asiakas-palvelin)

Osaa selittää, miten sanomanvälitys kanavien kautta toimii ja osaa soveltaa sanomanvälitystä perusmallien ratkaisuun hajautetussa järjestelmässä.

Osaa selittää etäproseduurikutsun, vartioidun rinnakkaisodotuksen ja asiakas-palvelin mallin toimintaperiaatteet.
 

Osaa hajautetussa järjestelmässä toteuttaa perusmallit algoritmitasolla (perustuen vertaiskommunikointiin).

Osaa selittää monitoripohjaisen palvelinratkaisun ja sanomanvälitykseen perustuvan palvelinratkaisun samankaltaisuudet ja eroavuudet.

Osaa selittää, miten etäproseduurikutsu ja vartioitu rinnakkaisodotus toimivat. Osaa selittää, miten tavanomainen ja kohtaamista (rendezvous) käyttävä asiakas-palvelin toimivat.

Osaa toteuttaa algoritmitasolla rinnakkaisen odotuksen sekä säikeitä että vartioituja odotuslauseita käyttäen.

Osaa selittää, kuinka sanomanvälityksen voi yleistää verkkotasolle.

Osaa selittää CSP’n toiminnan ja mihin niitä voidaan käyttää.

Rinnakkaisohjelmointi käytännössä

Osaa tehdä pieniä rinnakkaisohjelmia Javalla.
 

Osaa toteuttaa yksisäikeisiä Java-ohjelmia.
(Ohjelmoinnin perusteet)
 
Osaa laatia monisäikeisiä yhteistä muistia käyttäviä poissulkemisongelman ratkaisun sisältäviä Java-ohjelmia.

Osaa luetella tavallisimmat Java-rinnakkaisohjelmien virhetyypit.

Osaa laatia pieniä rinnakkaisuuden hallintaa vaativia ohjelmia Java-ympäristössä.

Osaa päätellä yksinkertaisen rinnakkaisohjelman oikeellisuuden tai virheellisyyden.

Osaa laatia hajautettuja rinnakkaisohjelmia Java-ympäristössä.

Osaa testata ja todistaa oikein toimivaksi rinnakkaisohjelmia.

 

28.08.2011 - 17:57 Jyrki Kivinen
02.03.2011 - 11:59 Teemu Kerola