Commit c4da0deb053a76bbd5eea29944063f85cbd03d2a

  • avatar
  • nieminen (Committer)
  • Mon May 08 15:38:50 EEST 2017
  • avatar
  • nieminen (Author)
  • Mon May 08 15:38:50 EEST 2017
Luennon 13 suunnitelmaa.
luentosuunnitelma_2017.txt
(50 / 58)
  
10641064
10651065About tässä kohtaa tapahtui vappu (ja söi yhden maanantailuentoajan).
10661066
1067** Luento 12: Konekieli, rekursio, aikakatkaisu/keskeytys, Historiakatsaus
10671068
1068* Kevään 2017 kurssi-instanssilla seuraavaksi:
1069
1070** Luento 12: Historiakatsaus, prosessi, säie
1071
10721069Millainen sää luentosalin ja Agoran ulkopuolella vallitsee tällä
10731070hetkellä? Komennetaanpa shellissä:
10741071
11561156 tukevan shellin uutuuksia hehkuttava artikkeli "The UNIX
11571157 time-sharing system" vuodelta 1974.
11581158
1159---
11601159
1161Ensi viikolla:
1160* Kevään 2017 kurssi-instanssilla seuraavaksi:
11621161
1162** Luento 13: Prosessi, säie. IPC: signaalit, viestijono, kilpa-ajo, lukot, deadlock
11631163
1164
11651164Sitten periaatteessa luentomonisteen järjestyksessä etteenpäin...
11661165
1167Prosessi, "säie", resurssit, haaroitus ja käynnistys
1166Yhteenveto käyttöjärjestelmän tehtävistä, tavoitemittareista ja
1167kompromisseista.
11681168
1169Prosessorin suoritussykli, tarkempi kuva:
11691170
1170Prosessorin suoritussykli:
1171
11721171- käskyn ja operandien nouto, suoritus, tulosten tallentaminen JA
11731172 mahdollinen ohjelman itsensä aiheuttama (syscall-pyynnöllä tai
11741173 laittoman/mahdottoman käskyn seurauksena) tai ulkopuolelta tuleva
11811181- "FLIH", eli mitä keskeytyksen tullessa tapahtuu prosessorissa ennen
11821182 seuraavan käskyn noutoa.
11831183
1184Yhdenaikaisuus, Prosessi:
1184Moniajo, prosessi, "säie", resurssit, haaroitus ja käynnistys.
11851185
1186- prosessin käsite yhteenvetona aiemmasta: muistiin ladattu ja
1187 käynnistetty, suorituksessa oleva 'kuva' ohjelmasta.
1186Prosessi? Kertausta aiemmista havainnoista:
11881187
1189Kertausta aiemmista havainnoista:
1188- POSIXin Base Definitions -osion termimäärittely "Process":
11901189
1191- POSIXin Base Definitions -osion termimäärittely "Process"?
1190 "An address space with one or more threads executing within that
1191 address space, and the required system resources for those threads."
1192
11921193 Vautsi... Pystytään jo ymmärtämään suurin osa tästä kuvailusta!
11931194 Määrittelyssä tulee jo mukavasti esille "säie", mikä tarkoittaa yhtä
11941195 ajan suhteen etenevää suorituskohtaa ohjelmassa. Prosessilla on
11971197 alusta ja päättyy ohjelman loppuessa. Säie muodostaa yhden
11981198 konekielisen jäljen, eli peräkkäin suoritettujen käskyjen
11991199 sarjan. Tässä päästään jo pakosti uumoilemaan seuraavaa asiaa, eli
1200 että prosessilla voi olla yhden sijasta useampia säikeitä.
1200 että prosessilla voi olla yhden sijasta useampia
1201 säikeitä. Lisähuomio POSIXin termimäärittelyssä:
12011202
1203 "Many of the system resources defined by POSIX.1-2008 are shared
1204 among all of the threads within a process. These include the process
1205 ID, the parent process ID, process group ID, session membership,
1206 real, effective, and saved set-user-ID, real, effective, and saved
1207 set-group-ID, supplementary group IDs, current working directory,
1208 root directory, file mode creation mask, and file descriptors."
1209
12021210- Prosessilla on vanhempi, mahdollisesti myös lapsia ja sisaruksia -
12031211 riippuen mikä prosessi on pyytänyt luomaan uusia. Sillä on
12041212 identiteetti (vähintään ID-numero) sekä käynnistävän käyttäjän ja
1205 mahdollisesti ryhmän identiteetit (vähintään ID-numerot). Lisäksi
1206 sillä on oma muistiavaruus, joka sisältää koodi-, data-, pino- ja
1207 kekoalueen sekä dynaamisten kirjastojen koodialueita. Nykyisin myös
1213 ryhmän identiteetit (vähintään ID-numerot). Lisäksi sillä on oma
1214 muistiavaruus, joka sisältää koodi-, data-, pino- ja kekoalueen sekä
1215 dynaamisten kirjastojen koodialueita. Nykyisin myös
12081216 käyttöjärjestelmän tarvitsemat alueet on liitetty jokaisen prosessin
1209 virtuaalimuistiavaruuteen.
1217 virtuaalimuistiavaruuteen käyttöjärjestelmäkutsujen tehostamiseksi.
12101218
12111219Mitä muuta liittyy prosessiin?
12121220
12401240 konfigurointivaiheessa valituista ominaisuuksista (#ifdef
12411241 CONFIG_JOKIN_OMINAISUUS_MUKANA ... #endif).
12421242
1243 Kyseessä on normaali C-kielen tietorakenne, jonka sisäiset kentät
1244 ovat muistissa tallessa peräkkäisessä järjestyksessä. Huomaa mm.
1245 rakenteen määrittelyn lopussa oleva kommentti, joka muistuttaa, että
1246 x86-koneiden osalta nykyisellään viimeiseksi kirjoitetun kentän on
1247 todellakin oltava viimeinen, eikä sen jälkeen saa lisätä mitään
1248 muuta.
1243 Tämä ``task_struct`` on normaali C-kielen tietorakenne, jonka
1244 sisäiset kentät ovat muistissa tallessa peräkkäisessä
1245 järjestyksessä. Huomaa mm. rakenteen määrittelyn lopussa oleva
1246 kommentti, joka muistuttaa, että x86-koneiden osalta nykyisellään
1247 viimeiseksi kirjoitetun kentän on todellakin oltava viimeinen, eikä
1248 sen jälkeen saa lisätä mitään muuta.
12491249
12501250 Liukulukuja ei käyttöjärjestelmäkoodissa juurikaan ole. Esim. ajat
12511251 mitataan kokonaisina nanosekunteina eikä osittaisina sekunteina tai
12521252 muuta, mikä edellyttäisi muita kuin kokonaislukuja.
12531253
1254- Prosessin tilat ja tilasiirtymät, tilakaavio.
12551254
1256- Vuorontaja ja vuorottelu: prosessoriajan jakaminen. "Kiertojono" eli
1257 Round Robin. Odottelujonot blokatuille prosesseille.
1258
1259- Kontekstin vaihto laitteiston ja käyttöjärjestelmän
1260 yhteistoimintana.
1261
1262 Koko kontekstin vaihtaminen (kaikki rekisterit + muistikartta)
1263 vaatii aikaa, joka on pois hyötylaskennasta - optimointina
1264 esim. pidemmät aikaikkunat ja modernien prosessorien "kevyet
1265 vaihdot". Harvemmat vaihdot prosessien välillä -> isompi
1266 "throughput". Pakollisena kompromissina tulee pidemmät vasteajat tai
1267 huonompi tasapuolisuus.
1268
12691255- Prosessin luonti haaroittamalla eli kloonaamalla vanhempiprosessi
12701256 (unix-pohjaisen käyttöjärjestelmän tapa luoda uusia prosesseja):
12711257
12661266
12671267Prosessielementin kloonaus fork():illa ja korvaaminen ladattavan
12681268ohjelman tiedoilla exec():issä vaatii "maistelua", miettimistä ja
1269parin unen näkemistä. Tätä voi harrastaa vaikkapa vapun ohessa, joka
1270tapahtuu vuonna 2016 tässä välissä ennen seuraavaa luentoa.
1269parin unen näkemistä.
12711270
1272[2016 luento 12 sisälsi seuraavaa:]
12731271
1274Katsotaan vielä kertaalleen viimeviikkoista minish -shelliä, ja
1275yliopitaan se, sekä siihen liittyvät fork() ja exec()
1276-palvelut. Monisteen kuva fork() ja exec() -kutsuista on myös korjattu
1277viime luennon jälkeen. Oli nimittäin vähän jäänyt sisältöä matkalle
1278ulkoasupäivityksen yhteydessä.
1272- Prosessin tilat ja tilasiirtymät, tilakaavio.
12791273
1280Ja sitten uutta...
1274- Vuorontaja ja vuorottelu: prosessoriajan jakaminen. "Kiertojono" eli
1275 Round Robin. Odottelujonot blokatuille prosesseille.
12811276
1277- Kontekstin vaihto laitteiston ja käyttöjärjestelmän
1278 yhteistoimintana.
1279
1280 Koko kontekstin vaihtaminen (kaikki rekisterit + muistikartta)
1281 vaatii aikaa, joka on pois hyötylaskennasta - optimointina
1282 esim. pidemmät aikaikkunat ja modernien prosessorien "kevyet
1283 vaihdot". Harvemmat vaihdot prosessien välillä -> isompi
1284 "throughput". Pakollisena kompromissina tulee pidemmät vasteajat tai
1285 huonompi tasapuolisuus.
1286
1287
1288
12821289Prosessien (ja säikeiden) välinen kommunikointi eli IPC, alustavasti:
12831290
12841291- engl. Inter-process communication. Yksi tärkeistä tehtävistä, joihin
1285 käyttöjärjestelmää tarvitaan. Alustavia esimerkkejä (joihin ehkä
1286 palataan):
1292 käyttöjärjestelmää tarvitaan. Esimerkkejä:
12871293
12881294 + signaalin lähettäminen pääteyhteyden näppäilyllä "päällimmäiselle"
12891295 ohjelmalle, jolle syötteet ohjautuvat.
13551355
13561356 koodit 2016/esimerkit/l12/ -hakemistossa: saikeiden_tarve.c saikeet.c
13571357
1358- tämän maanantain cliffhanger: "kilpa-ajotilanne" eli race condition:
1359 vuoronnus voi milloin vain keskeyttää säikeen (tai prosessin) ja
1360 antaa suoritusvuoron toiselle:
1358- "kilpa-ajotilanne" eli race condition: vuoronnus voi milloin vain
1359 keskeyttää säikeen (tai prosessin) ja antaa suoritusvuoron toiselle:
13611360
13621361 koodi 2016/esimerkit/l12/ -hakemistossa: race.c
13631362
1364
13651363* Luentojen toteuma 2016:
13661364
1367** Luento 13: IPC: signaalit, viestijono, kilpa-ajo, lukot, deadlock
13681365** Luento 14: Semafori. Tuottaja-kuluttaja. Muistinhallinta, virtuaalimuisti
1369
1370Viime viikon aihe loppuun:
13711366
13721367Esimerkki moniarvoisen semaforin käytöstä:
13731368