Linuks unatraške
Autor: Nikola Hardi
Uvod
Najverovatnije ovaj tekst čitate na nekom računaru ili ste barem koristili računar da biste preuzeli naš časopis. Pisali smo već mnogo puta o programima koji su namenjeni vama kao korisnicima računara. Pisali smo i o operativnim sistemima i raznim distribucijama, ali ovaj put želimo da ispričamo priču o tome šta se sve obično događa na računaru unatraške od trenutka kada ste počeli da čitate ovaj tekst, pa sve do trenutka kada ste pritisnuli dugme za uključivanje računara. Akcenat će biti baš na onim stvarima o kojima se retko kada razgovara, o onome šta se ne vidi.
PDF reader i pokretanje programa
Pretpostavićemo da pred sobom upravo imate PDF čitač (ugrađen u browser ili kao poseban program). Krajnji rezultat je slika na monitoru, ali pre toga je PDF fajl morao biti preuzet na računar, pokrenut program koji učitava taj fajl, zatim bila je potrebna mreža za pristup internetu. Jedan od zadataka operativnih sistema je da pruže upravo takav vid podrške aplikacijama. Videćemo malo kasnije da na kraju svi putevi nekako vode do kernela. Ovaj nivo obuhvata krajnje aplikacije koje najčešće koristimo, u ovom slučaju evince, okular, apvlv i xpdf. Naravno, u ovu grupu programa spadaju i razni audio player-i, internet pregledači, kancelarijski paketi i ostalo.
Okruženje radne površi
PDF čitač ste mogli da pokrenete na mnogo načina – recimo klikom na datoteku u nekom pregledaču datoteka ili direktnim pokretanjem programa. Da bismo se lakše snašli u zbrci datoteka i direktorijuma, vremenom su razvijeni skupovi programa za tu namenu – desktop, odnosno radna okruženja. Njihova namena je, u širokom smislu, da nam omoguće da pokrećemo programe, da pronađemo datoteke, da poređamo prozore po našoj želji itd. Pojam okruženja radne površi je vrlo širok i nije jasno definisan. U ovaj nivo spadaju GNOME, Unity, MATE, KDE, Xfce i mnogi drugi. Naravno da ne moramo koristiti kompletna okruženja radne površi za ove zadatke, ali ovo je klasična postavka na današnjim kućnim računarima koje pokreće Linux.
Session manager
Jedan računar može koristiti više korisnika i mogu biti dostupna razna okruženja radne površi istovremeno. Da bi računar znao koje grafičko okruženje da pokrene i koji korisnik trenutno želi da koristi računar, moramo na neki način da mu prenesemo tu informaciju. Za ovaj zadatak je najčešće zadužen session manager (nekada se naziva i desktop manager). Uslovno rečeno, session manager vidimo kada se prijavljujemo na računar, unosimo korisničko ime, lozinku i biramo sesiju (desktop okruženje). Neki od primera session manager-a su LightDM, GDM, KDM i slim. Ovo je još jedan običan program na računaru i njega je takođe morao neko da pokrene. Za pokretanje session manager-a uglavnom je zadužen init system o kojem će biti reči malo kasnije. Bitno je pomenuti da je za grafički session manager potrebna podrška za grafička okruženja koju (još uvek) pruža X server.
X server
U redu, sada smo već stigli do granice iza koje prosečan korisnik računara ne vidi šta se sa sistemom dešava. X server je program koji sistemu pruža podršku za grafička okruženja. X nije jedini, ali je još uvek de facto standard za Unix-olike sisteme. O alternativama i životu X.org projekta je bilo više reči u našem prethodnom broju kada smo pisali o Wayland-u. X se nalazi na putu od aplikacije koja želi da iscrta nešto na monitoru, a posle njega su driver za grafičku kartu i podrška u kernelu. Podrška koju X pruža, uglavnom se svodi na to da opsluži zahteve za iscrtavanje aplikacije. Kao rezultat dobijemo sliku koja predstavlja stanje te aplikacije, a tu sliku potom window manager prikazuje u nekom delu monitora. Window manager može da funkcioniše kao deo okruženja radne površi ili zasebno, a o ovome je takođe bilo više reči u prethodnom broju u već pomenutom tekstu. X je takođe jedan od procesa koje najčešće pokreće init system.
Init
Već nekoliko puta smo u ovom tekstu pomenuli init system, što naravno znači da je ovo vrlo bitan deo celog sistema. O init procesu i init sistemima možemo da napišemo i celu knjigu, ali ovaj put ćemo samo pokušati da opišemo njihovu namenu i zadatak. Init system je (jedan od) sistema za automatsko pokretanje servisa i programa. Možemo reći da su njegove dve glavne komponente init proces i init skripte. Init proces je prvi proces koji se pokreće na našem računaru, pokreće ga sam kernel, njegov ID je 1 i iz njega nastaju svi ostali procesi. Druga komponenta su init skripte koje se gotovo uvek nalaze u /etc/init.d/ direktorijumu. Init skripte predstavljaju uputstva za pokretanje servisa (tzv. daemon-a) i drugih programa. Init system funkcioniše otprilike tako što nakon pokretanja init procesa, kernel pokrene servise i to putem izvršavanja već pomenutih init skripti. Kao i u drugim delovima sistema, i ovde postoji niz alternativa. Neki primeri su SystemV, OpenRC, upstart i SystemD.
Kernel
Kernel je jedna od magičnih reči koja se često spominje u Linux svetu i svetu drugih operativnih sistema i spada u domen crne magije za mnoge korisnike računara. Kada smo već do kolena zagazili u crnu magiju, red je da razjasnimo o čemu je tačno reč. Naravno, i ovo je tema koja zaslužuje poseban tekst, knjigu i život. Kada bismo operativni sistem morali da podelimo na nekoliko delova, to bi bili kernel i sve ostalo. Kernel vodi sasvim drugačiji život u računaru u odnosu na ostale procese. Upravlja hardverom, odlučuje koji proces će se izvršavati, šta će procesor da radi u nekom trenutku i upravlja RAM memorijom. Kernel je zapravo jedino mesto gde se novi procesi mogu kreirati. U kernelu se nalaze driver-i (zovu se još i upravljački programi) koji nam omogućuju da koristimo naš računar, a još važnije je da omogućuju našim programima rad i na drugim računarima bez obzira na to koliko se razlikuju po hardverskim karakteristikama. Kernel obezbeđuje interfejs za upravljanje fajlovima, pristup mreži i još mnoštvo toga, a proces inicijalizacije, „raspakivanja” i pokretanja kernela takođe izlaze iz okvira ovog teksta. Najbitnija stvar koju treba da znamo, jeste da kernel predstavlja spregu između hardvera, upravlja radom računara, pokreće se procesom „boot-ovanja” za koji je zadužen bootloader i nakon što kernel postane funkcionalan, pokreće se proces init, a ostatak već znate. Osim Linux kernela postoje i drugi, recimo Mach, Hurd i BSD. Kernel se često zove i jezgro, što bi bilo bukvalno značenje te reči.
Bootloader
Procesori imaju krajnje jednostavan i dosadan način rada. Možemo ih smatrati crnim kutijama koje na osnovu jednog niza nula i jedinica (programske reči, instrukcije, dela koda programa) znaju u kakvo stanje treba da se podese, a potom da od nekog drugog niza nula i jedinica (podaci), naprave treći niz nula i jedinica (rezultat) i taj rezultat zabeleže negde (zapisivanje u memoriju). Kada uključimo računar, dešava se upravo to. Procesor počne da izvršava neki program, a program koji učitava operativni sistem, tačnije prvo kernel, pa onda sve ostalo, naziva se bootloader. Ako se pitate zašto ne pokrećemo odmah kernel, odgovor je jednostavan. Kernel je prevelik da bi ga procesor mogao odmah pokrenuti pa prvo koristimo jednostavniji program čija namena je učitavanje kernela i priprema za njegovo pokretanje. Neki od najpopularnijih su opšte poznati GRUB (da, da, ono čudo sa kojim ste imali problema), LILO (njega verovatno ne koristite, osim ako niste slacker) ili u-boot (ako se srećete sa embeded sistemima ili imate raspberry). Međutim, ni ovo nije kraj jer možemo da imamo više bootloader-a na računaru, više uređaja na kojima se nalaze operativni sistemi, a procesor ne može direktno da komunicira ni sa hard diskom, ni sa monitorom, a opet na neki način možete da vidite bootloader ili da izaberete uređaj sa kojeg želite da startujete sistem. Za to je zadužen BIOS.
BIOS
BIOS (Basic Input/Output System) je prvi i osnovni set programske podrške na računaru. Obezbeđuje ga proizvođač matične ploče, a njegova namena je da pruži vrlo jednostavna podešavanja računara i komunikaciju sa računarom na nekom osnovnom nivou. BIOS pruža podršku za ispis na monitor, unos sa tastature i pristup memorijskim uređajima. Ovo znači da je BIOS dovoljan da biste pokrenuli neki program na računaru, bez potrebe za operativnim sistemom. Bootloader je jedan takav program, ali vi možete da napišete i svoj program koji će se izvršavati direktno na procesoru. Za ovakve igrarije preporučujemo osdev wiki (http://wiki.osdev.org). Zanimljivo je reći da se ovi programi moraju nalaziti u prvih 512 bajtova uređaja (odnosi se na CD, hard disk ili flash memoriju) i ne mogu biti veći od 1MB. Ovde takođe postoje alternative, postoje open source BIOS-i, a za više detalja o tome potražite open firmware, openbios i coreboot.
POST
Ostao je još jedan mali detalj. Pre nego što BIOS postane sasvim funkcionalan, računar prvo pokreće POST (Power On Self Test) da bi proverio svoje stanje. POST je najčešće deo BIOS-a, odnosno deo firmware-a matične ploče. To su ona prva slova koja se pojave kada pritisnete dugme za uključivanje i ono što pišti kada memorija, procesor ili grafička kartica nisu na svojem mestu.
Za kraj
Recimo da smo sada prošli kompletan put od preuzimanja našeg časopisa do pritiska dugmeta za uključivanje. Bolji izraz bi možda bio da smo proleteli kroz ovu proceduru jer mnogo toga nije napisano. Ima više načina kako se sistem može startovati, ali ovo je jedan klasičan primer. Dakle, da se podsetimo ali sad hronološkim redom. POST izvršava osnovni vid provere hardvera, proverava da li su sve komponente računara na broju. BIOS je prvi nivo apstrakcije koji omogućava procesoru da komunicira sa ostatkom računara i govori procesoru na kojem uređaju da potraži program koji treba da izvrši. Taj prvi program se nalazi u bootsector-u (prvih 512 bajtova nekog memorijskog uređaja) i naziva se bootloader. To je mali program koji učitava kernel i započinje njegovu inicijalizaciju. Nakon što je kernel funkcionalan, on pokreće prvi proces na sistemu – init proces, i njemu prepušta da dalje aktivira sistem. Init system potom pokrene osnovne servise, između ostalog i X koji pruža usluge za grafička okruženja, pokreće se session manager kako bi se korisnik prijavio za rad i potom se pokreće okruženje radne površi. U okruženju radne površi već imamo ikonice koje predstavljaju fajlove, dokumenta, direktorijume i izršne datoteke. Kada izaberemo neku od ikona, pokreće se potreban program i on se pojavljuje na monitoru. Nadamo se da smo uspeli da vas zainteresujemo. Vrlo rado ćemo pisati o sličnim temama i time vam pomoći da rešite neke nedoumice. Javite nam se i izaći ćemo vam u susret.