Etusivu | -- Materiaali -- | Luennot | Miksi | Ajatuksia |
ITKA203 Käyttöjärjestelmät --- kesä 2007 --- Kirjallinen materiaali ja ohjeistus
Neljän opintopisteen (108 tuntia) sisältörajaus
Tässä on lopullinen versio kirjallisesta materiaalista, joka kurssilla käytiin läpi kesällä 2007. Jotakin on jätetty pois, ja joitakin kohtia on täsmennetty aiemmasta. Kiitän kaikkia, jotka ovat antaneet rakentavaa palautetta ja esittäneet pyyntöjä.
Tenttitärpeistä ilmenee oppimistavoitteet:
- Mahdolliset tenttikysymykset, joista tulee 24 pisteen verran valintoja per kerta.
Luentomoniste on perusrunko myös kesällä 2007:
- Jarmo Ernvall: Käyttöjärjestelmät (myynnissä Kampus Kirjassa). Monisteesta soveltuvat sivut 1-5 ja 21-64. Muiden osioiden sijasta kokeillaan kesällä 2007 uusia prujuja (ks. seuraavat kohdat).
- Prosessorista (HTML) | Prosessorista (PDF) : Prosessorin toiminta, konekielen suoritus, virtuaalimuistin käyttö, aliohjelman kutsuminen ja suoritus; esimerkkinä x86-64 -arkkitehtuuri. Luentomonisteen luvut 2 ja 3 korvaava materiaali. Liittyy tiiviisti harjoitustyöhön.
- Monisteen lopussa oleva Unix-shell-ohjelmointiosuus korvataan käytännön esimerkeillä Bourne Shellillä demo4:n materiaalissa (ks. alla)
- Luentomonisteen lopussa oleva harjoitustyöohje korvataan hieman erilaisella (ks. alla)
- Luentomuistiinpanoja (HTML) | Luentomuistiinpanoja (PDF) : Prujautin luennoilla puhelemistani asioista muistiinpanoja samalla kun puhelin. Tuolla saattaa olla seassa joitakin asioita, joita ei ole kahdennettu luentomonisteessa (ainakaan ihan samoilla sanoilla)
Demoissa ja harjoitustyössä läpikäyty materiaali kuuluu myös kurssiin:
- Demo 1: demo1.html PDF-versio: demo1.pdf. Skriptikoodi ja lisukkeet demo1.zip (Shellin ja unix-työkalujen perusteet)
- Demo 2: demo2.html PDF-versio: demo2.pdf. Koodipaketti demo2.zip (C-ohjelmointi)
- Demo 3: demo3.html PDF-versio: demo3.pdf. Koodipaketti demo3.zip (Systeemiohjelmointia ja käyttöjärjestelmän toiminnan havainnollistusta)
- Demo 4: demo4.html PDF-versio: demo4.pdf. Skriptikoodi ja lisukkeet demo4.zip (Lyhyesti shell-skripteistä)
- Harjoitustyö:
harkkaohje.html PDF-versio: harkkaohje.pdf.
- C-osuus malliharjoitustyöstä: malliharkka.c.
- GDB-osuus malliharjoitustyöstä: malliharkka_ajo.txt
- "Valmis" malliharjoitustyö: malliharkka_valmis.txt
Luennoilla esitellyt esimerkkiohjelmat valaisevat teoriaa:
- MunOhjelma.java
- bytes_to_bits.c
- minish.c (minimalistinen shell)
- sigesim.c (IPC: signaalit)
- chattomyself.c (IPC: send ja receive)
- Alkup., josta thread_nosem.c (ongelmallinen) ja thread_sem.c (ratkaistu) (säikeet, semaforit)
- Deadlock.java (lukkiutuminen, Sunin Java-säieohjelmointi -introsta)
- Huomaa myös demoissa olleet esimerkit, joita en listaa tässä erikseen
Ylläoleva materiaali on siis kurssin tämänkertainen aiherajaus. Alla on lisätietoa, kirjallisuutta ja nettilinkkejä.
Kirjallisuutta / Reference material
Olen 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. Kirjallisuusviitteet on kopioitu luentomonisteesta. Googlella löysin joitakin linkkejä kirjojen kotisivuihin.
On otettava huomioon, että neljän opintopisteen kurssiin ei voi mahtua kuin pintaraapaisu siitä, mitä esim. noissa oppikirjoissa kerrotaan todellisesta maailmasta.
Käyttöjärjestelmistä / About operating systems
- William Stallings: Operating Systems: Internals and Design Principles -- luentomoniste pohjautuu suurelta osin tähän kirjaan.
- 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... aina tämä Aku Ankan voittaa?) Vanha kunnon "Tietotekniikan perusteet" on mielestäni hyvä lisämateriaali. Siitä niin sanotusti "kerrattiin" joitakin hyödyllisiä esitietoja tällä kurssilla.
- 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.
Näköjään atk-keskuksen (edesmenneet) koneet
tukki
jakanto
olivat Sparceja. Mikroluokissa, töissä ja kotona meillä useimmilla lienee x86-prosessori kuten Pentium. - 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ä linkit kertyivät kesällä 2005, kun viimeksi pidin Käyttöjärjestelmät. Ne liittyvät aihepiireihin, joita käydään luennolla läpi jossakin järjestyksessä myös kesällä 2007.
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
Säikeistä ja yhdenaikaisohjelmoinnista (concurrent...)
Shell-ohjelmoinnista
Oletusarvoisesti C-shell on se interaktiivinen shell, jota porukka meillä käyttää. Sen voi vaihtaa, ja jostain syystä minä käytän bashiä kun joskus olen siihen tottunut. Shell-skriptejä tullaan opiskelemaan käyttäen esimerkkinä joko C-shelliä tai bashiä. Paljon käyttävät maailmalla molempia ja myös muita.
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 suoria linkkejä J. Ernvallin kirjoittamaan materiaaliin sekä nettilähteisiin, joihin aiemmilla kurssikerroilla on ollut linkkejä. En tiedä vielä, onko 8086 se arkkitehtuuri, jota kesällä 2007 käytetään esimerkkinä. Voi olla; voi olla että ei... ja joka tapauksessa tarkemmin ajatellen prosessori kuin prosessori on abstraktisti ajateltuna vain joku prosessori; ei ne niin kovin erilaisia ole.
- Avustusta; printf ja muuta I/O:ta
- Avustusta; char-taulukko
- Avustusta; int-taulukko
- Avustusta; C:n bittioperaatiot ja 8086-käskyjä
- Avustusta; enter
- 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 lähdemateriaali
- alan lehtiä ja kongresseja
Vastaavan aiheen opetusta muualla maailmalla
Käyttöjärjestelmät ovat elimellinen osa informaatioteknologiaa. Niinpä sitä 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:
- 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 @ Lahti -- 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 2007-07-31.