Uvod

UNIX je vrlo popularan operativni sistem. Koristi se kako u laboratorijama i na univerzitetima tako i u industrijskoj okolini. Raspolozive su verzije ovog sistema za upotrebu na racunarima opste namene, na specijalizovanim racunarima, na personalnim racunarima, na grafickim radnim stanicama, na malim i velikim sistemima razlicitih proizvodjaca. Glavne odlike ovog operativnog sistema su sledece:


Istorija razvoja UNIX sistema

Prvu verziju UNIX sistema je razvio Ken Thompson iz istrazivacke grupe Bell-ove laboratorije 1969. godine za upotrebu na racunaru PDP-7. Uskoro je ova grupa prosirena. Ken Thompson i Dennis Ritchie sa jos nekolicinom kolega su nastavili razvoj ovog operativnog sistema. Dennis Ritchie je pre toga radio na operativnom sistemu Multix koji je imao jak uticaj na oblikovanje UNIX-a. Iz Multix-a su pozajmljene mnoge ideje, kao sto su: osnovna organizacija fajl sistema, ideja da se komandni interpretator (shell) tretira kao korisnicki proces, koriscenje posebnih procesa za svaku komandu, originalni znaci za editiovanje linije (# za brisanje poslednjeg znaka i @ za brisanje citave linije). Veliki uticaj na razvoj UNIX-a takodje su imali operativni sistem CTSS razvijen na MIT-u i XDS-940.

Ritchie i Thompson su prebacili UNIX na PDP-11/20 i to je bila druga njegova verzija. U trecoj verziji su isti autori napisali najveci deo ovog operativnog sistema na programskom jeziku C, koji je razvijen u Bell-ovim laboratorijama kao podrska UNIX-u. Zatim je UNIX prebacen na vece modele PDP racunara, kao sto su 11/45 i 11/70. U UNIX je ukljuceno multiprogramiranje kada je UNIX pisan na C-u i kada je prebacen na sisteme ciji je hardver podrzavao multiprogramiranje. Ubrzo je poceo da se masovno koristi u Bell-ovim laboratorijama i na nekim univerzitetima. Prva verzija koja je masovno koriscena bila je Verzija 6 iz 1976 godine. Verzija 7 je distribuirana 1978. godine za sisteme PDP-11/70 i Interdata 8/32. Ubrzo je UNIX prenet sa PDP-11 kao i na VAX liniju racunara. Verzija UNIX-a pripremljena za VAX nazvana je 32V.

Nakon Verzije 7 formirana je posebna grupa, UNIX Support Group (USG), u okviru AT&T u cijem su sastavu Bell-ove laboratorije, ciji je zadatak bio da se brine o UNIX sistemu. Tako UNIX prestaje da bude samo istrzivacki alat i postaje komercijalni proizvod. Nastavlja se sa njegovim razvojem a 1985. godine je lansirana Verzija 8.

USG je 1982 lansirao System III koji je predstavijao sintezu verzija 7 i 32V, i jos nekih internih verzija iz Bell-ovih laboratorija (UNIX/RT i vise PWB-a). Sledece 1983 godine lansiran je System V koji se u nesto izmenjenom izdanju pojavio 1984 godine kao UNIX System Development Laboratory (USDL) ili UNIX System V Release 2 (V.2).

Mnoge organizacije se ukljucuju u razvoj i dogradnju UNIX sistema. Medju njima su Rand, BBN, DEC, SCO i Univerziteti Illinois, Harvard, Purdue. Medjutim, najveci uticaj, van Bell-ovih laboratorija i AT&T-a, imao je Kalifornijski Univerzitet u Berkley. Na ovom univerzitetu su zapoceli rad 1978 godine na VAX UNIX-u 32V kome su dodali virtuelnu memoriju, stranicenje na zahtev i zamenu stranica i tako je nastao 3BSD. Virtuelna memorija je omogucila da se UNIX koristi za razvoj velikih programa, kao sto je Berkley-ev Franz Lisp. Ubrzo je DARPA (Defence Advanced Research Projects Agency) narucila na Berkley-u standardni UNIX sistem za upotrebu u upravljanju. Tako je nastao 4BSD. Ova verzija UNIX-a je obezbedila rad u mrezi po DARPA Internet mreznom protokolu (TCP/IP). U novoj verziji 4.2BSD je obezbedjena uniformna komunikacija medju razlicitim elementima, ukljucujuci lokalne mreze (kao sto je Ethernet i token rings) i mreze racunara (kao sto je DARPA-in Arpanet). Na Berkley su razvijeni mnogi drajveri za terminale, novi korisnicki interfejs (C shell), novi tekst editor (ex/vi), kompajler za Pascal, interpreter za Lisp, kao i mnogi drugi sistemski programi. Operativni sistem 4.2BSD se vec moze porediti sa VMS operativnim sistemom.

UNIX softver iz Berkley-a se distribuira preko Berkley Software Distributions. Tu se mogu dobiti 3BSD i 4BSD za VAX UNIX sisteme, kao i 4.1BSD i 4.2BSD kao i mnoge nove verzije ovog sistema.

Ovde nije kraj verzijama UNIX-a. DEC je razvio svoj UNIX (ULTRIX) za VAX-ove i DEC Station, Microsoft je razvio UNIX za Intel 8088 i nazvao ga XENIX, IBM ima UNIX za PC i za velike sisteme. UNIX takodje postoji za Amdhal, Sun, NB1, MassComp, Hewlett-Packard, Gould, Data General, Perkin-Elmer, kao i za mnoge druge sisteme. Ovi sistemi imaju najcesce kao bazu sledece verzije: Verzija 7, System III, 4.2BSD ili System V. UNIX se i dalje razvija i treba ocekivati njegovu sve masovniju primenu.

Na slici 1 prikazan je razvoj i veza novijih verzija UNIX-a.

Slika 1: Veza raznih verzija UNIX-a

Sto se naseg okruzenja tice, najcesce se srecu sledece verzije UNIX operativnog sistema:


UNIX i drugi operativni sistemi

Kako bi avionski saobracaj izgledao kada bi softverske firme vodile avionske kompanije? (preneseno iz PC-Press, broj 5, 1995).

S obzirom da u svakoj sali ima mnogo istine, na osnovu ove se jasno mogu uociti prednosti i mane UNIX-a u poredjenju sa drugim operativnim sistemima. Prednosti su mnogobrojne i bice istaknute u narednim izlaganjima a mana je samo jedna. UNIX je, kako se da uociti iz prethodnog poglavlja, rasprostranjen u prilicnom broju verzija sto moze da izazove, bar u pocetku, zabunu kod korisnika.


Zasto bas UNIX?

Sa grafika koji je prikazan na sledecoj slici se jasno vidi da UNIX polako ali sigurno ulazi u sve masovniju upotrebu i to u svetskim razmerama. Porast broja racunara koji koriste ovaj operativni sistem se krece i do 30% godisnje. Takodje je interesantno uociti da u UNIX svetu dominiraju radne stanice i da znacajno mesto zauzimaju i sistemi tipa PC. Upotreba super-racunara nije prevelika zbog visoke cene dok je evidentno i to da se koncept main-frame racunara polako napusta.

Sistemi koji koriste UNIX (IEEE Spectrum, Januar 1994)

Mnogi proizvodjaci racunarske opreme koji poseduju sopstvene operativne sisteme, po kvalitetu bliske UNIX-u (Digital ili IBM, na primer) takodje isporucuju svoje racunare i pod UNIX-om. Ovo je verovatno zbog toga sto UNIX polako postaje standard medju operativnim sistemima. Uz neznatne razlike, on je isti na razlicitim platformama. Standardizacija mreznog dela UNIX-a omogucava umrezavanje racunara i komunikacione opreme razlicitih proizvodjaca sto racunare koji ga koriste svrstava u klasu otvorenih sistema (Open Systems).


Arhitektura UNIX operativnog sistema

Na slici 2 je prikazana arhitektura UNIX operativnog sistema. U centru strukture nalazi se hardver koji snabdeva operativni sistem svim potrebnim hardverskim resursima. Oko hardvera se nalazi niz slojeva koji izoluju korisnika od masine cineci mu na taj nacin rad na racunaru konformnijim. Prvi sloj oko hardvera je jezgro (kernel) operativnog sistema koje ima zadatak da vise slojeve izoluje od sloja ispod, to jest da ih ucini hardverski nezavisnim. Sledeci sloj cini komandni interpreter (shell). Prvenstveni zadatak ovog sloja jeste interakcija sa korisnokom (prihvatanje korisnickih zahteva, njihovo interpretiranje i predavanje nizem sloju (kernelu) na izvrsavanje). U najvisem sloju nalaze se razlicite komande i korisnicki programi ciji je zadatak direktno pruzanje specificnih usluga korisniku. Na slici 2, ovaj sloj je podeljen na vise delova. Svaki od delova predstavlja skup srodnih komandi.

Imajuci ovo u vidu, moze se reci da razumevanje UNIX operativnog sistema zahteva poznavanje cetiri njegove osnovne komponente: kernel, shell, komande i fajl sistem koji nije eksplicitno prikazan na slici 2 ali je implicitno sadrzan u delu kernela.

Slika 2: Arhitektura UNIX-a


Kernel

Kernel UNIX operativnog sistema kontrolise pristup racunaru, upravlja fajl sistemom, resursima racunara, diskovima, trakama, stampacima, komunikacionim linijama i drugim uredjajima. Na slici 3. dat je pregled funkcija Kernel-a.

Slika 3: Funkcije kernela


File sistem

File u UNIX operativnom sistemu predstavlja kolekciju znakova. Velicina fajla je jednaka ukupnom broju znakova koje fajl sadrzi. Podaci unutar fajla nemaju nikakvu strukturu osim one koju sam korisnik definise.

Fajl sistem u UNIX operativnom sistemu je organizovan hijerarhijski, u obliku stabla, kako je to prikazano na slici 4. U osnovi stabla je direktorijum poznat kao root direktorijum. Grane stabla predstavljaju direktorijume dok fajlovi predstavljaju listove stabla fajl sistema.

Slika 4: Fajl sistem

Postoje tri vrste UNIX fajlova:


Obicni fajlovi

Obicni fajlovi predstavljaju skup 8-bitnih znakova. Obican fajl moze sadrzati izvorni program, izvrsni program, tekst nekog dokumeneta, slogove baze podataka, ili bilo koji drugi tip podataka. Bajtovi obicnog fajla se mogu interpretirati kao znakovi nekog teksta, binarne instrukcije, ili kao naredbe programa.

Svaki obican fajl ima sledece atribute:


Tipovi obicnih fajlova

Postoje dva tipa obicnih fajlova:

Tekstualni fajlovi sadrze samo vidljive ASCII znakove. Bajt binarnog fajla moze imati bilo koju vrednost (od 0 do 255).


Zastita fajlova

Zastita fajlova se preduzima iz sledecih razloga:

Zastita fajlova u UNIX operativnom sistemu je zasnovana na kontrolisanom pristupu podacima koje on sadrzi. Prava koja jedan korisnik moze imati nad fajlom nazivamo pristupnim dozvolama (access permissions). Za svaki fajl u UNIX operativnom sistemu je moguce kontrolisati sledece tipove pristupnih dozvola:

read dozvoljeno citanje fajla
write dozvoljen upis u fajl
execute dozvoljeno izvrsavanje fajla


Tipovi korisnika fajlova

UNIX operativni sistem razlikuje dve vrste korisnika. Jedan korisnik, poznat kao root ili super korisnik (super user) poseduje sva prava na sistemu. Njemu su dozvoljene sve akcije kao sto su, na primer, promena konfiguracionih fajlova, instalacija novog i brisanje vec instaliranog softvera, pa cak i promena kernela. Privilegije ovakvog korisnika se dodeljuju pouzdanoj i strucnoj osobi koja se naziva sistem administratorom. Svi ostali korisnici cine klasu obicnih korisnika i, naravno, imaju ogranicena prava.

Svi korisnici UNIX sistema, racunajuci i super korisnika, su podeljeni u grupe. Kriterijum koji se koristi za podelu korisnika je obicno tip zadataka za koje su oni zaduzeni. Na primer, skup korisnika koji rade na jednom zajednickom projektu, cine grupu. Pri tome, jedan korisnik moze biti clan jedne ili vise grupa (ako radi na vecem broju projekata, na primer).

Gledano sa strane fajla, svi korisnici sistema se dele u tri klase:

Vlasnik fajla je korisnik koji je kreirao fajl i on poseduje pravo da odredjuje pristupne dozvole fajlu. Naravno, ovo pravo poseduje i super korisnik. Clanovi grupe jesu korisnici koji pripadaju grupi kojoj pripada i vlasnik fajla. Svi drugi korisnici se tretiraju kao ostali.

Za svaku klasu korisnika fajla je moguce definisati zasebne pristupne dozvole. Na primer, uobicajeno je da vlasnik poseduje sva prava nad fajlom (citanje, upis i izvrsavanje, ako se radi o izvrsnom fajlu), clanovima grupe se dodeljuje pravo citanja (bez prava menjanja sadrzaja), dok ostali korisnici ne poseduju nikakvo pravo pristupa fajlu.

Kontrola pristupa fajlu je relativno jednostavna i obavlja se sledecim komandama: chown, chgrp i chmod.


Imena fajlova

Imena fajlova mogu biti duzine do 14 znakova, mada kod nekih verzija UNIX-a mogu biti i znatno duza. Dva fajla iz istog direktorijuma ne mogu imati isto ime. Medjutim, isti fajl moze imati vise imena sto se obezbedjuje soft ili hard linkovima (videti komandu ln). U imenu fajla se mogu naci svi ascii znaci, ali koriscenje nevidljivih nije preporucljivo iz prakticnih razloga. Svaki direktorijum ima fajlove sa imenima . i .. (sinonimi za tekuci i parent direktorijum), pa ova dva imena ne treba koristiti.

U UNIX operativnom sistemu ne postoji nikakva konvencija koja povezuje imena fajlova sa tipom podataka koje oni sadrze, kao sto je to slucaj, na primer, u DOS operativnom sistemu (svi fajlovi koji imaju sufix .EXE su izvrsni). Medjutim, pojedini softverski paketi zahtevaju da fajlovi kojima oni barataju imaju odredjene sufikse, bez obzira sto to nije uslovljeno operativnim sistemom. Na primer, kompajleri C programskog jezika ocekuju da su fajlovi koji sadrze izvorne kodove sa ekstenzijom .c.

Fajlovi cija imena pocinju tackom (.) se posebno tretiraju od strane UNIX-a. To su takozvani skriveni fajlovi a razlikuju se od ostalih po tome sto se njihova imena ne pojavljuju pri standardnom listanju sadrzaja direktorijuma (videti komandu ls).


Direktorijumi

UNIX je posebno interesantan po tome sto su direktorijumi tretirani na isti nacin kao i obicni fajlovi s tim sto je u njih smestena lista fajlova lociranih na tom direktorijumu. I ovde, kao i u drugim operativnim sistemima, direktorijumi omogucavaju hijerarhijsku organizaciju celog fajl sistema.


Zastita direktorijuma

Slicno kao kod obicnih fajlova, direktorijum ima tri tipa pristupnih dozvola: citanje (read), upis (write) i izvrsenje (execute) s tim sto se one ovde malo drugacije interpretiraju. Dozvola upisa i izvrsenja odredjuje da li fajlovi mogu biti dodavani ili brisani sa direktorijuma. Dozvola izvrsenja i citanja odredjuje da li se sadrzaj direktorijuma moze listati.

Takodje, gledano sa strane direktorijuma, postoje tri klase korisnika: vlasnik, clanovi grupe i ostali. Pristupne dozvole direktorijuma postavlja vlasnik, to jest korisnik koji je kreirao direktorijum.


Struktura direktorijuma

Fajl sistem UNIX operativnog sistema je hijerarhijski struktuiran u vidu stabla. U tom stablu, direktorijumi odgovaraju cvorovima, dok su listovi stabla obicni fajlovi. Na slici 5. je prikazana tipicna struktura direktorijuma karakteristicna za UNIX operativni sistem. Na vrhu stabla je direktorijum koji se naziva korenom (root) i oznacava se kosom crtom (/). Ispod root direktorijuma prikazani su direktorijumi koji su standardno prisutni u svim realizacijama UNIX operativnog sistema. Mada UNIX ne postavlja nikakva ogranicenja u pogledu izgleda stabla fajl sistema, ipak postoji konvencija koja se u vecoj meri postuje. Po toj konvenciji fajl sistem skoro obavezno sadrzi direktorijume koji su prikazani na slici 5. Osim njih, kod razlicitih verzija UNIX-a pojavljuju se i neki specificni direktorijumi koji su karakteristicni samo za tu verziju. Osim ovoga, sadrzaj standardnih direktorijuma je takodje standardizovan tako da bin direktorijum sadrzi najcesce koriscene UNIX komande, dev sadrzi specijalne fajlove, etc sadrzi najcesce koriscene komande i fajlove vezane za administraciju i odrzavanje sistema, lib je direktorijum gde su smestene biblioteke funkcija za razvoj programa, tmp je direktorijum za cuvanje podataka privremenog karaktera, usr direktorijum sadrzi korisnicke direktorijume (kod nekih realizacija se oni nalaze ispod /usr/people ili /home direktorijuma). Direktorijum usr takodje sadrzi aplikativne programe, neke sistemske fajlove i direktorijume ali koji su prvenstveno vezani za pruzanje usluga korisnicima.

Slika 5.


Korisnicki ili HOME direktorijum

Svaki korisnik ima svoj maticni (HOME) direktorijum gde smesta svoje programe i podatke. Ispod ovog direktorijuma, korisniku je dozvoljeno da kreira proizvoljan broj drugih poddirektorijuma i fajlova u njima.


Pristupni put

Pristupni put, ili krace put, je sekvenca imena direktorijuma na cijem se kraju nalazi ime ciljnog direktorijuma ili fajla. Sva imena u putu su razdvojena kosom crtom. Ako put pocinje kosom crtom znaci da je formiran od korena, to jest od root direktorijuma, i tada se naziva potpunim ili apsolutnim putem. Put se takodje moze kreirati relativno u odnosu na radni (working), ili tekuci direktorijum i tada se on naziva relativnim. Ovo ime ne pocinje kosom crtom. Svi direktorijumi i fajlovi, osim root direktorijuma, imaju neposrednog prethodnika (parent direktorijum). UNIX operativni sistem nudi specijalne skracenice za parent i radni direktorijum:

. Skraceno ime za radni direktorijum. Na primer, ./xxx je ime fajla xxx u tekucem direktorijumu.
.. Skraceno ime za parent direktorijum radnog direktorijuma. Na primer, ../.. se odnosi na direktorijum koji je dva nivoa iznad radnog.


Specijalni fajlovi

Za svaki U/I uredjaj koji je prikljucen na racunar postoji bar jedan specijalni fajl. Najveci broj imena specijalnih fajlova su mnemonicka. Na primer, /dev/lp je specijalni fajl za linijski stampac, /dev/ttyd1 za prvi serijski port i slicno. Obracanje programa bilo kom uredjaju obavlja se preko odgovarajuceg specijalnog fajla. Kada, na primer, program upisuje podatke u fajl /dev/lp, operativni sistem prihvata ove podatke i salje ih linijskom stampacu. Kada program cita podatke iz ovog fajla, operativni sistem zahteva podatke od linijskog stampaca. Da bi ove operacije obavio, program ne mora nista znati o detaljima U/I mehanizma linijskog stampaca. Specijalni fajlovi su u stvari interfejs izmedju aplikativnih programa opste namene i internih rutina kernela UNIX operativnog sistema.

Neki U/I uredjaji su znakovski orijentisani, to jest obradjuju znak po znak i iz tih razloga se kaze da su njihovi specijalni fajlovi tipa character. U ovu klasu uredjaja spadaju, na primer, terminali i stampaci. Drugi uredjaji obradjuju vece grupe podataka od jednom, na primer, blokove od 512 bajtova. Specijalni fajlovi ovakvih uredjaja su tipa block ili raw a u ovu klasu spadaju diskovi, magnetne trake, CD romovi, i slicno. Pored ovih postoje i neki tipovi specijalnih fajlova koji su karakteristicni iskljucivo za UNIX operativni sistem.


Linkovi

Link je mehanizam kojim se omogucava da se vise imena dodeli jednom fajlu. Postoje dve vrste linkova: hard i simbolicki (soft) linkovi. Hard linkom se dva ili vise imena vezuju za jedan isti fizicki fajl, odnosno za jedan isti inode. Simbolicki link obezbedjuje isto to ali predstavlja fajl koji sadrzi put do drugog fajla u sistemu. Pri dugom listanju simbolicki link se moze prepoznati na sledeci nacin:

lrwxrwxrwx  1  tanja  5  mar  12  11:37  slink->indx

Pipe

Jedna od glavnih inovacija UNIX sistema je koncept pipe-a. Pipe dozvoljava protok podataka u jednom pravcu izmedju dva procesa. Tacnije receno, pipe predstavlja jedan od mehanizama UNIX-a za interprocesnu komunikaciju. Najcesce je to nacin da se izlaz jedne komande koristi kao ulaz u drugu, tako da se one izvrsavaju kao sekvenca nazvana pipeline. U ovoj cekvenci, komande se odvajaju uspravnom crtom, na primer:

% ls -l | more

Ovakav pipe se naziva neimenovanim i formira se u samoj memoriji racunara. Medjutim, moguce je kreirati i imenovani pipe koji jeste deo fajl sistema i moguce mu je pristupiti standardnim UNIX komandama za baratanje fajlovima.

Pri dugom listanju se mogu uociti sledeci tipovi fajlova:

- obican fajl,
d direktorijum,
l simbolicki link,
b blok specijalni fajl,
r raw specijalni fajl,
c karakter specijalni fajl
s socket i
p imenovani pipe.


Socket

Socket je poseban tip fajla koji, slicno kao i pipe, omogucava interprocesnu komunikaciju. U sustini, socket predstavlja generalizaciju pipe-a u smislu da omogucuje komunikaciju dva procesa koji ne moraju da se izvrsavaju na istoj masini. Najcesci primer koriscenja socket-a je kod komunikacije dva procesa koji se izvrsavaju na razlicitim sistemima a medjusobno komuniciraju preko racunarske mreze.


Procesi

Kao poseban pojam u UNIX operativnom sistemu javlja se proces. Proces je osnovna jedinica UNIX-a koja se izvrsava. Komande i poslovi mogu se izvrsavati jednim procesom, ali mogu zahtevati i vise procesa.

Postoji vise tipova procesa:

Svaki proces poseduje sledece atribute:


Shell

Shell je komandni interpreter UNIX operativnog sistema i moze se posmatrati kao sloj koji se nalazi izmedju kernela i korisnika. Interaktivan je s obzirom da ima direktnu komunikaciju sa korisnikom. On prihvata korisnicke zahteve, interpretira ih i predaje kernelu na izvrsavanje.

U vecini verzija UNIX operativnog sistema obicno su na raspolaganju sledece vrste shell-ova:

Shell Kratak opis
Bourne Shell /bin/sh - jednostavan za koriscenje, fleksibilan, sa ugradjenim programskim jezikom. /bin/rsh - redukovana verzija Bourne Shell-a.
C Shell /bin/csh - komandni interpreter i programski jezik koji podrzava komandni bafer, kontrolu poslova i sintaksu C-like.
Korn Shell /bin/ksh - dodatne mogucnosti u odnosu na Bourne Shell./bin/rksh - redukovana verzija Korn shell-a.
Turbo C Shell /bin/tcsh - unapredjena verzija C shell-a. Poseduje bolje editovanje komandne linije, kompletiranje imena fajlova, ponavljanja komandi.