Lappeenrannan teknillinen yliopisto Teknistaloudellinen tiedekunta Tietotekniikan koulutusohjelma CT50A2601 käyttöjärjestelmät kurssin seminaarityö Markus Melander, Antti Paarvio, Veli-Ensio Heiniluoto, Isto Sipilä UNIXIN JA LINUXIN VERTAILEMINEN Työn tarkastaja: Professori Heikki Kälviäinen Työn ohjaaja: Professori Heikki Kälviäinen
TIIVISTELMÄ Lappeenrannan teknillinen yliopisto Teknistaloudellinen tiedekunta Tietotekniikan koulutusohjelma Markus Melander, Antti Paarvio, Veli-Ensio Heiniluoto, Isto Sipilä UNIXIN JA LINUXIN VERTAILEMINEN Seminaarityö 2010 25 sivua, 7 kuvaa, 2 taulukkoa Työn tarkastaja: Professori Heikki Kälviäinen Hakusanat: Unix, Linux, Solaris, Ubuntu, Käyttöjärjestelmä Keywords: Unix, Linux, Solaris, Ubuntu, Operating System Seminaariraportissa tutkitaan kahden yleisesti käytössä olevan käyttöjärjestelmän, Linuxin ja Unixin keskeisiä toiminnallisia eroja. Raportin lähtökohtana on ollut käyttöjärjestelmät kurssin yhteydessä käsitellyt toiminnallisuudet. Tavoitteena on esitellä kirjoittajien mielestä keskeisimmät asiat. Työn johtopäätöksenä todetaan, että korkeammalla tasolla käyttöjärjestelmät ovat samankaltaisia. Eroja löytyy toteutusta syvemmin tarkasteltaessa, että käyttöjärjestelmien kehitystyöstä. ii
ABSTRACT Lappeenranta University of Technology Faculty of Technology Management Degree Program in Information Technology Markus Melander, Antti Paarvio, Veli-Ensio Heiniluoto, Isto Sipilä COMPARING UNIX AND LINUX Seminar Report 25 pages, 7 figures, 2 tables Examiner : Professor Heikki Kälviäinen Keywords: Unix, Linux, Solaris, Ubuntu, Operating System This report examines differences between representatives of two different operating systems. Focus is on Linux and Unix differences on major achievements. The context of the report are the fundamentals that were presented on lessons. Aim is to debate on the topics that writers identify to be important. According to research done during course the major conclusions are that differences on high level are minimal. More differences are found on low level architecture and in software development area. iii
ALKUSANAT Seminaariraportti on kirjoitettu neljän innokkaan tietotekniikan opiskelijan toimesta käyttöjärjestelmät kurssin aikana syksyllä 2010. Aiheen valintaa on ohjannut halu oppia Unix-käyttöjärjestelmän perusteita. Haluamme kiittää Lappeenrannan teknillistä yliopistoa saamastamme hyvästä opetuksesta. iv
SISÄLLYSLUETTELO 1 JOHDANTO... 3 1.1 TAUSTAA... 3 1.2 TAVOITTEET JA RAJAUKSET... 3 1.3 RAPORTIN RAKENNE... 3 2 SOLARIS-KÄYTTÖJÄRJESTELMÄN ESITTELY... 4 2.1 KÄYTTÖKOHTEET... 4 2.2 SOLARIS KÄYTTÖJÄRJESTELMÄN YDIN... 5 3 UBUNTU-KÄYTTÖJÄRJESTELMÄN ESITTELY... 6 3.1 LINUX-KÄYTTÖJÄRJESTELMÄN YDIN... 7 4 KÄYTTÖJÄRJESTELMIEN KESKEISTEN OSA-ALUEIDEN VERTAILU... 8 4.1 PROSESSIEN HALLINNAN VERTAILU... 8 4.2 TIEDOSTOJÄRJESTELMIEN VERTAILU... 10 4.2.1 Linuxin tiedostojärjestelmät... 10 4.2.2 Solariksen tiedostojärjestelmä ja vertailua... 12 4.3 KOMENTORAJAPINTOJEN VERTAILU... 13 4.3.1 Linuxin ja Solariksen komentorajapintojen toiminta... 13 4.4 MUISTINHALLINNAN VERTAILU... 14 4.4.1 Muistinhallinnan perusrakenteet... 15 4.4.2 Linuxin ja Solariksen käyttämiä algoritmeja... 16 4.4.3 Virtuaaliosoitteet ja heittovaihto... 17 5 YHTEENVETO... 18 6 LÄHTEET... 19 1
SYMBOLI- JA LYHENNELUETTELO ARC ASM BBA CDDL COFF CPU EB ELF EXT FFS GNU GNU GPL HAT I/O kb LIFO LTS LRU NFS MMU MB PGD PMD RFS RISC SPARC TB VFS USB Adaptive Replacement Cache Address Space Management Binary Buddy Allocator Common Development and Distribution License Common Object File Format Central Processing Unit Eksatavu Executable and Linkable Format Extended File System Flash File System GNU's Not Unix GNU General Public License Hardware Address Translation Input/Output Kilotavu Last In, First Out Long Term Support Least Recently Used Network File System Memory Management Unit Megatavu Page Global Directory Page Middle Directory Remote File System Reduced Instruction Set Computing Scalable Processor Architecture Teratavu Virtual Filesystem Universal Serial Bus 2
1 JOHDANTO Tietokoneiden kehityskaari reikäkorttitekniikasta, reletekniikan ja elektroniputkien kautta transistoritekniikkaan sekä lopulta mikroprosessoreihin on mullistanut maailman. Teknologisen kehityksen rinnalla käyttöjärjestelmien kehittyminen on ollut yhtä merkityksellistä. Ilman käyttöjärjestelmää ei modernin tietokoneen ja sen erilaisten ohjelmien käyttö olisi mahdollista. Tämän seminaarityön tutkimuskohteena on kaksi eri käyttöjärjestelmää: Solaris Unix ja Ubuntu Linux. 1.1 Taustaa Puhuminen Unix käyttöjärjestelmästä yksikössä voi olla harhaanjohtavaa, koska alkuperäinen Bell Labs yhtiön työntekijöiden kehittämä käyttöjärjestelmä on jakautunut useiden yhtiöiden omiksi Unixiin pohjautuviksi käyttöjärjestelmiksi. Siksi usein puhutaankin Unix-perheestä [1]. Unixiin pohjautuvia käyttöjärjestelmiä löytyy useilta kaupallisilta toimijoilta ja se on pohjana laajan suosion saaneelle Linuxkäyttöjärjestelmälle. 1.2 Tavoitteet ja rajaukset Seminaarityössä pyrimme esittelemään Unixin ja Linuxin kehityskaaret yleisellä tasolla ja selvittämään käyttöjärjestelmien keskeiset eroavaisuudet kurssin aikana käsiteltyjen keskeisten toiminnallisuuksien näkökulmasta. Solaris on monipuolinen käyttöjärjestelmä, joka tunnetaan nykyään nimellä Oracle Solaris ja se on Oraclen ilmoituksen perusteella markkinajohtaja Unix-palvelimissa sekä arvostettu korkeaa tietoturvaa vaativissa käyttöympäristöissä [2]. Linux-perheestä tarkasteluun valitsimme laajan käyttäjäkunnan omaavan Ubuntun jakeluversion 10.04. Tavoitteemme on esitellä käyttöjärjestelmien kehityskaaret sekä perustoiminnallisuuksien eroja valittujen kahden käyttöjärjestelmän välillä. 1.3 Raportin rakenne Raportissa esittelemme vertailun kohteeksi valitut järjestelmät yleisellä tasolla. Pääluvussa käsittelemme käyttöjärjestelmien keskeisiä ominaisuuksien toiminnallisuutta ja niiden eroja. Lopuksi kokoamme yhteenvedossa keskeiset vertailussa esille nousseet erot. 3
2 SOLARIS-KÄYTTÖJÄRJESTELMÄN ESITTELY Solaris on Unix-käyttöjärjestelmä, jonka kehitti alun perin Sun Microsystems. Nykyisin Solarista kehittää maailman suurimpiin ohjelmistokehittäjiin kuuluva Oracle Corporation. Oracle osti Sun Microsystemsin tammikuussa 2010 [3]. Sun Microsystemsin oston yhteydessä Oraclen valikoimiin liittyi Solaris-käyttöjärjestelmän lisäksi Javaohjelmistoalusta ja MySQL-tietokannan hallintajärjestelmä, sekä laiteosaamista SPARC (Scalable Processor Architecture) -prosessoreiden muodossa. [5] Yrityskauppojen jälkeen Oracle lakkautti Sun Microsystemsin aloittaman OpenSolarisprojektin ja sen mukana käytössä olleen avoimeen kehittäjä- ja käyttäjäyhteisöön perustuvan ohjelmistolinjan. Solaris käyttöjärjestelmän lähdekoodia ei enää julkaista reaaliajassa avoimena, vaan kehitystyötä tapahtuu rajatummalla periaatteella. OpenSolarisprojektin aikana käyttöjärjestelmän lähdekoodi julkaistiin CDDL:n (Common Development and Distribution License) alaisena ja täten myös huomattava osa nykyisen ja tulevien versioiden lähdekoodista on saman lisenssin alaisena kehitettyä. [3] Tällä hetkellä uusin versio on nimeltään Solaris 10, jonka valitsimme käsiteltäväksi versioksi vertailuun. Solaris 10:n perusjakelun voi ladata ja asentaa maksutta, mutta saadakseen tukea ja päivityksiä tulee käyttäjän solmia Oracle Corporationin kanssa maksullinen tukisopimus [4]. Käyttöjärjestelmän seuraava versio Oracle Solaris 11 tullaan julkaisemaan vuonna 2011. [5] 2.1 Käyttökohteet Solaris on menestyksekkäin ja kaikkein laajimmin käytetty kaupallinen Unix-järjestelmä. Solarista käytetään pääosin yrityksissä järeissä palvelinratkaisuissa, sekä jossakin määrin supertietokoneissa, vaikka pääosin supertietokoneita pyörittävät nykyään Linuxkäyttöjärjestelmät [7]. Solaris 10:n julkaisun myötä tavoitteena oli laajentaa Solariksen käyttöä laajemmalla esimerkiksi kevyempiin laitteisiin perustuviin järjestelmiin muun muassa laajentamalla ja parantamalla tukeaan erilaisille x86- ja AMD64-pohjaisille 4
palvelimille. Yleisesti Solaris on hyvin skaalautuva käyttöjärjestelmä, jonka tuki erilaisille laitealustoille on kattava. [6, 8] Oracle Corporationin tuotteissa Solarista käytetään runsaasti SPARC-prosessoreilla (Scalable Processor Architecture) varustetuissa tietokoneissa. SPARC on Sun Microsystemsin kehittämä RISC-suoritinarkkitehtuuri (Reduced Instruction Set Computing). Oracle tarjoaa SPARC-prosessoreita aikakriittisiin järjestelmiin, joita käyttävät esimerkiksi maailman suurimmat teleoperaattorit ja pankit. [9, 10] 2.2 Solaris käyttöjärjestelmän ydin Solaris pohjautuu Sun Microsystemsin ja AT&T:n yhdessä kehittämään SVR4 (System V Release 4) Unix-järjestelmään. SVR4:ään yhdistettiin ominaisuuksia SVR3, 4.3BSD, Microsoft Xenis System V ja SunOS järjestelmistä. SVR4 oli lähes kokonaan uusiksi kirjoitettu versio System V:n ytimestä. Solaris tarjoaa kaikki SVR4:n ominaisuudet, sekä lisäksi paljon muita kehittyneitä ominaisuuksia, kuten täysin monisäikeistä ajoa tukevan ytimen. [6] Solariksen monoliittinen ydin sisältää kaikki käyttöjärjestelmän keskeiset toiminnot samassa ajomoduulissa. Monoliittisen ytimen etuna on sen nopeus. Jokaisella toiminnallisella komponentilla on yhteys kaikkeen ytimen tietorakenteisiin ja rutiineihin. Heikkoudeksi voi muodostua keskeisten komponenttien riippuvaisuus toisistaan yhteisen osoiteavaruuden kautta. Tästä seuraa, että vika yhdessä komponentissa voi lamaannuttaa koko järjestelmän. Toinen haaste on kehitystyön ja ylläpidon vaikeutuminen ytimen kasvaessa suureksi. Ytimen rakenne voi olla modulaarinen, vaikka itse ydin on monoliittinen. Käyttöjärjestelmämoduulit on kuitenkin sovitettava tarkasti toimimaan yhteen. Tyypillisessä monoliittisessa ytimessä jokainen moduuli ja rutiini joudutaan yhdistämään ja asentamaan uudestaan, jos yhteen tehdään muutoksia. Kuvassa 1 on kerroksittain rakentuvan monoliittisen ytimen periaatteellinen rakenne. [6, 11] Modernien Unix-järjestelmien, kuten myös Solariksen, ydin on rakenteeltaan modulaarinen. Ydin rakentuu pienistä komponenteista, jotka tarjoavat käyttöjärjestelmän prosesseille toimintoja ja palveluja. Kuva 2 selventää modulaarisen ytimen rakennetta 5
johon kuuluu pieni toiminnallisuuksia sisältävä ydin, joka on koodattu modulaarisesti. Yksinkertaisesti koodattu ydin tarjoaa vain tärkeimmät tehtävät ulkokehän toiminnoille ja rajapinnoille. [6] Kuva 1: Monoliittisen ytimen perusrakenne [11] Kuva 2: Unix-ytimen arkkitehtuuri [6] 3 UBUNTU-KÄYTTÖJÄRJESTELMÄN ESITTELY Ubuntu on vapaaseen lähdekoodiin perustuva vapaa käyttöjärjestelmä. Se on ilmainen ja sen lähdekoodi on kaikkien saatavilla. Ubuntun päämääränä on olla helppokäyttöinen ja helposti omaksuttava, nopea, monikäyttöinen ja turvallinen käyttöjärjestelmä. Ubuntu pohjautuu Debian GNU/Linux (GNU s Not Unix) -jakelupakettiin. Ensimmäinen versio julkaistiin lokakuussa 2004. Ubuntun kehitystyötä rahoittaa eteläafrikkalaisen Mark Shuttleworthin perustama Canonical Ltd, joka perusti vuonna 2005. Ubuntu Foundation nimisen järjestön Ubuntun kehittämisen ja tuen jatkumisen turvaamiseksi. [12,13] Ubuntu koostuu useasta vapaan lähdekoodin ohjelmistopaketista. Ohjelmapakettien lisensointi vaihtelee, mutta valtaosa on julkaistu GNU GPL (GNU General Public License) -lisenssillä. Järjestelmän ytimenä toimiva Linux-ydin on julkaistu myös GNU GPL lisenssillä (versio 2). Linux ydintä kehittää jatkuvasti lukuisat ihmiset ympäri maailmaa. [13] 6
Uusi versio Ubuntusta julkaistaan kuuden kuukauden välein. Kirjoitushetkellä uusin versio on 10.10 (Maverick Meerkat). Raportin vertailuun valittu 10.04 (Lucid Lynx) on uusin LTS-versio (Long Term Support). LTS-versioita tuetaan työpöytäkäytössä kolme vuotta ja palvelinkäytössä viisi vuotta. [13] Linux-järjestelmät ovat saavuttaneet parinkymmenen vuoden aikana laajan suosion erityyppisissä käyttöympäristöissä, sillä ne ovat modulaarisuutensa ja avoimen lähdekoodinsa ansiosta helposti optimoitavissa toimimaan tehokkaasti lähes millä vain eri laitealustalla. Ubuntu Linuxin saa palvelin-, työpöytä- ja netbook käyttöön. Työpöytäkäytössä Ubuntu on Linux jakeluista suosituin ja Web-palvelimilla Ubuntun osuus on tällä hetkellä noin 3-4 % kaikista käyttöjärjestelmistä. [14, 15] 3.1 Linux-käyttöjärjestelmän ydin Linux oli alkujaan Unix-variantti IBM PC (Intel 80386) alustalle, joka tarjosi vaihtoehdon muille Unix-järjestelmille. Kuten suurimmassa osassa Unix-järjestelmiä, on myös Unixiin pohjautuvassa Linuxissa monoliittinen ydin, jonka tyyppinen ydin löytyy myös aiemmin mainitusta Solariksesta. Lukuisat alan asiantuntijat pitävät Linux ydintä teknisesti vakuuttavana. [6] Solariksen ytimen tavoin myös Linuxin ydin on rakenteeltaan modulaarinen. Linuxin ydintä kehitettäessä on onnistuttu välttämään monoliittisuuden aiheuttamia ongelmia ja heikkouksia, kuten esimerkiksi kehitystyön työläyttä. Linux rakentuu kokoelmasta moduuleita, joita voidaan ladata ja poistaa käytöstä tarpeen vaatiessa. [6] Linuxissa ytimen käyttöön ladattavat moduulit omaavat kaksi erityispiirrettä, jotka ovat dynaaminen linkitys ja moduulien pinottavuus. Dynaaminen linkitys tarkoittaa sitä, että moduuli voidaan ladata ja yhdistää ytimeen sen ollessa käynnissä ja ladattuna muistiin. Moduuli voidaan myös irrottaa ja poistaa muistista milloin tahansa. Dynaaminen linkitys helpottaa muokkaamista ja säästää muistia. Pinottavuuden ansiosta moduulit voidaan järjestää hierarkisesti ja moduulien väliset riippuvuudet voidaan määritellä. Usealle moduulille tyypillinen samanlainen koodi voidaan siirtää yhteen moduuliin ja vähentää täten replikoiden määrää. Toisena etuna ydin voi varmistaa, ettei se poista toisen moduulin 7
tarvitsemaa moduulia käytöstä ja ydin voi ladata uuden ladatun moduulin vaatimat moduulit käyttöön. [6] Linux-ytimen mukautuvuuden vuoksi sen sisältämät moduulit voivat vaihdella hyvinkin runsaasti kokoonpanosta riippuen. Kuva 3 esittää IA-64-arkkitehtuurille (Intel Itanium) rakennetun Linux-ytimen pääkomponentit ja prosessien sekä komponenttien suhteet. [6] Kuva 3: Linux käyttöjärjestelmän (IA-64) pääkomponentit [6] 4 KÄYTTÖJÄRJESTELMIEN KESKEISTEN OSA-ALUEIDEN VERTAILU Olemme valinneet vertailun kohteeksi ne käyttöjärjestelmien keskeiset osa-alueet, joita pidämme merkityksellisinä verrattaessa Solarista ja Ubuntua. Tavoitteena on keskittyä oppitunneilla esille tulleisiin käyttöjärjestelmien toiminnallisuuksiin. 4.1 Prosessien hallinnan vertailu Solariksessa ja Linuxissa on paljon samaa, kuten lähtökohtainen jako käyttäjätilassa ajettaviin käyttäjän prosesseihin (ohjelmat ja apuohjelmat) ja ydintilassa ajettaviin järjestelmää ylläpitäviin järjestelmäprosesseihin (esim. muistin allokointi, prosessien 8
vaihto). Käyttäjäprosessi menee ydintilaan antamalla järjestelmäkutsun poikkeuksen syntyessä, tai keskeytyksen sattuessa. [16] Yleisesti prosessit tunnistetaan prosessinumeroilla, jotka käyttöjärjestelmä antaa. Tämä säilyy koko prosessin elinkaaren ajan samana, jonka jälkeen se voidaan antaa seuraavalle. Prosesseja voidaan luoda monella eri tavalla. Voidaan luoda uusi prosessi, aiemmin luodulle prosessille lapsiprosessi tai korvata olemassa oleva prosessi toisella. [17] Aiemmin kaikki prosessit (käyttäjäprosessit ym.) lähtivät yhdestä käynnistyksen yhteydessä luotavasta emoprosessista, init:istä. Yleisesti vanhemmissa Unix-järjestelmissä ja monissa Linux-jakeluissakin käytetään System V:n tyylisiä init-ohjelmia. Koska inittyyppinen ratkaisu on vanhanaikainen ja estää muun muassa joustavamman laitteiden vaihdon ilman prosessin uudelleen käynnistämistä, on uudemmissa käyttöjärjestelmissä kehitetty erilaisia ratkaisuja prosessien hallintaan. Ubuntun 10.04 käyttää Upstart nimistä init:n korvaajaa, joka on taaksepäin yhteensopiva init-skriptien kanssa. Siinä idea perustuu tapahtumapohjaiseen palveluiden hallintaan, jolloin esimerkiksi laitteen lisäys (tapahtuma) saa aikaan sen valmistelemisen käytettäväksi, vaikkei sitä olisikaan merkitty tehtäväksi järjestelmän käynnistämisen yhteydessä. Yleisesti tapahtuma on yksinkertainen merkkijono, jossa on tietoa muutoksesta sitä hoitavalle prosessille. Suoritettavat tehtävät jaetaan järjestelmässä kahteen osaan, skripteihin (tai binääreihin), jotka ajetaan tapahtuman sattuessa ja palveluihin, jotka aloitetaan ja keskeytetään tapahtumien ilmaantuessa. Tapahtumat laukaisevat usein uusia tapahtumia, jolloin esimerkiksi USB-mokkulan (Universal Serial Bus) liittäminen koneeseen saa ytimen havaitsemaan sen, muokkaamaan verkon asetukset sopiviksi ja IPosoitteen (Interner Protocol) saatuaan yhdistämään palvelimeen ja käynnistämään erilaisia palveluita. Eli aina kun järjestelmä sammutetaan, suljetaan tai tehtävän tila muuttuu, Upstart alkaa toimia. [18] Solariksen versiosta 10 lähtien init-skriptit korvattiin SMF:llä (Service Management Facility), joka luo yhtenäisemmän mallin palveluille ja niiden tiloille aiempaan verrattuna. Tavoitteena on palveluiden hallinnan ongelmien vähentäminen ja parantaa 9
järjestelmänvalvojan mahdollisuuksia tarkastella ja hallita käynnissä olevia palveluita sekä tutkia mahdollisia ohjelmistovirheitä. [19] Keskeisenä erona käyttöjärjestelmien välillä prosessien hallinnassa on Upstartin painottuminen helpottamaan kotikäyttäjän ongelmien ratkaisua (laitteiden tunnistus ja automatisointi) ja Solaris palvelinpuolen ohjelmana keskittyy seurantajärjestelmän ja diagnostiikkatyökalujen tasaiseen ja virheettömään toimintaan. 4.2 Tiedostojärjestelmien vertailu Tiedostojärjestelmän tehtävänä on tarjota alusta tiedon tallennukselle, muokkaamiselle ja poistamiselle erilaisilla tallennusmedioilla. Koska tiedostojärjestelmä muodostaa usein järjestelmän pullonkaulan, on sen pystyttävä käsittelemään tiedostoja nopeasti ja luotettavasti. Taulukosta 1 voimme nähdä Solariksen ja Ubuntun tiedostojärjestelmien perustietoja. Tiedostojärjestelmä Linux (Ext4) Solaris (ZFS) Suurin järjestelmän koko 1 EB (16 TB) 16 EB Suurin tiedoston koko 16 TB 16 EB Suurin tiedostojen määrä 4*10^9 2,8*10^14 Suurin alikansioiden määrä 64000 2,8*10^14 Tuetut käyttöjärjestelmät Linux Solaris, OpenSolaris, FreeBSD, Mac OS X Server 10.5, Linux Taulukko 1: Tiedostojärjestelmien tunnuslukuja [20, 21] 4.2.1 Linuxin tiedostojärjestelmät Linuxin tiedostojärjestelmä on rakennettu mahdollisimman joustavaksi. Valitsimme vertailun kohteeksi tässä yhteydessä Ext-perheen (Extended filesystem) uusimman vuonna 2006 julkaistun version Ext4. 10
Linuxin tiedostojärjestelmä koostuu kuvan 4 esittämällä tavalla kolmesta osasta. Virtuaalinen tiedostojärjestelmä (VFS, Virtual File System), joka toimii tulkkina käyttöjärjestelmän ja yksilöllisen tiedostojärjestelmän (individual filesystem) välillä. Puskurivälimuisti (buffer cache) tallettaa tiedostojärjestelmän hakemia tietoja nopeuttaakseen tiedon hakua vähentämällä fyysisen levyn käyttöä. [22] VFS toimii tulkkina käyttöjärjestelmän ja tiedostojärjestelmän välillä, sekä mahdollistaa tiedostojärjestelmän joustavuuden. Se myös takaa Ext4:n taaksepäin yhteensopivuuden vanhempien Ext-versioiden kanssa. Tiedostojärjestelmien on toimitettava tarvittavat rajapinnat VFS:lle. Jokainen tiedostojärjestelmään liitetty laite tai osio mallinnetaan superblock-tietorakenteella. Tämä rakenne sisältää tiedot käytettävästä laitteesta. [22] Kuva 4: Linuxin tiedostojärjestelmän rakenne, suhteessa käyttöjärjestelmään [22] Ext4 on ns. kirjaa pitävä tiedostojärjestelmä (journaling filesystem) eli kaikista tiedostoihin tehdyistä muutoksista pidetään kirjaa. Tämä helpottaa tietojen palautusta järjestelmän kaatuessa. Lisää turvaa tuo kirjanpidosta (journal) laskettu tarkistussumma. Blokkeja käsitellään suurempina yksikköinä. Yksiköt ovat nimeltään extenttejä ja voivat olla kooltaan esimerkiksi 100 MB (megatavu). Tämä vähentää levykartan kokoa, sillä vapaa tila voidaan vapaiden blokkien sijasta listata vapaina extentteinä. Blokkien jako suuremmiksi yksiköiksi pienentää tiedon sirpaloitumista. Ext4 tukee myöhäistä allokointia eli tiedosto kirjataan ensin välimuistiin ja vasta, kun on luultavaa, ettei tiedostoa enää muuteta, se kirjoitetaan levylle. Tämä mahdollistaa usean blokin allokoinnin yhdellä 11
funktion kutsuntakerralla, joka nopeuttaa järjestelmää. Ext4 on myös edeltäjiään kehittyneempi, koska se mahdollistaa allokointialgoritmin valinnan tiedostokoon mukaan. [23, 24, 25] Tiedostojärjestelmän ja ajureiden välissä on tiedostopuskuri, joka tallentaa usein haettuja tiedostoja välimuistiin. Tämä nopeuttaa tiedonhakua, sillä levyltä tarvitsee lukea harvemmin. Kaikki laitteet jakavat saman välimuistin, mutta laitteilla voi olla omat puskurinsa. Puskureita hallitaan lajittelemalla data käytön mukaan. Tiedon poistaminen puskurista tapahtuu LRU listan (Least Recently Used) perusteella. [22] 4.2.2 Solariksen tiedostojärjestelmä ja vertailua Solariksen tiedostojärjestelmä käyttää VFS:ää kuten Linuxikin. Vertailuun olemme valinneet ZFS:n, joka ei käsittele laitteita Linuxin tapaan erillisinä vaan kaikki laitteet liitetään samaan tiedostojärjestelmään eli Z-pooliin. Data yritetään jakaa kaikille laitteille tasaisesti, ja näin varmistetaan mahdollisimman suuri kaistannopeus siirroissa. [27] Datan oikeellisuutta pyritään Ext4:ssä varmistamaan tiedostojärjestelmän muutosten kirjaamisella (journaling). Järjestely lisää tukevaa dataa (overhead) ja siksi Solariksessa tiedon oikeellisuutta pyritään varmistamaan erityisellä siirron käsittelyllä (transactional filesystem). ZFS:ssä tiedosto joko siirretään täydellisesti tai ei ollenkaan. Tämän ansiosta järjestelmän kaatuessa osittaista dataa ei voi jäädä levylle. Datan palautukseen ZFS esittää vain lukuoikeudella varustettuja kopioita (snapshot) tiedostojärjestelmästä. Ext4:ssä tällaista toiminnallisuutta ei ole. [27] Z-pool on jaettu laitekohtaisiin osioihin (metaslab). Jokainen metaslab sisältää tiedon vapaista blokeistaan. Sopivan sektorin löydyttyä data jaetaan blokkeihin first fit - algoritmillä. Tämän menettely on periaatteessa Ext4:n extent -jakoa nopeampi. [28, 29] Linuxin puskuroinnista vastaa ydin ja Solariksessa ZFS hoitaa tiedostojen puskuroinnin. ZFS:n puskureita hallitaan lajittelemalla tiedostot ARC-menetelmällä (Adaptive Replacement Cache). ARC sisältää listan eniten sekä vähiten käytetyille tiedostoille. Tiedon pudotessa pois listoilta, se lisätään vastaavalle haamulistalle. [28, 29] 12
Taulukossa 2 on esitetty tiedostojärjestelmien nopeuksia ja voimme havaita, että Ext4 peittoaa ZFS:n suoritettaessa I/O-operaatioita (Input/Output) peräkkäiselle datalle. Kun siirrytään kirjoittamaan satunnaisia I/O-operaatioita on ZFS nopeampi. Lisäksi on huomioitava, että ZFS kuluttaa enemmän prosessorin tehoa kuin ext4. [30] Taulukko 2: Vertailu tietoa (Solaris Ubuntu) [30] Peräkkäiset I/O-operaatiot EXT4 72.1 (MB/sec) 81.45 (MB/sec) ZFS 69.9 (MB/sec) 72.1 (MB/sec) Satunnaiset I/O-operaatiot EXT4 2.1 (MB/sec) 1.45 (MB/sec) ZFS 3.3 (MB/sec) 1.95 (MB/sec) Tehokkuus tehtäessä sekä kirjoitusta että lukua EXT4 2430 (MB/sec) 5700 (op/%cpu) ZFS 2241 (MB/sec) 1955 (op/%cpu) 4.3 Komentorajapintojen vertailu Prosessorilla on mahdollista ajaa käskyjä useissa eri tiloissa rajatuilla tai täysillä oikeuksilla. Järjestelmäkutsurajapinnan tarkoituksena on antaa käyttäjälle tai ohjelmalle mahdollisuus käyttää käyttöjärjestelmän tarjoamia palveluita. Tällaisia palveluja ovat esimerkiksi tiedostojärjestelmiin liittyvät komennot. Ytimen sisässä olevia toimintoja ei voida kutsua suoraan, siksi väliin tarvitaan komentorajapinta [31]. Käyttöjärjestelmät voivat sisältää satoja systeemi kutsuja, esimerkiksi Linuxissa niitä on yli 300. Rajapinnat systeemikutsuille ovat usein prosessoriarkkitehtuurikohtaisia. Keskeisin haaste rajapinnalle onkin saada eri prosessitiloissa ajettavat komennot toimimaan yhteistyössä. [32] 4.3.1 Linuxin ja Solariksen komentorajapintojen toiminta Linuxilla C-kirjasto toimii yleensä selkärankana. Käyttäjän ohjelma kutsuu C-kirjastoa, kirjasto siirtää argumentit ytimelle ja kutsuu haluttua toiminnallisuutta. Kuvan 5 13
mukaisesti: rekisterin avulla tunnistetaan mitä funktiota tulisi käyttää. Rekisteristä löytyy komennon tunniste, nimi sekä funktion sijainti. Ydin palauttaa tiedon c-funktion kautta käyttäjälle. [32] Kuva 5: Komentorajapinnan rakenne Linuxissa [32] Koska käyttäjä pääsee käsiksi vain tasolle 3, tarvitaan menetelmä kutsua 0-tasolla liikkuvaa ytimen koodia ylemmiltä tasoilta. Aikaisemmin käytettiin pelkästään hidasta keskeytyskomentoa, johon liitettiin halutun käskyn tunnus. Nykyään käytössä on SysEnterkomento, joka vie komennon 0-alueelle ja SysExit-komento suorittaa siirtymän toisinpäin. [33] Näiden kahden menetelmän lisäksi voidaan käyttää /proc tiedostojärjestelmää. Tämä menetelmä käyttää virtuaalisia tiedostoja kommunikointiin käyttäjäalueen ja ytimen välillä. Tiedoston avulla voidaan sekä siirtää tietoa ytimelle näyttää tietoa [34]. Solariksen rajapinta toimii pääosin samalla tavalla kuin Linuxissa. Rajapinta onkin enemmän arkkitehtuuri riippuvainen kuin käyttöjärjestelmä. Solariksessa voidaan myös käyttää /proc-tiedostojärjestelmää tai ohjelmointikirjastoa komentorajapintana. [35] 4.4 Muistinhallinnan vertailu Muistinhallinnaksi kutsutaan järjestelmää, jolla käyttöjärjestelmä jakaa muistikapasiteettia suoritettavien prosessien kesken. Muistinhallinnalla on seuraavat viisi keskeistä päämäärää muistin käsittelyn suhteen. Nämä ovat uudelleensijoitus, suojaus, jako, looginen järjestely ja fyysinen järjestely. Käytännössä useinkaan samanaikaisia prosesseja ja tietorakenteita ei 14
saa mahdutettua nopeaan keskusmuistiin. Koska prosessori on hyvin nopea ja muistit yleensä hitaampia, nopeusero aiheuttaa jatkuvan suoritinajan vajaakäytön, jos sujuvaa tietojen vaihtoa muistien välillä ei ole toteutettu kunnolla. Yleinen ratkaisu ongelmaan on virtuaalimuisti, jossa annetaan prosesseille näennäisesti yhtenäinen ja rajaton muistiavaruus levylle. [36] Todellisuudessa hitaammalla muistilla (esimerkiksi kiintolevy) sijaitseva virtuaalimuistin osa tuodaan aina tarvittaessa keskusmuistiin. Tällöin itse prosessin ajo nopeutuu sen tietämättä varsinaisista laitetasolla tapahtuneista käyttöjärjestelmän tekemistä muistinhallintaan liittyvistä toimista. Muistinhallinta toteutetaan yleensä sivutuksella, segmentoinnilla tai näiden yhdistelmällä. [36] Linuxin virtuaalisessa muistin sivutuksessa keskusmuisti jaetaan samankokoisiin kehyksiin. Kukin prosessi jaetaan edelleen samankokoisiin sivuihin kuin keskusmuistin kehykset. Näin toimittaessa prosessia ei tarvitse viedä tarvittaessa kuin sivu kerrallaan keskusmuistiin (demand paging). [36] 4.4.1 Muistinhallinnan perusrakenteet Solariksen objektit hallitsevat fyysisiä tauluja (jokaisella prosessilla oma sivutaulu), jotka on helppo liittää niitä hallitsevaan objektiin. Kaikkien tiedosto-objektien perustana oleva virtuaalinen tiedosto, vnode tarjoaa tiedostojärjestelmä- ja laitteistoriippumattoman pinnan ytimelle. Se voi kuvata siis riippumattomasti monia fyysisiä ja loogisia laitteita ja allokoituja fyysisiä sivuja. [37] Linuxin muistinhallinta perustuu kolmikerroksiseen sivutaulukkojärjestelmään. Jos järjestelmä arkkitehtuuri ei tue sitä, taulukkojärjestelmää emuloidaan. Prosessissa sivujen tunnistus tapahtuu enemmän niiden listojen mukaan, millä ne esiintyvät ja niillä lipuilla, millä ne on merkitty. Muistinhallinnan perusyksikkönä ovat solmut joiden alapuolella sijaitsevat käyttötarkoitusten mukaiset alueet, jotka sisältävät tiedon varsinaisista fyysisistä sivuista (struct pages). [38] 15
Kuvassa 6. on periaate Solariksen muistinhallinnasta. Solariksessa Hardware Address Translation -kerros (HAT) toimii fyysisen keskusmuistin ja sivujärjestelmän välillä. HAT on laitteistoriippuvainen kerros, jonka yläpuolella Address Space Management kerros (ASM) huolehtii osoiteavaruuden hallinnasta. Sivujen ja lineaarisen osoiteavaruuden välinen vaihto on muistisegmenttien hallinnassa, jotka ovat muistiosoitteen ja sen pituuden kuvauksia laitteelle. Oliopohjaisia segmenttirajapintoja käytettäessä segmenttiajurit tarjoavat laitteistosta riippumattoman näkymän laitteelle, josta segmentti on kuvattu. Kuva 7: Solariksen virtuaalimuistin kerrokset [38] Linux-käyttöjärjestelmässä käytännössä jokainen prosessi on osoitin omaan PGD:hen (Page Global Directory). PGD:n jokainen aktiivinen merkintä viittaa sivuun (PMD, Page Middle Directory), joka sisältää ryhmän merkintöjä. PMD-merkinnät viittaavat useisiin sivutauluihin, jotka viittaavat varsinaista tietoa sisältäviin sivuihin. Jokainen osoite voidaan siis jakaa osiin niin, että sieltä löytyvät kaikkien kolmen kerroksen ja varsinaisen datan sisältävän sivun sijainnit (Offset). Viittauksissa on omat bittinsä suojaukselle ja esimerkiksi yli 4Gb:n muistimäärän kohdistamiselle. [38] 4.4.2 Linuxin ja Solariksen käyttämiä algoritmeja Solariksen muistinhallinnan tyypillinen komponentti on sivunpoisto-skanneri (page scanner). Sen tehtävänä on etsiä ja päättää, mitkä sivut vapautetaan muistin lisäämiseksi, kun muistin määrä alittaa määrätyn raja-arvon. Skanneri käy läpi sivuja ja siirtää edellisen 16
ja uuden tarkastelun välissä käyttämättömäksi jääneitä sivuja hitaaseen muistiin. Skanneri käynnistyy myös pyydettäessä muistia käyttöön ja kun vapaiden paikkojen lista on määrätyn kynnyksen alapuolella. [39] Linuxin pääalgoritmia fyysisten sivujen hallintaan ja sijoitteluun kutsutaan Binary Buddy Allocatoriksi (BBA). Sen ideana on jakaa muisti moneen sivuista koostuvaan ryhmään, joissa olevien sivujen määrä on aina jokin toisen potenssi. Jos halutun kokoista ryhmää ei ole saatavilla, suuri ryhmä jaetaan kahtia, kunnes saadaan tarvitun kokoinen. [38] Yleissijoitusalgoritmina toimii kummassakin käyttöjärjestelmässä samantyyppinen Slab Allocator algoritmi. Sen ideana on usein käytettyjen objektien pitäminen alustetussa tilassa ytimen käytettävissä. Tällöin ei tuhlata aikaa saman tiedon sijoittamiseen, alustamiseen ja vapauttamiseen uudelleen ja uudelleen sekä pidetään muistin sisäinen hajautuminen minimissä. [38] Linuxin monikerrosjärjestelmän rakenteesta johtuen sivujen vapautus vie paljon (suoritin)aikaa ja sitä tehdään usein. Prosessia pyritään nopeuttamaan erilaisten sivutauluja sisältävien sivujen käytöllä (ns. pikalistat). Yksi menetelmä on esimerkiksi LIFO (Last In, First Out). [40] 4.4.3 Virtuaaliosoitteet ja heittovaihto Linuxin ydin on yleensä kokonaan ladattu keskusmuistiin (Low memory), jossa sille osoitetusta tilasta virtuaaliosoitteiden sivutaulut vievät eniten. Ydin ei voi suoraan muokata muistia (High memory), joka ei ole kartoitettuna sen osoiterekisteriin. Toisin sanoen se tarvitsee jokaiselle muistille oman virtuaaliosoitteen, johon sen täytyy olla suoraan yhteydessä. Siksi 32-bittinen prosessori voi kyllä käyttää Linuxin osoitelaajennuksilla suurempaa kuin 1GB:n fyysistä muistia, mutta sen täytyy aina tarvittaessa kartoittaa tilapäinen virtuaaliosoite ytimen virtuaaliosoitteistoon ja vapauttaa se käytön päätyttyä seuraaville väliaikaisille virtuaaliosoitteille. Solariksella on käytössään 64-bittinen osoiteavaruus, jolloin se pystyy hyödyntämään paljon suurempaa muistimäärää. Siksi yleensä sen kaikki fyysiset osoitteet on voitu kääntää pysyvästi virtuaalisiksi. [41] 17
Swap-osio on tarpeellinen keskusmuistin suuruudesta riippumatta, koska huomattava osaa prosessien alkuvaiheessa käyttämistä sivuista jää usein myöhemmin käyttämättä. Nämä passiiviset osat on tarkoituksenmukaista siirtää swap-osiolle ja vapauttaa näin tilaa keskusmuistista. Kun sivu on siirretty hitaammalle muistille, Linux käyttää vastaavaa sivutaulua löytääkseen sen myöhemmin uudelleen levyltä. [42] Ubuntu 10.04:ssa aluetta, johon sivut varmuuskopioidaan kutsutaan ns. swap-osioksi. On hyvin tärkeää, että aina oikea sivu siirretään swap-osioon, koska hitaaseen muistiin siirrot vievät paljon aikaa. Linux käyttää nimestä huolimatta sivutusta, eikä siirrä kerralla koko prosessia swap-osiolle. [42] Kun Solariksen skannerin toiminta ei riitä, käytetään myös swappausta (hieman eri merkityksessä, kuin Linuxin tapauksessa). Kaikki prosessin rakenteet ja sille varatut sivut siirretään keskusmuistista ja vaihdetaan liput vapaan tilan merkiksi. Tämä on edullinen tapa säästää keskusmuistia, mutta vaikuttaa dramaattisesti prosessien toimintaan. [37] 5 YHTEENVETO Solaris Unixia kehittää pörssiyhtiö Oracle Corporation, kun taas Ubuntu Linuxia harrastajayhteisö, jota rahoittaa voittoa tavoittelematon Canonical Ltd. Tämä on näkyvin ero Ubuntun ja Solariksen välillä. Solariksen kehitystyössä on keskitytty Ubuntua enemmän yrityskäytössä tarvittaviin ominaisuuksiin, kuten esimerkiksi prosessinhallinnan diagnostiikkatyökaluihin. Solariksen ja Ubuntun rakenne on pääosin samankaltainen. Molemmissa on esimerkiksi samantyyppinen ydin, samanlainen tiedostojärjestelmärajapinta, samantyylinen komentorajapinta ja muistinhallinnan pääpiirteet. Toimintojen suorittamiseksi on löydetty yleiset hyvät käytännöt, joita molemmat käyttöjärjestelmät hyödyntävät. Yleisesti ottaen Solaris käyttää uudenaikaisempia ratkaisuja kuin Ubuntu. Syvemmälle mentäessä löytyy enemmän eroavaisuuksia, kuten tiedostojärjestelmien tapa käsitellä laitteita, mutta niihin ei työn pituuden puitteissa kyetty syventymään. 18
6 LÄHTEET 1. Paasiala Liisa, UNIX:n historia miten ja miksi UNIX syntyi? http://www.cs.helsinki.fi/u/kerola /tkhist/k2000/alustukset/unix_hist/unix_historia.htm, viitattu 26.10.2010 2. Oracle, Overview and Frequently Asked Questions, 2010, http://www.oracle.com/ocom/groups/public/ocom/documents/webcontent/038563.pdf, viitattu 27.10.2010 3. Wikipedia, Solaris (operating system), http://en.wikipedia.org/wiki/oracle_solaris, viitattu 5.11.2010 4. Oracle, Solaris Operating System Licensing Policies, http://www.sun.com/software/solaris/licensing/policies.xml, viitattu 5.11.2010 5. Oracle, Oracle Outlines Next Major Release of Oracle Solaris, Oracle Press Release, Oracle Openworld, San Francisco Sept. 20, 2010, saatavilla http://www.oracle.com /us/corporate/press/173478, viitattu 5.11.2010 6. Stallings W., Operating Systems: Internals and Design Principles (6th edition), Pearson Education, 2008, sivut 93-99 7. Leidenius K., Linux jyrää supertietokoneissa, Tietokone 29.6.2007, http://www.tietokone.fi/uutiset/2007/ linux_jyraa_supertietokoneissa, viitattu 5.11.2010 8. Lipschutz R.,Solaris 10, PC Magazine, saatavilla http://www.pcmag.com/article2/0,2817,1781190,00), viitattu 5.11.2010 9. Leidenius K., 16 ytimen prosessorilla vauhtia Oraclen palvelimiin, http://www.tietokone.fi/uutiset/16_ytimen_prosessorilla_vauhtia_oraclen _palvelimiin, viitattu 5.11.2010 10. Wikipedia, SPARC, http://en.wikipedia.org/wiki/sparc, viitattu 5.11.2010 11. Stallings W., Operating Systems: Internals and Design Principles (6th edition), Pearson Education, 2008, sivut 179-180 12. Ubuntun kehittäjän sivut, Canonical Ltd., http://www.ubuntu.com/, viitattu 5.11.2010 13. Wikipedia, Ubuntu (operating system), http://en.wikipedia.org/wiki/ubuntu_ (operating_system), viitattu 5.11.2010 19
14. Digitoday, Nokian Maemosta tulee Meego, 15.2.2010, http://www.digitoday.fi/bisnes/2010/02/15/nokian-maemosta-tuleemeego/20102328/66, viitattu 4.10.2010 15. Built With, Ubuntu Usage Statistics, Marraskuu 2010, http://trends.builtwith.com/server/ubuntu, viitattu 5.11.2010 16. Stallings W., Operating Systems: Internals and Design Principles (6th edition), Pearson Education, 2008, sivu 135 17. Jones, M.Tim, Anatomy of Linux Process Management, http://www.ibm.com/developerworks/linux/library/l-linux-process-management/, viitattu 5.11.2010 18. Remnant S. J., Replacing init with Upstart, http://www.linux.com/archive/feed/ 57213, viitattu 3.11.2010 19. Wikipedia, Service Management Facility, http://en.wikipedia.org/wiki/service_management_facility, viitattu 5.11.2010 20. Wikipedia, ZFS, http://en.wikipedia.org/wiki/zfs, viitattu 3.11.2010 21. Wikipedia, Ext4, http://en.wikipedia.org/wiki/ext4, viitattu 9.11.2010 22. Jones M Tim, Anatomy of Linux Filesystem, saatavilla, http://www.ibm.com /developerworks/linux/library/l-linux-filesystem/,viitattu 5.11.2010 23. Jones M Tim, Anatomy of Linux Journaling Filesystem http://www.ibm.com/developerworks/library/l-journaling-filesystems/index.html, viitattu 4.10.2010 24. Jones M Tim, anatomy of ext 4 http://www.ibm.com/developerworks/linux/library/lanatomy-ext4/, viitattu 4.10.2010 25. M.Cao ext4: The Next Generation of Ext2/3 Filesystem 2007 www.usenix.org/event/lsf07/tech/cao_m.pdf 26. Jones M Tim, Anatomy of Linux Filesystem, http://www.ibm.com/developerworks/linux/library/l-linux-filesystem/, viitattu 4.10.2010 27. Oracle, Oracle Solaris ZFS Administration guide, 2010, luvut 1 ja 7 28. Jeff B., ZFS Block Allocation, http://blogs.sun.com/bonwick/entry/zfs_block_allocation, viitattu 3.11.2010 29. McDougall R., Mauro J., Solaris Internals: Solaris 10 and OpenSolaris Kernel Architecture, Second Edition, luvut 14.1 ja 14.6 20
30. Dominique, A Heger, Workload Dependent performance evaluation of BTRFS and ZFS filesystems, DHTechnologies, http://www.dhtusa.com/media/ioperf_ CMG09DHT.pdf, viitattu 5.10.2010 31. Wikipedia, System call, http://en.wikipedia.org/wiki/system_call, viitattu 5.11.2010 32. Jones M. Tim, Kernel command using Linux system calls, http://www.ibm.com/ developerworks/linux/library/l-system-calls/, viitattu 4.10.2010 33. Grag M., Sysenter Based System Call Mechanism in Linux 2.6, http://articles.manugarg.com/systemcallinlinux2_6.html, viitattu 4.10.2010 34. Jones M. Tim, Access the Linux kernel using the /proc filesystem, http://www.ibm.com/developerworks/linux/library/l-proc.html, viitattu 4.11.2010 35. McDougall R., Mauro J., SolarisTM Internals: Solaris 10 and OpenSolaris Kernel Architecture, 2006, Second Edition, Prentice Hall, Appendix B&C 36. Stallings, W.: Operating systems, internals and design principles, 6th ed., Prentice Hall, 2008. Luku 7.1 37. Sun Microsystems, The Solaris Memory Systems, http://www.sun.com/thirdparty/global/sas/collateral/wp/vmsizing.pdf, viitattu 4.10.2011 38. Mel Gorman, Understanding the Linux Virtual Memory Manager, 1st ed, Prentice Hall, 2004, kappaleet 3, 6 39. McDougall R., Mauro J., SolarisTM Internals: Solaris 10 and OpenSolaris Kernel Architecture, 2006, Second Edition, Prentice Hall, luku 10 40. Wikipedia, LIFO, http://en.wikipedia.org/wiki/lifo_%28computing%29, viitattu 5.11.2010 41. Shulyupin, C., Memory Management in Linux, http://www.linuxdriver.co.il/ldd3/chp- 15-sect-1.shtml, viitattu 4.11.2010 42. The Linux Documentation Project, http://tldp.org/lpd/sag.html/sag.html#memory- MANAGEMET, viitattu 4.11.2010 21