1069 Linuxos
1069 Linuxos
LINUX OS
Uvod u IT
Since it first appeared in 1991 to present day, the user base of this versatile operating
system has been growing steadily and it has become a real competitor on the market of the
mainstream operating systems.
2
SADRŽAJ
SUMMARY ....................................................................................................2
SADRŽAJ .....................................................................................................3
UVOD..........................................................................................................4
POJAM LINUX ...............................................................................................5
Linux kernel ............................................................................................................................5
Linux OS...................................................................................................................................6
Linux distribucije...................................................................................................................6
LINUX I RAZNE HARDVERSKE PLATFORME .......................................................6
VERZIJE LINUXA ...........................................................................................7
LINUX OPERATIVNI SISTEM............................................................................7
Linux je višekorisnički sistem ..........................................................................................8
Korisnici i grupe ....................................................................................................................8
Linux vs. drugi unixoidni kerneli.....................................................................................9
Procesi.....................................................................................................................................11
Arhitektura kernela ............................................................................................................12
UNIX FAJLSISTEM ....................................................................................... 13
Fajl............................................................................................................................................13
Regularni fajlovi ..................................................................................................................13
Direktorijumski fajlovi ......................................................................................................14
Character-orjentisani device fajlovi ............................................................................14
Block-orjentisani device fajlovi .....................................................................................14
Socket .....................................................................................................................................14
Pipe i named pipe ...............................................................................................................14
Simbolički i hard linkovi ...................................................................................................14
Organizacija fajlsistema...................................................................................................15
Dijeljeni i nedijeljeni......................................................................................................15
Statični i promjenljivi ....................................................................................................15
Root fajlsistem po FHS standardu ...............................................................................16
ZAKLJUČAK................................................................................................ 17
LITERATURA............................................................................................... 18
3
UVOD
U avgustu 1991., kada je Linus Torvalds poslao na usenet grupu comp.os.minix obavijest o
svom projektu/hobiju, sam kernel linuxa je bio u povojima i teško da se mogao smatrati
nečim što će u skorije vrijeme imati toliko uticaja, ne samo na tržište operativnih sistema,
nego na toliko grana direktno i indirektno vezanih što prevazilazi obim ovog teksta da se
uopšte i nabraja.
Cilj ovog teksta nije da ulazi u sve segmente linuksa kao operativnog sistema, kao ni da se
pokuša napraviti neko skraćeno uputstvo za korištenje istog, jer je to samim raspoloživim
prostorom i opširnošću teme nemoguće uraditi. Cilj je da se napravi kratak osvrt na neke
ključne stvari kao što su sam pojam linuxa, da se pomene na kojim to sve platformama u
današnje vrijeme Linux radi, da se malo zaviri u samu njegovu srž – kernel, kao i njegovu
drugu ključnu stvar - fajlsistem, te da se napravi komparacija sa drugim, njemu srodnim,
operativnim sistemima na kojima je i baziran. Iako je ovdje riječ o linuxu, u tekstu se često
koristi riječ Unix, čisto zbog toga što se većina stvari ne odnosi samo na Linux nego važi za
sve unixoidne sisteme pa se, samim tim, misli i na Linux.
4
POJAM LINUX
U današnje vrijeme, kada se kaže Linux, najčešće se misli na jednu od tri stvari: Linux
kernel, Linux OS ili Linux distribuciju. pa da ukratko razjasnimo ta tri pojma.
Linux kernel
Kernel je jezgro operativnog sistema, njegova srž. Ukratko to je softver koji upravlja
pristupom korisničkih programa sistemskom hardveru i softverskim resursima. Ovi resursi
se kreću od dobijanja procesorskog vremena, pristupanja memoriji, čitanja i pisanja po
diskovima, povezivanja u mreže pa do interakcije s terminalom ili GUI interfejsom. Kernel
sve ovo omogućava kontrolisanjem i pružanjem pristupa memoriji, procesoru,
ulazno/izlaznim uređajima, fajlovima na disku i specijalnim servisima za korisničke
programe.
Sam linuxov kernel se izvodi u tzv. zaštićenom modu. Ovaj način rada omogućava kernelu
da se izvršava a da mu ne smetaju drugi programi koji su trenutno pokrenuti u sistemu.
Sam mikroprocesor nameće ovu liniju razgraničenja između korisničkog nivoa i kernelovog
adresnog prostora te garantuje održanje integriteta njegove strukture podataka i struktura
podataka drugih procesa. Naravno, to ne znači da neki privilegovani proces ne bi mogao
prouzrokovati oštećenja unutar kernela i time izazvati nestabilnost ili sam pad sistema ali
suzbija takve mogućnosti samim tim da takvi procesi moraju biti privilegovani.
Linux je član velike porodice unixoidnih operativnih sistema. Relativno nov sistem koji se
pojavio početkom devedesetih godina prošlog vijeka te se pridružio i stao uz bok s poznatim
Unix operativnim sistemima kao što su System V Release 4 (SVR4), originalno razvijen od
strane AT&T a sada u vlasništvu SCO grupe, Digital Unix iz Digital Equipment Corporation
(sada vlasništvo Hewlett-Packarda), AIX iz IBM-a, HP-UX iz Hewlett-Packarda, Sun OS i
Solaris iz Sun Microsystems, Mac OS X iz Apple Computer Inc, razni BSD-ovi itd...
Linux je inicijalno razvijen od strane Linus Torvaldsa 1991. godine kao operativni sistem za
IBM kompatibilne personalne računare bazirane na 80386 mikroprocesoru. Linus je još
uvijek duboko “upetljan” u razvoj Linuxa, držeći ga u koraku s razvojem raznog hardvera i
koordinirajući aktivnosti stotina ljudi (developera) uključenih u razvoj Linux sistema širom
svijeta. Tokom godina, developeri su radili na tome da Linux bude dostupan i na drugim
arhitekturama uključujući Hewlet-Packardovu Alpha, Itanium, MIPS, SPARC, Motorola
MC680x0, PowerPC, AMD64, IBM-ove zSeries.
5
Linux OS
Tehnički govoreći, Linux je pravi Unix kernel, mada on nije potpun Unix operativni sistem
zato što ne uključuje sve aplikacije, kao što su fajlsistem alati, windowing sistemi i grafički
desktopi, sistem-administratorske komande, tekst editori, kompajleri itd. Ali, pošto je
većina ovih programa slobodno dostupna pod GNU GPL, oni mogu biti instalirani na nekom
od fajlsistema podržanih od strane Linuxa. To nam ukazuje na pogrešno interpretiranje
riječi Linux kada se misli na cjelokupan operativni sistem. Zato je uobičajeno među onima
koji shvataju tu razliku da takav sistem nazivaju GNU/Linux operativni sistem - dakle, GNU
sistem na Linux kernelu. Činjenica je da je npr. samo postojanje GNU C kompajlera jedan
od preduslova koji su omogućili i postojanje Linuxa kao takvog, otvorenog i slobodnog
softvera. Dakle, Linux jeste unixoid koji je napisan kako se to uobičajeno kaže “from
scratch”, ali ostatak operativnog sistema je većinom portani (prebačeni, prilagođeni) GNU
softver iz BSD UNIX-a.
Linux distribucije
Pošto je Linux slobodan softver, ne postoji organizacija ili entitet koji je odgovoran za
njegovo izdavanje ili distribuciju. Takođe, bilo ko, ko to želi ili hoće, može i ima pravo da ga
sklopi u cjelokupan sistem i distribuira sve dok se pridržava GPL licence. To nas dovodi do
pojma Linux distribucije. Linux distribucije su, dakle, kolekcije kernela i (najčešće GNU)
softvera. Nusprodukt ovoga je to da postoji veliki broj Linux distribucija širom svijeta. Neke
od njih su komercijalne, neke besplatne, neke sadrže ogromnu količinu softvera a neke su
usko specijalizovane. Evo nekoliko primjera:
• SuSE Linux, proizvod njemačke softverske kuće SuSE AG (u trenutku pisanja ovog
teksta ta firma je u fazi kupovine od strane Novella) je jedna od najvećih distribucija
što se tiče količine softvera koji je uključen u nju i uz RedHat distribuciju drži primat
na području komercijalnih distribucija.
• Debian GNU/Linux je besplatna distribucija razvijena i održavana od strane volontera
širom svijeta, takođe po obimu spada među distribucije koje uključuju veliku količinu
dodatnog softvera.
• Floppyfw je mala distribucija koja zajedno s kernelom i priloženim softverom ne
prevazilazi veličinu jedne floppy diskete i ona spada u specijalizovane distribucije.
Razvijena je s jednom namjenom, da radi kao firewall i u sklopu nje se ne nalaze
nikakvi softveri koji nisu usko vezani za tu namjenu.
6
8. mips64 - Radne stanice bazirane na 64-bitnim MIPS mikroprocesorima.
9. parisc - Radne stanice bazirane na Hewlett Packardovim HP 9000 PA-RISC
mikroprocesorima.
10. ppc - Radne stanice bazirane na Motorola-IBM PowerPC mikroprocesorima.
11. ppc64 – Radne stanice bazirane na 64-bitnim Motorola-IBM PowerPC
mikroprocesorima.
12. s390 - 32-bitni IBM ESA/390 i zSeries mainframe sistemi.
13. s390x – IBM-ovi 64-bitni zSeries serveri
14. sh - SuperH embedded računari koje su razvili Hitachi i STMicroelectronics
15. sparc - Radne stanice bazirane na Sun Microsystems SPARC mikroprocesorima
16. sparc64 - Radne stanice bazirane na Sun Microsystems 64-bitnim Ultra SPARC
mikroprocesorima
17. um – Ovo nije klasični kernel vezan za neku platformu nego je UML bazirani, virtualni
kernel koji se može iskompajlirati i pokretati na nekom već pokrenutom Linux
sistemu (za sada samo na i386 arhitekturi) kao obični program.
18. x86_64 – Sistemi sagrađeni na AMD64 mikroprosesorima.
VERZIJE LINUXA
Linux razlikuje stabilne od development verzija kernela kroz jednostavnu šemu
numerisanja. Svaka verzija je označena sa tri boja razdvojena tačkom. Prva dva broja
identificiraju verziju a treći release (izdanje). U vrijeme pisanja ovog pasusa trenutna stable
verzija je bila 2.4.22 a zvaničnih 2.5 development verzija nije bilo jer su one prerasle u
novu verziju 2.6 koja je pri kraju beta faze (2.6.0-test9) te se uskoro očekuje njena stable
verzija a nove development verzije će se nakon toga vjerovatno označavati sa 2.7.
Nova izdanja stable verzija dolaze većinom zbog ispravljenih bugova (grešaka) prijavljenih
od strane korisnika. Glavni algoritam i struktura podataka korištenih za implementaciju
kernela ostaju nepromijenjeni. (Napomena: praksa često ne slijedi teoriju. Na primjer
virtual memory system je značajno izmijenjen počevši od 10 izdanja 2.4 verzije tj. od
2.4.10 kernela.
Development verzije, opet, mogu biti poprilično različite jedna od druge. Kernel developeri
su slobodni da eksperimentišu sa različitim rješenjima što obično vodi do drastičnih
promjena u samom kernelu. Korisnici koji baziraju svoje sisteme na development verzijama
kernela mogu iskusiti neprijatna iznenađenja kada nadograđuju (upgrade) svoj kernel na
novo izdanje baš zbog tih promjena. Zbog toga se ne preporučuje upotreba development
kernela u produkcionim sistemima jer ne postoji način kojim bi se predvidjelo koje će sve
nove opcije iz eksperimentalnih kernela biti definitivno zadržane a koje odbačene iz samog
kernela.
7
• Obezbijediti izvršno okruženje aplikacijama koje se pokreću na računarskom sistemu
(tzv. korisničkim programima).
Korisnici i grupe
U višekorisničkom sistemu, svaki korisnik ima svoj privatni prostor na mašini, najčešće
posjeduje neku kvotu na hard disku gdje može pohraniti datoteke, primati e-mail poruke
itd. Operativni sistem mora osigurati da privatni komad korisničkog prostora bude vidljiv
samo vlasniku. Ukratko, mora osigurati da korisnik ne može iskoristiti sistemsku aplikaciju u
svrhu zloupotrebe privatnog prostora drugog korisnika.
Svi korisnici su identifikovani jedinstvenim brojem koji se zove User ID ili kratko UID.
Obično je korištenje računarskog sistema dozvoljeno samo ograničenoj grupi osoba. Kada
neko od tih korisnika započne radnu sesiju, operativni sistem traži korisničko ime (login) i
8
šifru (password). Ako korisnik ne unese ispravan par, sistem ne dozvoljava pristup. S
obzirom da se šifra smatra tajnom, privatnost korisnika je osigurana.
Da bi selektivno dijelili materijal s drugim korisnicima, svaki korisnik je član jedne ili više
grupa koje su identifikovane jedinstvenim brojem zvanim Group ID ili kratko GID. Svaki fajl
je asociran s tačno jednom grupom. Na primjer, pristup fajlu može biti podešen tako da
korisnik koji je vlasnik fajla može čitati i pisati u taj fajl, grupa može samo čitati iz njega a
svim ostalim korisnicima je pristup fajlu zabranjen.
Svaki unixoidni sistem ima specijalnog korisnika zvanog root ili superuser. Administrator
sistema se mora prijaviti na sistem kao root da bi rukovao korisničkim accountima, radio
poslove održavanja kao što su backupi, nadogradnje (upgrade) itd. Root korisnik može
uraditi skoro sve, s obzirom da operativni sistem ne postavlja uobičajene mehanizme zaštite
tom korisniku. Ukratko, root korisnik može pristupiti svakom fajlu na sistemu i može se
miješati u aktivnost svakog pokrenutog korisničkog programa.
Sve komercijalne varijante Unixa su izvedene iz SVR4 ili iz 4.4BSD verzija unixa i sve se
drže nekih uobičajenih standarda kao što su IEEE's Portable Operating Systems based on
Unix (POSIX) i X/Open's Common Applications Environment (CAE). Trenutni standardi
specificiraju samo application programming interface (API) koji je dobro definisano
okruženje u kojem bi se korisnički programi trebali izvršavati. Ovi standardi ne uslovljavaju
nikakve restrikcije na internom dizajnu kernela koji ih se pridržava. Kao činjenica se može
uzeti to da nekoliko operativnih sistema koji uopšte nisu unixi ili unixoidi zadovoljava POSIX
standard, npr. Windows NT.
2.4 verzija Linux kernela cilja na to da bude u skladu s IEEE POSIX standardom. To znači da
većina postojećih Unix programa može biti kompajlirana i izvršena na Linux sistemu uz vrlo
mali napor ili čak bez ikakvih izmjena izvornog (source) koda. Linux uključuje sve
karakteristike modernog Unix operativnog sistema kao što su virtualna memorija, virtualni
fajlsistem, lightweight processes, reliable signals, SVR4 interprocess communications,
podrška za višeprocesorske sisteme, itd.
Sam po sebi, Linux kernel nije nešto posebno inovativan. Kada je Linus Torvalds pisao prvi
kernel, on se oslanjao na neke klasične knjige o Unixovoj unutrašnjosti kao što je The
Design of the Unix Operating System (by Maurice Bach, Prentice Hall, 1986). Iako baziran
na unixima, Linux se ne drži striktno ni jedne od verzija već pokušava da implementira
najbolje osobine i dizajn više različitih Unix kernela.
Sljedeća lista objašnjava kako se Linux takmiči s nekim od poznatijih Unix kernela:
9
samo su SVR4.2 i Solaris kerneli sličnih osobina.
• Kernel threading: Neki moderni Unix kerneli, kao što su Solaris 2.x i SVR4.2/MP, su
organizovani kao komplet kernel threads. Kernel thread je izvršni kontekst koji može
biti nezavisno raspoređen, može biti asociran s korisničkim programom ili može
izvršavati samo neke funkcije kernela. Preklapanje između kernel threadova je
mnogo manje zahtjevno od preklapanja između uobičajenih procesa pošto ovi
posljednji operišu u uobičajenom adresnom prostoru. Linux koristi kernel threadove
na vrlo limitiran način da bi periodično izvršio nekoliko kernelskih funkcija. Pošto
Linux kernel threadovi ne mogu izvršavati korisničke programe, oni ne predstavljaju
osnovni kontekst izvršne apstrakcije.
• Podrška multithreaded aplikacijama: Većina modernih operativnih sistema ima neki
vid podrške multithreaded aplikacijama. To su dobro dizajnirani korisnički programi u
smislu više relativno nezavisnih izvršnih tokova koji dijele veliki komad aplikacijske
podatkovne strukture. Multithreaded korisnička aplikacija može biti sastavljena od
više “laganih” procesa (lightweight processes - LWP), a to su procesi koji mogu
operisati na uobičajenom adresnom prostoru, memoriji, fajlovima itd. Linux
posjeduje svoju vlastitu verziju tj. Implementaciju ovih LWP procesa koja je različita
od one kod drugih sistema kao što su npr. SVR4 i Solaris. Dok su kod komercijalnih
unixa LWP-i bazirani na kernel threadsima, Linuxovi LWP su osnovni izvršni kontekst
i rukuje njima preko nestandardnog clone() sistemskog poziva (system call).
• Nonpreemptive kernel: Linux 2.4 nije u mogućnosti arbitrarno prožimati izvršne
tokove dok su u privilegovanom modu (ova restrikcija je izbačena iz 2.5
development verzije linuxa). Nekoliko sekcija kernelskog koda predpostavlja da
može izvršavati i modifikovati strukture podataka bez bojazni da će biti prekinute
(ometane) i ima drugi thread koji mijenja te strukture podataka. Obično potpuno
preemptive kernels su asocirani sa specijalnim real-time operativnim sistemima.
Trenutno, među konvencionalnim unixima, samo su Solaris 2.x i Mach 3.0 potpuno
preemptive kerneli.
• Višeprocesorska podrška: Više Unix kernela iskorištavaju višeprocesorske sisteme.
Linux 2.4 podržava symmetric multiprocessing (SMP), što znači da sistem može
koristiti više procesora i svaki od njih može rukovati bilo kojim zadatkom – nema
diskriminacije među njima. Premda je nekoliko dijelova kernelovog koda još uvijek
serializovano u smislu jednog "big kernel lock," može se reći da Linux 2.4 čini
korištenje SMP-a približno optimalnim.
• Fajlsistem: Linuxovi standardni fajlsistemi dolaze u mnogo oblika. Prve verzije linuxa
su bile bazirane na minix fajlsistemu, ali kako je linux razvijan, pojavio se Extended
Filesystem (Ext FS) koji je, iako je donio neke novosti, pružao vrlo loše performanse.
Second Extended Filesystem (Ext2) je predstavljen 1994. koji je, pored nekih
dodatnih mogućnosti, pružio robusnost i efikasnost i postao najzastupljeniji Linux
fajlsistem. Iako je relativno zastario, još uvijek ima nekih svojih prednosti (između
ostalog, prilično debugiran kod), Ext3, nasljednik Ext2 fajlsistema s kojim je
kompatibilan (moguće je vrlo lako prebaciti particiju iz jadnog u drugi) sa sobom
donosi jednu od prednosti modernih fajlsistema a to je žurnaling (journaling).
ReiserFS (takođe journaling fajlsistem) pokazuje svoju snagu kod operacija sa
velikim brojem malih fajlova. Pored ova dva posljednja, Linux ima podršku za još
nekoliko žurnaling fajlsistema kao što su: IBM AIX's Journaling File System (JFS),
Silicon Graphics Irix's XFS fajlsistem. Zahvaljujući objektno orjentisanoj Virtual File
System tehnologiji (inspirisanoj Solarisom i SVR4), portanje (prilagođavanje) stranih
fajlsistema na Linux je relativno lagan zadatak. Pored nabrojanih, Linux podržava
veliki broj drugih fajlsistema, od kojih neke samo u read only modu, ali prostor ovog
teksta limitira njihovo pominjanje.
• STREAMS: Linux nema analogiju prema STREAMS I/O podsistemu predstavljenom u
SVR4, iako je on sada sadržan u većini unix kernela i postao preferirano okruženje za
pisanje device drivera, terminal drivera i mrežnih protokola.
Iako sličan i baziran na drugim unixima, neke karakteristike ipak čine Linux jedinstvenim
sistemom. Kerneli komercijalnih unixa često predstavljaju nove osobine čisto da bi dobili
veću “krišku” na tržištu, ali to ne znači da su te osobine obavezno i korisne, stabilne ili
10
produktivne. Za razliku od njih, Linux ne pati od ograničenja i stanja nametnutih tržištem i
zbog toga on može slobodno da se razvija prema idejama svojih dizajnera (prvenstveno
Linus Torvaldsa). Specifično, Linux pruža sljedeće prednosti naspram svojih komercijalnih
konkurenata:
• Linux je besplatan. Moguće je instalirati kompletan Unix sistem bez izdataka (osim u
hardver).
• Linux je potpuno podesiv u svim svojim komponentama. Zahvaljujući GPL licenci,
bilo ko može slobodno čitati i modificirati izvorni kod kernela i svih sistemskih
programa. (Postoji jedan izuzetak: Pošto su mnoge komercijalne kompanije počele
da podržavaju svoje produkte pod Linuxom neke od njih svoje programe ne
distribuiraju pod open source licencom te samim tim za neke od njih ne postoji
dozvola čitanja i modifikacije koda.)
• Linux radi i na “low-end”, jeftinim hardverskim platformama. Moguće je dići mrežni
server čak i na starom Intel 80386 sistemu sa 4MB RAM-a.
• Linux sistemi su moćni i vrlo brzi pošto oni u potpunosti iskorištavaju mogućnosti
hardverskih komponenti. Glavni cilj linuxa je efikasnost i zbog toga su mnoga
dizajnerska rješenja komercijalnih varijanti, kao npr. STREAMS I/O podsistem,
odbačeni od strane Linusa, zbog njihovog lošeg uticaja na performanse.
• Linux ima visok standard kvalitete izvornog koda. Linux sistemi su obično vrlo
stabilni, imaju vrlo nizak nivo grešaka i na održavanje sistema (maintenance) se
troši relativno malo vremena.
• Linux kernel može biti veoma malen i kompaktan. Na samo jednu 1,4MB floppy
disketu je moguće smjestiti kernel i kompletan root fajlsistem, uključujući
fundamentalne sistemske programe. Koliko je poznato, nijedna komercijalna
varijanta Unixa to ne može.
• Linux je veoma kompatibilan sa mnogim operativnim sistemima. On dozvoljava
montiranje fajlsistema svih verzija MS-DOS i MS Windows, SVR4, OS/2, Mac OS,
Solaris, SunOS, NeXTSTEP, mnogih BSD varijanti, itd. Linux može da operiše na
mnogim mrežnim nivoima, kao što su Ethernet (kao i Fast Ethernet i Gigabit
Ethernet), Fiber Distributed Data Interface (FDDI), High Performance Parallel
Interface (HIPPI), IBM-ov Token Ring, AT&T WaveLAN i DEC RoamAbout DS.
Koristeći odgovarajuće biblioteke, Linux sistemi su čak u mogćnosti da direktno
pokreću programe napisane za druge operativne sisteme. Npr. Linux može izvršavati
aplikacije napisane za MS-DOS, MS Windows, SVR3 i R4, 4.4BSD, SCO Unix, XENIX,
i druge na 80x86 platformi.
• Linux ima dobru podršku. Zvučalo to nevjerovatno ili ne, ali mnogo je lakše doći do
zakrpa (patch) i nadogradnji (upgrade) za Linux nego za bilo koji zatvoreni
operativni sistem. Odgovor na problem obično dođe u roku od nekoliko sati nakon
slanja poruke na neku od mailing lista ili news grupa. Takođe, driveri za Linux su
obično dostupni za par sedmica nakon što su novi hardverski produkti predstavljeni
na tržištu. Suprotno tome, proizvođači hardvera izdaju drivere za samo nekoliko
komercijalnih operativnih sistema, u stvari obično Microsoftove. A komercijalne
verzije unixa rade na vrlo ograničenom skupu hardverskih komponenti.
Procesi
Svi operativni sistemi koriste jednu fundamentalnu apstrakciju: proces. Proces može biti
definisan kao instanca programa u izvršavanju. U tradicionalnim operativnim sistemima,
proces izvršava jednu sekvencu instrukcija u adresnom prostoru. Adresni prostor je skup
memorijskih adresa koje su dozvoljene procesu da se na njih poziva. Moderni operativni
sistemi dozvoljavaju procese sa višestrukim izvršnim tokovima (flows), što su u stvari
višestruke sekvence instrukcija u istom adresnom prostoru. Višekorisnički sistemi moraju
insistirati na izvršnom okruženju u kojem više procesa može biti konkurentno aktivno i
11
natjecati se za sistemske resurse, prvenstveno CPU. Za sisteme koji dozvoljavaju
konkurentne aktivne procese se kaže da su multiprogramming ili multiprocessing (Neki
multiprocessing operativni sistemi nisu ujedno i višekorisnički, npr. MS Windows 98). Važno
je razdvojiti programe od procesa. Više procesa može konkurentno izvršavati isti program,
dok isti proces može sekvencijalno izvršavati više programa.
Na jednoprocesorskim sistemima samo jedan proces može držati CPU1 i zbog toga samo
jedan izvršni tok može napredovati u tom vremenu, ili uopšteno, broj CPU-a je uvijek
ograničen i shodno tome samo nekoliko procesa može napredovati odjednom. Komponenta
operativnog sistema pod nazivom scheduler bira proces koji može napredovati. Neki
operativni sistemi dozvoljavaju samo nonpreemptive procese, što znači da je scheduler
pozvan samo kada proces dobrovoljno oslobodi CPU. Ali procesi višekorisničkih sistema
moraju biti preemptive. Operativni sistem prati koliko dugo svaki od procesa drži CPU i
periodično aktivira scheduler.
Linux je multiprocessing operativni sistem sa preemptive procesima. Čak i kad nema
korisnika prijavljenih na sistem i kad nema apliakcija koje se izvršavaju, nekoliko sistemskih
procesa monitoriše (prati) periferne uređaje. Ukratko, nekoliko procesa sluša na
sistemskim terminalima čekajući na korisničke logine. Kada korisnik unese korisničko ime,
slušajući proces pokreće program koji validira korisnički password. Ako je korisnikov
identitet prepoznat, proces kreira drugi proces koji pokreće shell u kojem se unose
komande. Kada je aktiviran grafički displej, jedan proces pokreće window manager, i svaki
prozor na displeju je obično pokrenut od strane zasebnog procesa. Kada korisnik kreira
grafički shell, jedan proces kreira grafički prozor a drugi proces pokreće shell u kojem
korisnik može unositi komande. Za svaku korisničku komandu, shell process kreira novi
proces koji izvršava dati program.
Unixoidni operativni sistemi su usvojili proces/kernel model. Svaki proces ima iluziju da je
on jedini proces na mašini i da ima ekskluzivan pristup servisima operativnog sistema. Kada
god proces napravi system call (zahtjev kernelu), hardver promijeni privilegovani mod iz
User Mode u Kernel Mode, i proces počinje izvršavanje procedure kernela sa striktno
ograničenom svrhom tj. ciljem. Na ovaj način, operativni sistem djeluje u izvršnom
kontekstu procesa sa namjerom da udovolji zahtjevu. Kada je zahtjev potpuno zadovoljen,
procedura kernela naređuje hardveru da se vrati u User Mode i proces nastavlja svoje
izvršavanje od instrukcije koja slijedi nakon sistemskog zahtjeva.
Arhitektura kernela
Kao što je rečeno ranije, većina Unix kernela je monolitna: svaki nivo kernela je integrisan u
cijeli kernel program i radi u kernel modu u ime trenutnog procesa. U kontrastu,
microkernel operativni sistemi zahtijevaju vrlo mali skup funkcija od kernela, generalno
uključujući nekoliko primitiva za sinhronizaciju, jednostavan scheduler, i mehanizam za
komunikaciju među procesima. Nekoliko sistemskih procesa koji se izvršavaju na vrhu
mikrokernela implmentiraju druge funkcije u nivou operativnog sistema kao što je alokacija
memorije, driveri, rukovaoci sistemskih poziva itd. Premda je akdemsko istraživanje
operativnih sistema okrenuto ka mikrokernel arhitekturi, takvi operativni sistemi su
generalno sporiji od monolitnih, pošto skplicitni prolaz poruka između različitih nivoa
operativnog sistema ima svoju cijenu. Bilo kako bilo, mikrokernel operativni sistemi imaju
svoje teoretske prednosti nad monolitnim. Mikrokerneli prisiljavaju sistemske programere
da se prilagode modularnom pristupu, s obzirom da je svaki nivo (layer) operativnog
sistema relativno nezavisan program koji mora stupiti u interakciju sa ostalim nivoima kroz
dobro definisane i čiste softverske interfejse. Postojeći mikrokernel operativni sistem može
vrlo lako biti portan (prebačen) na drugu arhitekturu, s obzirom da su sve hardverski
zavisne komponente generalno enkapsulirane u mikrikernel kod. Na kraju, mikrokernel
operativni sistemi bolje koriste memoriju sa slučajnim pristupom (RAM) od monolitnih pošto
sistemski procesi koji ne daju tražene funkcionalnosti mogu biti zamjenjeni ili uništeni. Da
1
Ovo ne vrijedi za neke novije procesore, npr. Intel P4 sa Hyper-Threading tehnologijom.
12
bi dostigao mnoge teoretske prednosti mikrokernela bez plaćanja cijene u performansama,
kernel linuxa nudi module. Modul je objektni fajl čiji kod može biti uvezan (ili odbačen) s
kernelom u vrijeme izvršavanja (runtime). Objektni kod obično sadrži skup funkcija koje
implementiraju fajlsistem, drajver ili neku drugu odliku na višem nivou (upper layer)
kernela. Modul, za razliku od eksternih nivoa mikrokernel operativnih sistema, ne radi kao
specifičan proces. Umjesto toga, on se izvršava u kernel modu u ime trenutnog procesa,
kao bilo koja druga statički linkana funkcija kernela. Glavne prednosti korištenja modula
uključuju:
• Modularan pristup: Pošto bilo koji modul može biti učitan ili obrisan u vrijeme dok se
kernel izvršava (runtime), sistemski programeri moraju predstaviti dobro definisane
softverske interfejse za pristup strukturama podataka kojima moduli rukuju. To čini
pisanje novih modula laganim.
• Platformska nezavisnost: Čak i ako može zavisiti o nekim specifičnim hardverskim
osobinama, modul ne zavisi od fiksne hardverske platforme. Npr. modul disk
drajvera koji je baziran na SCSI standardu radi dobro i na IBM kompatibilnom PC-u
baš kao što radi i na Hewlett-Packardovoj Alpha-i.
• Ekonomična upotreba glavne memorije: Modul može biti uvezan s kernelom koji se
izvršava kada je njegova funkcionalnost potrebna i obrisan (uklonjen) kada prestane
biti potreban. Ovaj mehanizam može biti napravljen transparentno za korisnika pošto
samo učitavanje i brisanje modula može biti automatski izvršeno od strane kernela.
• Nema negativnih posljedica po performanse sistema: Jednom slinkan (uvezan),
objektni kod modula je ekvivalentan objektnom kodu statički linkanog kernela. Uz to
nema posebnih komunikacija nakon što je modul slinkan. Doduše, mali gubitak
performansi se dešava kod samog učitavanja odnosno brisanja modula ali on se
može uporediti sa gubitkom performansi kreiranja i brisanja sistemskog procesa kod
mikrokernel operativnih sistema. Ali to je sve, dok je gubitak performansi zbog
zahtjeva za stalnom komunikaciom među različitim nivoima kod mikrokernela stalan.
UNIX FAJLSISTEM
Dizajn unix baziranog operativnog sistema je fokusiran na njegov fajlsistem koji posjeduje
nekoliko interesantnih karakteristika.
Fajl
Na unixoidnom sistemu fajl predstavlja skladište neobrađenih ili obrađenih podataka koji su
u njemu smješteni kao niz bajtova (isti se još nazivaju i karakterima). Ti podaci su kodirani
u ASCII kodu. Fajl može da bude smješten na različite medije. Takođe, on može biti stalni
fajl (npr. na disku) ali i privremeni fajl u memoriji ili pak fajl koji prikazuje ili prihvata
podatke (npr. s terminala). Unix prepoznaje nekoliko tipova fajlova i to:
• Regularni fajlovi
• Direktorijumski fajlovi
• Simbolički i hard linkovi
• Block-orjentisani device fajlovi
• Character-orjentisani device fajlovi
• Pipeovi i imenovani (named) pipeovi (takođe zvani i FIFO)
• Socketi
Regularni fajlovi
Regularni fajlovi su po svojoj prirodi stalni fajlovi koji sadrže takve podatke kao što je npr.
izvorni kod, primljeni e-mail, ovaj tekst itd. Oni, skoro uvijek, sadrže informacije. Podaci u
13
ovim fajlovima su organizovani u slogove. A slogovi su razdvojeni specijalnim karakterom
za novi red (newline character), koji Unix koristi da ustanovi gdje završava jedan a počinje
drugi slog.
Direktorijumski fajlovi
Block orjentisani device fajlovi se koriste kada se podaci prenose u paketima određene
dužine. Oni koriste baferski (buffer) mehanizam za keširanje čime se povećava efikasnost
prenosa podataka, zato što se u memoriju smiješta kopija podataka. Primjer ovih specijalnih
fajlova je hard disk.
Socket
Socket je aplikativni programski interfejs (API) koji se koristi za komunikaciju između dva
host računara. Drugim riječima, on izvodi mrežne I/O operacije. U apstraktnom smislu,
socket je sličan fajlovima ali on nije pravi fajl.
Tu na scenu stupa named pipe (ili FIFO). To je fajl koji je kreiran da obavlja međuprocesnu
komunikaciju i za razliku od običnog pipea njegovo ime je upisano u stablo fajlsistema te
mu je moguće pristupiti (npr. koristi se u klijent/server komunikaciji). On služi za razmjenu
podataka između dva programa. Proces slanja upisuje podatke u named pipe, a proces
primanja čita podatke iz njega. To je privremeni fajl i postoji onoliko dugo koliko procesi
komuniciraju. Podaci iz imenovanog pipea se obrađuju na FIFO (first in, first out) principu.
Linkovi kreiraju pointere na stvarne fajlove, pri čemu se ne dupliraju sadržaji fajlova.
Drugim riječima, link predstavlja način da se istom fajlu da drugo ime. Kod hard linka,
originalno i linkovano ime pokazuju na istu fizičku adresu i apsolutno su identična. Hard
14
linkovi imaju dva ograničenja: direktorijum ne može imati hard link i hard link ne može
prelaziti granice fajlsistema. Moguće je obrisati originalno ime fajla a da se pri tome ne briše
linkovano ime. Samim tim se ne briše fajl, nego samo upis u direktorijum koji se odnosi na
originalni fajl i broj linkova se smanjuje za jedan.
Kod simboličkih (soft ili symlink) linkova postoje dva fajla, jedan je originalni fajl, a drugi
linkovano ime fajla koje sadrži oiginalno ime fajla. Glavno ograničejne symlinkova je to da
se može obrisati originalni fajl što za posljedicu daje to da ostaje njegovo linkovano ime a
podataka više nema. Ali, simbolički linkovi mogu da prelaze granice fajlsistema, tj.
symlinkom se može pokazivati na neki fajl koji se fizički nalazi u drugom fajlsistemu.
Takođe, simbolički linkovi mogu da pokazuju i na direktorije.
Organizacija fajlsistema
Zbog obima teme, ovdje ćemo samo pomenuti neke osnovne stvari. Sam fajlsistem se
vizuelno može zamisliti kao obrnuto stablo na čijem se vrhu nalazi korijen (root) koji se
označava kosom crtom (slash) / i koji se prema dole grana na direktorije i fajlove. FHS
standard razlikuje nekoliko vrsta direktorija: dijeljene (shareable) i nedijeljene
(unshareable) te statične (static) i promjenljive (variable). Ovakva podjela je usvojena iz
više razloga.
Dijeljeni i nedijeljeni
U mrežnom okruženju postoji dobra stvar da podaci mogu biti dijeljeni između različitih
hostova (npr. računara) da bi se uštedio prostor koji podaci zauzimaju i olakšalo održavanje
istih.
U mrežnom okruženju pojedini fajlovi sadrže informacije spcifične samo za pojedine hostove
te takvi fajlsistemi ne mogu biti dijeljeni (osim u specijalnim slučajevima).
Istorijske implementacije unixoidnih fajlsistema su držale neke podatke koji se mogu dijeliti
i one koji ne mogu u istoj hijerarhiji što je otežavalo dijeljenje većih dijelova fajlsistema.
Statični i promjenljivi
Pošto / (root) particija sadrži i promjenljive i statične podatke, ona mora biti montirana u
read/write modu (može se i čitati i pisati po njoj),
Pošto tradicionalni /usr sadrži i promjenljive i statičke podatke a mi bi željeli da ga
montiramo u read-only modu (vidjeti primjere 1. i 2. iz prethodnog podnaslova),
neophodno je pružiti metod da se /usr može montirati kao read only. To je urađeno
kreiranjem /var hijerarhije koja je montirana u read/write modu (ili je dio neke druge
read/write particije, kao što je to npr. /) i koja je preuzela od tradicionalne funkcionalnosti
/usr particije.
15
Sljedeća tabela prikazuje primjer korištenja ove dvije pomenute podjele koji je po FHS
standardu:
Djeljivi Nedjeljivi
/ root direktorij
|-- bin Neophodne komande
|-- boot Statični fajlovi boot loadera
|-- dev Device fajlovi
|-- etc Sistemske konfiguracije specifične za host
|-- lib Neophodne dijeljene biblioteke i moduli kernela
|-- mnt Tačka montirajna za privremeno montiranje fajlsistema
|-- opt Paketi dodatnog aplikativnog softvera
|-- sbin Neophodne sistemske komande
|-- tmp Privremeni fajlovi
|-- usr Sekundarna hijerarhija
|-- var Promjenljivi podaci
/ root direktorij
|-- home Korisnički home direktoriji (opcionalno)
|-- lib<qual> Alternativni format neophodnih dijeljenih biblioteka (opcionalno)
|-- root Home direktorij root korisnika (opcionalno)
2
Prema 2.3 beta3 verziji FHS standarda u samom root direktoriju se mogu nalaziti i
direktoriji /srv (za servise koji se hostiraju na tom sistemu) i /media za montiranje medija
kao što su cdrom, floppy itd.
16
ZAKLJUČAK
17
LITERATURA
Knjige:
Understanding the
2. Daniel P. Bovet, Marco Cesati 2003
Linux Kernel
UNIX do kraja
Robin Burk, David B. Horvath i
3. (za sistem 1999
drugi
administratora)
4. Running Linux Matt Welsh i Lar Kaufman 1995
5.
Web:
18
19