ITKA203 Käyttöjärjestelmät, luento 2/14, Ke 25.5.2011 ===================================================== Info: ----- - Eilisen muistiinpanot löytyvät nettisivulta. - Luentovideointi näköjään toimii salissa Auditorio 2. Muista saleista ei vielä voi luvata mitään. - Kirjallisen luentomateriaalin ensimmäiset luvut tulevat ennen ensi viikkoa (kirjoitan ne puhtaaksi huomisen luennon jälkeen). - Demoja pääsee tekemään ensi viikolla (ohjeiden toimivuus nykyisillä systeemeillä täytyy testata ennen kuin päästetään tekemään). Tämän päivän toteuma: --------------------- Tehtiin yleissilmäys käyttöjärjestelmän toteutukseen: katsottiin avoimena lähdekoodina saatavilla olevaa Linux-ydintä (http://www.kernel.org/) käyttäen selailuun sopivaa On-line työkalua (http://lxr.linux.no/): - Havaittiin mm., että lähdekoodi on jaettu pariinkymmeneen päähakemistoon, joista osalla on jollain tapaa tutulta maistuva nimi ("crypto", "drivers", "net", "security", "sound", ...) ja osan nimet ovat mahdollisesti vieraampia ("fs, "ipc", "mm", ...). - Ensimmäisenä hakemistolistauksesta tuli vastaan ``Documentation``, josta löytyvän tekstitiedoston ``HOWTO`` johdanto nähtävästi kertoo, miten valmiiksi tekniikkaa osaava voi päästä mukaan kehittämään Linuxia, ja lupailee myös antaa osviittaa teknisten seikkojen opiskeluun. - Satunnaiset klikkaukset muissa hakemistoissa kertovat, että toteutus jakautuu hakemistojen sisällä vielä alihakemistoihin, ja loppujen lopuksi löytyy pääasiassa C-kielisiä ohjelmatiedostoja. Ikään kuin sattumalta osuimme myös ``arch`` -nimisen hakemiston sisään, josta löytyikin jotain erinäköistä kieltä. Totesin sen olevan assembleria... (Vielä ei yritetäkään ymmärtää mitä nähtiin; vuorta voi katsoa kauempaa ennen kuin lähtee kiipeämään - ehkä niin on jopa hyvä tehdä). Näytin lyhyen intron pääteyhteyden ja komentorivin käyttämisestä. Arvelin että se on ajankohtaista, koska varsinkin jatkossa tulen varmaan näyttämään käytännön esimerkkejä sen avulla, ja halusin alustavasti vähän poistaa hämmennystä siitä, mitä oikein kuvaruudulla tapahtuu siinä vaiheessa, kun sinne kirjoittelen jotakin komentoja ja sitten tulee vastaan jotain tekstiä. Lähdettiin kertaamaan Tietokoneen rakenne ja arkkitehtuuri -kurssin asiaa siinä määrin kuin käyttöjärjestelmien ymmärtämiseksi on tarpeellista. Käytettiin apuna monistetta Koikkalainen, Orponen: Tietotekniikan perusteet, 2002, koska se on alunperin oman yliopistomme moniste ja edelleen helposti saatavilla netistä (tällä hetkellä osoitteesta http://users.ics.tkk.fi/orponen/lectures/ttp_2002.pdf). Mielestäni se tiivistää olennaiset asiat erinomaisesti. Käyttöjärjestelmät -kurssin mielessä voimme tiivistää ja yleistää vielä entisestäänkin. Asia on sama kuin mainitulla Tietokoneen rakenne ja arkkitehtuuri -kurssilla eikä esitystapakaan kovin erilainen. Huom: Oletan, että tunnet suurelta osin (esim. Ohjelmointi 1 tai Tietokoneen rakenne ja arkkitehtuuri -kurssin pohjalta tai sangen nopeasti itsenäisesti opiskellen) seuraavat asiat: - Kokonaislukujen esittäminen binääri- ja heksadesimaalimuodossa. - Boolen algebran alkeet (tasolla "tiedät mitä ovat AND, NOT ja OR-operaatiot biteille"). - Ohjelmointi (tasolla "olet käynyt Ohjelmointi 1:n" tai vastaavalla). Kysele pian esim. sähköpostilla, jos tarvitset apuja näiden asioiden suhteen. On ihan normaalia että esitietoja joskus puuttuu. Käytiin läpi kerrosmainen malli (Tkoneen rakenne ja arkkitehtuuri -kurssilta): korkean tason ohjelmointikieli, esim. C++ (Tai Javan kaksi kerrosta: kieli ja virtuaalikone) symbolinen konekieli käyttöjärjestelmäkone --- Käyttöjärjestelmät-kurssi liikkuu tämän rajan yläpuolella --- ISA, käskyjoukkoarkkitehtuuri mikroarkkitehtuuri digitaalilogiikka Peruskäyttäjän näkemät ohjelmat on tehty korkean tason ohjelmointikielellä. Ohjelmat täytyy saada siirtymään fyysisellä tietokonelaitteistolla suoritettavaan muotoon, jota voidaan kirjoittaa "symbolisena konekielenä" (tähän ylimpien kerrosten väliseen rajapintaan palataan hetkeksi huomisella luennolla). Konekielinen ohjelma on sarja prosessorin käskyjoukkoarkkitehtuurista löytyviä bittijonoja (nämä käsitteet selvennettiin vasta luennon seuraavassa osiossa). Käyttöjärjestelmät -kurssilla ei tarvitse nähdä alempien tasojen välisiä rajapintoja, koska käskyjoukon tunteminen riittää (nämäkin selvennettiin seuraavassa osiossa). Konekielisten käskyjen toiminta voidaan ymmärtää vain, jos tunnetaan Von Neumann -arkkitehtuuriin liittyvät komponentit. Mikä on tietokone? - Yksinkertainen, "tyhmä" tai vähintään "tietämätön" automaatti. Laskukone (engl. "computer"). - Rakennuspalikoina pienenpienet, sähkökomponenteista tehdyt logiikkaportit ja "piuhat" niiden välillä. - Palikoista koostetaan laajempia palikoita, joista koostetaan laajempia palikoita, ... kokonaisuus organisoidaan tietyllä tapaa (seuraava kohta). - Toimii kellopulssin ohjaamana, tila voi muuttua vain diskreeteillä ajanhetkillä. Von Neumann -arkkitehtuuri: - Keskusyksikkö (processor), jonka sisällä: * kontrolliyksikkö (control unit), "monipuolinen automaatti, mutta toimintaperiaatteeltaan ei ihmeellisempi kuin esim. juoma-automaatti" * aritmeettislooginen yksikkö (arithmetic-logical unit, ALU), komponentti joka pysyy laskemaan binääriluvuilla ja sijoittamaan tuloksia rekistereihin. * rekisterit (registers), nopeita muistikomponentteja, jotka säilyttävät aiemmat bittinsä, kunnes uudet mahdollisesti tulevat sisään; rekistereitä on useita, eri puolilla prosessoria, ja niillä on omat roolinsa sekä tietysti roolia kuvaavat nimet (kuten esim. "program counter, PC" tai "instruction, INSTR"). - muisti ja I/O -komponentit - väylä, eli "piuharivistö" joka yhdistää komponentit toisiinsa; väylän ohjaukseen ei tarvitse tässä yhteydessä syventyä, mutta toki on hyvä tietää että väylän piuhat pitää hoitaa aina "kiinni" tai "irti" tarkoituksenmukaisten lähde- ja kohdekomponenttien välillä. Tämäkin hoituu (kuten kaikki muukin) logiikkaporteista koostetuilla komponenteilla. Suoritussykli: nouto, suoritus - PC (eli "program counter") -rekisterin bitit siirretään osoiteväylälle ja osoitteen mukaisesta muistipaikasta tuodaan väylän kautta bittijono INSTR (eli "instruction") eli käskyrekisteriin - INSTR-rekisterin bitit ovat nyt seuraava konekielinen käsky, joka yhdistyy kontrolliyksikön syötteeksi. - Kontrolliyksikkö yhdessä ALU:n kanssa toteuttaa käskyn (esimerkkeihin käskyistä palataan huomisella luennolla; tässä vaiheessa riittää havaita että yksi käsky voi olla vain melko yksinkertainen toimenpide, kuten vaikka laskutoimitus) - Käskyn mukainen lopputulos on sijoitettu rekistereihin (hmm.. itse asiassa mahdollisesti myös muistiin... ja muutakin siinä on voinut tapahtua nykyprosessorin käskyssä.. Täytyykin ehkä huomenna tarkentaa vielä mikro-ohjelmien ja dekoodausvaiheen roolia! muuten sinne jää jotain mystisyyttä vielä leijumaan...) Käskykanta on se joukko käskyjä, jotka tietyn prosessorimallin elektroniikka on suunniteltu toteuttamaan. Konekieli on käskykannan käskyjen laittamista peräkkäin. Prosessori siis tietyssä mielessä "ymmärtää" konekieltä. Assembler on käskykannan käskyjen kirjoittamista ihmisen ymmärtämässä muodossa. Siihen käytetään lyhyitä ja ytimekkäitä symboleita käskyille (tyyliin ADD niinkuin "add", MOV niinkuin "move" tai JMP niinkuin "jump") Suoritussyklin tarkentaminen: - Nouto - Keskeytysten tarkistus - (itse asiassa kaikenlaista.. dekoodaus, liukuhihnoitus, ...) - Suoritus (Dekoodaukseen täytynee palata vielä huomenna; keskeytysten käsittely tulee olemaan tärkeässä roolissa käyttöjärjestelmän kannalta).