Vaarallisia ohjelmia

ITKA203 Käyttöjärjestelmät -kurssin Demo 5 keväällä 2014. Paavo Nieminen / Jyväskylän yliopiston Tietotekniikan laitos.

"Kokeillaan käytännössä käyttöjärjestelmän kuormittamista"

Lue ohjeet läpi ennen kuin aloitat!

Mistä tässä harjoitteessa on kyse

Materiaali syntyi Käyttöjärjestelmät -kesäkurssilla 2007. Kiitän kurssilaisia palautteesta. Tähän käyttivät aikaa noin puolitoista tuntia. Oli kuulemma ihan valaisevaa. Tahtoisin kuvitella, että puhuivat totta.

Harjoituksen tavoitteet ovat vähintään ainakin seuraavat:

  • Harjaannut lukemaan lyhyitä C-ohjelmia
  • Näet miten käyttöjärjestelmäkutsuja tehdään C-kielestä käsin
  • Tutustut käytännön ohjelmakoodin kautta mm. fork() -käyttöjärjestelmäkutsuun sekä tapaan, jolla uusi prosessi luodaan Unix-ympäristössä.
  • Tutustut käytännössä kuormituskokeilujen kautta käyttöjärjestelmään ja prosesseihin
  • Tutustut top -järjestelmänseurantaohjelmaan
  • Näet seurauksineen asioita, joita sinun ei ehkä koskaan kannata oikeissa töissä tehdä, ainakaan vahingossa ja tietämättäsi.

Ohjeet

Nämä demot täytyy tehdä ympäristössä, jossa järjestelmän kuormittaminen ei aiheuta hankaluuksia itselle tai muille. Tarkoitusta varten meillä on kurssilla oma testipalvelin itka203.it.jyu.fi, joka ei ole yhdistetty verkkolevyyn ja jossa ei pitäisi olla muita aktiviteetteja kuin tämän kurssin demoja.

Idea on tarkastella järjestelmän toimintaa kahdessa pääteikkunassa, eli avaa kaksi rinnakkaista yhteysikkunaa tai käytä screen-ohjelmaa.

Tee testipalvelimelle hakemisto demoa varten ja hae paketti http://www.cc.jyu.fi/~nieminen/kj14/demo5.zip

Avaa paketti.

Käy läpi ohjelmat, mieluiten seuraavassa järjestyksessä:

forkkaa_loppuun_asti1.c
forkkaa_loppuun_asti2.c
forkkaa_loppuun_asti3.c
forkkaa_loppuun_asti4.c
muistivuoto.c
skripti_idiootti.sh

Tutustu jokaiseen, koeta ymmärtää; Testipalvelimella saat kokeilla niitä mielin määrin, eli käännös gcc:llä ja ajo terminaali-ikkunassa. Erillisessä terminaali-ikkunassa (screen tai pääteohjelmasi) käytä top-ohjelmaa. Top kertoo reaaliaikaisen tilanteen käyttöjärjestelmän prosesseista: Montako on luotu, moniko on missäkin suoritustilassa, paljonko fyysistä ja virtuaalista muistia on käytettävissä ja paljonko siitä on vapaana. Näiden arvojen seuraaminen valaissee kunkin ohjelman toimintaa.

Tietenkin prosessori suorittaa kerrallaan vain yhden prosessin käskyjonoa, eikä mikään muu prosessi ole Running-tilassa silloin kun top on. Niinpä top näyttää tilastotietoa viimeksi kuluneelta hetkeltä (muistaakseni jollain topin argumentilla voi säätää tuon tarkasteluhetken pituutta, mutta defaultti tuntuu riittävän tähän tarkoitukseen ihan hyvin).

Esimerkiksi seuraaviin kannattaa kiinnittää huomiota:

  • Missä vaiheessa systeemi alkaa "tökkimään"?
  • Mitä se silloin tekee?
  • Mistä tökkiminen siis luultavasti aiheutuu?
  • Miten vuorontaja kohtelee prosesseja, joilla laskenta alkaa kestää?

Palautustehtävään tulevat tiedostot on editoitava pääteyhteyden yli esim. nanolla (tai emacsilla tai vimillä, jos alkaa "nörtityttää"), ja palautusta varten ne lienee kätevintä kopioida scp:llä joko kotikoneelle tai mikroluokkatapauksessa U-asemalle.

U-asemalle eli verkkolevylle ne menevät esim. komentamalla testipalvelimella (hakemiston kj14/demot/demo5 tulee tietysti olla olemassa verkkolevylläsi):

scp TIEDOSTONIMI halava.cc.jyu.fi:~/kj14/demot/demo5

Palautustehtävä

Tämän kerran palautustehtävät on annettu C-ohjelman muistivuoto.c ja skriptin skripti_idiootti.sh kommenttina. Skriptiäkin kokeillessa voinet varmistua asioiden toiminnasta käyttämällä top-ohjelmaa toisessa ikkunassa.

(Tehtävä on vapaaehtoinen ja toivottavasti hauska; annan siitä yhden pisteen bonusta ensimmäiseen tenttiyritykseen, jos palautus on tehty ennen ensimmäistä tenttipäivää.)