diff --git a/2014/tentti/versiot_2014_kevat/Makefile b/2014/tentti/versiot_2014_kevat/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ffa1300d5f713482ebaa9e47fea0a676a53268e7 --- /dev/null +++ b/2014/tentti/versiot_2014_kevat/Makefile @@ -0,0 +1,8 @@ +PREAMBLE='\usepackage[finnish]{babel} \usepackage[top=2in, bottom=1.5in, left=0.8in, right=0.8in]{geometry} ' + +tentti_itka203_2014-05-21.pdf: tentti_itka203_2014-05-21.rst + rst2latex --latex-preamble=$(PREAMBLE) $< > tmp.tex + pdflatex tmp.tex + pdflatex tmp.tex + mv tmp.pdf $@ + diff --git a/2014/tentti/versiot_2014_kevat/README.txt b/2014/tentti/versiot_2014_kevat/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..85ad9cdb1ff6ae10cbf2b9198ff8cd5f9c25b28d --- /dev/null +++ b/2014/tentti/versiot_2014_kevat/README.txt @@ -0,0 +1,4 @@ +Varsinaiset tentit. Lisätään repositorioon kunkin tenttitilaisuuden +alettua (+30 vähintään minuuttia, jonka jälkeen saleihin ei enää pääse +myöhästyneitä tenttijöitä). + diff --git a/2014/tentti/versiot_2014_kevat/tentti_itka203_2014-05-21.rst b/2014/tentti/versiot_2014_kevat/tentti_itka203_2014-05-21.rst new file mode 100644 index 0000000000000000000000000000000000000000..2e09d017b46f03ac99f56ffddebafa16250e2d82 --- /dev/null +++ b/2014/tentti/versiot_2014_kevat/tentti_itka203_2014-05-21.rst @@ -0,0 +1,231 @@ +.. raw:: latex + + %make block paragraphs: + \parindent0pt \parskip5pt + + +################################################## +ITKA203 -- Käyttöjärjestelmät -- Tentti 21.5.2014 +################################################## + +Kevään 2014 kurssi (luennot, demot 1-4 ja oheismateriaali) / Paavo +Nieminen <paavo.j.nieminen@jyu.fi>. + +HUOM: Tarkastus jaetaan kolmen opettajan kesken. Palauta siksi **tasan +kolme erillistä vastauspaperia** (ei siis yhtä eikä kahta), joissa +jokaisessa on vähintään **nimesi**, **syntymäaikasi**, **kurssin +tiedot** (koodi ja/tai nimi) sekä **vähintään tyhjä vastaus jokaista +tehtävänumeroa kohden**. Jako on seuraava: Tehtävät 1, 2 ja 3 yhteen +vastauspaperiin. Tehtävät 4 ja 5 yhteen paperiin. Tehtävä 6 yhteen +paperiin. + +.. kertymä: laitteisto 0/4p shell 0/8p muu 0/12p + +**Kysymys 1/6 (vastauspaperille 1):** + + Selitä, mitä seuraavat termit tarkoittavat tietokonelaitteiston ja + käyttöjärjestelmän yhteydessä: + + a) osoiteavaruus + + b) ohjelmalaskuri + + c) vuoronnus + + d) pre-emptiivisyys + + e) signaali + +(1+1+1+1+1=5p) + +.. kertymä: laitteisto 2/4p shell 0/8p muu 3/12p + +**Kysymys 2/6 (vastauspaperille 1):** + + a) Listaa tietokoneessa käytettävät erityyppiset muistit + (ns. muistihierarkia) nopeasta hitaaseen. + + b) Miksi tarvitaan näin monia erilaisia muisteja eikä + riitä vain yhdenlaiset? + +(1+1=2p) + +.. kertymä: laitteisto 4/4p shell 0/8p muu 3/12p + +**Kysymys 3/6: (vastauspaperille 1)** + + Voit käsitellä luennoilla tai materiaalissa esitetyssä laajudessa, + oppikirjan esitteleminä konkreettisina esimerkkeinä, tai siinä + laajuudessa kuin käsittääksesi on välttämätöntä järkevän moniajon + toteutumiseksi: + + a) Missä eri tiloissa prosessi voi olla? + + b) Milloin tapahtuu mikäkin siirtymä tilojen välillä? + +(1+2 = 3p) + +.. kertymä: laitteisto 4/4p shell 0/8p muu 6/12p + +.. raw:: latex + + \newpage + + +**Kysymys 4/6 (vastauspaperille 2):** + + a) Selitä poissulkuongelma: millaisissa tilanteissa se voi tulla + eteen, ja mitä se esimerkiksi voi käsittelemättömänä aiheuttaa. + + b) Esitä C-ohjelma tai pseudokoodi, jossa poissulku tehdään käyttäen + käyttöjärjestelmän semaforipalveluita. + + c) Anna esimerkki tilanteesta, jossa voi tapahtua lukkiutuminen eli + deadlock -tilanne. + +(3p) + +.. kertymä: laitteisto 4/4p shell 0/8p muu 9/12p + +**Kysymys 5/6 (vastauspaperille 2):** + + Merkin lukeminen päätteeltä on esimerkki I/O -operaatiosta. Kerro, + miten luku tapahtuu: mitkä kaikki ohjelmisto- ja laitteisto-osat + osallistuvat sen toteuttamiseen missäkin vaiheessa, ja mitä niiden + kunkin vastuulla on? Aloita kertomus hetkestä, jolloin käyttäjän + ohjelma tekee operaatiopyynnön, ja lopeta siihen, kun operaatio on + valmis ja I/O:ta pyytänyt käyttäjän ohjelma jatkuu taas seuraavasta + käskystä. (Tyyli vapaa - kaaviot, pseudokoodit, essee käyvät). + +(3p) + +.. kertymä: laitteisto 4/4p shell 0/8p muu 12/12p + +.. raw:: latex + + \newpage + + +**Kysymys 6/6 (vastauspaperille 3):** + + a) Mitä tekee tyypillinen unix-apuohjelma ``grep``? + + b) Mitä tekee tyypillinen unix-apuohjelma ``kill``? + + c) Mitä seuraava skripti tekee (hipsukat ovat "backtick"-merkkejä):: + + #!/bin/sh + echo `$0` + + d) Mikä on lopputulema edellisen kohdan skriptin ajamisesta? + + e) Seuraavan skriptin haluttaisiin toimivan kommenttien mukaisesti, + mutta kaikkea ei ole vielä toteutettu (TODO-merkinnät) ja lisäksi + tekijälle on tullut joitakin karkeita virheitä + tähänastisessa. Kirjoita skripti uudelleen niin, että se toimii + kommenteissa ilmoitetuin tavoin. (Kommentteja ei tarvitse toistaa + vastauksessa vaan ainoastaan skripti niin että se toimii + virheettömästi.) + +Puolivalmis skripti nimeltä ``skripti.sh``:: + + #!/bin/sh + # Prosessinhallinnan tilanteen tallentava skripti. Käyttöesimerkki: + # skripti.sh logitiedot.txt + + # Em. komento tallentaa 'logitiedot.txt' -nimiseen tiedostoon + # kellonajan ja suorituksessa olevat prosessit. + # Tiedosto ei saa olla ennestään olemassa. + + # TODO: Pitäisi varmistaa, että käyttäjä on antanut tasan yhden + # argumentin ja lopettaa tähän, jos näin ei ole.. + + fname=$1 + + # TODO: Pitäisi tarkistaa, että tiedostoa ei vielä ole + # olemassa; jos on jo olemassa niin pitäisi lopettaa kesken + # (ettei vahingossa ylikirjoiteta käyttäjän aiempaa dataa) + + # Laitetaan tiedoston ensimmäiselle riville otsikoksi + # tämänhetkinen kellonaika ja suorittajan käyttäjätunnus: + + echo Käyttäjä whoami ajoi tämän hetkellä date > fname + + # TODO: Pitäisi tarkistaa, että tiedosto on nyt syntynyt + # ja siihen voi kirjoittaa. Muuten pitäisi + # antaa käyttäjälle virheilmoitus ja lopettaa kesken. + + # Jatketaan tiedostoa kirjoittamalla otsikon perään kaikki + # tällä hetkellä järjestelmässä suorituksessa olevat ohjelmat: + ps -ef > $fname + +(1+1+1+1+4 = 8p) + +.. kertymä: laitteisto 4/4p shell 8/8p muu 12/12p + +.. raw:: latex + + \newpage + +Liite: Yhden sivun sh-luntti +============================= + +.. raw:: latex + + {\small + +:: + + Joitakin ohjelmointirakenteita: + muuttuja=57 # tarkka syntaksista: ei välilyöntejä! + muuttuja="eki"; muuttuja="$muuttuja$muuttuja" + read muuttuja # lukee muuttujaan syöttövirrasta + + if EHTO # Myös: if EHTO; then ...; \ + then # elif EHTO; then ...; fi + ... # + fi # + + for muuttuja in LISTA # muttujan "esittelyssä"/asetuksessa ei $ + do + ... jotakin $muuttuja jotakin ... # muuttujan käytössä $muuttuja + done + + while EHTO; do ... ; ... ; done # käskyerotin rivinvaihto tai ; + + # Tee jotain syötteen kaikille riveille: + while read rivi; do echo "luin: $rivi" ; done < rivit.txt + + case $hanen_nimensa in + kirsimarja) + echo "Hei Kippe" ;; + eskomatias) + echo "Moi E.M." ;; + esac + + Aliohjelmat mahdollisia&hyödyllisiä, mutta ei käsitellä ITKA203:lla. + + Joidenkin ehtojen käyttöä (Välilyönnit merkityksellisiä!): + [[ -d TIEDOSTONIMI ]] # tosi, jos on hakemisto + [[ -f TIEDOSTONIMI ]] # tosi, jos on tavallinen tiedosto + [[ -w TIEDOSTONIMI ]] # tosi, jos on olemassa ja kirjoitettavissa + [[ ! -f TIEDOSTONIMI ]] # tosi, jos ei olemassa tai ei tavallinen + [[ "$muuttuja" -le "57" ]] # tosi, jos muuttuja <= 57 (myös lt,gt,ge) + + Argumenttien käyttö: (yli 9 arg mahd., mutta ei käsitellä ITKA203:lla) + echo "Tämän skriptin nimi on $0. Eka argumentti $1, neljäs $4" + echo "Argumenttien määrä on $#" + + Joitakin sisäänrakennettuja toimintoja: + exit VIRHEKOODI # koodi 0 tarkoittaa onnistumista + cd # vaihtaa skriptin työhakemistoa + echo # kaiuttaa tekstiä + let muuttuja=$muuttuja+3 # (perusaritmetiikkaa) + + Erikoismerkkejä (tuttuja interaktiivisesta käytöstä; toimii skripteissä): + < > >> | `KOMENTO` + + +.. raw:: latex + + } %footnotesize