Tietokoneen käytön ja ohjelmoinnin alkeet

Kurssin kotisivulle


Käyttöjärjestelmä

Ilman ohjelmaa tietokone ei osaa tehdä yhtään mitään. Jotakin ohjelmaa tarvitaan jo siihen että koneelle voi ylipäätään syöttää ohjelman suoritettavaksi.

Tehtävät

Käyttöjärjestelmä (operating system) on ohjelmisto, joka tekee tietokoneen käytön mahdolliseksi. Se huolehtii mm. seuraavista asioista:

Käyttöjärjestelmä vastaa tiedostojen hallinnasta, mihin kuuluu useita asioita, kuten levytilan varaus, tiedon siirto muistin ja levyn välillä ja tiedostojen suojaaminen niin, että vain tietyt käyttäjät pääsevät niihin käsiksi.

Käyttöjärjestelmä lataa suoritettavat ohjelmat levyltä muistiin, jakaa niille prosessoriaikaa ja valvoo niiden suoritusta.

Historiaa

Ensimmäisissä koneissa ei ollut vielä mitään käyttöjärjestelmää. Ohjelma kirjoitettiin suoraan muistiin tai luettiin esimerkiksi reikänauhalta suoraan konekielisenä. Ohjelma sai koko laitteiston käyttöönsä ilman rajoituksia.

1. sukupolven koneet (tyhjiöputket). Ensimmäiset käyttöjärjestelmät 1950-luvulla olivat yksinkertaisia eräajojärjestelmiä. Käyttöjärjestelmä luki seuraavan työn muistiin, suoritti sen, siivosi jäljet ohjelman jäljiltä ja latasi sitten seuraavan työn.

2. sukupolven koneet (transistorit). Moniajo (multiprogramming) kehittyi 1960-luvun alussa. Useampi työ saattoi käyttää konetta samanaikaisesti. Tämä edellyttää muistin suojausta: työ ei saa päästä sekoittamaan toisen työn muistialueita tai tiedostoja.

Samalla syntyi myös nykyisen kaltainen osituskäyttö (timesharing), jossa käyttäjä toimii inter\-aktiivisesti tietokoneen kanssa.

Nyt saivat alkunsa reaaliaikaiset sovellukset, joissa tietokone valvoo esimerkiksi jotakin työkonetta, tuotantolaitosta tai vihamielisen valtion puuhia (tämähän oli kylmän sodan kautta).

Korkean tason ohjelmointikielet alkoivat kehittyä ja kieliä ruvettiin tutkimaan teoreettisesti.

Burroughsin MCP 1963: korkean tason kielellä kirjoitettu käyttöjärjestelmä. moniajo, moniprosessorituki, virtuaalimuisti.

3. sukupolven koneet (integroidut piirit). IBM/360 (1964) aloitti suurten yleiskäyttöisten koneiden aikakauden. Käyttöjärjestelmistä tuli mutkikkaita ja raskaita. Tietokonejärjestelmät olivat kalliita ohjelmistokehityksen aikatauluissa oli vaikea pysyä.

Käyttöjärjestelmiä IBM:n OS/360, MIT:ssa kehitetty CTSS ja Multics.

4. sukupolven koneet (suuren mittakaavan integroidut piirit). 1970-luvun puolivälissä tietokoneet alkoivat pienentyä.

Tietokoneita alettiin liittää yhteen tietoverkkojen avulla. Tämä aiheutti aivan uusia vaatimuksia tietojen suojaukselle.

Tietoverkkojen ansiosta suuria tehtäviä voitiin hajauttaa useille koneille. Toisaalta alettiin rakentaa myös koneita, joissa on suuri määrä prosessoreita.

IBM:n VM (1972): virtuaalikoneen idea. Jokaisella käyttäjällä on vaikutelma, että hän saa käyttöönsä koko 370-järjestelmän, jossa voi ajaa mitä tahansa käyttöjärjestelmää.

IBM:n MVS (1974): suuri ja mutkikas suurkoneiden käyttöjärjestelmä. MVS oli aikaisempia luotettavampi monenlaisten tarkistusten takia, mutta ohjelmoivan käyttäjän kannalta toivottoman hankala. Työnohjauskieli oli alkeellinen ja tiedostojen määrittely työlästä ja tarkkuutta vaativaa.

1975 mikrotietokoneiden CP/M-käyttöjärjestelmä. Laitteiston kanssa suoraan tekemisissä oleva osa on kirjoitettu assemblerilla, loput korkean tason kielellä. Tästä seuraa hyvä siirrettävyys, sillä vain assembler-osaa tarvitsee muuttaa siirryttäessä erilaiselle laitteistolle. Alimman tason syöttöä ja tulostusta hoitaa BIOS (Basic Input/Output System), joka on nykyisen BIOSin pohjana.

DECin pienkoneet PDP-11, jota seurasi VAX (1978) ja VMS-käyttöjärjestelmä. Kohtalaisen helppo käyttöliittymä ja hyvä opastusjärjestelmä.

PC-koneiden MS-DOS 1981--2000 perustui osittain CP/M-järjestelmiin, mutta lainasi piirteitä Unixista.

Unix ja Linux

Unix-käyttöjärjestelmää edelsivät vähemmän onnistuneet yritykset luoda pienkoneiden moniajojärjestelmää. Itse Unixin panivat alulle Ken Thompson ja Dennis Ritchie, jotka käyttivät hyväksi myös aikaisempien yritysten antamia kokemuksia ja ideoita. Vuonna 1970 kasassa oli ensimmäinen alkeellinen versio, jolle Brian Kernighan antoi nimen Unix.

Unixista kehittyi ennen pitkää erilaisia versioita. Myös eri laitevalmistajat kehittelivät sitä edelleen. Käyttäjän kannalta näkyvin ero on hieman erilaisissa käyttöliittymissä. Ylläpitäjälle erot ovat ikävämpiä, sillä monet perusasiatkin on eri versioissa toteutettu hieman eri tavoin.

Unix oli kaupallinen tuote, mikä hidasti sen yleistymistä. Sitten 1991 suomalainen Linus Thorvalds kehitti tavallisessa PC:ssä toimivan Linuxin, joka oli vapaasti kopioitavissa GNU-lisenssin mukaisesti.

GNU tulee sanoista Gnu is Not Unix. Ennen Linuxia merkittävin GNU-tuote oli tekstieditori emacs, jonka juuret juontavat 1970-luvun puoliväliin; sen ensimmäisiä kehittäjiä olivat Richard Stallman ja Guy Steele. GNU-projektin tarkoituksena oli tuottaa Unixin ohjelmia vastaavat tuotteet vapaaseen jakeluun. Varsinaista vauhtia projekti sai kuitenkin juuri Linuxista, joka tarjosi saataville koko käyttöjärjestelmän ja vieläpä kaikkein yleisimmille laitteistoille.

Unixin kerrosmainen rakenne muistuttaa sipulia. Keskellä on fyysinen kone ja sen ympärillä Unixin koneenläheisin osa, ydin (kernel). Ydin käsittelee systeemikutsuja, tarkasti standardoituja aliohjelmakutsuja, jotka suorittavat perustoimenpiteitä, kuten varaavat muistia, käynnistävät uuden prosessin tai luovat tiedoston. Ulommassa kerroksessa ovat käyttöjärjestelmälle annettavat komennot. Vielä ulompana ovat ohjelmat ja komentotiedostot, jotka kutsuvat näitä komentoja.

Unix on ohjelmoitu lähes kokonaan korkean tason C-kielellä. C-kääntäjä tuleekin automaattisesti järjestelmän mukana. Siksi C-kielen taito on erittäin hyödyllistä Unixin käyttäjälle. Koska Unixin komennot ovat oikeastaan vain C-kielisiä ohjelmia, myös käyttäjän kirjoittamat ohjelmat toimivat samalla tavoin kuin käyttöjärjestelmän komennot. Kun ohjelma käynnistetään, sille voidaan antaa samalla komentorivillä parametreja aivan samaan tapaan kuin Unixin komennoille. C-kieltä käsittelevässä luvussa ??? tarkastellaan lyhyesti, miten tämä tapahtuu. Itse asiassa Unixin komennot voidaan korvata omilla ohjelmilla, jos ne tuntuvat toimivan paremmin.

Unix ja Linux ovat aitoja moniajoympäristöjä. X-ikkunointijärjestelmässä voi samaan aikaan olla käytössä useita virtuaalisia kuvaruutuja ja jokaisessa useita ikkunoita.

Moniajoympäristö

Tietokoneen prosessori voi suorittaa vain yhtä ohjelmaa kerrallaan. Ensimmäisissä koneissa olikin odotettava ohjelman päättymistä ennen kuin seuraava voitiin käynnistää. Tilanne oli sama vielä 1980-luvulla PC-koneissa yleisessä DOS-käyttöjärjestelmässä. Tämä ei ollut kauhean iso ongelma kotikoneessa, jolla suoritettiin vain melko pieniä tehtäviä. Tilanne oli toinen suuremmissa koneissa.

Ohjelmat eivät tarvitse prosessoria jatkuvasti. Välillä ne lukevat tietoa joltakin oheislaitteelta tai kirjoittavat jotakin. Tämä toimenpide vie suhteellisen paljon aikaa, jonka prosessori voisi käyttää johonkin muuhun kuin tiedonsiirron odotteluun. Näin samassa ajassa voitaisiin suorittaa useampia ohjelmia.

Nykyisin voimme jo PC:llä avata useita ikkunoita ja käynnistää jokaisessa oman ohjelmansa. Kaikki ohjelmat näyttävät toimivan samanaikaisesti. Todellisuudessa niin ei kuitenkaan ole, vaan käyttöjärjestelmä antaa kullekin ohjelmalle pieniä aikaviipaleita.

Kun uusi työ ilmestyy koneeseen esimerkiksi käyttäjän antaessa komennon, joka käynnistää jonkin ohjelman, se joutuu jonoon aivan kuin kaupan kassalla. Aikanaan se otetaan jonosta käsiteltäväksi. Työ voi olla eri tiloissa:

Valmiina suoritukseen (ready): Työtä aletaan suorittaa, kunhan käyttöjärjestelmä antaa prosessorin työn käyttöön.

Suoritettavana (run): Prosessori suorittaa työtä. Suoritus voi keskeytyä eri syistä. Tavallisesti työlle annetaan vain tietty aika, jonka se saa käyttää prosessoria. Kun tämä aika tulee täyteen, työ siirretään takaisin prosessoria odottavien töiden jonoon (ready). Työ voi myös haluta syöttö- tai tulostustoimenpidettä; se voi esimerkiksi odottaa käyttäjän painavan jotakin näppäintä tai liikauttavan hiirtä. Silloin työ siirretään odotustilaan (wait) odottamaan tiedonsiirron päättymistä. Lopulta työ valmistuu tai päättyy johonkin virhetilanteeseen, jolloin se poistuu järjestelmästä.

Odottamassa (wait): työ odottaa esimerkiksi syötön tai tulostuksen valmistumista. Kun toimenpide on päättynyt, työn suoritus voi jatkua. Prosessori voi kuitenkin olla tekemässä jotakin muuta, joten työtä ei voida jatkaa välittömästi. Siksi se vain siirretään odottamaan suoritusta (ready).

Työlle voidaan määritellä prioriteetti, joka kertoo, kuinka nopeasti työ pääsee etenemään. Korkean prioriteetin työ voi saada pitempiä aikaviipaleita ja se voi kiilata matalan prioriteetin töiden edelle ready-jonossa. Tyypillisesti interaktiivisilla töillä on korkea prioriteetti, jotta käyttäjän odotusajat eivät venyisi tuskallisen pitkiksi. Paljon aikaa vievä laskenta voidaan käynnistää pienellä prioriteetilla, jolloin se ei hidasta muiden ohjelmien suoritusta, vaan saa aikaa silloin, kun koneella ei ole muuta tekemistä.

Käyttöliittymä

Käyttöliittymä on ohjelma, jonka välityksellä käyttäjä kommunikoi käyttöjärjestelmän kanssa.

Vanhemmissa järjestelmissä käyttöliittymä oli tekstipohjainen: käyttäjä kirjoitti jonkin komennon ja käyttöjärjestelmä suoritti vaaditun toimenpiteen. Useita komentoja voi koota komentotiedostoksi (script), jonka voi sitten suorittaa yhdellä käskyllä.

Apple toi mikrotietokoneisiin graafisen käyttöliittymän, jossa komentoja ei kirjoiteta, vaan poimitaan valikoista. Käyttäjän ei tarvitse opiskella komentojen nimiä, joten käyttö on helppoa aloittelijallekin. Toisaalta käyttöliittymä ei ole kätevä, jos joutuu toistamaan samat toimenpiteet hyvin monta kertaa.

Microsoftin Windows tarjosi saman mahdollisuuden PC-käyttäjille. Moniajo oli periaatteessa mahdollista, muttei vanhimmissa versioissa kovin toimivaa. Myös luotettavuudessa oli ongelmia.

MIT:ssa kehitetty X-ikkunointijärjestelmä tarjoaa kaikenlaisille koneille graafisen käyttöliittymän mahdollisuuden. Kyseessä on tosin sekoitus tekstipohjaista ja graafista ympäristöä, jossa voi avata useita ikkunoita ja antaa niissä komentoja. Uusimmissa Linuxeissa X:n valikkoja on lisätty niin, että niiden avulla voi suorittaa jo monenlaisia toimenpiteitä, joten Linux alkaa käyttäjän kannalta näyttää yhä enemmän Windowsilta.

Apuohjelmia

Alkuperäisen Unixin mukana tuli varsin rajoitettu valikoima ohjelmia. Linuxin mukaan sen sijaan on yleensä paketoitu melkoinen määrä mitä erilaisimpia ohjelmistoja, ja lisää voi ladata verkosta. Linuxin mukana tulevia ohjelmistoja ovat mm:

Näiden lisäksi verkosta löytyviä hyödyllisiä ohjelmia ja ohjelmistoja ovat esimerkiksi: