Upload
others
View
12
Download
0
Embed Size (px)
Citation preview
1
3. OPEARATIVNI SISTEMI
Operativni sistem je uopšten poznat pojam asocirajući na programski paket koji omogućuje
ispravan rad računarskog sitema. Uglavnom se pod računarski sistem podrazuemva desktop i
prenosivi računari u koje spadaju laptop-ovi, notebook-ovi, tableti. Svaki od ovih sistema ima
specifičan hadrver kome upravlja podržani operativni sistem. Uopšteno, operativni sistem je
skup sistemskih programa uskladištenih u internoj memoriji hardvera koje sistem može da
dekodira u izvršne fizičke operacije specifirane arhitekturom, omogućavajući fukcionalnost i
upotrebljivost hardvera. Zaključuje se da svi ureĎaji koji imaju ugraĎen blok za čuvanje
algoritama upravljanja njegovim resursima podržavaju koncept operativnog sistema. Primer su
takozvani embedded (ugraĎeni) sistemi sa ugraĎenim mikroprocesorima i ROM memorijom u
kojima se nalazi svojstven operativni sistem. Fotoaparati, TV, klima uredjaji spadaju u embedded
grupu ureĎaja.
U ovom razmatranju usredsredićemo se na operativne sisteme personalnih računara. Presonalni
računar je multifukcionalni ureĎaj sa raznolikim komponetima u koje spadaju procesor,
operativna memorija, ulazni i izlazni uraĎaji, pa upravljanje ovim resursima nije jednostavan
posao. Zadatak operativnog sistem se može ukratko razdeliti prema sledećim ciljevima:
omogućiti upotrebljivost hadrvera
omogućiti transparentnost aplikativnog softvera na raznolikost hardvera
omogućiti jednostavno korišćenje od strane korisnika
Na tržištu se mogu kupiti komponente računara od velikog broja različitih proizvoĎača pa
operativan sistem mora obezbediti korišćenje aplikativnog programa nezavisno od konfiguracije.
To se postiže pomoću posebnih upravljačkih programa (drajvera) koji komunciraju na isti način
sa operativnim sistemom ne zavisno od specifičnosti hardvera. Sam drajever je zadužen za
upravlajnje date komponente hardvera. Da bi korisnik mogao koristiti računar, hardver mora da
obzebedi ureĎaje za prihvatenje komande korisnika i prikazivanje rezultata na osnovu unete
komande. Upareni ulazni i izlazni ureĎaji zaduženi za komunikaciju računara sa korisnikom
definišu terminal. Tastataura i monitor predstavljaju najstandarniji tip terminala. Operativni
sistem treba obezbediti lak i intuitivan način korišćenja terminala. Današnji komercijalni
operativni sistemi podražavaju grafičko korisničko okruženje (GUI – graphical user inteface),
kakav je dobro poznat Windows. Za vreme prvih operativnih sistemima komunikacija se
obavljala isključivo preko znakovnih simbola, konzole. Korisnik zadaje zadatak putem niza
znakova računaru, a rezultat računar predaje putem niza znakova, takoĎe. Konzolno okruženje se
i danas koristi u administraciji servera jer GUI opterećuje nepotrebno procesorske resurse, kao i
zbog potrebe višeg poznavanja korišćenja iz bezbednosnih razloga (ako znaš šta treba da
odradiš, onda poznaješ i komandu za izvršavanje).
2
Na osnovu cilja koje treba obezbediti, radni okvir operativnog sistema se svodi na izvrašavanje
sledećih radnji:
upravljanje reusrsima: CPU, OM. I/O , File system
komunikacija se aplikativnim softverom – sistemski pozivi
upravljanje procesima
Dakle, operativni sistem je posrednik izmeĎu hadvera i korisnika, odnosno programa koji rešava
konkretan problem korisnika.Upravljanje resursima računara zadužen je skup sistemskih
programa gupisanih u celinu čineći jezgro operativnog sistema koje se češće naziva kernel.
Kernel obavlja osnovne funkcije operativnog sistema i uvek se nalazi u memoriji tokom rada
računara. Na Sl. 3.1.1. predstavljen je slojevit prikaz povezanosti hadrvera sa jedne strane,
operativnog sistema i aplikativnog softvera, odnosno korisnika sa druge strane, dok je na Sl.
3.1.2. prikazana blok šema kernela koji odvojeno upravlja resursima hardvera.
3.1.1.
3.1.2.
3
3.1.1. S ISTEMSK I P O ZIVI
Aplikativni softver nema direktan pristup hardveru računara, nego mora da zatraži zahtev
operativnom sistemu za uslugu koju će odraditi umesto njega. Ovakav način pristupa oslobaĎa
programere korisničkih softvera poznavanje unutrašnjih osobenosti hardvera, i programiranje
svodi na pozivanje funkcija i procedura koje se nalaze u bibilotekama podržanih programskih
jezika. Biblioteke (library) su datoteke u kojoj se nalazi skup procedura i funkcija, pri čemu
programer može da je poveže sa svojim pisanim programom i na taj način omogući njihovo
pozivanje iz koda programa. Bibloteke koje se koriste za komunikaciju izmeĎu različitih
softverskih podsistema (npr. izmeĎu aplikacije i operativnog sistema) nazivaju se API -
application programming interface.
Procedure i funkcije pozvane od strane aplikativnog softvera, a nalaze se u sastavu operativnog
sistem predstavljaju sistemske pozive. Jedna od njih su procedure read() i write() za rad u
konzoli, podržani od Pascal programskog jezika. Kad god program zatraži prenos podataka sa
treminala sistemskim pozivom read() ili write(), izvršavanje se prenosi na operativni sistem koji
obavlja prenos podatka sa terminalom, i nakon završetka se vraća na pozivajući program.
Sistemski pozivim se ograničava direktno korišćenje hardverskih resursa od strane aplikativnih
softvera, prebacujući na domen operativnog sistema. Stoga, pouzdanost i zaštita sistema se
povećavaju, blokirajući zloupotrebe odreĎenih korisnika da upravljaju ili koriste prostor
rezervisane za druge aplikacije, kao i samog operativnog sistema.
3.2. PROCESI
Da bi računar izvršavao program on mora da se nalazi u operativnoj memoriji računara.
Uobičajno je da će se neki delovi programa ćešće izvršavati od drugih, može se dogoditi da neke
procedure i funkcije ne budu pozvane tokom celog rada programa. Postoje programi čije
veličine znatno premašuju kapacitet operativne memorije. U višekorisničkom radu postoji
potreba da se paralelno izvršavaju više programa.
Svi navedeni problemi i zahtevi uslovljavaju odreĎen metod organizacije operativnog sistema, uz
obavezu da omogući efikasnost i ispravnost rada. Rešenje je da se samo deo programa koji se
trenutno izvršava sa svim svojim podacima nalazi u memoriji, formirajući posebnu celinu,
proces. Proces je osnovni element operativnog sistema, koji se razgraničava od ostalih svojim
adresnim prostorom, pozicijom izvršavanja (PC-programe counter), inditetom i drugo. Može
posojati više nezavisnih procesa nad istim delom programa. TakoĎe, program se može razdeliti u
više meĎusobno povezanih procesa.
4
3.2.1. OS OB IN E PROC ES A
Operativan sistem upravlja procesima, dajući ili oduzimajući im resurse hardvera. Zbog toga se
svakom procesu dodeljuju prateće informacije koje se čuvaju u adresnom prostoru operativnog
sistema. Za ispravan nastavak izvršavanja procesa, osnovne informacije su:
ID – indentitet procesa (jedinstven pozitivan broj za indetifikaciju procesa u sistemu)
kontekst procesora – sadržaj svih dostupni registra nakon oduzimanja procesora
procesu (PC, PSW, IR …)
memorijski parametri – veličina i pozicija dodeljenog adresnog prostora (PMTP)
I/O parametri – spisak otvorenih datoteka
Informacije o rasporeĎivanju – informacije potrebne uslužnim programima operativnog
sistema (procesorsko vreme, prioritet, stanje )
ostalo – npr. pokazivač na sledeći proces u nizu
Sve navedene informacije procesa se grupišu u struktuiran podatak koji se zove kontrolni blok
PCB – Process Control Block, predstavljen na Sl. 3.2.1.
3.2.1.
5
3.2.2. STANJ A PROC ES A
U zavisnosti trenutnog dešavanja procesa, procesi mogi biti u jednom od sledećih stanja:
1. Running – procesu je dat procesor koji ga izvršava.
2. Ready – proces čeka u redu za dobijanja procesora. U trenutku oduzimanja procesora
running procesu, operativni sistem može predati nekom procesu sa ready liste.
Uglavnom, running procesi ulaze u ready stanje, nakon kreiranja, spoljašnjeg prekida
(IRQ linije) od strane operativnog sistema ili je sam proces zatražio sistemski poziv koji
ne zahteva uslugu operativnog sistema.
3. Blocked - proces iz running stanja ulazi u blocked (blokirajuće) kada traži odreĎenu
uslugu od operativnog sistema i ostaje u njemu sveg dok ga operativni sistem ne opsluži.
Zahtev se može odnositi na neku operaciju ulaznog-izlaznog ureĎaja ili na odreĎeni
dogaĎaj unutar drugog procesa koji signalizira obavljen dogaĎaj sitemskim pozivom.
Procesi mogu preći iz running u blocked stanje jedino preko sistemskih poziva.
Na Sl. 3.2.2. prikazan je vremenski okvir rada prosesa, u kome se primećuje promena iz running
stanja procesa preko sistemskih poziva – wait(), openfile(), exit(), dispatch(), dok je za ostale
promene stanja odgovoran operativni sistem ili sistemski pozivi roditeljskog procesa – fork (),
execlp().
3.2.2.
6
3.2.3. KRE IR ANJ E PROC ES A
Novi proces se kreira sistemskim pozivom kreirajućeg (roditeljskog) procesa – Parent, pri čemu
se novonastali naziva Child (dete). Parent i child procesi formiraju hijerarhisku povezanost, koja
se ogleda uticajem dogaĎaja u jednom procesu na drugi. Na primer, ako se roditeljski proces
ugasi, gase se svi njegovi child procesi.
3.2.3.1. Sistemski poziv fork()
U Unix-su, roditeljski proces sistemskim pozivom fork() kreira kopiju svog adresnog prostora u
slobodnom delu operativne memorije prikazanoj na Sl. 3.2.4. Operatvni sistem može da selektuje
jedan od ovih nezavisnih procesa koji su totalno identični uz razliku u poziciji trenutnog
izvršavanja. fork() je funkcija koja vraća celobrojnu vrednost jednaka nulu u procesu detea, dok
u roditeljskom vraća pozitivan celobrojan indifikacioni broj porcesa deteta (PID – process ID)
3.2.3.2. Sistemski poziv execlp()
Unutar kopiranog dete procesa sistemski pozivom execlp (string imePrograma), adresni prostor
se zamenjuje programom navedenog imenom za argument execlp() procedure. Na taj način
kreiran je novi sadržaj, a da nije kopija kreirajućeg.
3.2.3.
7
3.2.4.
Sleduje primer koda parent procesa u sintaksi Pascal jezika, koji kreira novi proces. (Napomena:
execlp i fork podržava C programski jezik, ovde je samo upotrebljena sintaksa Pascala)
program KreiranjeProcesa;
var pid:Integer;
begin
pid:= Fork();
if pid > 0 then
begin
Wait();
writeln (‘Ovo je proces roditelj’);
end;
8
if pid := 0 then
begin
writeln (‘Ovo je proces dete’);
Execlp(‘/tmp/HelloWorld.exe’);
end;
end.
Sistemskim poziv wait( ) blokira roditeljski proces sve dok se proces dete ne ugasi, nakon čega
se deblokira i kada mu operativni sistem preda procesor, nastavlja izvršavanje. Ako je
HelloWorld.exe u direktijumu /tmp izvršni program koji ispisuje na ekranu: ‘Hello World’,
onda će posle izvršenja programa KreiranjeProces, sledeće poruke biti prikazane na
ekranu:
Ovo je proces dete
Hello World
Ovo je proces roditelj
3.2.4. GAŠ ENJE P ROCE S A
Gašenje procesa podrazumeva oslobaĎanje resursa, a to su procesor, adresni prostor operativne
memorije, zatvarnje liste otvorenih datoteka i drugo. Pri tome operativni sistem briše kontrolni
blok pocesa (PCB) iz tabele procesa, signalizira da je proces ugašen i obavlja ostale usluge
sprečavajući naknadne greške nastale uticajem gašenja. Uzroci gašenja procesa su:
izvršavanje poslednje nardbe u glavnom programu (U Pascalu, naredba ispred ključne
reči end.)
kada program zatraži sistemskim pozivom exit()
od strane operativnog sistema usled pokušaja nedozvoljene operacije
3.2.5 Dispatch() PRO CEDUR A
Dispatch() -dispačer je procedura operativnog sistema zadužena za zamenu i selekciju procesa
sa ready liste sa trenutnim running procesom. Proces sam može da zatraži rasporeĎivanje,
sistemski pozivom dispatch(), ako na primer radi u multiprocesnom režimu, prepuštajući
procesor drugim procesima. Pošto samo jedan program poseduje procesor bilo korisnički proces
ili operativni sistem, prelazak na dispačer sa nekog procesa se ostvaruje preko IRQ linije
(hadverskog prekida) pridružene operativnom sistemu. Dakle, dispačer je prekidna rutina na
koju se skače nakon aktiviranja IRQ linije. Dispačera se aktivira periodično (sinhroni prekid)
ili u odreĎenim vremenskim trenucima.
9
Dispečer skuplja sve informacije o prekinutom running procesu i skladišti ih u njegov kontrolni
blok (PCB) uz dodelu ready stanja. Zatim na osnovu algoritma zamene odbira neki proces iz
ready liste i markira ga running stanjem, pri čemu može biti i prošli proces. Na osnovu konteksta
kontrolnog bloka running procesa, dispačer obezbeĎuje procesor i druge resurse procesu.
Završetakom dispačera, nastavlja se izvršavanje selektovanog procesa.
Podsetiti se RTI naredbe, kako bi se izvršio prenos iz kontrolnog bloka u registre
procesora, ako u posmatranoj arhitekturi imao samo PC, PSW, ACC, IR, DR0..3
registre koje se čuvaju u kontrol bloku.
Na Sl. 3.2.5. predstavljena je šema promene running stanja iz procesa A u proces B.
3.2.5.
Dispačer se ne sme prekidati, jer bi izazvalo hazardne greške u strukturi podataka operativnog
sistema. Dipačer nema kontrolni blok (PCB) i nije proces u pravom smislu, jer nema smisla da
prvo sam sebe selektuje da bi izvršavao selekciju nekog konkretnog procesa. Ako bi se
realizovao prekid za ponovni poziv disprečera izgubila bi se informacije koje su se u tom
trenutku prenosilie u kontrolni blok, pa nisu uspešno sačuvane da kraja. Samo neočekivani
prekidi od IRQ linije mogu zaustaviti rad dispečera, zbog toga potrebno ih je maskirati. Na
10
osnovu arhitekture iz prve oblasti (Procesor), maskiranje se obavlja jednostavnom instrukcijom
INTD koja prestavlaj lock primitivu na Sl. 3.2.5. dok unlock primitiva predstavlja jednu INTE
instrukciju koja dopušta prekide. Na multiprocesorskim sistemima, hardver mora obezbediti
odgovaruću podršku.
3.2.6. KO OPER ATIVN I P ROCES I
Procesi meĎu sobom dele resurse hardvera, prenoseći informacije jednom drugome. Na taj način
povećava se fleksibilnost sistema. Umesto jednog glomaznog program, zadaci se podele na više
procesa koji uporedno konkurišu resurse, sinhronizovano rešavaju problem, meĎusobno
prenoseći podtake. Osnovni mehanizme interakcije izmeĎu procesa su:
komunikacija
sinhronizacija
3.2.6.1. Komunikacija između procesa
Kooperativni procesi zahtevaju operativnom sistemu mogućnost upostavljanja komunikacije.
Postoje dva metode komunikacije
deljeni adresni prostor
prenos poruka sistemski pozivom
3.2.6.
11
Kod komunikacije sa deljenim adresnim prostorom na sl.3.2.6.a), jedan od procesa traži
sistemskim pozivom od operativnog sistema, da njegov deo memorije bude u sklopu adresnog
prostora drugog procesa. Komunikacija se obavlja razmenom informacija preko deljene
promenjive ili deljenih podataka koje se nalaze u deljenom adresnom prostoru.
Kod prenosa poruka sistemskim pozivom na sl.3.2.6.b), posrednik u komunikaciji je operativni
sistem. Proces šalje poruku i sve potrebne informacije sistemskim pozivom u untrašnje resurse
operativnog sistema na privremeno čuvanje. TakoĎe, drugi proces šalje sistemski poziv da bi
primio odgovarajuću poruku.
3.2.6.2. Sinhronizacija između procesa
Kooperativni procesi su uposleni u rešavanju jednog posla, pri čemu je svaki zadužen za
odreĎeni deo. Zbog toga je potrebana sinhronizacija izmeĎu procesa, tj. proces će odraditi
zadatak ako se steknu odreĎeni uslovi. Procesi meĎusobno prate stanja u kojima se nalaze, na
osnovu kojih se opredeljuju za čekanje ili izvršavanje svojih zadataka.
Uposleno čekanje je oblik sinhronizacije u kome jedan proces aktivno provera dali se u drugom
procesu dogaĎaj dogodio. Procesu se daje procesor na raspolaganju kako bi proverio stanje, pa
se gubi procesorsko vreme na izvršavanje prazne petlje, pokazane u sledećem primeru:
process P1;
begin
. . .
while flag = false do null end;{proces čeka signal, kako bi nastavio dalje}
. . .
end P1;
process P2;
begin
. . .
flag := false;
{ovde je deo koda koji čeka proces P1 da se izvrši}
flag := true;
. . .
End P2;
U pojedinim delovima izvršavanja procesa, pojava prekida i promena na drugi proces izazvala bi
logičke greške uzrokujući neželjne efekte. Na primer kod dvoadresnog formata instrukcija, za
prostu naredbu sabiranja, u kojoj se zbir simboličke vrednosti b i c smeštaju na adresu pod
simboličkom oznakom a, potrebno je najmanje dve instrukcije da se izvrše:
a:= b+c; → MOV b,a; {sdaržaj promenjive b se sladištu a, -> a=b}
ADD a,c; {a=b+c}
12
Predpostavimo da a deljenja promenjiva koju koristi najmanje još jedan proces. Ako bi se
realizovao prekid tokom prve instrukcije uz prelazak na proces koji takoĎe koristi promenjivu a,
onda bi on prihvatio pogrešnu vrednost koja nije rezultat sabiranja izraza b+c, već vrednost
promenjive b. Zbog toga je potrebno zabraniti prekidanje kritičnog dela programa, da ne bi
izazvalo greške. Deo naredbi koji mora da se izvršava nedeljivo (atomično) zove se kritična
sekcija. Atomičnost kritične sekcije se obezbeĎuje jednostavnim umetanjem izmeĎu sistmeskih
poziva lock() i unlock() kojima se maskiraju odnosno demaskiraju prekidi, konkretno za gornji
primer sabiranja:
lock();
a:= b+c;
unlock();
Ako se često ulazi u krtične sekcije uz njihovo dugo izvršavanje, sistem je neosetljiv (trom,
gluv) na neočekivane dogaĎaje većim delom vremema. Problem se rešava dozvolom prekida, pri
čemu samo jedan proces može biti u kritičnoj sekciji. Proces mora da sačeka ulazak u svoju
kritičnu sekciju, ako postoji već neki proces u stanju kritične sekcije. Ovakav mehanizm
sinhronizacije procesa se naziva međusobno isključenje. Dat je primer, dva procesa sa
meĎusobnim isključenjem koristeći uposleno čekanje kao rešenje.
Process P1;
begin
. . .
flag1 := true;
while flag2 = true do null end;
{kritična sekcija procesa1}
flag1 := false;
{nekritična sekcija procesa1}
. . .
end P1;
process P2;
begin
. . .
flag2 := true;
while flag1 = true do null end;
{kritična sekcija procesa2}
flag2 := false;
{nekritična sekcija procesa2}
. . .
end P1;
U gornjem primeru, problem se javlja prilikom prelaska iz jednog procesa u drugi tokom
izvršavanja instrukcija flag1 := true; odnosno flag2 := true; Oba procesa će ući u
beskonačno uposleno čekanje, izvršavajući praznu petlju. Stagnacija procesa tokom svog
izvršavanja naziva se livelock. Postoje izvori u drugim litreaturama koji rešavaju problem
livelocka-a, npr. Dekker-ov algoritam.
Za razliku od livelock-a, deadlock je stanje blokirajućeg procesa koji se nikad deblokira. Primer
su istovremeni zahtevi otvaranja dve datoteke od dva procesa, pa kada ih dobiju, zaključaju ih.
Svaki proces je, prvo, otvorio i zaključao različitu datoteku, pa zatražio zahtev za drugu,
blokirajući se do opsluživanja. Procesi će ostati zauvek blokirani čekajući otvaranje druge
datoteke, jer su obe zaključane, a ne mogu da se otključaju jer su im procesi blokirani. Procesi
13
nikad neće ući u running stanje, pa treba ugraditi kritične sekcije u ovim delovima koda oba
procesa.
Programer koji programira programe u višeprocesnom režimu, mora definsiati kritične sekcije
koda i sprečiti ulazak procesa u deadlock ili livelock stanja.
3.2.7. SEM AFOR I
Kod rešenja meĎusobnog isključenja sa uposlenim čekanjem, procesi izvršavaju jalove
instrukcije čekajući da se kritična sekcija drugog procesa završi. Umesto da se procesor preda
čekajućem procesu, efikasnije je da se proces blokira i postavi u listu čekanja, dok se kritična
sekcija neoslobodi. Dakle, proces komunicira sa operativnim sistemom, signalizirajući mu da li
može da nastavi sa radom, ako ne može proces se blokira. Kad mu se pošalje odreĎena
signalizacija, operativni sistem će deblokirati čekaujći proces, postavljanjem u ready stanje,
omogućujući mu da dobije procesor.
Semafori, sistemski pozivi wait() i signal() se koriste u blokrianju i deblokiranju čekajućih
procesa. Wait() i signal() su atomične procedure kratkog trajanja, koje se ne mogu prekinuti
(ugarĎene lock() i unlock() primitive, slično kod dispatch()).
Wait() deljenju promenjivu val umanjuje za jedan, zatim blokira proces i stavlja ga u listu
čekanja dogaĎaja semafora, ako je val<0.
Signal() vrednost val povećava za jedan, zatim deblokira neki proces iz liste čekanja dogaĎaja
semafora ako je val<=0.
Dat je izmenjen predhodni primer meĎusobnog isključenja u kojem se sada ugrĎeni wait() i
signal(), uz početnu vrednost val=1:
process P1;
begin
. . .
wait();
{kritična sekcija procesa1}
signal();
{nekritična sekcija procesa1}
. . .
end P1;
process P2;
begin
. . .
wait();
{kritična sekcija procesa2}
signal()
{nekritična sekcija procesa2}
. . .
end P1;
Neka se trenutno izvršava proces1, pa porcedurom wait() se vrednost menja u val=0 i proces
ulazi u kritičnu sekciju. U toku izvršavanja pocesa1, prelazi se na proces2 koji se blokira jer će
vrednost biti val=-1. Nakon završetka kritične sekcije procesa proces1, signal() deblokira
proces2 uz izmenu val=0, što će omogućiti prelazak na njegovu kritičnu sekciju. Kada se
14
kritična sekcija proces2 završi, signal() semafor će prvo povećati val na 1, pa ispitati njegovu
vrednost. Prvom sledećem procesu će se dozvoliti izvršavanje, preko njegovog wait() semafora
nakon koga sledi njegova kritčna oblast.
3.3. NITI
Niti (Thread) su procesi nad istim adresnim prostorom pri čemu dele iste resurse i otvorene
datoteke. Zbog toga se ovim procesima kontrolni blokovi (PCB) preklapaju, gde se relativne
razlike grupišu u tabeli niti u kojoj svaka niti ima svoj kontrolni blok (TCB – Therad Control
Block). Sleduje da se promena konteksta niti obavlja mnogo brže nego izmeĎu „teških“
procesa. Na taj način se obezbeĎuje bolji odziv procesa jer je operativni sistem mnogo brži u
izvršavanju režijskih troškova, neproduktivnih za korinsika. U ostalom, niti se još i zovu „laki“
procesi.
3.3.1. OS OB IN E NITI
Osobine niti se mogu podeliti u dve kategorije, jednu predstavljaju zajedničke osbine niti:
adresni prostor – programski kod i globalne podtake
resurse – spisak otvorenih datoteka
Druga kategorija su razlike po kojma se prepoznaju i čuvaju u njihovom kontrolnom bloku
(TCB):
pozicuju u izvršavanju – PC
nezavisne adrese pozvanih procedura i finkcija tokom svog izvršavanja – SP i stek
Dakle, sve informacije o niti se svode na kontekst proceosra (dostupni registri), što olakšava
upravlaljanje nitima.
3.3.3. KRE IR ANJ E N ITI
U Linux-u, sistemski pozivom clone() kreira se novi proces nad istim adresnim prostorom
roditelja. Clone() je funkcija koja roditeljskom procesu vraća PID (process ID) deteta niti.
Dispačer može izabrati bilo koji proces, stim što se prelazak izmeĎu niti deteta i roditelja
procesa svodi na promenu pozicije u izvršavanju. Poziv funkcije clone() nije bez argumenta, gde
ovde nisu prokazani zbog sažetosti izlaganja. Na osnovu sl.3.3.1. se može naslutiti da je jedan od
argumenta pokazavač koji pokazuje početnu poziciju izvršavanja kreirane niti.
15
3.3.1.
3.3.4. IM PLMEN TAC IJ A NITI
Da bi aplikacije koristile prednosti niti, programer mora da ugradi niti u program. Svi ozbiljni
objektno orjentisani programski jezici imaju podršku za rad sa nitima u svojim bibliotekama.
Delphi podržava implemntaciju niti sa skupom bibliteka u zavisnosti od potrebe programera.
Primer je klasa Tthread ugraĎena u programski jezik na osnovu koje deklarišemo sopstvene niti.
Pokazaćemo jedan banalan primer korišećenja Create i Execute procedura klase Tthread,
implementirane u novokreiranoj klasi Nit.
Klase, metode, svojstva su tremini koje se koriste u objektno orjentisanim porgramskim
jezicima, drugčije od standradnih starijih jezika u kojima se definišu funkcije i
procedure. Ne baš korektno, klasa je sinonim za objektnu proceduru.
Kod niti:
Type
Nit = class(Tthread); // Nit nasleđuje sve procedure i funkcije iz ugrađene
. // klase Tthread, kao što su procedure Create i
. // Execute
.
procedure Execute; override; // override naredbom se dozvoljava izmena
16
. // procedure Execute ugređene u klasi Tthread
. // koju je nasledila klasa Nit
Procedure Nit.Execute;
var ... // deklarišemo skup promenjivih za našu nit
.
.
begin
.
.
//telo naše niti
.
.
end;
Kod programa koji koristi predhodnu nit:
Program KorišćenjeNiti;
var PrvaNit, DrugaNit:Nit; // PrvaNit i DrugaNit su klase Nit, tj.
// koriste sve osobine klase Nit.
Begin
PrvaNit.Create; // kreira se nit i počinje izvršavanje
// nardebi unutar pocedrue Nit.Execute
DrugaNit.Create; // kreira se još jedna nit koja takođe izvršava
// iste naredbe kao i predhodna
end.
Kada se program KorišćenjeNiti završi, postojaće dve niti nad istim nardebama koje se nalaze
unutar procedure Nit.Execute, tj. Ove niti dele isti ardesni program, uz različite pozicije
izvršavanja usled rasporeĎivanja od strane dipačera operativnog sistema.
3.4. SISTEMI DATOTEKA
U računaru, podaci se mogu obraditi jedino ako se nalaze u operativnoj memoriji. Često je
kapacitet memorije nedovoljan da se svi podaci istovremno nalaze u njoj, pa je potrebno
prebaciti ih na druge medijume radi privremnog čuvanja. Gašenjam računara, podaci postaju
trajno izgubljeni iz memorije, pa se rešenje opet svodi na čuvanje podtaka u medijima
sposobnim za čuvanje podtaka nakon ukidanja napajanja, koje se zovu sekudarne memorije.
Postoje razni medijumi za skladištenje podataka kao što su čvtrsti diskovi, optički diskovi. SSD
(solid state disk) diskovi, magneten trake i drugo. Svakim od ovih ureĎaj upravlja se preko
svojstvenih upravljačkih programa (drajevera) koji komunicira sa operativnim sistemom.
Sa druge strane da bi korisnik koristio podatke, potrebno je ih formirati u razumljivu formu,
odnosno u datoteku. Pronalažanje i organizacija datoteka unutar sekudranih memorija se obavlja
preko specijalne datoteke koje se zove sistem datoteka. Sistem datoteka se nalazi, takoĎe na
istom medijumu kao i podaci za koje je pridružen. Da bi operativni sistem pristupio nekoj
17
datoteci na medijumu, dovoljno je poznavati adresu sistema datoteke u kojoj se nalazi
informacija o poziciji tražene datoteke na tom ureĎaju.
3.4.1. ORGANIZAC IJ A B LOK URE ĐAJ A
Čvrsti diskovi (HDD – Hard disk drive), ili jednostavno disk, se najučestalije koriste kao
sekudrane memorije. Pri podizanju sistema, operativni sistem se iz čvrstog diska upisjue u
operativnu memoriji, pa se nakon toga prelazi na njegovo izvršavanje.
Jedinica prenosa izmeĎu diska se uvek obavlja u blokove koje su veličine od 512 bajtova pa
sistem. Blok je najmanja adresibilna jedinica koju prepoznaje operativni sistem. Sektor je
najmanja adresibilna jedinica koju realno može da adresira disk i kapaciteta je 512 bajtova. Blok
može imati jedan ili vise sektora. Na sl.3.4.1. data je blok šema diska, na kojoj se vidi da su
sektori poreĎani u kružne staze. Rotacijom se glava fokusira na odreĎeni sektor date staze, dok
se horizontalnim pomerajem glave selektuje odreĎena staza.
3.4.1.
18
Disk može imati više diskova čije su obe površine pokrivene magnetnim slojem na kojima se
nalaze glave za čitanje i pisanje. Svi diskovi imaju jednak broj staza, pri čemu su glave diska
meĎusobno fiksirane. To znači da se glave svih diskova nalaze na istim stazama. Staze nad
kojima se u istim trenucima nalaze glave predstavljaju jedan cilindar. Dakle, kad se govori samo
o jednom magnetnom disku, misli se na stazu, a kad se govori o svim magnetnim diskovima,
misli se na cilindar. Datoteke se upisuju na disk tako da uvek nalaze u jednom cilndru. Datoteke
koje se nalaze na dva različita cilndra su fragmentisane, što izaziva dodtano kašnjenje.
Informacije o broju sektora, cilindra i glava se čuva u internoj memoriji diska koju čita
operativni sistem pri inicijalizaciji drajvera. Često je taj podatak sakriven, jer drajver predaje
logičke informacije o organizaciji diska operativnom sistemu. Kada operativni sistem zatraži
podatak sa odreĎenog bloka, drajever diska ga prevodi u realan u kome se upisuje ili čita.
3.4.1.1. Particije diska
Disk se može podeliti na više delova, particija, koje operativni sistem posmatra kao nezavisne
blok ureĎaje. Organizacija diska na particije se uvodi kako bi se omogućilo smeštanje više
operativnih sistema na jednom disku, jedna particija za jedan operativni sistem.
Svaki disk ureĎaj čuva sve potreben informacije o svim particijama u svojoj particionoj tabeli
MBR (Master Boot Sector). Particiona tabela je smeštana na prvom sektoru disk ureĎaja
(sl.3.4.2.). Na osnovu nje se poznaje iz koje particije treba učitati operativni sistem u operativnu
memoriju prilikom podizanja sistema. Sistem podržava konačan broj particija na jednom disku
(uglavnom do četri particije). Da bi omogućili više particija, više logičkih particja se kreira
unutar jedne. Particja koja se koristi kao okvir logičkih particja naziva se proširena particija –
extended.
Sadržaj particje je podeljen na nekoliko celina prema svrsi podtaka koje skladište, prikazane na
sl.3.4.2:
Boot sector – počinje od prvog bloka particje. U njemu se nalazi mikro program za podizanje
operativnog sistema. Ako particija ne sadrži operativni sistem, onda je ovaj deo
prazan.
Volume control block – Superblock deo particje u kome se čuvaju sve bitne informacije o
praticiji. Na primer, veličina particje, lista neispravnih sektora – bad
sectors, pokazivači na sistem datoteka, pokazivač na koreni
direktorijum "/" (root), pokazaivači na prvi prazan blok, itd. Svi
superblokovi aktivnih sistema datoteka se nalaze u operativnoj
memoriji.
19
File system table – sistem datoteka u kojoj se čuvaju sve informacije potrebne da se datoteka
pronaĎe na disku. Sastvani deo sistema datoteka je FCB (File Control
Block) u kojoj se nalaze sve prateće informacije o datoteci
Directory entries – Direktorijumi, folderi, specijalne datoteke koje sadrže listu datoteka čija
imena preslikavaju u indifikacioni broj FCB.
Data – deo particje u kojoj se nalaze podaci i programi. TakoĎe, direktorijumi se nalaze unutar
Data particije.
3.4.2.
3.4.2. PRIM ER I SIS TEM A D ATO TEK A
3.4.2.1. ext3 sistem datoteka
ext3 je sistem datoteka podržan od Linux operativnog sistema. Na sl. 3.4.3. prikazana je jedna
particija sa ext3 sistemom datoteka. Informaciona baza datoteke predstavlja jedan i – node
(indeksni FCB) koji se indetifikuje svojstvenim brojem u tabeli i –nodova. Direktorijumi
predstavljaju specijalne datoteke koje sadrže listu datototeka u kojoj je ime datoteke vezano sa
brojem odgovarjućeg i – noda. i -node sadrži grupu pokazivača u kojima se nalaze adrese
blokova datoteke. Blokovi su kapaciteta 1kB, što je malo da bi se skaldištili podaci većeg
kapaciteta, pa se zbog toga koriste indirektni pokazivači koji pokazuju na blok u kome se nalaze
20
direktni pokazivači na blokove datoteke. Jedan pokazivač je veličine 4B, pa unutar 1kB bloka se
može smestiti 256 pokazivača. Na taj način je omogućen maksimalan kapacitet datoteke do 16
GB.
3.4.3.
3.4.2.1. FAT (File Allocation Table) sistem datoteka
FAT je sistem datoteka korišćen od strane Windows operativnih sistema, mada ga je u novije
vreme zamenio NTFS sistem datoteka. Svaki blok na disku ima svoj broj ulaza u FAT tabeli.
Ovde je FAT tabela, što je za ext3 i –node tabela. Za razliku od ext3, osim broja ulaza u FAT
tabli, direktorijum sadrži sve prateće informacije o datoteci (FCB) prikazanoj na sl.3.4.4. U FAT
tabeli se samo nalazi pokazivač na sledeći blok koji zauzima datoteka. U našem primeru na sl.
3.4.4. prvi sektor datoteke je na 4-tom ulazu u FAT tabeli, pa se prvi podaci nalaze u 4-tom
bloku ureĎaja. Zatim sadržaj 4-tog ulaza pokazuje sledeći blok u nizu tj. 8-mi blok, gde opet
njegov ulaz pokazuje na blok 3 koji pokzuje na blok 6. Ulaz bloka 6 pokazuje na kraj bloka
(EOC), pa se posmatrani podtatak nalazi od početnog do krajnjeg bloka redom: 4, 8, 3, 6. Dakle,
u FAT su podaci povezani u lančanu listu, u kojoj svaki ulaz pokazuje na sledeći ulaz bloka u
nizu. Na osnovu ovakve organizacije sistema datoteka veličina datoteke je neograničena.
21
3.4.4.
3.5. POJAM DATOTEKE
Datoteka (fajl - file) je logička jedinica smeštanja u kojoj se nalaze programi i podaci. Prenos
podtaka izmeĎu različitih tipova ureĎaja se apstrahuje kroz formu datoteke. Kako se skladišti
datoteka na ureĎaju je problem samog ureĎaja i njegovog drajevera. Datotka je u razumljivoj
formi koju prepoznaje korisnik.
Da bi se datoteke koristile u sistemu, treba obezbediti operacije nad njim, kao i prateće
informacije. Računar ili korisnik odraĎuje odreĎene operacije na osnovu informacija o datoteci,
odnosno atributa. Neki atributi datoteke su:
simboličko ime, jedini podatak koji razumljiv korisniku, korisnik pristupa i indetifikuje
datotke preko njenog imena
indentifikator, podatak kojim se datoteka prepoznaje u sistemu, jer računari lakše
komuniciraju preko brojeva
tip, odreĎuje operacije nad datom datotekom i spisak podražanih programa koji njome
upravljaju
lokacija, informacije o ureĎaju i mestu gde se nalazi datoteka
veličina
ostalo, prava pristupa, zaštita ...
22
Atributi se grupišu u posebnu datoteku, kontrolni blok (FCB –File Control Block). Svi FCB svih
datoteka se grupišu u zajedničku tabelu. Svaki FCB ima svoj ulaz u tabeli, preko koje se pristupa
toj datoteci. Ulaz u tabelu je prosto simboličko ime datoteke navedene od korisnika ili programa.
Struktuiran podatak u kome se nalazi lista svih FCB sa svojim ulazima naziva se direktorijum
(katalog, imenik). Dakle, da bi pristupali odreĎenoj datoteci potrebno da operativni sistem učita
direktorijum u operativnoj memoriji, pa iz nje da prihvati FCB iz koje pronalazi poziciju
datoteke na ureĎaju.
Ako bi se upisali svi FCB datoteka u isti direktorijum, direktorijum bi bio nepregledan i
glomazan, pa se direktorijumi organizuju u hijrarhiji stabla na direktorijume i podirektorijume.
Na primer, u Linux-u za ext3, drugi i –node je rezeravisan za koren direktorijum "/", pa kad se
on dovuče iz operativne memorije, čitaju se i-nodovi podirektorijuma korena i tako dalje do
konače putanje datoteke. Ako se jedna datoteka uzastopno čita više puta, neefikasno je da se
stalno prolazi kroz sistem direktorijuma. Umesto toga, koristi se sistemski poziv open() koji
smešta FCB pozvane datoteke u spisak otvorenih datoteka. Spisak otovrenih datoteka se nalazi
u operativnoj memoriji i sadrži tabelu svih otvorenih FCB preko kojih se brže pristupa
datotekama iz sekundarnih memorija. Svako sledeće pristupanje datoteci se ostvaruje preko
indetifikatora koju ima kao ulaz u spisak otvorenih datoteka. Sistemski poziv close() je obrunta
operacija od open() koja briše FCB datoteke iz spiska otovrenih datoteka.
Osim izvršnih datoteka, operativni sistem ne ulazi u tumačenje sadržaja datoteke, već prepušta
programu koji ga je kreirao. Program zahteva od operativnnog sistema pomoću sistemtemskih
poziva pristup odreĎenoj datoteci. Najosnovnije operacije nad datotekama su:
kreiranje
čitanje
upisivanje
brisanje