*** Tenttitärppi: Tehtävä liittyen koodiesimerkkiin ('minish.c')
Tässä kohtaa kevään 2024 tenttitärppi.
...
...
@@ -2342,9 +2358,9 @@ tavalla. Raamit:
**** Tehtävä
- Kysymys on... Moodlesta aiemman vuoden tentistä joku kysymys
(kysymys xx/48 kevään 2021 tentistä)
(kysymys 35/48 kevään 2021 tentistä)
- Kellotetaan 1 minuutti aikaa tehtävän lukemiseen.
- Kellotetaan 2 minuuttia aikaa tehtävän lukemiseen.
- Kellotetaan 1 minuutti aikaa siihen, että jokainen miettii hiljaa
itselleen vastaukset
...
...
@@ -2362,14 +2378,54 @@ tavalla. Raamit:
Tässä on täydellisyyden vuoksi tehtävä ja siihen liittyvä ohjeteksti
kopioituna:
Tutkittava esimerkki tehtäviin 35–37: monisteessa esitetyn kaltainen minimalistinen shell-ohjelma (kommentit poistettu, rivit numeroitu, näytetty vain olennainen toimintopätkä):
1 while(true){
2 luekomento(komento, argumentit);
3 pid = fork();
4 if (pid > 0) {
5 status = wait();
6 } else if (pid == -1) {
7 ilmoita("fork() epäonnistui!");
8 exit(1);
9 } else {
10 exec(komento, argumentit);
11 ilmoita("Komentoa ei voitu suorittaa!");
12 exit(1);
13 }
14 }
Kysymys 35: Väite: Aina, kun rivi 4 tulee suoritukseen, se tapahtuu
ainoastaan fork() -kutsun luomassa lapsiprosessissa. (A=kyllä; B=ei)
**** Ryhmien vastaukset ja keskustelu
Muistiinpanot ryhmäkoonnista:
- kerätään tähän
- Ehdotettu A (kyllä), koska oli sellainen fiilis.
- Ehdotettu A (kyllä), koska fork() kutsu asettaa pid:n ja sitten tulee
if-ehto.
- Ehdotettu B (ei), koska fork() on järjestelmäkutsu, joka luo
lapsiprosessin vanhempiprosessin rinnalle ja ne molemmat jatkavat
sen jälkeen suoritusta itsenäisesti.
- Ehdotettu B (ei), koska "raamatussa" (eli luentomonisteessa)
sanottiin, että "fork() palauttaa vanhempiprosessin kontekstissa
..." niin tästä päättelin, että sielläkin jotain tapahtuu vielä
fork()-kutsun jälkeen.
- Syntaksin perusteella näyttää siltä, että fork() vaan kutsutaan, ja
sen jälkeen suoritus jatkuu normaalisti.
- Näyttää siltä, myös muun toimintalogiikan suhteen, eli pid on
paikallinen muuttuja, jota ei viedä fork()-funktiolle ja jota
seuraavalla rivillä käytetään tämän ohjelmamoduulin tarpeisiin.
HUOMAA että kaksi viimeistä perustelua eivät pelitä esimerkiksi exec()
tai exit() -käyttöjärjestelmäkutsujen kohdalla!! Tästä lisää
yksityiskohtia videolla!
**** Oikeaksi tarkoitettu vastaus ja logiikka sen takana
...
...
@@ -2382,11 +2438,93 @@ Mallivastauksen käsittely voidaan tehdä nopeasti.)
** Aiemmasta tokavikasta luennosta plänii
(Vuoden 2023 toteuma alla suunnitelmaksi)
Teorian ja käytännön välisten yhteyksien etsimistä koodiliitteen
esimerkkien, debuggerin, havainnekuvien ja speksien kautta.
*** Infot keväälle 2023
- Jäljellä on tämän lisäksi 2 luentoa, 1 Open labrapäivä ensi viikon
tiistaina klo 16.30-18.15 ja tentti!
- Lukemisto ja tekemistö on nyt kokonaan työn alla: Luentomonisteen
luvut 1-12 ja demot 1-6. Kokonaisuuden hahmottaminen.
*** Tämän luennon tavoite
- Tässä välissä tiukkaa asiaa, konkretiaa ja rautalankaa.
- Päivän lopuksi tiedetään, mitä seuraavaksi pitää tehdä ennen
seuraavia yhteisiä tapaamisia: Hedelmien keräämistä pohjatyön
jälkeen eli ymmärryksen lisäämistä ja valmistautumista
tenttiin. Demo 6 työn alla - sitä saa palauttaa sitä vielä tentin
jälkeen, eli voi keskittyä teoriapuoleen tässä kohtaa!
*** Asiaa järjestelmällisesti eteenpäin: Koodiliitettä ja monistetta
Edetään demoissa aiemmin nähtyjen ja monisteen koodiliitteessäkin
olevien konkreettisten esimerkkikoodien kautta, loogisessa
järjestyksessä.
**** Säikeistä
saikeiden_tarve.c
saikeet.c
Katso esimerkkien briiffaus videolta. Seinäkelloaika lyhenee, jos
tehtävän voi hajauttaa moneen prosessoriytimeen rinnakkain.
Katsellaan säikeitä myös ps -komennon avulla (vipu -L) sekä
luentosalin tietokoneella esimerkiksi Chrome-nettiselaimessa ja
Windowsin prosessinhallinnassa, jos opettajan perustunnuksen
käyttöoikeudet riittävät (eivät välttämättä riitä..).
Omalla tietokoneella voi kokeilla oman tietokoneen graafisia työkaluja
prosessin- ja säikeidenhallintaan, nimeltään tyyliin "Task Manager" /
"Tehtävienhallinta" tai vastaavaa...
*** Tauko sopivassa välissä
Jatkuu 15.22
**** Prosesseista: Signaalinkäsittely ja kill
sigesim.c
Katso briiffaus videolta.
Koetetaan näyttää näppäilyjä ja kill -kuorikomennon käyttelyä.
** Luento 16: (ke 22.5.2024) (P/J) Viimeinen luento
*** Infot keväälle 2024
- Jäljellä on tämän lisäksi enää ylihuominen tentti.
- Yritetään saada videotallenteet ulos pian luennon jälkeen, jotta
ennen perjantain tenttiä ehtii vilkaista ne läpi.
- Demo 6 tarkastetaan tentin jälkeen, jolloin myös sen tekemiseen voi
vielä palata.
- Sitten siihen asiaan!
*** Tämän luennon tavoite
- Tuotetaan tähän asti hienoimman studioyleisön läsnäollessa salaiset
palautevideot Demoihin 4, 4b ja 5.
- Jos on aikaa, niin muita aiheita. Kertaukseen ja yhteenvetoon
liittyviä voisi kuvitella luontevaksi tässä vaiheessa.