Etusivu | -- Materiaali -- | Luennot | Opettajat |
ITKA203 Käyttöjärjestelmät --- kevät 2014 --- Kirjallinen materiaali ja ohjeistus
Neljän opintopisteen (108 tuntia) sisältörajaus
Materiaalin kehitys tapahtuu julkisessa repossa yousourcessa. Tällä sivulla julkaistaan kevään 2014 versiot materiaalista, eli mm. tenttitärpit ja "yhtenäisemmät" prujut, sitten kun ne ovat kevään mielessä valmiita. Lisäksi kurssin sisältöön kuuluu olennaisina osina myös käytännön harjoitteet ja luennoilla näytetyt esimerkkiohjelmat, joiden listaaminen prujun osana ei olisi tarkoituksenmukaista.
Pääasiallinen kirjallinen materiaali:
Tenttitärpeistä ilmenee oppimistavoitteet:
- Mahdolliset tenttikysymykset, joista tulee 24 pisteen verran valintoja per kerta.
Kuten meillä kaikessa, tekemällä oppii parhaiten tai ainakin hyvin. Siksipä on demoja eli hands-on tehtäviä. Ensiksikin pakolliset demot, joiden ultimaattinen deadline on ensimmäiseen tenttipäivään mennessä:
- Demo 1: sormet unixiin
- Demo 2: sormet C:hen
- Demo 3: välipala ja ensimmäinen skripti
- Demo 4: Hieman edistyneempi skripti (viimeinen pakollinen demo)
Lisäksi on vapaaehtoisia demoja, joista saa maksimissaan 6p hyvitystä tenttiin. Tenttikysymyksistä on silti saatava puolet pisteistä (12/24), että suoritus hyväksytään. Sama deadline kuin pakollisissa. Näiden tehtävien tarkoitus on toisaalta avartaa aihealuetta hieman pakollisen perussisällön ulkopuolelle, ja toisaalta tukea lisätekemisen kautta perussisältöön kuuluvien asioiden ymmärtämistä. Tehtävien pisteytys on työmääräarvion mukainen (1-2p):
- Demo 5: "Vaarallisia ohjelmia"; vapaaehtoinen (1p)
- Demo 6: "Edistynyt skripti"; vapaaehtoinen (1p)
- Demo 7a:"Debugger-miniharkka"; vapaaehtoinen, vaihtoehtoinen, assembler -track (2p)
- Demo 7b:"Tutkimuskatsaus"; vapaaehtoinen, vaihtoehtoinen, tutkimus -track (1p)
- Demo 7c:"Toteutuskatsaus ";vapaaehtoinen, vaihtoehtoinen, implementaatio -track (1p)
- Demo 8: "Tuunaa tenttisi"; vapaaehtoinen (1p)
Alla on lisätietoa, kirjallisuutta ja nettilinkkejä.
Kirjallisuutta / Reference material
Olen edelleenkin sitä mieltä, että mikään ei korvaa kunnon oppikirjaa. Kovakantinen on kallis, mutta se on sijoitus tulevaisuuteen (ja näyttää hyvältä hyllyssä). Luentomoniste on aina väistämättä referaatti ja paikallinen tulkinta. Käyttöjärjestelmistä kertovia kirjoja on paljon; seuraavassa on muutamia hyviä poimintoja (kopsittu aiemmilta kurssikerroilta; uudemmat painokset ovat varmasti jo saatavilla).
On otettava huomioon, että neljän opintopisteen kurssiin ei voi mahtua kuin pintaraapaisu siitä, mitä esim. noissa oppikirjoissa kerrotaan todellisesta maailmasta. Tällä kurssilla toivottavasti saa pienen alkusysäyksen, joka helpottaa asian varsinaista opiskelua siinä vaiheessa kun se tulee tarpeelliseksi työtehtävien tai oman kiinnostuksen vuoksi.
Käyttöjärjestelmistä / About operating systems
- William Stallings: Operating Systems: Internals and Design Principles -- tämäkin kurssikerta pohjautuu suurelta osin tähän kirjaan, tosin toiseksi viimeiseen eli seitsemänteen painokseen.
- Andrew S. Tanenbaum: Modern Operating Systems
- Ilkka Haikala ja Hannu-Matti Järvinen: Käyttöjärjestelmät
- Avi Silberschatz, Peter Baer Galvin ja Greg Gagne: Operating System Concepts
- ... and so on, search the library database using the keyword 'operating system' ...
Unixista / About Unix
- Bach: The Design of the UNIX Operating System
- Beck: Linux kernel internals
- ... and so on, search using the keyword 'unix' ...
Windowsista / About Windows
- Custer: Inside Windows NT
- ... and so on ...
+ Sivistävää iltalukemista
Seuraavat dokumentit ovat vapaasti saatavilla netistä:
- Tietotekniikan perusteet -luentomoniste (jos kesällä jää luppoaikaa...)
- Intel Pentium -prosessorin manuaalit ("hardcore"...) -- Huolella kirjoitettua teknistä dokumentaatiota (edelleen sarjaa "jos jää luppoaikaa"). Tätä aikansa silmäilemällä ymmärtää jo aika paljon tietokoneen sielunelämästä. Muistit, prosessorin toimintatilat ja rekisterit, kaikki konekieliset käskyt ja kuinka ne muutetaan bittikoodiksi...
- SPARC -prosessoriarkkitehtuurin kuvaus ("hardcore"...) -- vertailun vuoksi toinen manuaali. Ei prosessori vaan arkkitehtuuri sellaiselle. Mikroluokissa, töissä ja kotona meillä useimmilla lienee kuitenkin nykyään x86-jatkumon prosessori. Useimmissa kännyköissä sen sijaan varmaankin tikittää nykyisellään ARMin prosessori; senkin manuaalit löytynevät valmistajan nettisivulta Support-osion alta.
- The Java Virtual Machine Specification kertoo miten Java-virtuaalikone toimii. (myös hiukan HC, mutta ei liene paha hieman silmäillä tätäkin joskus kun kaipaa jotain kivaa tekemistä)
Linkkejä
Nämä sekalaiset linkit ovat kertyneet 2005, 2007 ja 2011 Käyttöjärjestelmät -kurssin ilmentymiä pitäessäni. Ne liittyvät aihepiireihin, joita käydään luennolla läpi jossakin järjestyksessä myös nyt. Osa linkitetyistä sivuista on varmaan poistunut vuosien varrella; kaikenlaisia korjauksia saa etsiä ja ehdottaa.
Kokonainen käyttöjärjestelmä lähdekoodina
Okei, tämä on vain käyttöjärjestelmän ydin eli "kernel" ...
- Linux kernel
- Pieni "kartta", josta voi ottaa suuntaa koodien tutkimisessa. Tämä on osa isompaa nettijulkaisua.
Lisätietoa muutamista käyttöjärjestelmän osista
- Hieman tietoa tiedostojärjestelmistä
- Linux-muistinhallinnasta
- Toinen juttu sivutetusta virtuaalimuistista -- osa jonkinlaisesta assembler-aiheisesta weppijulkaisusta
Laitteistosta
- Tyypillisen nykyprosessorin kuva: http://www.activewin.com/reviews/hardware/processors/amd/athlonxp2200/index.shtml
- Jonkinlainen kuva kovalevyn rakenteesta
Emulaattoreita
Säikeistä ja yhdenaikaisohjelmoinnista (concurrent...)
Shell-ohjelmoinnista
Tässä muutama linkki erilaisiin shelleihin:
Tekstieditointia mm. Unixeissa
Mm. ohjelmointi on tekstin eli lähdekoodin editointia. Tässä on linkkejä sellaisiin tekstieditorityökaluihin, jotka yleensä löytyvät Unix/Linux-koneiden perusasennuksista. Jos sinulla ei ole kokemusta, suosittelen, että editoit nanolla (ei hajoa pää heti alussa):
- GNU Nano - The Text Editor
- Nano on itse asiassa "vapaa Pico" ...
Yllä mainitut ovat helppoja ja siksi hyviä aloittelijalle. Nano näyttää olevan asennettu JY:n Tietohallintokeskuksen Linux-koneisiin, joita me kaikki voidaan käyttää (ja ainakin tällä kurssilla käytetään). Mutta sitten kun/jos sinulla on kokemusta, sinulla ei ole vaihtoehtoja vaan on siirryttävä eteenpäin:
- EmacsWiki , lähtökohta tekstieditointiin Emacsilla.
- Vastaava Vi-improved -editorille
- Hieman Emacsin ja Vi-improvedin välistä vertailua
Myös nämä löytyvät THK:n tarjoamilta suorakäyttökoneilta. Vi-editori itse asiassa löytyy suurin piirtein maailman jokaisesta Unix-koneesta. Se on myös tehokas ja kätevä, sanovat aktiivikäyttäjät. Minä osaan kirjoittaa rivejä Vi-improvedilla, tallentaa tekstin ja poistua ohjelmasta. En juuri muuta sillä osaakaan... Vi on osittain vähän työläs hahmottaa... Emacsissa on kaikki, mitä voin kuvitella tarvittavan tekstinkäsittelyyn. Jos voisin kuvitella jotain muuta tarpeellista, voisin periaatteessa laajentaa Emacsia tekemään juuri sen. Mutta editorin valinta on näitä subjektiivisia makuasioita! Ymmärtääkseni kuitenkin nörtti osaa joko Emacsin tai Vin käytön tai se ei ole oikea nörtti. Windowsilla tekstiä voi editoida myös esimerkiksi ConText-ohjelmalla, joka on asennettu ainakin Agoran mikroluokkiin.
Aiempien kurssikertojen linkkilistaa
Tässä on joitain sekalaisia nettilähteitä, joihin aiemmilla kurssikerroilla on ollut linkkejä.
- eräs 8086 assemblertutoriaali
- Systems Design and Programming -- ulkomainen kurssimateriaali, jossa on mukana hyviä x86 -selityksiä
- Programming from the Ground Up by J. Bartlett -- ohjelmoinnin oppikirja, joka lähtee liikkeelle "oikeasta suunnasta" eli tyvestä puuhun.
- C++
- Stallingsin oppikirjan lisämateriaaleja (5. painos)
- Stallingsin oppikirjan lisämateriaaleja (6. painos)
- alan lehtiä ja kongresseja. Googlettamalla löytyy varmasti lisää.
Vastaavan aiheen opetusta muualla maailmalla
Käyttöjärjestelmät ovat elimellinen osa informaatioteknologiaa. Niinpä asiaa opetetaan joka paikassa. Alla on yhden Google-session antama lista muiden oppilaitosten järjestämistä vastineista. Ehkä se auttaa suhteuttamaan aiheen tärkeyttä, ja ehkä kurssien painotuserot auttavat näkemään, miten monta muuta asiaa käyttöjärjestelmiin liittyy (suurin osa linkeistä on tottakai rikkoutunut neljässä vuodessa, mikä paikattaneen jossain vaiheessa kesää 2011 uudella Google-sessiolla):
- Machine Structures @ University of California, Berkeley
- Operating System Engineering @ Massachusetts Institute of Technology -- nämä tekevät harjoitustyönä oman käyttöjärjestelmän; me ei kesällä ihan ehditä samaan ... no joo, tuo onkin näköjään jatko-opiskelijoille suunnattu kurssi. MITläiset aloittavat ilmeisesti kurssista Computation Structures ja jatkavat kurssilla Computer System Engineering sekä Laboratory in Software Engineering . Meidän ITKA203:n sisältö on jotakuinkin pehmennetty ja pyöristetty hybridi kahdesta ensiksimainitusta tasolla, joka on mahdollinen täysin ilman tuollaisen kolmanneksi mainitun ameriikankurssin pohjia; meillä projektityö ajoittuu myöhempään vaiheeseen opintoja kuin mihin Käyttöjärjestelmät on suunniteltu.
- Käyttöjärjestelmät 1 @ Helsingin yliopisto -- Etelän immeisillä on esitietokursseina Tietokoneen toiminta ja sikäläinen "ohjelmointi 1". Meidän ITKA203 on jotakuinkin pehmennetty ja pyöristetty hybridi noista kahdesta hesalaisten nimikkeestä.
- Operating Systems and Concurrent Programming @ Helsingin Teknillinen Korkeakoulu, esitietoina Computer Architecture ja kaksi kurssia ohjelmointia. Arvatenkin meidän ITKA203 on pehmennetty ja pyöristetty ...
- Käyttöjärjestelmät @ Tampereen Teknillinen Yliopisto -- vastaa jonkin verran meikäläistä lähestymistä ainakin luento-otsikoiden perusteella (syksyn 2006 otsikot näköjään poistettu sittemmin...). Meillä kuitenkin hieman pehmennetympi ja pyöristetympi, ja lisäksi sisällytämme unix-shell -intron ITKA203:een, kun ei sitä muissa pakollisissa kursseissamme taida olla. Meidän lähestyminen on myös vähemmän "matemaattinen" ja vähemmän KJ:n algoritmeihin keskittyvä kuin Tampereella.
- Käyttöjärjestelmät @ Lappeenranta -- ehkä jopa lähempänä meikäläistä lähestymistä (miinus se unix-shell)
- Tietokonejärjestelmät @ Joensuu -- tässä listassa mainituista kaikkein lähimpänä meidän kurssia (sisältää jopa sitä shell-käyttöä). Joensuun nettisivu sisältää muuten näköjään linkin meidän Tietotekniikan perusteisiin, jonka taisin tuossa ylempänä luvata lisämateriaaliksi myös kesäkurssilla. Joudumme tästäkin pehmentämään ja pyöristämään ihan siksi, että meillä tähän on mitoitettu vain 4 op eikä Tietotekniikan perusteet ole nykyään pakollinen (eli ei voi olettaa pohjatiedoksi vaan joutuu "kertaamaan" tätä samalla kun käydään varsinaista Käyttöjärjestelmät -sisältöä. (Harmi sinänsä, mutta se on pedagogis-poliittinen kysymys, josta minä olen toistaiseksi ihan hiljaa ja olen täällä vain töissä...)
- Introduction to Operating Systems @ The Chinese University of Hong Kong.
- ... ja niin edelleen ... joka paikassa tämä kuuluu ohjelmaan eikä paljon toinen toisestaan eroa ...
Viimeksi kajottu 2014-08-26.