Commit 63f0f21925ec850d1a42f3c582cd04355161eadf

  • avatar
  • nieminen (Committer)
  • Wed May 09 18:02:30 EEST 2018
  • avatar
  • nieminen (Author)
  • Wed May 09 18:02:30 EEST 2018
Luennon 14 jälkeinen tilanne.
luentosuunnitelma_2018.txt
(71 / 1)
  
10711071
10721072** Luento 13: Säikeet. Kilpa-ajo, lukot, deadlock.
10731073
1074* Suunnittelun pohjana (ehkä) toteuma 2017:
1074Muistutus ekasta tentistä:
1075
1076- ke 16.5.2018 klo 16:15-20:15. Ei tarvitse ilmoittautua. Ikään kuin
1077 luento. Uusinnat heinäkuu, elokuu.
1078
1079- kurssi lähestyy loppuhuipennusta. Demot 1-5 pitäis alkaa olla
1080 sisäistetty.
1081
1082- Hmm... Tässä kohtaa pittäis alkaa olla demo6 speksattu... Tulee
1083 keskiviikkona. Assemblerilla tehdään siinä itse.
1084
1085Säie vs. prosessi:
1086
1087- Säie on yksi ajassa etenevä suorituskohta prosessin koodissa, joka
1088 muodostaa konekielisten suoritusten "jäljen" ja vaikutuksia dataan.
1089
1090 Pieni tenttitärppi.
1091
1092- Prosessilla voidaan aina ajatella olevan vähintään yksi
1093 säie. (ks. esim. POSIXin Base definitions -luvun määritelmä termille
1094 "Process")
1095
1096- Jos alusta (ts. käyttöjärjestelmä ja apukirjasto) tukee useampia
1097 yhdenaikaisia säikeitä, niitä voi luoda prosessille tarpeen mukaan,
1098 esim. POSIXin säielaajennoksen kutsulla
1099 pthread_create(). Lähdekoodissa säie ilmenee aliohjelmana, jonka
1100 päättymistä voi jäädä odottelemaan esim. POSIXin kutsulla
1101 pthread_join() tai säikeen voi jättää suorittamaan tehtäväänsä
1102 "taustalle" tarvittaessa vaikka koko prosessin päättymiseen saakka,
1103 tai niin pitkään kuin säikeen operaatio ylipäätään kestää.
1104
1105- Suorituksen vuorottelun mielessä säie ja prosessi ovat hyvin
1106 samantyyppisiä käsitteitä: periaatteessa kaikki säikeiden avulla
1107 tehtävät asiat voitaisiin hoitaa myös luomalla prosesseja.
1108
1109- Säie on kuitenkin yhden sovelluksen sisäisiin tarpeisiin paljon
1110 kevyempi konsepti: se tarvitsee olennaisesti vain prosessorin
1111 kontekstin, pinomuistin ja muut suorituskohtaan liittyvät tiedot -
1112 kaikki muu, mukaanlukien koodi, keko, globaali data, avatut
1113 tiedostot, ym. ovat yhteiset säikeen omistavan prosessin kanssa.
1114
1115- mihin säikeitä voi käyttää? Esim. ohjelman sisäiset "tausta-ajot"
1116 (esimerkiksi videon toistaminen selaimen välilehdessä samalla kun
1117 käyttäjä voi klikkailla muita välilehtiä; suurten tiedostojen
1118 lataamiset ja tallentamiset), seinäkelloajan minimointi
1119 rinnakkaislaskennalla.
1120
1121- Laskentatehtävien nopeuttaminen säikeistämällä vaatii säikeiden
1122 suorittamista konkreettisesti yhtäaikaa rinnakkaisilla
1123 prosessoriytimillä. Yhdenaikainen tausta-ajo onnistuu tietysti
1124 yhdelläkin prosessorilla normaalin prosessien vuoronnusmenettelyn
1125 tapaan.
1126
1127- esimerkki: taulukon täyttäminen peräkkäisillä luvuilla
1128
1129 koodit 2017/esimerkit/l15/ -hakemistossa: saikeiden_tarve.c saikeet.c
1130
1131- katsottiinpa myös Googlella Java Thread API ja C# vastaava.
1132
1133- "kilpa-ajotilanne" eli race condition: vuoronnus voi milloin vain
1134 keskeyttää säikeen (tai prosessin) ja antaa suoritusvuoron toiselle:
1135
1136 koodi 2017/esimerkit/l15/ -hakemistossa: race.c
1137
1138- lukitus auttaa: keskinäinen poissulku race_fixed_mutex.c
1139
1140- deadlock -tilanne, esimerkki huolimattomasta resurssilukituksesta:
1141 huonon kahvihuoneen simulaattori kahvihuone_deadlock.c ja toimivamman
1142 kahvihuone_ei_lukkiudu.c
1143
10751144** Luento 14: IPC: signaalit, viestijono. Semafori. Kuluttaja-tuottaja.
10761145
10771146Demo 6 esittely.
13121312
13131313
13141314
1315* Suunnittelun pohjana (ehkä) toteuma 2017:
13151316** Luento 15: Virtuaalimuisti, sivutaulut, swap. I/O. Unixin erikoistiedostot.
13161317
13171318Loppusuoralle / lopputaisteluun... Niin monta tuntia aikaa ekaan