Lappeenrannan teknillinen yliopisto Teknistaloudellinen tiedekunta Tietotekniikan koulutusohjelma Opintojakson Käyttöjärjestelmät seminaarityö Joonas Blomberg, Arttu Hanska, Harri Laine, Markku Painomaa Windows ja Linux Työn tarkastaja: Professori Heikki Kälviäinen Työn ohjaaja: Professori Heikki Kälviäinen
TIIVISTELMÄ Lappeenrannan teknillinen yliopisto Teknistaloudellinen tiedekunta Tietotekniikan koulutusohjelma Joonas Blomberg, Arttu Hanska, Harri Laine, Markku Painomaa Windows ja Linux Seminaarityö 2010 25 sivua, 8 kuvaa, 6 taulukkoa Työn tarkastaja: Professori Heikki Kälviäinen Hakusanat: käyttöjärjestelmä, vertailu, Windows, Linux Keywords: operating system, comparison, Windows, Linux Tässä seminaarityössä esitellään Microsoft Windows ja Linux käyttöjärjestelmien eroja. Aihealueissa käydään läpi tärkeimmät sisäiset elementit ja niiden tarkempi rakenne ja toiminta. Aihealueet ovat ydinarkkitehtuuri, prosessinhallinta, muistinhallinta ja tiedostojärjestelmät. Tietoliikenteen toteutuksien tarkastelut on rajattu pois, koska haluttiin keskittyä nimenomaan yksittäisen käyttöjärjestelmän toimintaa. ii
ABSTRACT Lappeenranta University of Technology Faculty of Technology Management Degree Program in Information Technology Joonas Blomberg, Arttu Hanska, Harri Laine, Markku Painomaa Windows and Linux Seminar Report 25 pages, 8 figures, 6 tables Examiner Professor Heikki Kälviäinen Keywords: operating system, comparison, Windows, Linux In this seminar report the main goal is to view differences between Microsoft Windows and Linux operating systems. In the following chapters the major internal elements and their precise structure and functioning are considered. The subjects of examination are kernel, process handling, memory management and file system management. The implementation of the networking has been left out of chapters because the focus was set only on a stand-alone operating system. iii
ALKUSANAT Työ on tehty Lappeenrannan teknillisen yliopiston Käyttöjärjestelmät - kurssin seminaarityönä. Tekijöitä tukemassa olivat kahvi, olut ja rasvaiset ruoat. Kiitämme toisiamme hyvästä yhteistyöstä ja siitä, että saimme tämän työn valmiiksi määräajassa, vaikka aluksi tulevaisuus näyttikin epävarmalta. Tähän oli syynä myöhäinen aloittaminen, olihan meillä muitakin kursseja suoritettavana ensin alta pois. Työn tekeminen oli haastavaa, mutta näin jälkikäteen voi todeta siihen käytetyn ajan olleen palkitsevaa. Joonas Blomberg, Arttu Hanska, Harri Laine ja Markku Painomaa Lappeenrannassa synkkänä sunnuntaipäivänä 7.11.2010 iv
Sisällysluettelo SISÄLLYSLUETTELO... 1 1 JOHDANTO... 3 1.1 TAUSTA... 3 1.2 TAVOITTEET JA RAJAUKSET... 4 1.3 TYÖN RAKENNE... 4 2 KERNEL... 5 2.1 YLEISTA YTIMESTÄ... 5 2.2 SUOJATTU TILA JA KÄYTTÄJÄTILA... 5 2.3 RAKENTEELLISIA OMINAISUUKSIA... 6 2.4 YTIMEN VAIKUTUS KÄYTTÖJÄRJESTELMÄN VAKAUTEEN... 7 3 PROSESSIENHALLINTA... 8 3.1 PROSESSIT... 8 3.2 VUOROTTAJA... 8 4 MUISTINHALLINTA... 10 4.1 YHTÄLÄISYYDET... 10 4.2 TIETORAKENTEET... 11 4.3 NOUTOPOLITIIKKA... 12 4.4 SIVUJEN KORVAAMINEN... 12 5 TIEDOSTOJÄRJESTELMÄT... 15 5.1 LOOGISEN LEVYN RAKENNE... 15 5.2 TIEDOSTOT... 17 5.3 HAKEMISTORAKENNE... 19 6 YHTEENVETO... 20 LÄHTEET... 21 1
SYMBOLI- JA LYHENNELUETTELO EXT3FS FAT FSF GNU GPL MMU MFT MS-DOS NTFS VAD VFS Third Extented File System File Allocation Table Free Software Foundation GNU s Not Unix GNU General Public License Memory Management Unit Master File Table Microsoft Disk Operating System Windows File System Virtual Address Descriptor Virtual File System 2
1 JOHDANTO 1.1 Tausta Tämä työ käsittelee Linux ja Microsoft Windows käyttöjärjestelmiä. Linuxin juuret ovat Unix-käyttöjärjestelmässä ja siksi sitä kutsutaankin usein Unix-kaltaiseksi. Alkuperäinen Unix kirjoitettiin C kielellä Bell Labs:ssa vuonna 1970 käytettäväksi PDP 7 tietokoneella[6]. Vuonna 1991 suomalainen opiskelija nimeltä Linus Torvalds kirjoitti ensimmäisen Linux-ytimen version Andrew Tanenbaumin Minix - käyttöjärjestelmän pohjalta, koska ei ollut tyytyväinen käyttämäänsä Minixiin. Linux toimi aluksi Intel 386 prosessorilla, mutta myöhemmin tukea on laajennettu muun muassa MacOS:n käyttämälle PowerPC:lle. Linux 0.12 julkaistiin GPL lisenssillä (GNU General Public Lisence). GNU projekti on Richard Stallmanin vuonna 1983 perustama hanke, jonka tarkoituksena oli ensin luoda ilmainen ja vapaan lähdekoodin käyttöjärjestelmä. Nykyisin GNU - projekti on FSF:n (Free Software Foundation) hallinnoima. Linux on siis vapaan lähdekoodin käyttöjärjestelmä ja sitä saa kopioida, kehittää ja jakaa edelleen ilmaiseksi. Lisäksi siinä käytettävät ohjelmat ovat GNU lisensoituja. Linux on saatavilla useiden eri kehittäjien tekemillä jakelupaketteina, joista tällä hetkellä Ubuntu on suosituin. Jakelupaketti sisältää kernelin, jonkin graafisen käyttöliittymän, tarvittavat ohjelmat ja dokumentaation. Windowsin perusta on aivan erilainen kuin Unixin ja Linuxin. Yhdysvaltalaiset ohjelmointiosaajat Bill Gates ja Paul Allen perustivat oman ohjelmistoyritys Microsoftin vuonna 1975. He ostivat Seattle Computer Products yhtiöltä 86-DOS nimisen järjestelmän ja kehittivät sitä edelleen omaksi DOS (Disk Operating System) käyttöjärjestelmäkseen. PC - DOS 1.0 ilmestyi vuonna 1981 IBM PC:lle ja 8088- prosessorille. Vuonna 1985 Microsoft kehitti ensimmäisen oman graafisen käyttöjärjestelmän, Windows 1.0, joka ei kuitenkaan toiminut sellaisenaan vaan käynnistettiin MS - DOS:sta. Suunnilleen samoihin aikoihin kuin ensimmäinen Linux - ydin julkaistiin, eli vuonna 1990, Microsoft laski markkinoille valmiin Windows 3.0, joka toimi samaisella Intelin 386 prosessorilla. Myöhemmin tulivat kehittyneemmät Windows 95, NT 3.1 ja XP. Windows 7 on tällä hetkellä uusin versio ja sillä ei ole enää MS - DOS:ia pohjalla. Linuxin uusin ydin on 2.6. 3
1.2 Tavoitteet ja rajaukset Tavoitteena on käydä läpi kattavasti joka kappaleessa yksi käyttöjärjestelmän tärkeä osa ja kertoa helppotajuisesti kuinka sen toiminta on toteutettu Linuxissa ja Windowsissa. Päätimme rajata aihepiirin seuraaviin kokonaisuuksiin: ytimen arkkitehtuurisiin eroihin prosessienhallinta muistinhallinta tiedostojärjestelmien toteutus Emme käsittele tässä yhteydessä seuraavia aihealueita: käyttöliittymät tietoliikenne resurssien jako käyttäjien kesken virheistä toipuminen Tarkastellaan vain käyttöjärjestelmien tiettyjä versioita: Windows 2000 eteenpäin (ydinversio NT5.0) Linux 2.6 eteenpäin 1.3 Työn rakenne Johdantoluvussa kerrottiin, mitä tämä seminaarityö tulee käsittelemään ja käytiin läpi nopea katsaus kummankin käyttöjärjestelmän syntyhistoriaan ja taustoihin. Luvussa 2 aloitetaan käyttöjärjestelmän sydämestä eli ytimestä. Siinä kerrotaan, mitä ydinarkkitehtuureja Linux ja Windows käyttävät ja miten ne toimivat. Luvussa 3 kerrotaan mitä on prosessinhallinta, mitä tarkoittaa prosessi ja säie sekä mitä ajanjakoalgoritmeja prosessien hallintaan käytetään. Luvussa 4 tarkastellaan muistinhallinnan toimintaperiaatteita ja algoritmeja. Luvussa 5 käydään läpi, mitä tiedostojärjestelmiä kummallekin käyttöjärjestelmälle on olemassa, millaisia erilaisia tiedostoja on olemassa ja kuinka ne on toteutettu 4
2 KERNEL 2.1 Yleistä ytimestä Kernel on käyttöjärjestelmän ydin, joka hallitsee laitteistoresurssien jakamisen ja mahdollistaa niiden käytön. Windows NT ydin, jota tässä käsittelemme, on rakenteeltaan hybridi ja Linux on monoliittinen ydin. Ensimmäinen Windowsin ytimen päälle rakennettu käyttöjärjestelmä oli NT 3.1, joka julkaistiin vuonna 1993. Linuxin versio 1.0 julkaistiin vuonna 1994. [15, 19] Monoliittisessa ytimessä koko ydin ja sen tarjoamat palvelut toimivat yhdessä suojatussa tilassa ja hybridissä palvelut ovat omissa moduuleissaan, osa suojatussa tilassa ytimen kanssa ja osa käyttäjätilassa kuten kuvassa 1 esitetään. 2.2 Suojattu tila ja käyttäjätila Kuva 1. Ydintyyppien erot. [14] Windowsissa ja Linuxissa prosesseilla on erilaisia oikeuksia riippuen mihin osaan käyttöjärjestelmää se kuuluu. Molemmissa käyttöjärjestelmissä on käytössä suojattu tila (ring 0) ja käyttäjätila (ring 3)[kuva 2]. Ylemmän tason ohjelma ei vaikuta alemman tason ohjelmiin suoraan, jonka takia ohjelman kaatuminen ei suoraan aiheuta käyttöjärjestelmän kaatumista. 5
Kuva 2. Oikeustasot. [13] Linux on avointa ohjelmistoa ja sitä kehittää suuri määrä vapaaehtoisia ja myös palkattuja henkilöitä ja sitä voidaan käyttää erittäin moneen tarkoitukseen ja eri prosessoriarkkitehtuureilla. Ydin sisältää suuren määrän sisäänrakennettuja ajureita ja mahdollistaa myös niiden lataamisen moduuleina. [12] Sisäänrakennetut ajurit mahdollistavat tehokkaan toiminnan, mutta voi myös aiheuttaa koneen epävakautta, jos jokin ajuri ei toimi oikein. Sisäänrakennetut ajurit ovat avointa ohjelmistoa ja moduuleina olevat ajurit ovat useimmiten laitteistovalmistajan suljettua lähdekoodia. Windowsin ydin on suljettua lähdekoodia ja se toimii kahdella prosessoriarkkitehtuurilla, x86 ja sen laajennuksella x86-64. [12] Käyttöjärjestelmän työpöytäversiot tukevat yhtä tai kahta prosessoria. Joitain ajureita tulee Windowsin mukana, mutta useimmiten ne ovat yleisiä ajureita, jotka tarjoavat vain perustoiminnot. [12] 2.3 Rakenteellisia ominaisuuksia Ydin koostuu alijärjestelmistä [taulukko 1], jotka mahdollistavat resurssien käytön. Nämä kaikki toimivat suojatussa tilassa. Alijärjestelmät toimivat suojatussa tilassa ja niiden käytön ohjelmista mahdollistaa systeemikutsurajapinta. 6
Taulukko 1. Alijärjestelmät. Alijärjestelmä Tehtävä Systeemikutsurajapinta (System Call Interface) Suorittaa käyttäjätilasta tulevat kutsut ytimeen Prosessienhallinta (Process Management) Hallitsee prosesseja systeemikutsurajapinnan kautta ja jakaa prosessoriaikaa eri prosesseille Muistinhallinta (Memory Management) Katso kohta muistinhallinta Virtuaalinen tiedostojärjestelmä (Virtual File System) Tarjoaa yhtenäisen rajapinnan erilaisille tiedostojärjestelmille Verkkopino (Network Stack) Verkkoyhteydet Ajurit (Device Drivers) Mahdollistaa laitteiston käyttämisen Arkkitehtuurikohtainen koodi (Architecturedependent Toiminta eri prosessoriarkkitehtuureilla code) Windowsin ydin on hybridityyppinen, jonka takia se sisältää käyttäjätilassa toimivia palveluita. Itse ydin vastaa käyttöjärjestelmän käynnistämiseen liittyvistä ajureista, säikeiden ja keskeytysten hallinnasta ja poikkeuksista. Suojatussa tilassa toimii myös toiminto-osat (Executive), jonka alijärjestelmät tarjoavat suurimman osan käyttöjärjestelmän palveluista. [11] 2.4 Ytimen vaikutus käyttöjärjestelmän vakauteen Käyttöjärjestelmän vakaus riippuu lähinnä ytimen ja sen kanssa suojatussa tilassa toimivien osien vakaudesta. Usein kaatumisen syynä ovat ajuriongelma tai laitteiston yhteensopivuusongelmat. Nykyisin Windowsin ajurit voivat olla digitaalisesti allekirjoitetut ja testatut, jonka pitäisi johtaa vakaampaan käyttöjärjestelmään. Windows 7:n 64-bittinen versio ei salli allekirjoittamattomien ajureiden asentamista laisinkaan. [12] Linuxissa ytimen sisältämät ajurit voivat olla laitteistovalmistajan tekemät ajurit, kehittäjien dokumentaatiosta tekemät ajurit tai takaisinmallintamalla tehdyt ajurit. Lisäksi moduuleina voi olla laitteistovalmistajan tekemät suljettuun lähdekoodiin perustuvat ajurit. 7
3 PROSESSIENHALLINTA 3.1 Prosessit Prosessi on ohjelma tai ohjelman osa, jota ollaan suorittamassa. Se sisältää ohjelmakoodin ja tilan. Nykyisten käyttöjärjestelmien tärkeä osa-alue on prosessien hallinta. Jokaisella prosessilla on jokin tila jonka mukaan sille jaetaan suoritusaikaa. Käyttöjärjestelmän tehtävä on pitää prosessien tilat muistissa ja tarvittaessa vaihtaa niitä ja siksi sillä on käytössä yksityiskohtaisia tietorakenteita kuvaaman jokaista prosessia. Käyttöjärjestelmän täytyy käyttää vuorotustoimintoa ja tarjota valmius prosessien jakamiselle ja ajastamiselle. Prosessi sisältää yhden tai useamman säikeen. Se on pienin kokonaisuus, jonka käyttöjärjestelmä voi vuorottaa. Yhden prosessin säikeet käyttävät yhteistä koodia, dataaluetta ja resursseja. Windows sekä Linux osaavat hyödyntää prosesseja jotka voivat käyttää useampaa säiettä yhtä aikaa. [18] Linuxissa prosesseilla on viisi eri tilaa: executing, ready, suspended, stopped ja zombie. Prosessit ovat sekä säiliöitä että vuorotettuja kokonaisuuksia ja ne voivat sisältää useampia säikeitä jotka jakavat muistiavaruutensa ja muita resursseja. Prosessi luodaan forkfunktiolla, joka luo uuden prosessin, joka on klooni kutsuvasta prosessista. Tämä uusi prosessi vaihtaa suoritettavaa koodia exec-funktiolla. Windowsin prosesseilla tiloja on kuusi: ready, standby, running, terminated, waiting ja transition. Prosessit ovat olionkaltaisia rakenteita, jotka koostuvat kahvoista. Kahvat sisältävät säikeitä ja muita resursseja. Prosessi luodaan alusta alkaen tiettyjen vaiheiden kautta. 3.2 Vuorottaja Vuorottaja on ohjelma, joka jakaa prosesseille suorutasaikaa niiden tarpeiden mukaan. Vuorottajia on monen tyyppisiä ja niiden ominaisuuksiin kuuluu: keskusyksikön käyttöaste, suoritusteho, vasteaika, tehtävän suoritusnopeus, aikarajan käsittely sekä nälkiintymisen esto. [17] 8
Linux käyttää Completely Fair Scheduler -nimistä vuorottajaa [kuva 3], jonka tarkoituksena on jakaa suoritusaikaa tasapuolisesti kaikille prosesseille. Se käyttää puurakennetta, jossa vähemmän suoritusaikaa saaneet prosessit siirtyvät vasemmalle ja enemmän aikaa saaneet oikealle. Vuorottaja antaa vasemmalla laidalla olevan prosessin suoritettavaksi keskusyksikölle. [5] Kuva 3. Esimerkki Completely Fair Scheduler -puurakenteesta. [5] Windowsin vuorottaja käyttää multilevel feedback queue -algoritmia. Se suosii lyhyitä tehtäviä ja pyrkii osoittamaan prosessin luonteen ja vuorottamaan sen vastaavasti. Algoritmi toimii seuraavien ohjeiden mukaan: 1. Uusi prosessi saa korkeimman prioriteetin. 2. Jossakin vaiheessa prosessi pääsee jonon päähän ja sille annetaan suoritusaikaa 3. Jos prosessi on valmis, se poistuu jonosta. 4. Jos prosessi ei käytä loppuun sille annettua suoritusaikaa, sen prioriteetti säilyy samana 5. Jos annetun suoritusajan päättyessä prosessi ei ole päättynyt, sen prioriteetti tippuu yhden tason. 6. Tätä jatketaan kunnes prosessi on valmis tai tippunut alimmalle tasolle. Alimmalla tasolla prosesseja suoritetaan round robin -periaatteella. [16] 9
4 MUISTINHALLINTA Muistinhallinnan tehtäviin kuuluu eritasoisten muistien hierarkian valvominen sekä muistin varaaminen ja vapauttaminen sovelluksille, jotka huolehtivat virtuaalimuistin logistiikasta ja käyttöönotosta. Virtuaalimuisti sallii toissijaisen muistin käyttämisen ensisijaisen muistin jatkeena, jolloin voidaan käsitellä enemmän prosesseja kuin ensisijaiseen muistiin muuten mahtuisi. Sekä Windows että Linux käyttävät muistinhallintamenetelmänään sivutusta, jossa tiedostoja siirrellään samankokoisina paloina, sivuina, ensisijaisen ja toissijaisen muistin välillä. Sivutuksen etuna on, että sivujen ei tarvitse olla ensisijaisessa muistissa peräkkäin ja näin vältytään muistin ulkoiselta pirstoutumiselta. Sivujen virtuaaliosoitteiden (ohjelma käyttää muistipaikkaan viittaamiseen) ja reaaliosoitteiden (todellinen muistiosoite) hallinnasta huolehtii muistinhallintayksikkö (Memory Management Unit) sivutaulun (Page Table) avulla. Sivutuksen keskeisiä toimenpiteitä ovat sivujen lataaminen ensisijaiseen muistiin eli noutopolitiikka (fetch policy) ja korvauspolitiikka (page replacement policy), joka valitsee mitkä sivut poistetaan ensisijaisesta muistista tarvittaessa. [6] Jos sivua on muutettu, eli se on likainen, niin se täytyy tallentaa takaisin toissijaiselle muistille. Muussa tapauksessa sivun voi suoraan poistaa. 4.1 Yhtäläisyydet Molemmat käyttöjärjestelmät käyttävät moderneja muistinhallintajärjestelmiä, joilla on paljon yhteisiä ominaisuuksia ja piirteitä. Tietorakenteet ja ominaisuudet ovat melko samanlaisia. Joitakin yhtäläisyyksiä käyttöjärjestelmien muistinhallinnan ominaisuuksista: Hardware Abstraction Layer: Hoitaa järjestelmäriippuvaisen työn, jolloin loput ytimestä voidaan ohjelmoida järjestelmäriippumattomaksi. Copy-on-write: Useampi prosessi voi käyttää samaa sivua. Jos toinen prosessi kirjoittaa sivulle, niin luodaan yksityinen kopio, jota voidaan muokata itsenäisesti. 10
Backround daemon: Tietyin aikavälein toimiva daemoni, joka huolehtii esimerkiksi likaisten sivujen siirtämisestä toissijaiseen muistiin ja käyttämättömän muistin vapauttamisesta. Memory mapped Files: Tiedosto voidaan kartoittaa virtuaalimuistiin, jonka jälkeen ohjelma voi käyttää kartoitettua aluetta ensisijaisen muistin tapaan. Inter-Process Communication: Virtuaalimuistiin kartoitettuja tiedostoja voidaan jakaa eri prosessien välillä mahdollistaen prosessien välisen kommunikaation. 4.2 Tietorakenteet Tietorakenteet, joita järjestelmät käyttävät virtuaalimuistista huolehtimiseen. Windows käyttää puurakennetta [kuvassa 4], jonka solmuista käytetään nimitystä Virtual Address Descriptor. Jokainen VAD viittaa virtuaalimuistin osoiteavaruuteen, jolla on samat suojausparametrit ja sijoitustiedot. Puurakenne on tasapainotettu, mikä tarkoittaa, että sen syvyys pidetään minimissä. Näin solmujen hakuaika pysyy matalana. VAD voi merkitä solmun kolmella tavalla: Vapaa: Sivuja jotka eivät ole prosessin käytössä. Varattu: Prosessille varattuja sivuja, jotka eivät ole käytettävissä ennen kuin varaus on poistettu. Sidottu: Prosessin osia sisältäviä varattuja sivuja. Kuva 4. Esimerkki puurakenteesta. [7] 11
Linux käyttää tietorakenteena linkitettyä listaa [kuva 5] vm_area_structs. Listan solmut pitävät sisällään jatkuvia virtuaalimuistialueita, joilla on samat suojausparametrit. Jos solmujen määrä kasvaa liian suureksi (yleensä 32), niin tietorakenne muutetaan puuksi, joka toimii nopeammin isolla määrällä solmuja. Kuva 5. Esimerkki linkitetystä listasta. [1] 4.3 Noutopolitiikka Windows ja Linux käyttävät sivujen ensisijaiseen muistiin lataamiseen tarvesivutusta (Depang paging), jossa haettu sivu ladataan ensisijaiseen muistiin ainoastaan silloin, kun jokin prosessi vaatii sitä. Windowsin käyttämä Clustered demand paging noutaa sivut 1-8 kappaleen ryppäinä. Kun haettu sivu ei ole ensisijaisessa muistissa aiheutuu sivupuutoskeskeytys (Page fault), jonka seurauksena tarvittu sivu siirretään ensisijaiseen muistiin. Jos ensisijaisessa muistissa ei ole tilaa, niin jokin muistissa olevista sivuista on poistettava. 4.4 Sivujen korvaaminen Sivupuutosten määrä on pidettävä mahdollisimman pienenä, koska siitä aiheutuu turhaa tiedonsiirtoa ja resurssien hukkaamista. Ratkaisuna on vähiten tarvittujen sivujen poistaminen, jolloin ensisijaiseen muistiin jää enimmäkseen sivuja, joita todennäköisesti tarvitaan pian uudestaan. Tähän tarkoitukseen on sivunvaihtoalgoritmeja, jotka vaikuttavat merkittävästi sivutuksen suoritustehoon. Windows käyttää sivujen korvaamiseen kelloalgoritmia [kuva 6]. Kelloalgoritmi järjestää sivut rengaslistaksi, jonka osoitin on vanhimman sivun kohdalla. Sivuilla on viitebitti, jonka arvo on joko 0 tai 1. Sivun arvoksi asetetaan aina 1, kun sivua on käytetty. Kun sivu 12
korvataan, niin osoittimen kohdalla olevan sivun viitebitti tarkistetaan ja jos se on 0, niin sivu korvataan. Jos viitebitin arvo on 1, niin se nollataan ja osoitin siirtyy seuraavaan sivuun. Jos jokaisen sivun viitebitin arvo on 1, niin osoitin kiertää koko listan ympäri, ja poistaa sivun josta lähti liikkeelle. a) b) Kuva 6. Esimerkki kelloalgoritmista: a) ennen b) sivun korvaamisen jälkeen. [6] Sivutusjärjestelmä käyttää käyttöjoukkostrategiaa (Working Set Strategy). Käyttöjoukko koostuu sivuista, joita prosessi tulee lähitulevaisuudessa tarvitsemaan. Windows käyttää dynaamista käyttöjoukon allokointia, eli käyttöjoukon koko voi vaihdella. [4, 20] Windowsin käyttämä kelloalgoritmi on lokaali, eli sivupuutoksen sattuessa se vapauttaa saman prosessin käyttämiä sivuja. Kun sivupuutos ilmenee ja keskeytyksen aiheuttaneen prosessin käyttöjoukon koko on alle asetetun alarajan, niin sivu ainoastaan lisätään prosessin käyttöjoukkoon. Jos käyttöjoukon koko taas on korkeampi kuin yläraja, niin sen kokoa pienennetään. Järjestelmä osaa myös kasvattaa paljon sivupuutoksia aiheuttavan prosessin käyttöjoukon kokoa ja vastaavasti vähentää, jos prosessi ei vaadi niin paljon muistia. Windows käyttää Balance Set Manager daemonia, joka tarkistaa sekunnin välein vapaan muistin määrän. Jos vapaata muistia ei ole tarpeeksi, niin BSM turvautuu käyttöjoukon hallintaan, joka tarkistaa prosessien käyttöjoukot ja pyrkii pitämään vapaan muistin tietyn rajan yläpuolella. Jos sivun viitebitti on 0, niin sivulla olevaa laskuria kasvatetaan ja jos 13
viitebitti on 1, niin sivun laskuri asetetaan nollaksi. Tarkistuksen jälkeen sivut joilla on korkein laskurin arvo, poistetaan käyttöjoukosta. Käyttöjoukon hallinta mahdollistaa kelloalgoritmin globaalin toiminnan mikä tarkoittaa, että se voi valita korvattavaksi minkä tahansa ensisijaisessa muistissa olevan sivun. Linux sivunkorvausalgoritmi perustuu kelloalgoritmiin, mutta on käytännössä Least Recently Used (LRU) -algoritmi. Sivuille on annettu 8-bittinen aikamuuttuja ja aina kun sivua käytetään, sen aikamuuttujaa kasvatetaan. Käyttöjärjestelmä tarkistaa tasaisin väliajoin globaaleiksi asetetut ensisijaisessa muistissa olevat sivut ja vähentää kaikkien sivujen aikamuuttujaa. Sivut, joiden aikamuuttuja on 0, ovat parhaita ehdokkaita poistamiselle. 14
5 TIEDOSTOJÄRJESTELMÄT 5.1 Loogisen levyn rakenne Linux käyttää Extented File System tiedostojärjestelmää. Ensimmäinen julkaistu extfs ei ole enää käytössä, vaan sen on korvannut kehittyneemmät ext2 ja ext3, joista jälkimmäinen on nykyisin käytetyin. Uusin versio, ext4 on vasta yleistymässä. Muita järjestelmiä on muun muassa ReiserFS. Ext3fs - tiedostojärjestelmä sijaitsee yhdellä levyosiolla, joka on jaettu Käynnistyssektoriin ja lohkoryhmiin. Jokaisen lohkoryhmän sisältö on jaettu kuuteen osaan, jotka sisältävät tärkeät tiedostojärjestelmän hallintatiedot. Superlohkossa sijaitsee tiedostojärjestelmän tiedot, kuten levyn indeksisolmutaulun koko. Indeksisolmutaulukko sisältää jokaisen tiedoston indeksisolmun. Datalohkoihin varataan tila kaikille tiedostoille ja hakemistoille. Datalohkon koko on yleensä 1024 tavua. [2] Taulukossa 2 on kuvattu extfs - rakenne. Taulukko 2. ExtFS tiedostojärjestelmä. Käynnistyssektori Lohkoryhmä 1 Lohkoryhmä N Super- Tiedostojärjestelmän Lohkobitti- Indeksisolmu- Indeksisolmu- Data- lohko kuvaukset kartta bittikartta taulu lohkot Linux kernel käyttää monipuolista virtuaalitiedostojärjestelmää, joka mahdollistaa monien eri tiedostojärjestelmien käytön Linuxissa. VFS on kerros järjestelmäkutsujen ja eri tiedostojärjestelmien (esim. FAT, ext2, reiserfs) välissä. Kerros sisältää tiedot kaikista kernelin tukemista tiedostojärjestelmistä ja funktiokirjaston niiden käsittelyyn. Toimintaperiaate on seuraava: Käyttäjä haluaa lukea tiedoston, joka sijaitsee esimerkiksi FAT - tiedostojärjestelmässä. Käyttäjän luoma prosessi lähettää open ja read - järjestelmäkutsut kernelille. Kernel taas kutsuu VFS:n sisältämää FAT:lle tarkoitettua funktiota, joka ottaa järjestelmäkutsun käsittelyyn kääntämällä sen kohdejärjestelmän ymmärtämäksi kutsuksi. [10] Kuvassa 7 on hahmoteltu VFS:n toiminta. 15
Kuva 7. Virtual File System. [9] Windows käyttävää File Allocation Table ja New Technology File System tiedostojärjestelmiä, joista jälkimmäinen on kuitenkin nykyisin käytetyin, joten käsittelemme vain sitä. Ntfs varaa tiedostoille tilaa levyltä klustereiksi kutsutuilla tilanvarausyksiköillä. Klusteri koostuu useammasta sektorista. Sektorien koko on yleensä 512 tavua ja niiden lukumäärä klusterissa on 2:n potenssi. Näin ollen yhden klusterin koko vastaa siis Linuxin yhtä lohkoa. Ntfs - tiedostojärjestelmälle tehty osio on jaettu neljään alueeseen ja rakenne selviää taulukosta 3. Käynnistyssektori, Master File Table, joka sisältää kaikkien tiedostojen, kansioiden ja vapaan tilan tiedot. Järjestelmätiedostot sisältää MFT2, lokitiedoston, tilanvarausbittikartan ja attribuuttien määrittelytaulun. [8] Taulukko 3. NTFS:n rakenne. Osion käynnistys-sektori Master file table Järjestelmätiedostot Datatiedostot Ext3fs ja ntfs ovat journaloivia tiedostojärjestelmiä. Tämä tarkoittaa sitä, että ennen kuin tiedostoihin tehdään konkreettisia muutoksia, muutostapahtuman tiedot talletetaan lokiin. Jos järjestelmä kaatuu muokkausvaiheessa, kuten poistaessa tiedostoa, tiedostojärjestelmä ei fragmentoidu muokatun tiedoston kohdalta, vaan voidaan eheyttää helposti lukemalla lokista missä kohti virhe tapahtui. 16
Ext3 levykoko on maksimissaan 16 Tt ja suurin tiedostokoo 2 Tt. Ntfs etuja on suuret levykoot ja teoreettinen suuruus levylle tai yksittäiselle tiedostolle onkin jopa 16 Eksatavua. Kummatkin tukevat 255 merkin pituisia tiedostonimiä. 5.2 Tiedostot Linuxissa tiedostot käsitellään bittivirtana, jolloin sisällöllä ei ole käyttöjärjestelmälle väliä. Windows käsittelee tiedostoja kokoelmana attribuutteja ja attribuutteja bittivirtana. Tiedostotyyppejä on olemassa useita erilaisia. Windowsissa käytössä on tavallisia, käyttäjän luomia tiedostoja ja hakemistoja. Hakemistot ovat tiedostoja, jotka voivat sisältää muita tiedostoja tai alihakemistoja. Linuxissa on lisäksi muutama erikoistiedosto. Laitetiedostot eivät sisällä dataa vaan ovat viittauksia järjestelmän laitteisiin, kuten kiintolevyihin. First-In-First-Out nimettyjä putkia käytetään prosessien väliseen kommunikointiin. Kovia linkkejä käytetään viittamaan samalla levyllä sijaitseviin tiedostoihin, mutta ei kansioihin. Symbolisia linkkejä käytetään osoittamaan tiedostoihin ja muihin kohteisiin, eikä kohteen tarvitse olla samalla levyllä. Tiedoston nimi on kaksiosainen sisältäen nimen ja päätteen, 1-8 merkkiä pitkän tunnuksen, jolla erotellaan tiedoston tyyppi. Esimerkiksi ohjelma.exe, tarkoittaa Windowsissa suoritettavaa ohjelmaa Jos päätettä ei ole, Windows ei tunnista tiedostoa. Linuxissa päätettä ei välttämättä tarvita muuten kuin muistutukseksi käyttäjälle itselleen ja silloinkin muoto on vapaa. Pääte voi olla myös moniosainen, kuten pakattu_tiedosto.tar.gz. [10] Linux hallinnoi tiedostoja indeksisolmujen avulla. [9, 10] Tiedostot siis esitetään indeksisolmuina, jotka ovat käytännössä tietorakenteita ja sisältävät muuttujat. Muuttujat on esitelty taulukossa 4. Taulukko 4. Indeksisolmun muuttujat. File mode Link Count Owner ID File size Last Accessed Last Modified Inode modified File Addresses Sisältää tiedot käyttöoikeuksista ja tiedoston tyypin Kuinka moni kansio on linkitetty tähän tiedostoon Tiedoston omistajan nimi Koko kilotavuissa Viimeisin käyttökerta Viimeisin muokkauskerta Viimeisin inode muokkauskerta Osoitteet tiedoston datalohkoihin levyllä 17
Kuten rakenteesta käy ilmi, indeksisolmu sisältää attribuutit ja varatut datalohko-osoitteet. Kun tiedostoa käytetään, järjestelmän on löydettävä tiedoston sisältämät datalohkot. Indeksisolmu sisältää 39 tavua osoitetietoja jaettuna kolmeentoista kolmen tavun kokoiseen osoittimeen datalohkoihin. Hakemistot tai kansiot itsessään ovat tiedostoja ja voivat sisältää muita tiedostoja tai alihakemistoja. Esimerkiksi ext3 mahdollistaa 32,000 alihakemistoa. Linuksissa hakemisto on käytännössä lista, jonka jokainen alkio on tiedoston indeksisolmun numero ja nimi. Tiedoston nimeä ei siis ole indeksisolmun tiedoissa. Järjestelmä etsii hakemistosta, jossa tiedosto sijaitsee, tiedoston nimen ja indeksisolmun numeron. Numeroa vastaava indeksisolmu ladataan muistiin indeksisolmutaulukkoon ja pidetään siellä kunnes tiedosto suljetaan. Windowsissa ntfs käsittelee yksittäistä tiedostoa ja kansiota kokoelmana attribuutteja. Jopa data itsessään on tiedoston eräs attribuutti. Taulukossa 5 on listattu tärkeimmät attribuutit. Attribuutti Perustiedot Attribuuttitaulu Tiedoston nimi Suojaustiedot Data Taulukko 5. NTFS - tiedoston attribuutit. Kuvaus Aikaleimat: milloin tiedosto on luotu/muokattu. Linkitykset muista kansioista Niiden attribuuttien sijainnit, jotka eivät mahdu MFT tietueeseen 255 merkkiä pitkä Unicode - merkkijono Kuka omistaa, kenellä oikeudet käyttää Tiedoston sisältö Master File Table on ntfs tiedostojärjestelmän tärkein osa. [2, 9] Kaikkien tiedostojen kuvaukset on tallennettu taulukon tietueisiin[kuva 6], joiden koko on 1024 tavua. Kuusitoista ensimmäistä tietuetta on varattu metadatalle. Ensimmäinen rivi on MFT:n oma kuvaus, jota seuraa vara-mft tietue, siltä varalta että ensimmäinen tietue on vahingoittunut eikä ole luettavissa. Lokitiedostoa käytetään virhetilanteista palautumiseen. Loput tietueet on tarkoitettu käyttäjän tiedostojen taltioimiseen. Jos tiedosto on pienikokoinen, noin 512 tavua, se tallennetaan kokonaisuudessaan MFT - osion tietueeseen. Suurempikokoisille tiedostoille, joiden attribuutit eivät sovi taulukkoon, tila varataan muualta levyltä. 18
Taulukko 6. MFT. Metadata tiedostonimi Tiedostonimi MFT Kuvaus tietue MFT $MFT 0 MFT kuvaus itsestään MFT2 $MFTMirr 1 Osittainen MFT varmuuskopio Lokitiedosto $Logfile 2 Järjestelmän palautukseen Osiokuvaus $Volume 3 Osion nimi, koko ja luontipäivämäärä Attribuuttitaulu $AttrbDef 4 Juurihakemisto. 5 Juurihakemiston osoitin Bittikarttatiedosto $Bitmap 6 Vapaa ja varattu levytila Osion käynnistyskoodi $Boot 7 Käynnistysosion kopio Vahingoittuneet klusterit $BadClus 8 Kiintiötaulu $Quota 9 Upper Case taulukko $UpCase 10 Tiedostonimien Unicode - muotoilu 11-16 Tulevat tietueet metadatalle Datatietueet 17 Käyttäjän luomat tiedostot 5.3 Hakemistorakenne Linuxin ja Windowsin hakemistot on järjestetty hierarkkiseksi puurakenteeksi. [2, 10] Linuxin hakemistorakenne on määritelty omassa Filesystem Hierarchy Standard:ssa. Windowsin hakemistorakenne on periytynyt MS-DOS:sta. Linuxin juurihakemisto merkitään yleensä vain pisteellä ja kauttaviivalla. Perushakemistojen nimet on tarkkaan määritelty. Hakemistot erotellaan toisistaan kauttaviivoilla, jolloin./usr tarkoittaisi juurihakemistosta löytyvää usr - alikansiota. Linuxissa laitteet, kuten fyysiset levyt tai oheislaitteet, kuvataan tiedostoina. Levyasemia ei siis ole, vaan ne ovat laitetiedostoja, jotka liitetään normaalisti juurihakemistoon. Windows käyttää eri levyosioiden erotteluun levyasemia, jotka on nimetty kirjaimilla. A ja B ovat vakiintuneet levykeasemille ja C järjestelmälevylle. D - Z on vapaina lisäkiintolevyille, optisille asemille ja muille vastaaville asemille. Lisäksi hakemistot erotellaan takakenoviivalla, joten C:\windows\ viittaa C-osion windows kansioon. Kaiken kaikkiaan rakenteet ovat melko samankaltaiset. 19
6 YHTEENVETO Käyttöjärjestelmien kernelit ovat hyvin erilaiset. Linuxin monoliittinen kernel pitää sisällään kaikki ytimen moduulit, kun Windowsin mikrokernel koostuu erillisistä toiminnoista, joita voidaan vaihtaa tai päivittää helposti. Tällöin yhden osan kaatuminen ei Windowsissa kaada koko ydintä. Linuxissa kuitenkin harvat ohjelmat toimivat samassa tilassa kuin ydin eli ohjelmat eivät pysty vaikuttamaan ytimen toimintaan. Prosessienhallinta eroaa käyttöjärjestelmien välillä jonkin verran. Linuxin prosessinluonti on nopeampaa kuin Windowsissa, jossa prosessi täytyy rakentaa alusta alkaen. Linuxissa vastaava toimenpide suoritetaan kloonaamalla olemassa olevia prosesseja. Windowsin käyttämä vuorottaja suosii lyhyitä prosesseja, kun Linux jakaa suoritusajan tasaisesti kaikille prosesseille. Molemmat käyttöjärjestelmät käyttävät modernia muistinhallintaa, ja niissä on paljon yhtäläisyyksiä. Windowsin käyttää virtuaalimuistista huolehtimiseen puurakennetta, kun Linux käyttää linkitettyä listaa. Molemmat käyttävät tarvesivutusta, mutta sivunkorvausalgoritmit eroavat toisistaan jonkin verran. Yleisesti muistinhallinnat ovat samaa nopeusluokkaa. Windowsin ja Linuxin tiedostojen toteutus on aivan erilainen. Windows käyttää ainoastaan kansioita ja tiedostoja, kun Linux kuvaa myös esimerkiksi laitteet tiedostoina. Linux pystyy käyttämään melkein mitä tahansa tiedostojärjestelmää, kun Windows käyttää ainoastaan Microsoftin tiedostojärjestelmiä. Windowsin tiedostot koostuvat attribuuttikokoelmista ja Linuxissa tiedostot ovat indeksisolmuja. Molemmat käyttöjärjestelmät soveltuvat hyvin nykypäivän käyttäjän tarpeisiin ja tarjoavat yleisimmin käytetyt ominaisuudet. Windows kuitenkin on yleisempi pöytäkoneissa ja Linux palvelinkoneissa. Nähtäväksi kuitenkin jää, että pysyykö Windowsin johtoasema pöytäkonekäytössä vai syrjäyttävätkö avoimet ja vapaat vaihtoehdot sen tulevaisuudessa. 20
LÄHTEET 1. andstudy.springnote.com/pages/4084869/attachments/2041297 2. Card, Rémy; T so, Theodore; Tweedie, Stephen; Design and implementation of the second extended filesystem, http://e2fsprogs.sourceforge.net/ext2intro.html 3. Haaga-Helia AMK, Käyttöjärjestelmän arkkitehtuuri, myy.helia.fi/~merju/tie62d/ntrakenne.pdf 4. HUT, www.cs.helsinki.fi/u/niklande/opetus/kj/2006/kalvot/luento09-6p.pdf 5. IBM, www.ibm.com/developerworks/linux/library/l-completely-fair-scheduler 6. Khetan, Gaurang, Comparison of Memory Management Systems of BSD, Windows, and Linux, Los Angeles: Department of Computer Science, University of Southern California, 2002. 7. www.left-brain.com/portals/0/publishcontent/undocumented-windows-nt/fig4_5.gif 8. NTFS Architecture and structures, www.pcguide.com/ref/hdd/file/ntfs/arch_files.htm 9. Stallings, William, Operating systems, internals and design principles, 5 th ed., Prentice Hall, 2005. 10. Tanenbaum, Andrew S., Operating Systems Design and Implementation, 3 rd ed., Prentice-Hall, 2006 11. Wikipedia, Architecture of the Windows NT, en.wikipedia.org/wiki/architecture_of_the_windows_nt_operating_system_line 12. Wikipedia, Comparison of Windows and Linux, en.wikipedia.org/wiki/comparison_of_windows_and_linux 13. Wikipedia, Kernel, en.wikipedia.org/wiki/kernel_(computing) 14. Wikipedia, Käyttöjärjestelmän ydin, fi.wikipedia.org/wiki/käyttöjärjestelmän_ydin 15. Wikipedia, Linux Kernel, en.wikipedia.org/wiki/linux_kernel 16. Wikipedia Multilevel feedback queue, en.wikipedia.org/wiki/multilevel_feedback_queue 17. Wikipedia, Scheduling, en.wikipedia.org/wiki/scheduling_(computing) 18. Wikipedia, Thread, en.wikipedia.org/wiki/thread_(computer_science) 19. Wikipedia, Windows NT, en.wikipedia.org/wiki/windows_nt 20. Wikipedia, Working set, en.wikipedia.org/wiki/working_set 21