Linusex blogi - kaikki tai ei mitään

F34.1 välillä vauhtia, toisinaan koodia
paljon tietoa linuxista, sen rakenteesta ja koodista

Haku (search blog)

perjantai 5. helmikuuta 2010

Sisään Linuxin maailmaan

Linux on edelleen tavallaan jännä mysteeri. Sehän alkoi siis aivan yksinkertasesta
systeemistä, jossa linus halusi testata, mitä tarkoittaa käytännössä multitaskaus
eli moniajo. Kirjoittelen tässä ihan alusta asti, mikä Linux on.

Ennen linuxia, eli noin 1993, oli olemassa muutamia käyttöjärestelmiä. Windows-perhe
Microsoftilta, DOS oli vielä elossa, ja sitten oli Unix-maailma. Myös joitain
eksoottisia eläimiä mutta jätetään ne nyt rauhaan.

Mikä helkkari siinä sitten kiinnostaa? Se, että saat takaisin koneen tehon. Tiedät,
mitä kone tekee. Tosin se vaatii pienen opastuksen, mutta luuletko että repe jättäis
pulaan? no fuken deal. tästä, schmock:

Prosessoreja ennen oli vanhoja diodilaitteita, jotka osasivat summata sähkösignaaleja
yhteen. Itse asiassa tietokoneiden historiassa pitäisi varsinaisesti mennä niin pitkälle
taaksepäin kuin matematiikka ja filosofia alkutekijöissään; tietokone on vain koneellista
filosofiaa, tehtynä matematiikan muotoon. Ällös pelkää! Saat silti sen Gagan tuubista.

Kirjoittelin TKK:n opiskeluaikoina aineen Teollisuushistoriaan, ja valitsin silloin hieman
etukäteen jo Linuxin. Tiesin, että se tulisi olemaan jotain suurta ja jättämään jälkensä
historian kulkuun. Se oli vain selkäytimestä tuleva viesti. Rakastan kauneutta. Linux
on sitä.

Normaalistihan prosessori suorittaa suurinpiirtein tällaistä kaavaa:

mov ax,1 ; pistä 1 => ax rekisteriin
mov dx,4 ; pistä 4 => dx rekisteriin
cmp ax,dx ; vertaillaan kumpi on isompi
jnz #jonnee ; jos eivät olleet samat luvut (Jump Not Zero), niin jatka kohdasta #jonnee
; oli kiva koodi, tämä on kommentti


Tuosta muodostuisi hyvin, hyvin pieni ohjelmakoodin pätkä. Sen pituus olisi vaivaiset
11 tai 12 tavua, eli 1 gigan joka on siis

Eli: käytetään rekistereitä, toisin sanoen pieniä bittien tallennuspaikkoja. Niihin
ladataan (mov, siirto) arvoja eli rekisterin arvoksi asetetaan jokin kokonaisluku.
Sen jälkeen voidaan tehdä vertailu kahden rekisterin välillä (cmp, compare). Tämän
perusteella sitten tehdään päätös. Pienen pientä, mutta ah niin tärkeätä. Tietojen-
käsittelyn ydintä. Ei se sen kummempaa ole. Kun noita lauseita on sitten noin
50-100, alkaa jo jonkinlaista ohjelman tynkää olemaan kasassa.

Mutta miksi kouluissa aina opetetaan ihan erilaista kieltä? Siellä ehkä opit, että:
void main ()
{
printf("koe");
}

Kyse on siitä, että koska aiempi (assembler- eli konekieli) on aika karun näköistä
ja vaikea hahmottaa, niin on keksitty ylemmän tason kieli eli tässä tapauksessa
C-kieli. C:n juuret ovat juuri Unixin systeemiohjelmoinnissa, eli sillä on oikeastaan
ohjelmoitu Linuxinkin esi-isät. Mikä muuntaa sitten ylemmän tason kielen konekieleksi,
joka on ainoa prosessorin ymmärtämä kieli? Se on kääntäjä, joka tekee homman.
Repe alkaa kuolaamaan... drooool. Tää on jännää! Raks. raks. Siis nyt valkenee.
Eli prossu vaan tekee edelleen orjallisesti hommia, vaikka ohjelmoija olis ihan
toisissa sfääreissä luodessaan oopperaansa.

Prosessorit oli siihen aikaan vielä putkiaivoja, eli ne oikeasti
osasi tehdä käytännössä vain yhtä asiaa kerrallaan. Ajattele, että prossu on
niinkuin typerä apina, joka nappaa yhden palikan jostain, käpistelee hetken,
ja asettelee sen sitten käskystä toiseen paikkaan. Se ei oikeastaan tiedä isosta
kuvasta yhtään mitään, vaan tekee aina työtä käskettyä.

No, niin se on nykyisissäkin
uusissa prosessoreissa, mutta sisäisesti piikiekko, jolle "etsatuista" pienen
pienistä komponenteista koko prosessorin toimintalogiikkaa koostuu, on paaaaljon
hienostuneempi. Koko tietokoneiden kehitystä kuvaa hyvin se, että ensin tehdään
pieni komponentti, jolla suunnitellaan seuraavan tason komponentti; ne taas
voidan yhdistää, ja näin edetään askel askeleelta kohti sitä jotain! Mutta Linuxissa
asenne oli heti alusta, että yhdessä tehdään. Maailmanlaajuisesti kehitykseen
osallistui kymmeniätuhansia koodaajia. Näennäisesti täysi kaaos, "but it works".

Linux on varsinaisesti ydin. Se siis hoitaa aika pieniä asioita, tosin Linus
Torvalds sanoi että nykyinen ydin paisui jossain vaiheessa valtavasti. Tässä
on useampia koulukuntia: toiset tykkäävät hyvin pienestä ja yksinkertaisesta,
jolloin ytimen toiminta on ehkä hallittavampaa ja varmempaa.

Mites tästä tulee kone?

Vielä kernel ei oikeastaan tee mitään hyödyllistä. Kyllä se osaa varata muistia
ja nakittaa prosessoria tekemään näitä erilaisia käskyjä sisältäviä ketjuja eli
threadeja. Thread on moniajokäyttöjärjestelmän keskeinen piirre. Thread on
niinkuin riipus tai kaulakoru, joka sisältää pieniä helmiä - käskyjä. Jokainen
helmi suoritetaan vuoron perään, KUNNES tulee ilkee kernelin hirmuhallitsija
nimeltä scheduler (tai ömmm.. mitähän kielitoimisto suosittaa??) ja riistää
prosessorin juuri käskyn kohdalla pitämän neulan ja nostaa sen soittamaan toisen
kaulakorun sisältämiä käskyjä. Anteeksi että ihan vapaasti yhdistelen neuloja
ja kaulakoruja - tiedän että olen vähän omituinen!

...ööö.. ja??

No niin, antakaas kun Repe taas miettii. Aivot jo muusin näin vanhana. Siis,
meillä on kasassa jo kone, joka osaa miettiä melkein rinnakkaisesti useita
asioita. Se muistuttaa älykkyydeltään suunnilleen jotain alkulimaa. Hienoa!
Mites tästä ponkaistaan informaatioyhteiskuntaan ja kuuntelemaan gagaa
youtubesta? Sinne on vielä pitkä matka. Mutta askel kerrallaan.
(hörps. lasi vettä).

Nyt tarvitaan pari työlästä vaihetta. Siis ideatasolla helppoja, mutta oikeasti
paljon koodaamista. Nimittäin: ajurit. Perkeleen perkele!! :D Anteeksi..
En voi mitään tourettelleni. Mutta on totta, että ajurit ovat ne p**kiaiset,
jonka takia tietokoneet nitkuttelevat käyttöjärjestelmän kanssa. Eli, valmistajilta
ilmestyy varmaan muutama sata erilaista uutta laitetta joka päivä. Laitehan
on vain tietokone, joka on puristettu pieneksi ja yleensä siinä on joitain
antureita tai vipstaakeja. Jos olet joskus käpälöinyt Windows-koneita (iso saatana)
niin tiedät millainen **vetti ajurien kanssa pelleily voi olla. Newspeakilla
sanottaisiin että suorastaan varsinainen 'productivity buster', eikä se tarkoita
venettä.

Ajurit ovat käyttöjärjestelmän ja laitteiston välissä, tekemässä hommia jotka
vaan pitää tehdä. Ajureista ilmestyy parannettuja versioita, joten yleensä kun
kainalot alkavat olla kaikkein hikisimmät, niin syynä on että etsit kuukelista
jotain tyyliin "lenovo xgt2.1.5.3a.3.1.2303 build 2312" mutta saitkin kalifornialaisen
hevostallin lannanluojan kotisivut tuloksena. Ja sitten uusi kierros. Kahvi auttaa,
bisse joskus. Yleensä suosittelen vain sitä kahvia. Jos se ihan hirveeksi menee,
niin kyllä sitä humalassakin on konffattu ihan hyvällä tuurilla.

Ajureissa on se pikku kiva puoli, että jos se sattuu olemaan väärä, niin seurauksena
voi olla esim. ilmastonmuutos tai se, että mimmisi jättää sut. No ei nyt ihan, mutta
aika lähellä. Kannattaa olla siis tarkkana. Ja KYSY. Aina löytyy apua, kunhan et sano
että työskentelet microsoftille. Niille yleensä ohjataan ilkeitä pommisivuja joilla
saa koneen vielä enemmän jumiin. (Onkohan se mahdollista?)