UNIXin TOTEUTUS
© 1992-1996 Hannu Aronsson haa@iki.fi


Ymmärtämisen kautta tehokäyttöön




TIETOKONEEN SIELU

Miten tietokone toimii?

Tietokoneen kehitys

Mekaaniset laskukoneet
    Reikäkortit, levymuisti, ferriittirengasmuisti, DRAM
    Putket, transistorit, mikropiirit, VLSI
    Hysterical raisins, Historical reasons -- taaksepäin yhteensopivuus

Tietokoneen käyttö

Erikoiskäyttö -> yleiskäyttö
    Sulautetut järjestelmät.
    Ohjelmointikielten (ja ohjelmoijien) maailmankuva: Abstraktiot, objektiorientoitunut ohjelmointi, ...
    Tietojenkäsittelyn teorian edistyminen.

Tietokone koneena

Tietokone on periaatteessa hyvin tyhmä laite, jossa ohjelmalla ohjataan laitteen osien toimintoja.
    Yleensä ohjelmapuoli jaetaan eri tasoihin, kuten käyttöjärjestelmään, laitteisto-ohjaimiin, sovellusohjelmiin, jne.

Tietokoneen osat ja rakenne
Tietokoneen osat ja rakenne
Tällainen tietokoneen rakenne, missä kaikki koneen osat ovat saman ja yhden tietoväylän välityksellä toisiinsa yhteydessä, kutsutaan von Neumannin arkkitehtuuriksi.
    Muitakin vaihtoehtoja on: Harvard-arkkitehtuuri, moniprosessorikoneet, hyperkuutio, ...

Tiedon käsittely: Mikroprosessori

Tiedon tallennus: Muisti

Pitkäaikainen tallennus: Massamuisti

Näkyvä toiminta: Syöttö ja tulostus

Miten tämä kaikki toimii yhteen?

Käyttöjärjestelmä

Käyttöjärjestelmien kehittyminen

Ohjelma ohjaa suoraan tietokonetta -> monitori -> time sharing
    Tehokkuus? Koneen vai käyttäjän tehokkuus?
    Mikrotietokone?

Käyttöjärjestelmän rooli ja palvelut

Käyttöjärjestelmä tarjoaa laitteistosta abstraktioita ohjelmille ja käyttäjälle. Tämä toteutetaan rajapintoina ja eri tasoisina liittyminä järjestelmän todellisiin osiin.
    Esimerkkejä abstraktioista on Unixissa esim. se, että kaikki (myös oheislaitteet) ovat tiedostoja, joita voidaan käsitellä pääosin samalla yksinkertaisella tavalla (lue, kirjoita, siirry). Oheislaitteita on Unixissa kahta eri tyyppiä, merkki (character device) esim. pääte tai sarjaportti ja rakenteinen (block) esim. levy tai muisti.
    Abstraktiot voidaan toteuttaa sitten eri tavoilla. Esim. Unixista on erilaisia toteutuksia, missä käyttöjärjestelmän ydin on joko yksi suuri massiivinen ohjelma, tai se on jaettu moneen pienempään osaan (mikrokernelin ympärille).
    Käyttöjärjestelmän palvelut.
    Käyttöjärjestelmien käsitteitä.

Käyttöjärjestelmän tasot
Käyttöjärjestelmän tasot

Ohjelmat, prosessi

Kun ohjelmaa ajetaan järjestelmässä, kutsutaan sitä prosessiksi. Sama ohjelma voi olla samaan aikaan monta kertaa ajossa.
    Käyttöjärjestelmä luo prosessin ympäristön.

Prosessin ympäristö
Prosessin ympäristö
Käyttöjärjestelmä jakaa suoritusaikaa ja resursseja prosessien kesken.

Prosessin suorituksen tilat
Prosessin suorituksen tilat
C --cc,as--> konekieli --> prosessi <--ympäristö,malli-- Käyttöjärjestelmä.

Resurssien hallinta

Muisti, levy, I/O, verkko

Monta käyttäjää yhtä aikaa?

Koska kunnollinen käyttöjärjestelmä sallii useiden ohjelmien ajamisen yhtäaikaa ja ohjelmien syöte ja tulostus voidaan ohjata minne vain, voi samaa konetta käyttää useampi käyttäjä yhtäaikaa melko luonnollisesti.

Turvallisuus ja luotettavuus




UNIX TAUSTAA

Unixin historiaa

Unixin monipuolisuus on pitkälti perua sen syntyvaiheista -- Unixin kirjoitti alkujaan pari häkkeriä kun eivät olleet tyytyväisiä olemassaoleviin "suuriin ja mutkikkaisiin" käyttöjärjestelmiin.

Bell labs

Hulking giants, Multics -> 1969, Pdp7, 5 ihmisen ryhmä -> Documenters Workbench, AT&T sisäinen käyttö, yliopistot -> AT&T Divestiture -> kaupallinen käyttö.
    Hakkerikulttuuri -- solmiokulttuuri.

Eri laitteet

Unix oli ensimmäisiä käyttöjärjestelmiä jotka ohjelmoitiin, ei konekielellä, vaan korkeamman tason ohjelmointikielellä. Unixin kehityksen rinnalla kehitettiin C-kieltä, jolla Unixkin on kirjoitettu.
    Koska Unix on kirjoitettu C:llä, on siitä laitteistoriippuvaa vain noin 5%. Unixin siirtäminen laitteistosta toiselle onkin siis melko helppoa verrattuna moneen muuhun käyttöjärjestelmään.

Yliopistot

Berkeley, VAX -> BSD Unix
    CMU, Mach

Versiot

Antiikin aika: System V, BSD, Solaris, ...
    Nykyaika: Mach (mikrokerneli + käyttöjärjestelmä-palvelimet), ...
    Kaupalliset: Solaris, IRIX, HP/UX, ...
    Vapaat versiot: Linux, FreeBSD, Mach, NetBSD, ...

Mitä Unix tarkoittaa?

Käyttäjän näkemä ympäristö? Shell, komennot, ...
    Ohjelmoijan näkemä ympäristö? C, kirjastot, ...
    Käyttöjärjestelmän toteutus?
    Tietokoneen rakenne?
    Käyttöjärjestelmän abstraktiot?
    Kaikki ohjelmat?

Posix

Posix-standardit ovat Unix-järjestelmän standardeja, mm. systeemikutsuista, komennoista, komentojen toiminnasta jne. Käytännössä kaikki Unix-järjestelmät ovat nykyään (järkeviltä osin) Posix-määritysten mukaisia.

Unixin perusrakenne


Unix-järjestelmän ja ytimen osat ja rakenne
Unix-järjestelmän ja ytimen osat ja rakenne

Prosessit

Stdin, -out, -err


Unix-ohjelman vakioympäristö: syöte-, tulostus- ja virhekanavat
Unix-ohjelman vakioympäristö: syöte-, tulostus- ja virhekanavat

Tiedon kulku, kaksi komentoa putkessa
Tiedon kulku, kaksi komentoa putkessa

Shell

Turvallisuus

Mikä on riittävä turvallisuuden taso?
    Security by obscurity?
    Fyysinen turvallisuus.

Unixin turvallisuusominaisuudet

Unixin turvajärjestelyt ovat yksinkertaisia, mutta toimivia.
    Suurin osa surullisenkuuluisista Unix-turvallisuusongelmista on ollut, ei Unixissa itsessään, vaan verkko-ohjelmissa. Ohjelmien nykyiset versiot ovat jo pääosin luotettavia.
    Unix on hyvin paljon käytetty käyttöjärjestelmä ja avoin, joten sen turvallisuusongelmat ovat tulleet esille (ja ne on pystytty nopeasti korjaamaan). Muissakin käyttöjärjestelmissä on vastaavia ongelmia, mutta niitä ei löydetä tai kerrota yhtä avoimesti.
    Vielä lisää turvallisuutta voidaan saada käyttämällä kehittyneempiä työkaluja, kuten esim. krypto-turvallisia pääteyhteyksiä (ssh).
    Ilmaisissa Unixeissa on vielä se hyvä puoli, että asiantuntevissa käsissä ongelmat voidaan korjata heti itse (tai konsultti voi korjata) ilman että joudutaan odottamaan jonkin valmistajan toimittamia korjauksia.

Tiedostojen oikeudet.

Omistaja, ryhmä, muut. Hakemistot.

Ohjelmien oikeudet.

Ohjelman ajajan oikeuksilla.
    Set-uid voi sallia eri tai laajemmat oikeudet.

Käyttäjän oikeudet

Käyttäjä id, ryhmät, salasana.

Virallisia turvaluokituksia

DoD Orange Book, D, C (C2), B, A.

Luotettavuus

Ohjelmat? Defensive programming.
    Laitteet? UPS (katkoton virtalähde)! Replikointi (monistaminen).

Entä Windows? Mac? OS/2?




UNIX JA VERKOT

Internet

Rakenne

Nopeus (bandwidth) -- viive (delay)
    Data (paketit, burst ok) -- Mediadata (vakiokaista, ei katkoja)

perusteknologiat

Unixin graafinen käyttöliittymä

X-Window System, verkossa hajautettava

Tekstitiedostot

Suurin osa Unixin ylläpitotiedostoista on myös tekstimuodossa. Ylläpitäjän tehtäviin kuuluu näiden tiedostojen tietojen muuttaminen tarpeen mukaan, levytilan riittävyyden valvominen (lokitiedostot), ongelmatilanteiden ratkominen, palvelinohjelmien konfigurointi, jne.
Ylläpitäjä joutuu oppimaan kaiken Unixista.

Joitakin esimerkkejä ylläpitoon liittyvistä tiedostoista:
/etc/passwd
Sisältää käyttäjien tiedot, käyttäjätunnuksen, salatun salasanan, käyttäjänumeron, käyttäjänumeron, nimen, kotihakemiston ja komentotulkin.
/etc/group
Sisältää käyttäjien lisäryhmät. Kullakin rivillä on ryhmän nimi, numero ja lista käyttäjistä jotka kuuluvat ko. ryhmään. Sisään logatessa järjestelmä lisää käyttäjän niihin ryhmiin missä hän on mainittu.
/etc/aliases
Sisältää sähköpostialiakset muodossa alias: osoite,osoite,... . Käyttäjillä voi olla myös omia henkilökohtaisia sähköpostin ohjauksia, mikä onnistuu laittamalla omaan kotihakemistoon .forward niminen tiedosto, joka sisältää uuden sähköpostiosoitteen. Aliastiedoston avulla voidaan myös luoda yksinkertaisia sähköpostilistoja.
/etc/sendmail.cf
Sähköpostiohjelman konfigurointitiedosto. Tunnettu erikoisen sekavasta muodostaan.
/etc/crontab
Sisältää systeemin ohjeet siitä, mitä komentoja milloinkin pitäisi suorittaa. Jokaisella käyttäjällä on myös oma crontab, mitä voi editoida crontab -e komennolla.
/p/etc/httpd.conf
HTTP-palvelimen (www-palvelin) konfigurointitiedosto. Sisältää mm. tiedot siitä, ketkä saavat käyttää kirjaston proxy-cachea.
/etc/rc.d/.../...
Täällä sijaitsevat Unixin käynnistykseen liittyvät shell-scriptit. Unix käynnistyessään ajaa yhden ohjelman järjestelmän toimesta (init), ja tämä ohjelma sitten suorittaa näitä scriptejä ja yleensä niissä käynnistetään palvelimet ja muut tarvittavat taustaohjelmat.



UNIX-VERTAILUA

Unix, Linux, NetBSD, FreeBSD, Solaris, IRIX, HP-UX, ...

Suhteellisen samanlaisia, mutta kuitenkin pieniä eroja. Linux on suhteellisen hyvä ja toimiva. Joustavin komentorivijärjestelmä.

DOS

Simppeli, ei oikea käyttöjärjestelmä

Windows 3.1, 95

DOSsin päällä oleva graafinen käyttöliittymäviritys. Tehokäyttäjälle paljon kompastuskiviä. Sovellusohjelmia paljon (miljoona huonoa ohjelmaa ei voi olla väärässä).

Windows NT

Periaatteessa oikea käyttöjärjestelmä, mutta suunniteltu vain yhdelle käyttäjälle, tietoturvaominaisuudet eivät kovin hyödyllisiä. Ei miljoonia sovellusohjelmia, mutta kaikkeen löytyy yksi tai pari hyvää ohjelma.

Mac

Pelkästään graafinen ympäristö, ei ollenkaan komentoriviä itse järjestelmässä. Muuten melko tavallinen "käyttöjärjestelmä".

VMS, CMS, MVS, ...

Suurkoneiden järjestelmät ovat myös yleensä komentorivipohjaisia, mutta eivät suinkaan niin joustavia kuin Unix, vaikka itse käyttöjärjestelmässä olisikin kaikki ominaisuudet.

Hannu Aronsson haa@iki.fi www.iki.fi/haa
© 1992-1996 Hannu Aronsson haa@iki.fi