Вы находитесь на странице: 1из 48

ETF Beograd

Reeni rokovi iz
Operativnih sistema 1
2011-2014

Ispitni rok: jun 2011 (17.6.2011)


1.(3) Dati kratke definicije multiprocesorskog sistema i distribuiranog sistema.
Multiprocesorski sistem ima vie procesora sa delejnom memorijom, tj. veu propusnu mo (vea
koliina uraenog posla u jednici vremena). Distriburani sistem ima skup procesora bez zajednike memorije
povezanih komunikacionom mreom (npr. LAN, WAN, ...)
2.(3) Koji je razlog deobe procesorskog vremena (time sharing) kod interaktivnih sistema?
(Zaokruiti odgovor)
a) Bri odziv na svaku akciju svakog korisnika nego bez deobe vremena.
b) Ravnomerniji odziv na akcije vie korisnika nego bez deobe vremena.
c) Mogunost podrke vie korisnika nego bez deobe vremena.
3.(3) Zato je stek deo konteksta izvravanja programa?
Na stek se prilikom poziva potprograma pamti mesto odakle je potprogram pozvan, kako bi se
izvravanje tamo moglo vratiti. Prilikom povratka iz potprograma uzima se poslednja sauvana adresa
povratka, koja se posle skoka izbacuje sa steka.
4.(3) Napisati deo koda koji obezbeuje kritinu sekciju pomou brojakih semafora, uz dozvolu konkurentnog
izvravanja kritine sekcije do N uporednih procesa.
var mutex : Semaphore = N;
process P:
loop
wait(mutex);
<critical section>
signal(mutex);
<non-critical section>
end
end P;

5.(3) Korienjem sistemskih poziva fork() i execlp() napisati C program koji kreira proces nad programom
u fajlu ije je ime zadato argumentom komandne linije.
void main( int argc, char* argv[] ) {
int pid = fork();
if (pid==0) execlp ( argv[1] );
else {wait(null); exit(0);}
}

Promenljive argv (argument count) i argc (argument vector) su nain pomoi kojih se argumenti
komandne linije prenose u main() u C-u i C++'u. argc je broj stringova koji pokazuju na argv. Promenljivu
pid (process ID) dobijamo od sistemskog poziva fork()koji deli proces na proces-roditelj i proces-dete, kad je
proces-dete vraa 0, a u sluaju proces-roditelja vraa ID deteta. Sistemski poziv execlp() zamenjuje program
pozivajueg procesa drugim programom koji mu zadamo. Ukoliko je proces-dete u pitanju pozivamo
execlp()sa prvim argumentom komandne linije.

2/48

6.(3) Memorija nekog raunara organizovana je stranino, sa stranicom veliine 4KB. Adresibilna jedinica je
bajt, a virtuelna adresa je 32-bitna. Fizika adresa je veliine 32 bita. Ako je PMT organizovana u dva nivoa, s
tim da su veliine polja za broj ulaza u tabele oba nivoa isti, kolika je veliina (u bajtovima) PMT prvog nivoa?
Veliina stranice je:
PAGE = 4kB = 212B
Veliina adresibilne jedinice je:
AU = 1B = 20B
irina stranice je:
OFFSET_S = log2(PAGE/AU) = 12B
Fizika adresa je:
PA_S = 32B
Virtuelna adresa je:
VA_S = 32B
Virtuelna adresa izgleda ovako:
VA(32) = PAGE_L1 + PAGE_L2 + OFFSET(12)
Vidimo da oba polja dele 20 bita u virtuelnoj adresi:
PAGE_L1 + PAGE_L2 = VA(32) - OFFSET(12) = 20B
Poto je veliina polja ista, svako polje ima po 10 bita:
PAGE_L1 = PAGE_L2 => PAGE_L1(10) / PAGE_L2(10)
Konaan izgled virtuelne adrese je:
VA(32) = PAGE_L1(10) : PAGE_L2(10) : OFFSET(12)
Broj ulaza dobijamo iz veliine polja tj. za 10 bita je 210 ulaza (1024).
Veliina jednog ulaza je:
PMT1_ENTRY = log2(PA_S/AU) = 4B
Veliinu PMT prvog nivoa dobijamo kada pomnoimo broj ulaza sa veliinom jednog ulaza:
PMT1_S = 210 * PMT1_ENTRY = 1024 * 4B = 4kB
7.(3) Da li linker prilikom povezivanja sa ciljem dobijanja izvrnog programa (.exe) pravi razliku izmeu
fajlova tipa .obj i tipa .lib?
Ne pravi razliku imaju isti oblik i znaenje oba tipa.
8.(3) Kojom tehnikom se znakovno orijentisani ulazni ureaj moe uiniti logiki (virtuelno) blokovski
orijentisanim?
Tehnikom baferisanja, npr. dvostruki bafer.

3/48

9.(3) Neki proces izvrava redom sledee sistemske pozive. Pod pretpostavkom da korisnik u ije ime se
izvrava ovaj proces ima pravo pristupa do oba fajla i na itanje i na upis, i da oba poziva za otvaranje fajlova
uspevaju, navesti koji od preostalih poziva e biti uspean, a koji neuspean (upisati na liniji pored poziva).
FHANDLE f1 = fopen(x.doc,read);
FHANDLE f2 = fopen(y.doc,read|write);
fread(f1,buffer1,n1);
fwrite(f1,buffer2,n2);
fread(f2,buffer1,n1);
fwrite(f2,buffer2,n2);

_____________
______x_______
_____________
_____________

10.(3) Korienjem podataka iz koje tabele otvorenih fajlova sistem proverava pravo pristupa za pozive iz
prethodnog zadatka (fread i fwrite), u globalnoj tabeli ili u tabeli koja je deo konteksta datog procesa?
Proverava pravo pristupa u tabeli koja je deo konteksta datog procesa.

4/48

Ispitni rok: jul 2011 (8.7.2011)


1.(3) Ako se nad sledeim programom kreira jedan proces, koliko e ukupno procesa biti kreirano (ukljuujui i
taj jedan poetni), pod pretpostavkom da su svi sistemski pozivi uspeli?
const int N=2;
int pid[N];
void main {
for (int i=0; i<N; i++) pid[i] = fork();
}

Odgovor:

Prilikom prvog fork-a imamo proces-roditelj i proces-dete koji dele isti ID (pid[0]) jer fork() vraa
nulu kao vrednost proces-deta. Sledeim pozivom fork-a i proces-roditelj i proces-dete se dele i onda ukupno
imamo 4 procesa.
2.(3) ta je razlika izmeu tekog procesa i niti (thread)?
Odgovor:
Teki proces je izvravanje jednog programa sa spostvenim adresnim prostorm. Nit je jedno izvravanje dela
koda programa unutar adresnog prostora okruujueg procesa.
3.(3) ta je problem sledee implementacije kritine sekcije uposlenim ekanjem?
process P1
begin
loop
while flag2 = true do null end; //Busy wait
flag1 := true;
<critical section>
// Critical section
flag1 := false;
// Exit protocol
<non-critical section>
end
end P1;
process P2
begin
loop
while flag1 = true do null end; // Busy wait
flag2 := true;
<critical section>
// Critical section
flag2 := false;
// Exit protocol
<non-critical section>
end
end P2;

Odgovor:
Ne obezbeuje meusobno iskljuivanje zbog utrkivanja (race condition).

5/48

4.(3) Na jeziku C++ implementirati klasu BoundedBuffer koja realizuje ogranieni bafer elemenata tipa Data
kapaciteta N pomou semafora.
class Data;
const int N = ...;

//kapacitet bafera

class BoundedBuffer {
public:
BoundedBuffer();
void put (Data*);
Data* get (int consumerID);

//konstruktor
//consumerID treba da bude 1 ili 2 (ID potroaa)

private:
Data* buf[N];
//red elemenata ogranienog bafera
int head, tail;
//poetak (glava) i kraj (rep) reda semafori sa sinhronizaciju
Semaphore mutex, spaceAvailable, itemAvailable;
};
BoundedBuffer::BoundedBuffer () :
head(0), tail(0), mutex(1), spaceAvailable(N), itemAvailable(0) {}
void BoundedBuffer::append (Data* d) {
spaceAvailable.wait();
mutex.wait();
buf[tail]=d;
tail=(tail+1)%N;
mutex.signal();
itemAvailable.signal();
}
Data* BoundedBuffer::tail (int myID)
itemAvailable.wait();
mutex.wait();
Data* d = buf[head];
head=(head+1)%N;
mutex.signal();
spaceAvailable.signal();
}

//isto se pie kao i BoundedBuffer::put iz knjige


//ako je bafer pun, ekamo jedno slobodno mesto
//ulazimo u kritinu sekciju (da li je potreban mutex?)
//stavljamo element u bafer
//auriramo indeks poslednjeg elementa
//izlazimo iz kritine sekcije
//signaliziramo da je jo jedan podatak raspoloiv

//varijacija na BoundedBuffer::get iz knjige (bez gate-a)


//ako je bafer prazan, ekamo dok se ne upie podatak
//ulazimo u kritinu sekciju
//itamo podatak iz bafera
//auriramo indeks prvog elementa
//izlazimo iz kritine sekcije
//signaliziramo da ima slobodnog prostora u baferu

5.(3) ta je osnovna razlika izmeu tehnike dinamikog uitavanja i tehnike preklopa (overlays)?
Odgovor:
Dinamiko uitavanje ima tabelu adresa potprograma i uita deo tek u vreme izvravanja, po potrebi.
Sloeni program esto nikada ne izvrava neke svoje delove ili ne koristi neke svoje podatke.
Kod prekolpa, delovi koji se ne koriste u isto vreme se zamenjuju u memoriji, zauzimajui isto mesto .
Kada zatreba neki deo koji nije u memoriji, izbaciti deo sa kojim se preklapa i na njegovo mesto uitati
potrebni.
6.(3) Ukratko objasniti zato je kod segmentne organizacije virtuelne memorije obavezna provera prekoraenja
granice segmenta prilikom svakog adresiranja, a kod stanine organizacije ta provera ne postoji.
Odgovor:
Kod segmentne organizacije blokovi nisu iste veliine i zato se veliina proverava svaki put. Kod
stranine organizacije blokovi su iste veliine pa provera nije potrebna.

6/48

7.(3) U nekom sistemu postoje sledei sistemski pozivi:


int async_write (char* buffer);
void wait (int request_id);

Operacija async_write asinhrono zadaje operaciju izlaza datog niza znakova na neki izlazni ureaj i vraa
interni sistemski identifikator tog zahteva (vei od 0), odnosno kod greke (manji od nula). Operacija wait
suspenduje pozivajui proces sve dok operacija sa datim identifikatorom nije zavrena. Korienjem ovih
sistemskih poziva, realizovati sinhroni izlaz:
int sync_write (char* buffer);

Reenje:
int sync_write (char* buffer) { wait (async_write(buffer) ); }

8.(3) Ukratko objasniti kako se u Unix fajl sistemu definiu prava pristupa do fajla.
Odgovor:
Tri bita (RWX Read, Write, Execute) za vlasnika, grupu i ostale odreuju prava pristupa.
9.(3) Navesti razlog zato bi neki fajl sistem koristio klastere na disku razliite veliine.
Odgovor:
Radi smanjenja interne fragmentacije, npr. manji klaster za manje fajlove i za kraj fajla.
10.(3) Ukratko objasniti ta je inkrementalni, a ta totalni bekap (backup) fajl sistema?
Odgovor:
Totalni bekap kompletno arhivira kopiju. Inkrementalni samo promene od zadatog vremena i datuma.

7/48

Ispitni rok: septembar 2011 (2.9.2011)


1.(3) Ukratko objasniti osnovni motiv nastanka koncepta multiprogramiranja.
Odgovor:
Izvravati vie poslova uporedo. Dok jedan proces eka npr. na izvreetak I/O operacije, CPU obsluuje
neki drugi proces.
2.(3) Zato nije dobro koristiti uposleno ekanje u prekidnoj rutini?
Odgovor:
Dok se ne zavri uposleno ekanje ne moe da se promeni kontekst.
3.(3) Na jeziku C, korienjem sistemskih poziva fork() i execlp() za Unix, napisati program koji pokree
drugi program iz fajla iji je naziv zadat kao parametar komandne linije prvog programa.
Reenje:
void main( int argc, char* argv[] ) {
int pid = fork();
if (pid==0) execlp (argv[1]);
else {wait(null); exit(0);}
}

Promenljive argv (argument count) i argc (argument vector) su nain pomoi kojih se argumenti
komandne linije prenose u main() u C-u i C++'u. argc je broj stringova koji pokazuju na argv. Promenljivu
pid (process ID) dobijamo od sistemskog poziva fork()koji deli proces na proces-roditelj i proces-dete, kad je
proces-dete vraa 0, a u sluaju proces-roditelja vraa ID deteta. Sistemski poziv execlp() zamenjuje program
pozivajueg procesa drugim programom koji mu zadamo. Ukoliko je proces-dete u pitanju pozivamo
execlp()sa prvim argumentom komandne linije.
4.(3) Korienjem standardnih brojakih semafora u kolskom jezgru, na jeziku C++ napisati globalne
deklaracije i inicijalizacije, kao i kod tela dve uporedne niti A i B koje ciklino rade sledee:
A: upisuje vrednost u deljene promenljive x i y, a zatim eka da proces B upie zbir x i y u promenljivu
z iju vrednost ispisuje na standardni izlaz;
B: eka da proces A upie vrednosti u deljene promenljive x i y, zatim ove dve vrednosti sabira i zbir
upisuje u deljenu promenljivu z.
// Globalne deklaracije i inicijalizacije
Semaphore xySem(0);
Semaphore zSem(0);
// Kod tela niti A:
while (1) {
x = ...;
y = ...;
xySem.signal();
zSem.wait();
cout<<z;
}
// Kod tela niti B:
while (1) {
xySem.wait();
z = x+y;
zSem.signal();
}

8/48

5.(3) Zato preklopi (overlays) ne mogu da se koriste ako program ima vie niti koje obezbeuje operativni
sistem? Precizno objasniti.
Odgovor:
Kod preklopa prevodilac generie kod koji proverava da li je taj kod uitan u preklop i uitava ga ako
nije, ali ne zna da li taj kod deo operativnog sistema. Za pravilno funkcionisanje OS-a sve njegove niti moraju
butu uitane za razliku od programa.
6.(3) Potrebno je u nekoj strukturi podataka voditi evidenciju o slobodnim fragmentima memorije kod
kontinualne alokacije sa best fit algoritmom. Koja struktura podataka je efikasnija za implementaciju operacije
dealokacije segmenta memorije koju je zauzimao ugaeni proces: a) dvostruko ulanana lista slobodnih
fragmenata ureenih po veliini ili b) dvostruko ulanana lista slobodnih fragmenata ureenih po poziciji u
memoriji. Kratko obrazloiti.
Odgovor:
Dvostruko ulanana lista slobodnih fragmenata ureenih po poziciji u memoriji je efikasnija zato to
ako se dealocira, vea je verovatnoa da e fragmenti biti jedan pored drugog, dok kod ureenih po veliini
mogue je proi kroz celu listu da bi se oslobodio fragment, to je sporije.
7.(3) Kojom tehnikom se nedeljivi ureaj moe uiniti virtuelno deljivim?
Odgovor:
spooling_________.
8.(3) U fajl podsistemu nekog operativnog sistema ne vodi se tabela otvorenih fajlova za svaki proces, ve
postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim reima, ne postoji nikakva
informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinani proces, ve su sve takve informacije
globalno deljene. Da li pojam pokazivaa trenutne lokacije (kursora) za itanje/upis u fajl ima smisla uvati u
globalnoj tabeli otvorenih fajlova i zato?
Odgovor:
Nema smisla zato to svaki proces mora da ima svoj kursor. Ako bi kursor uvao globalno, dolo bi do
konflikta kada bi vie procesa pristupilo istom fajlu.
9.(3) Dati procenu kompleksnosti u najgorem sluaju datih operacija sa direktorijumom u odnosu na broj
postojeih fajlova n u direktorijumu, za navedene implementacije direktorijuma.
Hash tabela sa dvostruko Dvostruko ulanana lista sa
ulananim listama za
pokazivaima na glavu i rep liste
reavanje kolizija
Pronalaenje ulaza sa datim
O(n)
O(n)
imenom
Brisanje pronaenog ulaza (ne
O(n)
O(n/2)
raunajui pronalaenje po imenu)
10.(3) Neki fajl sistem koristi indeksirani pristup alokaciji fajlova sa indeksima u dva nivoa, blokom veliine
512KB i 64-bitnim adresama fizikih blokova. Kolika je maksimalna veliina fajla u ovom sistemu?
Odgovor:
IndexSize = 512kB = 219 B
BlockNo = 64bit = 8 B
BlockSize = BlockNo * IndexSize = 512kB * 8B = 4 MB = 222
MaxFileSize = (IndexSize + IndexSize * IndexSize) * BlockSize =
= (219 + 219 * 219) * 222 = (219 + 238) * 222 = 241 + 260 260

9/48

Ispitni rok: oktobar 2011 (23.9.2011)


1.(3) Ukratko objasniti osnovni motiv uvoenja raspodele vremena (time sharing) u multiprogramiranje.
Odgovor:
Svaki korisnik ima utisak da raunar opsluuje samo njega sa dovoljno dobrim vremenom odziva, a
raunar opsluuje vie korisnika.
2.(3) Na asembleru nekog zamiljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji
vri uitavanje bloka podataka sa ulaznog ureaja tehnikom programiranog ulaza korienjem prekida.
Samostalno usvojiti potrebne detaljne pretpostavke.
Main:

LOAD
LOAD
LOAD
STORE

R1, #BlockAddr
R2, #Count
R3, #0
[CTRL], #00..1b

//Uitavamo adresu bloka


//Uitavamo broj blokova
//End Fleg
//Start bit

Wait:

CMP
JNZ

R3, #1
Wait

//Proveravamo da li je kraj transfera


//

IntR:

LOAD
STORE
INC
DEC
JNZ
LOAD
STORE
Ret:

R0,[R1]
[DATA],R0
R1
R2
Ret
R3,#1
[CTRL],#0;
iret

//Uitavamo adresu na R0 registar


//i onda je sauvamo u DATA
//Prelazmo na sledei blok
//Smanjimo broj blokova za 1
//Proveravamo da li je na nuli
//i ako jeste postavimo end fleg aktivan
//Stop bit
//Povratak iz interrupt-a

3.(3) Navesti najmanje etiri uzroka zbog kojih proces moe izgubiti procesor. Za svaki od navedenih naina
navesti da li se deava sinhrono (kao posledica operacije koju je izvrio sam proces) ili asinhrono (nezavisno od
izvravanja procesa).
Odgovor:
1) Isteklo dozvoljeno CPU vreme Asinhrono
2) Ne blokirajui sistemski poziv Asinhrono
3) Preuzimanje jer je neki drugi proces postao spreman Asinhrono
4) Ekplicitno Preuzimanje Sinhrono

10/48

4.(3) Korienjem standardnih brojakih semafora u kolskom jezgru, na jeziku C++ u potpunosti realizovati
klasu za ogranieni bafer (bounded buffer).
class Data;
const int N = ...;

//kapacitet bafera

class BoundedBuffer {
public:
BoundedBuffer();
void put (Data*);
Data* get (int consumerID);

//konstruktor
//consumerID treba da bude 1 ili 2 (ID potroaa)

private:
Data* buf[N];
//red elemenata ogranienog bafera
int head, tail;
//poetak (glava) i kraj (rep) reda semafori sa sinhronizaciju
Semaphore mutex, spaceAvailable, itemAvailable;
};
BoundedBuffer::BoundedBuffer () :
head(0), tail(0), mutex(1), spaceAvailable(N), itemAvailable(0) {}
void BoundedBuffer::append (Data* d) {
spaceAvailable.wait();
mutex.wait();
buf[tail]=d;
tail=(tail+1)%N;
mutex.signal();
itemAvailable.signal();
}
Data* BoundedBuffer::tail (int myID)
itemAvailable.wait();
mutex.wait();
Data* d = buf[head];
head=(head+1)%N;
mutex.signal();
spaceAvailable.signal();
}

//isto se pie kao i BoundedBuffer::put iz knjige


//ako je bafer pun, ekamo jedno slobodno mesto
//ulazimo u kritinu sekciju (da li je potreban mutex?)
//stavljamo element u bafer
//auriramo indeks poslednjeg elementa
//izlazimo iz kritine sekcije
//signaliziramo da je jo jedan podatak raspoloiv

//varijacija na BoundedBuffer::get iz knjige (bez gate-a)


//ako je bafer prazan, ekamo dok se ne upie podatak
//ulazimo u kritinu sekciju
//itamo podatak iz bafera
//auriramo indeks prvog elementa
//izlazimo iz kritine sekcije
//signaliziramo da ima slobodnog prostora u baferu

5.(3) Dati primer delova koda dva fajla sa izvornim C/C++ kodom za koje e linker generisati greku tipa
viestrukih simbola i nedefinsanih simbola, pod pretpostavkom da su to jedina dva fajla koja se linkuju.
Odgovor:
// File1.h
int a;
void f() {
a=b;
}
....

|
|
|
|
|
|
|

//File2.h
int a;
void a();
.

11/48

6.(3) Virtuelna memorija nekog raunara organizovana je stranino. Veliina virtuelnog adresnog prostora je
2 MB, adresibilna jedinica je 16-bitna re, a veliina stranice je 128 KB. Veliina fizikog adresnog prostora je
32 MB. Operativni sistem uitava stranice na zahtev, tako to se stranica uitava u prvi slobodni okvir fizike
memorije kada joj se pristupi. Kada se kreira proces, ni jedna njegova stranica se ne uitava odmah, ve tek kad
joj se prvi put pristupi. U poetnom trenutku, slobodni okviri fizike memorije su okviri poev od 10h
zakljuno sa 1Fh. Neki proces generie sledeu sekvencu virtuelnih adresa tokom svog izvravanja (sve
vrednosti su heksadecimalne):
30F00, 30F02, 30F04, 922F0, 922F2, 322F0, 322F2, 322F4, 522F0, 522F2, 402F0, 402F2
Prikazati izgled cele tabele preslikavanja stranica (PMT) za ovaj proces nakon izvravanja ove sekvence. Za
svaki ulaz u PMT prikazati indikator prisutnosti stranice u fizikoj memoriji (0 ili 1) i broj okvira u fizikoj
memoriji u koji se stranica preslikava, ukoliko je stranica uitana; ukoliko nije, prikazati samo ovaj indikator.
Reenje:
Virtuelna adresa je irine:
VA_S = log2(VAS / AU) = log2(2MB / 16bit) = 20 bita
Od ega je za predstavljanje pomeraja (Offset) u okviru stranice odvojeno:
OFFSET_S = log2(PAGE / AU) = log2(128KB / 16bit) = 16 bita
Dakle, za predstavljanje broja stranice je preostalo 4 bita, pa je maksimalan broj stranice Fh:
VA = Page(4):Offset(16)
Najnie 4 cifre heksadekadne virtuelne adrese prestavljaju pomeraj, pa za adresu formata XYYYYh,
cifra X predstavlja broj stranice. Nijedna stranica procesa se na poetku ne nalazi u memoriji, tako da je svaki
put kada pristupamo stranici koja se ne nalazi u memoriji potrebno uraditi sledee:
1) dovui stranicu sa HDD-a u memoriju
2) aurirati odgovarajui broj ulaza u PMT
Ukoliko se stranica ve nalazi u memoriji (zauzima neki okvir), nije potrebno nita uraditi, jer je stranici
ve mogue pristupiti preko vrednosti okvira fizike memorije u koji je smetena.
Poetni izgled PMT-a:
Entry 0 1 2 3 4 5 6 7 8 9 A B C D E F
Flag 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Frame
Poto se na poetku nijedna stranica procesa ne nalazi u memoriji, svi indikatori prisutnosti sranice u
fizikoj memoriji su postavljeni na 0. Za svaku gorenavedenu generisanu virtuelnu adresu je potrebno uraditi
sledee:
1)
Nai broj stranice u okviru koje se nalazi generisana adresa (najvia heksadekadna cifra adrese)
2)
Ako se stranica ne nalazi u memoriji, potrebno ju je uitati u prvi slobodni okvir (na poetku,
prvi slobodni okvir je onaj sa adresom 10h) i aurirati polja Flag i Frame na odgovarajuem
ulazu
3)
Ako se stranica ve nalazi u memoriji, prelazimo na sledeu (ne diramo vrednosti u PMT-u)

12/48

Sekvenca virtuelnih adresa:


1
30F00h ulaz 3 je prazan dovlaimo stranicu broj 3 i smetamo je u okvir broj 10h
2
30F02h stranica 3 je ve uitana u memoriju, pa ne radimo nita
3
30F04h stranica 3 je ve uitana u memoriju, pa ne radimo nita
4
922F0h ulaz 9 je prazan dovlaimo stranicu broj 9 i smetamo je u okvir broj 11h
5
922F2h stranica 9 je ve uitana u memoriju, pa ne radimo nita
6
322F0h stranica 3 je ve uitana u memoriju, pa ne radimo nita
7
322F2h stranica 3 je ve uitana u memoriju, pa ne radimo nita
8
322F4h stranica 3 je ve uitana u memoriju, pa ne radimo nita
9
522F0h ulaz 5 je prazan dovlaimo stranicu broj 5 i smetamo je u okvir broj 12h
10
522F2h stranica 5 je ve uitana u memoriju, pa ne radimo nita
11
402F0h ulaz 4 je prazan dovlaimo stranicu broj 4 i smetamo je u okvir broj 13h
12
402F2h stranica 4 je ve uitana u memoriju, pa ne radimo nita
Konaan izgled PMT-a za dati proces:
Entry 0 1 2 3 4 5 6 7 8 9 A B C D E F
Flag 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0
Frame
10h 13h 12h
11h
7.(3) Navesti tipine operacije apstrakcije blokovski orijentisanog ulazno/izlaznog ureaja sa direktnim
pristupom.
Odgovor:
READ, WRITE, SEEK
8.(3) Neki proces izvrava sistemski poziv za upis u fajl koji je prethodno uspeno otvorio i sistem mu to ne
dozvoljava, sa porukom da tom procesu nije dozvoljena ta operacija, iako je korisniku u ije ime se taj proces
izvrava dozvoljena operacija upisa u taj fajl. Objasnite zato se ovo dogodilo.
Odgovor:
Proces je stvorio fajl u reimu za itanje.
9.(3) ta znai termin presna particija (raw partition)?
Odgovor:
Particija koja ne sadri fajl sistem. Deava se ako fajl sistem nije uspostavljen ili ako je za posebne
namene npr. swap space, baza ...
10.(3) Koliko pristupa blokovima na disku treba izvriti za pristup n-tom logikom bloku sadraja fajla ako je
alokacija fajla a) ulanana lista, b) kontinualna?
Odgovor: a)
n
.
b)
1
.

13/48

Ispitni rok: januar 2012 (22.1.2012)


1.(3) Ukratko objasniti osnovni motiv uvoenja multiprogramiranja u raunarske sisteme.
Odgovor:
Multiprogramiranje se uvodi kako bi se izvrilo vie poslova uporedo. Dok jedan eka na zavretak I/O
operacije , CPU obsluuje neki drugi proces.
2.(3) Na asembleru nekog zamiljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji
vri prenos bloka podataka iz memorije na izlazni ureaj tehnikom programiranog izlaza korienjem
prozivanja (polling). Samostalno usvojiti potrebne detaljne pretpostavke.

Wait:

LOAD R1, #BlockAddr


LOAD R2, #Count
STORE [CTRL], #00..1b

// Uitavamo adresu bloka


// Uitavamo broj blokova
// Start bit

LOAD
AND
JZ
LOAD
STORE
INC
DEC
JNZ
STORE

//
//
//
//
//
//
//
//
//

R0, #Status
R0, R0, #100..0b
Wait
R0,[R1]
[DATA],R0
R1
R2
Wait
[CTRL],#0;

Uitavamo vrednost statusnog registra


Sa AND proveravamo da li je prvi bit 1
Wait ako je nije
Uitavamo adresu na registar R0
i onda je sauvamo u DATA
Prelazimo na sledei blok
Smanjimo broj blokova za 1
proveravamo da li jednak nuli, ako nije vraamo se
End Bit

3.(3) Ukoliko su svi sistemski pozivi izvreni uspeno, koliko procesa se ukupno kreira kada se nad sledeim
programom kreira jedan proces (raunajui i taj jedan)?
void main () {
for (int i=0; i<3; i++) fork();
}

Odgovor:

Petlja se deli svaki put kada se izvri, na i=0 se deli na dve, na i=1 na etiri i na i=2 na osam.
4.(3) Korienjem kolskog jezgra napisati kod klase koja apstrahuje nit koja, ukoliko se kreira sa neparnim
celobrojnim parametrom, kreira jo jednu takvu istu nit, samo sa parnim celobrojnim parametrom, a u
suprotnom se samo zavrava.
Class MyThread: public Thread {
private:
int param;
public:
MyThread(int param);
void run();
}
MyThread:: MyThread(int param) {
this->param=param;
this->start();
}
void Mythread::run() {
if (param%2==1) {
new MyThread(param+1);
}
}

14/48

5.(3) Kada najranije linker moe prijaviti greku tipa nedefinisanog simbola, a kada viestruko definisanog
simbola (tokom prvog prolaza, nakon prvog prolaza, tokom drugog prolaza, ili nakon drugog prolaza)?
Odgovor:

Nakon prvog prolaza

6.(3) U nekom sistemu primenjuje se best-fit algoritam kontinualne alokacije memorije. Inicijalno je prostor
veliine 256KB potpuno slobodan za alokaciju korisnikih procesa. Potom su razliiti procesi zadavali sledee
zahteve (slovna oznaka oznaava proces koji je postavio zahtev, brojna oznaka oznaava veliinu alociranog
prostora u KB, a minus oznaava gaenje procesa i oslobaanje njegove memorije):
A64, B16, C128, D32, A-, E8, F32, BOdgovoriti na sledea pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva:
Koliko je ukupno slobodnih fragmenata? Odgovor:
2
Kolika je veliina najmanjeg slobodnog fragmenta? Odgovor:
Kolika je veliina najveeg slobodnog fragmenta? Odgovor:

AE8
F32
B-

.
8kB
48kB

.
.

A64+B16+ C128+ D32+(Prazno:16kB)


(Prazno:64kB) +B16+ C128+ D32+(Prazno:16kB)
(Prazno:64kB) +B16+ C128+ D32+ E8+ (Prazno:8kB)
F32+(Prazno:32kB) +B16+ C128+ D32+ E8+ (Prazno:8kB)
F32+(Prazno:48kB) + C128+ D32+ E8+ (Prazno:8kB)

7.(3) Virtuelna memorija organizovana je stranino, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna,
stranica je veliine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri emu je polje
za stranienje prvog nivoa veliine 8 bita. Koliki prostor bi ukupno zauzimala PMT nekog procesa kada bi:
a) proces koristio ceo svoj virtuelni adresni prostor? Odgovor:
4MB
.
b) proces koristio samo jednu stranicu? Odgovor:
1kB
.
Veliina stranice je:
PAGE=4kB=212B
Veliina pomeraja je:
OFFSET= log2(PAGE/AU) = 12b
Pa e virtuelna adresa izgledati ovako:
VA(32)=Page(20):Offset(12)
Deskriptor stranice veliine 32 bita, odnosno 4 bajta. PMT ima po jedan ulaz za svaku stranicu, to
znai 220 ulaza po 4 bajta, odnosno 4MB. Kada proces koristio samo jednu stranicu on za stranienje koristi
PMT prvog nivoa, to zani da e zauzimati prostor 28 ulaza puta 4 bajta odnosno 1kB.
8.(3) Umesto tehnike spooling, pristup uporednih procesa tampau u nekom sistemu omoguuje se
meusobnim iskljuenjem pomou operacije rezervacije: svaki proces, pre nego to zatrai bilo koju operaciju
sa tampaem, mora da ga rezervie, a tu rezervaciju otputa tek kada zavri sa celim jednim poslom tampe.
ta je nedostatak ove tehnike?
Odgovor:
Nedostatak je to ne postoji queue za tampa, to zanai da dok jedan proces dri tampa ostali ne
mogu da zadaju posao u queue i da se oslobode.

15/48

9.(3) Neki fajl sistem prua sledee operacije u svom API za tekstualne fajlove:
- FHANDLE open(char* filename)
Otvara fajl sa datim imenom.
- void close(FHANDLE)
Zatvara dati fajl.
- int size(FHANDLE)
Vraa trenutnu veliinu sadraja fajla u znakovima.
- void append(FHANDLE,int)
Proiruje sadraj fajla za dati broj znakova na kraju.
- void seek(FHANDLE,int)
Postavlja kurzor datog fajla na datu poziciju (redni broj
znaka poev od 0).
- void write(FHANDLE,char*)
Na poziciju kurzora datog fajla upisuje dati niz znakova, ne
ukljuujui zavrni znak \0, i pomera kurzor iza upisanog
niza znakova.
Napisati program koji na kraj postojeeg fajla sa imenom proba.txt upisuje sve to je uneseno preko
standardnog ulaza, sve dok se na ulazu ne unese znak X. Zanemariti sve potencijalne greke u ulazu/izlazu.
Reenje:
#define incr 50
void main() {
fhandle file=open("proba.txt");
char c;
int position=size(file);
while((c=getchar())!='x') {
if(position==size(file)) {
append(file,size++);
}
write(file,&c);
position++;
}
write(file,"\0");
}

//Otvaranje txt fajla


//Poziciju za unos stavljamo na kraj
//Dokle god nije uneseno x
//Ukoliko je unos stigao do kraja fajla
//poveaj veliinu fajla za jedan
//Unesi tekst
//Inkrementiraj poziciju
//Unesi znak za kraj fajla

10.(3) Koliko pristupa blokovima na disku treba izvriti za pristup n-tom logikom bloku sadraja fajla ako je
alokacija fajla a) FAT, pri emu je FAT uvek inicijalno uitana u memoriju prilikom montiranja fajl sistema, b)
indeksna, pri emu je ceo indeks fajla u jednom bloku?
Odgovor: a)
1
. b)
2
.

16/48

Ispitni rok: februar 2012 (12.2.2012)


1.(3) Na asembleru nekog dvoadresnog RISC procesora sa LOAD/STORE arhitekturom napisati prevod
sledee funkcije:
int log (int n) {
if (n<2) return 0;
else return 1+log(n/2);
}

Odgovor:
LOG:

LOAD
CMP
JMPL
THEN: LOAD
POP
ELSE: DIV
PUSH
CALL
POP
LOAD
ADD
POP

R1, #N[SP]
R1, #2
ELSE
R0, #0
PC
R0, R1, #2
R0
LOG
R1
R1, #N[SP]
R0, R1, #1
PC

//
//
//
//
//
//
//
//
//
//
//
//

R1=n
if (n<2)
else
R0=0
return 0
R0=R1/2 => (n/2)
Ucitaj u LOG => log(n/2)
R1=log(n/2)
R0=1+log(n/2)
return 1+log(n/2)

2.(3) Na koji nain se u programu koga izvrava procesor moe znati da je DMA zavrio operaciju koja mu je
zadata?
Odgovor:
1) Ispitivanjem indikatora u statusnom registru DMA (busy waiting).
2) Signal zavretka prenosa generie procesoru zahtev za prekid.
3.(3) Navesti najmanje tri sluaja (uzroka) u kojima tekui proces gubi procesor.
Odgovor:
1) Isteklo dozvoljeno CPU vreme
2) Ne blokirajui sistemski poziv
3) Preuzimanje jer je neki drugi proces postao spreman
4) Ekplicitno Preuzimanje (yield, dispatch)
4.(3) Proces P treba da saeka da sva tri procesa X, Y i Z ispune neki svoj uslov, u bilo kom redosledu. Napisati
deo koda procesa P i bilo kog od druga tri procesa, uz potrebne deklaracije, koji obezbeuju ovu uslovnu
sinhronizaciju pomou jednog standardnog brojakog semafora.
Reenje:
Semaphore::sem (0);
int counter = 0;
void P() {
....
sem.wait();
....
}

void X() {
....
lock();
counter++;
if (counter==3) sem.signal();//kada su sva tri
unlock();
//uslova ispunjena
}
//signal

17/48

5.(3) Dat je fajl sa sledeim sadrajem:


float base = 2.0;
float log(float);
float ln(float);
float log(float x) {
return ln(x)/ln(base);
}

Koliko nerazreenih adresnih polja instrukcija prevodilac ostavlja u ovom fajlu?


Koje simbole izvozi ovak fajl?
log, base
.
Koje simbole uvozi ovaj fajl?
ln
.

6.(3) Navesti osnovne slinosti i osnovne razlike izmeu tehnike dinamikog uitavanja memorije i preklopa
(overlays).
Odgovor:
Dinamiko uitavanje ima tabelu adresa potprograma i uita deo tek u vreme izvravanja, po potrebi.
Sloeni program esto nikada ne izvrava neke svoje delove ili ne koristi neke svoje podatke.
Kod prekolpa, delovi koji se ne koriste u isto vreme se zamenjuju u memoriji, zauzimajui isto mesto .
Kada zatreba neki deo koji nije u memoriji, izbaciti deo sa kojim se preklapa i na njegovo mesto uitati
potrebni.
7.(3) Virtuelna memorija organizovana je stranino, a adresibilna jedinica je bajt. Virtuelna adresa je 32-bitna,
stranica je veliine 4KB, deskriptor stranice je 32-bitni, a PMT je organizovana u dva nivoa, pri emu je polje
za stranienje prvog nivoa veliine 8 bita. U koje ulaze PMT prvog nivoa i drugog nivoa se preslikava stranica
broj 5423Dh?
Odgovor: Prvog 54 . Drugog 0
.
Veliina polja za stranienje prvog nivoa je veliine 8 bita, to znai da imamo 255 ulaza u PMT prvog
nivoa. Poto broj ulaza se odreuje na osnovu broja stranice, imamo prostor za samo prve dve cifre (5423Dh).
Poto poto prvi nivo upuuje na drugi a on je prazan, moemo staviti na prvi slobodan ulaz (0) drugog nivoa.
8.(3) Ukratko objasniti princip dvostrukog baferisanja kod ulazno-izlaznih operacija.
Odgovor:
Proizvoa upisuje u prvi bafer dok potroa ita iz drugog. Kada oba zavre baferi zamenjuju uloge.
9.(3) Da li je veliina fajla ograniena ako je nain alokacije blokova za fajlove na disku:
1) ulanani
NE
.
2) indeksirani
DA
.
10.(3) Neki fajl sistem koristi indeksirani pristup alokaciji blokova za fajlove na disku, sa kombinovanom
tehnikom indeksiranja u jednom, dva i tri nivoa, kao kod UNIX inode strukture. Pretpostavljajui da disk ima
uniformno srednje vreme pristupa do bilo kog bloka na disku, da li je vreme pristupa do razliitih delova veoma
velikih fajlova jednako? Ako jeste, precizno objasniti zato jeste, a ako nije, objasniti kako se i zato razlikuje.
Odgovor:
Nije. Vreme pristupa raste za blokove blie kraju veoma velikog fajla, jer se za pristup do njih mora
prolaziti kroz viestepene indekse. Pristup do delova bliim poetku fajla je bri jer prolazi sam kroz
jednostepeni indeks.

18/48

Ispitni rok: jun 2012 (15.6.2012)


1.(3) ta je to sistem sa raspodelom vremena (engl. time-sharing)?
Odgovor:
To je sistem u kome OS dodeljuje vreme svakom poslu i relativno esto preuzima procesor. Posao moe
da ostane u CPU na maksimalno dodeljeno vreme, a moe i manje ako doe do promene konteksta.
2.(3) Na asembleru nekog zamiljenog RISC procesora sa LOAD/STORE arhitekturom napisati
prevod sledee rekurzivne funkcije:
int f (int n)
{
if (n<=0) return 0;
else return f(n-1)+1;
}

Reenje:
F:

LOAD
CMP
JMPL
THEN: LOAD
POP
ELSE: SUB
PUSH
CALL
POP
LOAD
ADD
POP

R1, #N[SP]
R1, #0
ELSE
R0, #0
PC
R0, R1, #1
R0
F
R1
R1, #N[SP]
R0, R1, #1
PC

//R1=n
//(n<=0)
//skok na else
//R0=0
//return 0
//R0=n-1
//
//return f
//
//R1= f(n-1)
//f+1
//return f(n-1)+1

3.(3) Ukoliko su svi sistemski pozivi izvreni uspeno, koliko procesa se ukupno kreira kada se nad sledeim
programom kreira jedan proces (raunajui i taj jedan)?
void main () {
for (int i=0; i<7; i++) if (fork()>0) return;
}

Odgovor:

Petlja e kreirati samo proces-decu poto ako fork vrati ID roditelja (odnosno vei od nule) proces e
biti ukinut.
4.(3) Korienjem standardnih brojakih semafora napisati kod dva uporedna procesa koji sarauju na sledei
nain. Proces A upisuje jednu vrednost u deljenu promenljivu x, koju proces B potom ita. Tek kada je B
proitao tu vrednost, proces A upisuje novu vrednost u x, koju proces B onda ita, i tako ciklino.
Semaphore::semA(0);
Semaphore::semB(0);
//kod tela A

//kod tela B

while(1){
x=...;
semB.signal();
semA.wait();
}

while(1){
semB.wait();
x=...;
semA.signal();
}

19/48

5.(3) Neki program koristi dve velike strukture podataka naizmenino: najpre za neku sloenu
obradu koristi samo prvu strukturu, pa onda za neku drugu obradu koristi samo drugu strukturu, pa onda
ponovo prvu, pa drugu itd. Ako se ove dve strukture uitavaju dinamiki i preklapaju se (kod korienja
preklopa, overlays), u kom sluaju e izvravanje tog programa trajati due, a u kom e koristiti vie memorije:
kada se koristi samo dinamiko uitavanje, ili kada se koriste preklopi? Kratko obrazloiti.
Odgovor:
Kod preklopa izvravanje je zbog naina uitavanja, a dinamiko uitavanje e koristiti vie memorije.
6.(3) Neki sistem primenjuje kontinualnu alokaciju memorije i best-fit algoritam alokacije, pri emu su
segmenti slobodne memorije organizovani u sledeu strukturu podataka:
a) sortiranu ulananu listu, b) balansirano binarno stablo.
Koliko segmenata treba obii u najgorem sluaju da bi se pronaao odgovarajui slobodan segment prilikom
alokacije, ukoliko je slobodnih segmenata n?
Odgovor: a)
n
. b)
log2n
.
7.(3) Uestanost pogotka u TLB je 90%, a PMT je organizovana u dva nivoa. TLB je 10 puta bra nego
operativna memorija. Koliko je efektivan pristup memoriji sporiji od pristupa fizikoj memoriji?
Odgovor:
13%
.
Raun:
Efektivnost pristupa se rauna:
Uestanost pogotka*(TLB+Operativna mem) + Ostatak * (TLB+((nivo+1)*Operativna mem))
90% * (1 + 10) + 10%*(1 + 3*10) = 0,9*11 + 0,1*31 = 13%
8.(3) Navesti osnovne operacije klase blokovski orijentisanih ureaja sa direktnim pristupom.
Odgovor:
Read, Write, Seek
9.(3) Neki fajl sistem prua sledee operacije u svom API za tekstualne fajlove:
- int size(FHANDLE)
Vraa trenutnu veliinu sadraja fajla u znakovima.
- void append(FHANDLE,int)
Proiruje sadraj fajla za dati broj znakova na kraju.
- void seek(FHANDLE,int)
Postavlja kurzor datog fajla na datu poziciju (redni broj
znaka poev od 0).
- void write(FHANDLE,char*,int size) Na poziciju kurzora datog fajla upisuje dati niz znakova
zadate duine, i pomera kurzor iza upisanog niza znakova.
Operacije seek i write rade samo u opsegu trenutne veliine sadraja fajla (ne pomeraju kurzor i ne
upisuju iza kraja sadraja fajla). Napisati operaciju write(FHANDLE,int position,char*,int size);
koja na zadatu poziciju upisuje zadati niz znakova date veliine, pri emu se fajl implicitno najpre
proiruje na potrebnu veliinu ukoliko bi zadata pozicija ili zadati upis prekoraio trenutnu veliinu sadraja
fajla. Zanemariti sve mogue greke u ulazu/izlazu.
Reenje:
write(FHANDLE,int position,char*,int size){
if(position+size>size(f))
append(f,position+size-size(f)+1);
seek(f,position);
write(f,buffer,size);
}

10.(3) Koliko pristupa blokovima na disku treba izvriti za pristup n-tom logikom bloku sadraja fajla ako je
alokacija fajla a) ulanana lista blokova, pri emu na prvi blok sadraja fajla ukazuje polje u FCB, b) indeksna,
pri emu je indeks fajla uvek u dva nivoa, a na blok sa indeksom prvog nivoa ukazuje polje u FCB? FCB fajla
je u memoriji.
Odgovor: a)
n
.b)
2
.
20/48

Ispitni rok: jul 2012 (6.7.2012)


1.(3) ta je to multiprocesorski sistem, a ta distribuirani sistem? Navesti po jedan primer svakog.
Odgovor:
Multiprocesorski sistem ima vie procesora sa delejnom memorijom, tj. veu propusnu mo (vea
koliina uraenog posla u jednici vremena). Primer multiprocesorskog sistema moe biti randa stanica ili server
za neku obradu podataka. Distriburani sistem ima skup procesora bez zajednike memorije povezanih
komunikacionom mreom (npr. LAN, WAN, ...). Primer distribuiranog sistema moe biti superkompjuteri ili
"cloud" sistemi.
2.(3) Korienjem funkcija setjmp i longjmp iz standardne C biblioteke realizovati operaciju wait na
brojakom semaforu u kolskom jezgru.
Reenje:
void Semaphore::wait () {
lock();
if(event==0){
event=-1
if(setjmp(Thread::runningThread->context)==0)
{
blocked.put(thread::runningThread);
Thread::runningThread=Scheduler::get();
longjmp(Thread::runningThread->context,1);
}
else return;
}
unlock();
}

3.(3) Navesti najmanje tri sluaja (povoda) u kojima proces gubi procesor i prelazi u red spremnih (ready) i
naznaiti da li se to deava kao posledica sistemskog poziva tog procesa ili spoljanjeg prekida.
Odgovor:
1) Isteklo dozvoljeno CPU vreme Asinhrono
2) Ne blokirajui sistemski poziv Asinhrono
3) Preuzimanje jer je neki drugi proces postao spreman Asinhrono
4) Ekplicitno Preuzimanje (yield, dispatch) Sinhrono
4.(3) Ogranieni bafer je implementiran pomou brojakih semafora na sledei nain (ostatak klase je
definisana na oigledan nain, kao na predavanjima). ta je problem sa ovom implementacijom?
void BoundedBuffer::append (Data* d) {
mutex.wait();
spaceAvailable.wait();
buffer[tail] = d;
tail = (tail+1)%N;
itemAvailable.signal();
mutex.signal();
}

Odgovor:
Ako je buffer pun a producer pokua da upie podatak, zablokirae se i nikada se nee odblokirati. Da bi
implementacija radila pravilno treba mutex.wait() i spaceAvailable.wait(); kao i
itemAvailable.signal(); i mutex.signal(); da zamene mesta.

21/48

5.(3) Po emu se razlikuje posao linkera kada je njegov proizvod izvrivi program od onoga kada je to
biblioteka? Odgovor:
Drugaiji je proizvod, kod je binarni exe, nema zaglavlje, nema nerazreene adresne delove instrukcija,
liba ima zaglavlje, moe da ima nerazreene delove instrukcija i moe da tolerie nerazreene simbola.
6.(3) Virtuelni adresni prostor sistema je 4GB, adresibilna jedinica je bajt, a virtuelni adresni prostor je
organizovan stranino sa stranicom veliine 16KB. Fiziki adresni prostor je veliine 1GB. Tabele
preslikavanja stranica su organizovane u dva nivoa, s tim da tabela prvog nivoa ima 2K ulaza. Prikazati logiku
strukturu virtuelne adrese i oznaiti irinu svakog polja. Oznaiti i podelu polja za broj stranice na polja za
indeksiranje PMT prvog i drugog nivoa.
Odgovor:
Veliina virtuelnog adresnog prostora je:
VAS = 4 GB = 232 B
Veliina fizikog adresnog prostora je:
PAS = 1 GB = 230 B
Veliina adresibilne jedinice je:
AU = 1 B = 20 B
Veliina stranice (okvira) je:
PAGE = 16 KB = 214 B
irina virtuelne adrese je:
VA_S = log2(VAS / AU) = 32 bita
irina fizike adrese je:
PA_S = log2(PAS / AU) = 30 bita
irina pomeraja (Offset) unutar stranice/okvira:
OFFSET_S = log2(PAGE / AU) = 14 bita
Virtuelna adresa se sastoji od odreenog broja bita koji odreuju broj stranice u virtuelnom adresnom
prostoru i odreenog broja bita koji odreuju pomeraj unutar te stranice. Ve smo utvrdili da je za
predstavljanje pomeraja potrebno odvojiti 14 bita, pa je za predstavljanje broja stranice potrebno:
VA_S - OFFSET_S = 32 bita - 14 bita = 18 bita
Jedan deo od tih 18 bita se koristi za indeksiranje PMT-a prvog nivoa, a preostali za indeksiranje PMT-a
drugog nivoa. Tabela prvog nivoa ima 2K = 211 ulaza, pa je za indeksiranje PMT-a prvog nivoa potrebno:
VA_L1_S = log2(2K) = 11 bita
Za indeksiranje PMT-a drugog nivoa je onda potrebno:
VA_L1_S = VA_S - OFFSET_S - VA_L1_S = 7 bita
Dakle, logika struktura virtuelne adrese je:
VA(32) = Page_L1(11):Page_L2(7):Offset(14)
7.(3) Neki sistem sa straninom organizacijom memorije koristi tehniku copy on write. Jedan proces je tek
kreirao drugi proces pozivom fork(). Ako novokreirani proces odmah po pokretanju izvri operaciju upisa u
memoriju, koji izuzetak e generisati procesor, page fault ili neki drugi i koji? Precizno objasniti zato i kako.
Odgovor:
Pri pozivu fork(), proces-dete deli sve stranice sa roditeljem, nema kopiranja adresnog prostora i sve
stranice dozvoljene za upis se inicijalno oznae kao copy on write i sve dok proces pristupa stranici samo za
itanje, ona moe da ostane deljena. Kada proces prvi put upisuje u neku stranicu oznaenu kao copy on
write, stranica se kopira i prestaje da bude deljena, posebno se mapira i oznaava kao privatna. Generie
page fault unapred, pre nego to instrukcija promeni neku vrednost u memoriji. Upotrebljavaju se posebni
registri za smetanje starih vrednosti lokacija koje se menjaju. Ukoliko nastane page fault, CPU vraa stare
vrednosti u promenjene lokacije.
22/48

8.(3) Na asembleru nekog zamiljenog RISC procesora sa LOAD/STORE arhitekturom napisati program i
prekidnu rutinu koja prenosi blok podataka zadate duine sa zadate adrese na izlazni ureaj korienjem
programiranog ulaza/izlaza sa prekidom.
Reenje:
Main:

LOAD
LOAD
LOAD
STORE

R1, #BlockAddr
R2, #Count
R3, #0
[CTRL], #00..1b

//Uitavamo adresu bloka


//Uitavamo broj blokova
//End Fleg
//Start bit

Wait:

CMP
JNZ

R3, #1
Wait

//Proveravamo da li je kraj transfera


//

IntR:

LOAD
STORE
INC
DEC
JNZ
LOAD
STORE
Ret:

R0,[R1]
[DATA],R0
R1
R2
Ret
R3,#1
[CTRL],#0;
iret

//Uitavamo adresu na R0 registar


//i onda je sauvamo u DATA
//Prelazmo na sledei blok
//Smanjimo broj blokova za 1
//Proveravamo da li je na nuli
//i ako jeste postavimo end fleg aktivan
//Stop bit
//Povratak iz interrupt-a

9.(3) ta je po vaem miljenju osnovna svrha (motiv) postojanja koncepta tekueg direktorijuma procesa?
Odgovor:
Motiv je staza do fajla. Svaki proces ima svoj tekui dirketorijum koji moe promeniti sistemskim
pozivom. Otvaranje fajla samo po imenu trai fajl u tekuem direktorijumu. Fajl se moe zadati i zadavanjem
pune staze od korena stabla direktorijuma ili relativnom stazom u odnosu na tekui direktorijum.
10.(3) Zato fajl sistemi po pravilu pokuavaju da alociraju susedne blokove na disku za sadraj istog fajla, ak
i ako to nije neophodno za datu alokaciju (ulananu ili indeksnu)?
Zbog breg pristupa, pri alociranju susednih blokova za isti fajl vreme pristupa je krae.

23/48

Ispitni rok: septembar 2012 (31.8.2012)


1.(3) Kod kakvih sistema se najpre pojavljuje time sharing i sa kakvim motivom?
Odgovor:
Time sharing se pojavljuje kod interaktivnih viekorisnikih sistema. Motiv je kad istekne deljeno
vreme nekog procesa oduzme mu se CPU i dodeli nekom drugom procesu. Tako spreavamo izgladnjivanje
procesa.
2.(3) Korienjem funkcija setjmp i longjmp iz standardne C biblioteke realizovati operaciju wait na binarnom
semaforu u kolskom jezgru.
Reenje:
void Semaphore::wait(){
lock(lck);
if(--val<0){
if(setjmp(Thread::runningThread->context)==0){
blocked.put(thread::runningThread);
Thread::runningThread=Scheduler::get();
longjmp(Thread::runningThread->context,1);
}
else return;
}
unlock(lck);
}

3.(3) Korienjem sistemskih poziva fork() i execlp() napisati program P koji pokree proces nad programom u
fajlu iji je naziv zadat kao argument izvravanja programa P.
Reenje:
void main( int argc, char* argv[] ) {
int pid = fork();
if (pid==0) execlp ( argv[1] );
else {wait(null); exit(0);}
}

4.(3) Proces P treba da saeka da sva tri procesa X, Y i Z ispune neki svoj uslov, u bilo kom redosledu. Napisati
deo koda procesa P i bilo kog od druga tri procesa, uz potrebne deklaracije, koji obezbeuju ovu uslovnu
sinhronizaciju pomou jednog standardnog brojakog semafora.
Reenje:
Semaphore::sem (0);
int counter = 0;
void P() {
....
sem.wait();
....
}

void X() {
....
lock();
counter++;
if (counter==3) sem.signal();
unlock();
}

5.(3) Koja dva podatka ine memorijski kontekst procesa kod kontinualne alokacije memorije za proces sa
dinamikim preslikavanjem adresa?
Odgovor:
Realocation registar i Limit registar.
24/48

6.(3) Virtuelni adresni prostor sistema je 8GB, adresibilna jedinica je 16-bitna re, a virtuelni adresni prostor je
organizovan stranino sa stranicom veliine 32KB. Fiziki adresni prostor je veliine 2GB. Tabele
preslikavanja stranica su organizovane u dva nivoa, s tim da tabela drugog nivoa ima 1K ulaza. Ako deskriptori
u PMT i prvog i drugog nivoa sadre samo broj okvira u koji se stranica preslikava i nita vie (posebna
vrednost oznaava da preslikavanje nije mogue), koliko bajtova zauzima jedna PMT prvog, a koliko drugog
nivoa?
Odgovor:
VAS= 8GB = 233 B
PAS = 2GB = 231 B
AU = 16 bit = 2B = 21 B
PAGE= 32 kB = 215 B
irina virtuelne adrese je:
VA_S= log2(VAS/AU)=32 bit
irina fizicke adrese je:
PA_S = log2(PAS/AU) = 30 bit
irina stranice je:
OFFSET= log2(PAGE/AU) = 14 bit
Za predstavljanje broja stranice potrebno:
VA_S - OFFSET = 18 bit
Za indeksiranje PMT-a drugog nivoa je onda potrebno:
VA_L2_S = log2(1k) = 10 bit
Za indeksiranje PMT-a prvog nivoa je onda potrebno:
VA_L1_S = 18 bit 10 bit = 8 bit => iz toga dobijamo da je broj ulaza 28 odnosno 256 ulaza.
Jedan ulaz u PMT prvog nivoa sadri fiziku adresu poetka PMT-a drugog nivoa,pa je on veliine:
PMT1_ENTRY = [PA_S / AU] * AU = [30bit/16bit] * 2B = 3.75B
Ukupna veliina PMT prvog nivoa je:
PMT1_S = 3.75 * 256 ulaza = 960B
Veliina ulaza u PMT drugog nivoa je:
PMT2_ENTRY_S = PA_S - offset = 16 bit = 2B
Ukupna veliina PMT drugog nivoa je:
PMT2_S = 1k * 2B = 2kB
7.(3) Zaokruiti slovo ispred one ili onih podataka koji nisu neophodni u deskriptoru stranice u PMT koji koristi
hardver za preslikavanje adresa kod virtuelne memorije:
a)
Informacija da preslikavanje nije mogue izvriti.
b)
Adresa bloka na disku u kome se nalazi stranica.
c)
Informacija da je stranica deljena sa drugim procesom tehnikom copy-on-write.
d)
Informacija da je stranica zabranjena za izbacivanje jer se koristi kao I/O bafer.
e)
Da li je dozvoljen upis u stranicu?
f)
Broj okvira u koji se stranica preslikava.
25/48

8.(3) Na asembleru nekog zamiljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji
prenosi blok podataka zadate duine na zadatu adresu sa ulaznog ureaja korienjem programiranog
ulaza/izlaza sa prozivanjem (polling).
Reenje:

Wait:

LOAD R1, #BlockAddr


LOAD R2, #Count
STORE [CTRL], #00..1b

// Uitavamo adresu bloka


// Uitavamo broj blokova
// Start bit

LOAD
AND
JZ
LOAD
STORE
INC
DEC
JNZ
STORE

//
//
//
//
//
//
//
//
//

R0, #Status
R0, R0, #100..0b
Wait
R0,[R1]
[DATA],R0
R1
R2
Wait
[CTRL],#0;

Uitavamo vrednost statusnog registra


Sa AND proveravamo da li je prvi bit 1
Wait ako je nije
Uitavamo adresu na registar R0
i onda je sauvamo u DATA
Prelazimo na sledei blok
Smanjimo broj blokova za 1
proveravamo da li jednak nuli, ako nije vraamo se
End Bit

9.(3) U fajl podsistemu nekog operativnog sistema ne vodi se tabela otvorenih fajlova za svaki proces, ve
postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim reima, ne postoji nikakva
informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinani proces, ve su sve takve informacije
globalno deljene. Kako treba da izgleda API funkcija za itanje bloka podataka duine len iz nekog fajla, da bi
se procesu obezbedila mogunost sekvencijalnog itanja svih podataka iz fajla?
Odgovor:
io status read file(FileHandle fh, void*buffer, unsigned long len);

10.(3) Posmatra se disk kapaciteta 80MB i blokom veliine 1KB. Ako se za evidenciju slobodnog prostora
koristi bit-vektor sa maksimalnom kompakcijom (svih 8 bita u bajtu su iskorieni itd.), koliko celih blokova
treba zauzeti na disku za smetanje ovog vektora?
Odgovor:
Veliinu celog vektora dobijamo kada podelimo kapacitet diska sa veliinom bloka:
80MB/1kB = 80*(220b/210b) = 80kB
Zatim veliinu svih blokova dobijamo kada dalje podelimo veliinu celog vektora sa bit-vektorom:
80kB/8b = 10kB
Ovu vrednost podelimo sa veliinom bloka i dobijamo konaan broj blokova:
10kB/1kB = 10 blokova

26/48

Ispitni rok: oktobar 2012 (21.9.2012)


1.(3) ta je multiprocesorski, a ta distribuirani sistem?
Odgovor:
Multiprocesorski sistem ima vie procesora sa delejnom memorijom, tj. veu propusnu mo (vea koliina
uraenog posla u jednici vremena). Distriburani sistem ima skup procesora bez zajednike memorije povezanih
komunikacionom mreom (npr. LAN, WAN, ...)
2.(3) Data je operacija yield(jmp_buf old, jmp_buf new) koja uva kontekst niti iji je jmp_buf dat kao
prvi argument, oduzima joj procesor i restaurira kontekst niti iji je jmp_buf dat kao drugi argument, kojoj
predaje procesor. Koristei ovu operaciju, realizovati operaciju dispatch() koja ima isti efekat kao i ona data u
kolskom jezgru.
Reenje:
Thread::dispatch(){
lock();
jmp_buf old=Thread::runningThread->context;
Scheduler::put(Thread::runningThread);
Thread::runningThread=Scheduler::get();
yeald(old,Thread::runningThread->context);
unlock(lck);
}

3.(3) Kako se u kodu koji se izvrava nakon sistemskog poziva fork() moe znati da li se taj kod izvrava u
kontekstu procesa-roditelja ili procesa-deteta? Objasniti i dati primer.
Odgovor:
Moe se znati po tome to fork() vraa ID deteta roditelju, a NULL detetu.
int ID=fork();
if (ID>0){//Roditelj}
else if (ID==0){//Dete}
else {//Greka}

4.(3) Napisati kod jednog od dva procesa koji pristupaju kritinoj sekciji sa meusobnim iskljuenjem pomou
uposlenog ekanja (busy waiting) Petersonovim algoritmom.
Reenje:
process P1
begin
loop
flag1:=true; turn:=2;
// Announce intent to entry
while flag2 and turn=2 do null end; // Busy wait
<critical section>
// Critical section
flag1 := false;
// Exit protocol
<non-critical section>
end
end P1;

5.(3) Date su sledee deklaracije u jednom izvornom C fajlu. Koji od ovih simbola e biti oznaeni kao
izveeni", a koji kao uveeni" u .obj fajlu?
extern int a(int);
Odgovor:
Izveeni: B, E, F
.
void b(int);
void b(int) {}
void c(int);
extern int d; static int e;
int f;

Uveeni:

27/48

A, C, D

6.(3) Neki sistem koristi kontinualnu alokaciju operativne memorije. Data je deklaracija strukture podataka koja
predstavlja zaglavlje svakog slobodnog fragmenta memorije. Ova zaglavlja ine dvostruko ulananu listu
slobodnih fragmenata i upisuju se na sam poetak svakog slobodnog fragmenta memorije. Napisati telo
funkcije getFirstFitFragment() koja treba da pronae fragment slobodne memorije veliine date
argumentom po first-fit algoritmu i vrati njegovu adresu. Preostali deo fragmenta treba da postane novi (manji)
fragment u listi slobodnih.
typedef unsigned int size_t;
struct FreeFragment {
size_t size;
// Veliina fragmenta u jedinicama sizeof(char)
FreeFragment* prev;
// Prethodni u listi
FreeFragment* next;
// Sledei u listi
}
FreeFragment* head;
// Glava liste slobodnih fragmenata
void* getFirstFitFragment(size_t);

Reenje:
void* getFirstFitFragment (size_t sz){
for (FreeFragment* cur = head; cur!=0; cur=cur->next) {
if (cur->size<sz) continue;
// set pointer to the first byte of the remaining free fragment

FreeFragment* newfrgm = (FreeFragment*)((char*)cur+sz);


if (cur->prev) cur->prev->next = newfrgm;
else head = cur->next;
if (cur->next) cur->next->prev = newfrgm;
newfrgm->prev = cur->prev;
newfrgm->next = cur->next;
newfrgm->size = cur->size-sz;
return cur;
}
return 0;
}

7.(3) Objasniti ta je osnovni motiv i pogodnost tehnike stranienja u vie nivoa u odnosu na stranienje u
jednom nivou?
Odgovor:
Osnovni motiv je vei kapacitet virtuelne memorije.
8.(3) Kojom tehnikom se fiziki nedeljivi izlazni ureaj moe uiniti logiki (virtuelno) deljivim izmeu
procesa koji ga uporedo koriste?
Odgovor:
spooling
.
9.(3) Neki proces otvara neki fajl samo za itanje, iako vlasnik" tog procesa ima i pravo upisa u taj fajl. Da li
se informacija da je taj proces otvorio taj fajl samo za itanje uva u tabeli otvorenih fajlova koja je globalna za
sve procese, ili u onoj koja je lokalna za taj proces?
Odgovor:
Lokalno za taj proces
.

28/48

10.(3) Neki fajl sistem koristi indeksiranu alokaciju fajlova na disku sa jednostrukim indeksom. Ako se
pretpostavlja da je prostor za smetanje fajlova (ukljuujui i njihove indekse) na disku veliine 32 GB, veliina
klastera (jedine jedinice alokacije) 2 KB, i ceo prostor potpuno ispunjen fajlovima tako da je svaki fajl
maksimalne veliine takve da ima samo jedan indeksni klaster, koliki procenat ukupnog prostora za smetanje
fajlova na ovom disku zauzimaju indeksi?
Odgovor: 100/
683
% (odgovor izraziti kao razlomak sa brojiocem 100)
Raun:
Ukupan broj klastera:
32GB/2KB = 25B*230B/21B*210B = 224 = 16M
Jedan ulaz u indeksnom klasteru mora da adresira 16M klastera, pa zauzima 24 bita, tj. 3B. Zato jedan
indeksni klaster moe da sadri 2kB/3B = 2048B/3B = 682 ulaza, tj. da adresira 682 klastera sa podacima.
Drugim reima, na jedan indeksni klaster dolazi 682 klastera sa podacima, odnosno indeksni klasteri zauzimaju
1/683 deo prostora za fajlove, ili 100/683 procenata (~0.15%). Odgovor: 100/683 procenata.

29/48

Ispitni rok: januar 2013 (20.1.2013)


1.(3) ta je to multiprocesorski sistem, a ta distribuirani sistem? Navesti po jedan primer svakog.
Odgovor:
Multiprocesorski sistem ima vie procesora sa delejnom memorijom, tj. veu propusnu mo (vea
koliina uraenog posla u jednici vremena). Primer multiprocesorskog sistema moe biti randa stanica ili server
za neku obradu podataka. Distriburani sistem ima skup procesora bez zajednike memorije povezanih
komunikacionom mreom (npr. LAN, WAN, ...). Primer distribuiranog sistema moe biti superkompjuteri ili
"cloud" sistemi.
2.(3) Korienjem funkcije yield(jmp_buf old, jmp_buf new) koja uva kontekst jedne niti i predaje
procesor drugoj niti, realizovati operaciju wait na brojakom semaforu u kolskom jezgru.
Reenje:
void Semaphore::wait () {
lock();
if(event==0){
event=-1
jmp_buf old = Thread::running->context;
blocked->put(Thread::runningThread);
Thread::running = Scheduler::get();
jmp_buf new = Thread::running->context;
yield(old,new);
}
unlock();

3.(3) Navesti najmanje tri sluaja (povoda) u kojima proces gubi procesor i prelazi u red suspendovanih
(blokiranih) i naznaiti da li se to deava kao posledica sistemskog poziva tog procesa ili spoljanjeg prekida.
Odgovor:
1) Izvrio blokirajui sistemski poziv - Asinhrono
2) Zatraio I/O operaciju - Asinhrono
3) Suspendovao se na zadato vreme - Asinhrono
4.(3) Napisati kod koji realizuje Petersonov algoritam meusobnog iskljuenja dva uporedna procesa pomou
uposlenog ekanja.
Reenje:
process P1
begin
loop
flag1:=true; turn:=2;
// Announce intent to entry
while flag2 and turn=2 do null end; // Busy wait
<critical section>
// Critical section
flag1 := false;
// Exit protocol
<non-critical section>
end
end P1;
process P2
begin
loop
flag2:=true; turn:=1;
// Announce intent to entry
while flag1 and turn=1 do null end; // Busy wait
<critical section>
// Critical section
flag1 := false;
// Exit protocol
<non-critical section>
end
end P1;

30/48

5.(3) U emu je razlika izmeu tehnika dinamikog uitavanja (dynamic loading) i preklopa
(overlay)?
Odgovor:
Dinamiko uitavanje ima tabelu adresa potprograma i uita deo tek u vreme izvravanja, po potrebi.
Sloeni program esto nikada ne izvrava neke svoje delove ili ne koristi neke svoje podatke.
Kod prekolpa, delovi koji se ne koriste u isto vreme se zamenjuju u memoriji, zauzimajui isto mesto .
Kada zatreba neki deo koji nije u memoriji, izbaciti deo sa kojim se preklapa i na njegovo mesto uitati
potrebni.
6.(3) Virtuelni adresni prostor sistema je 8GB, adresibilna jedinica je 16-bitna re, a virtuelni adresni prostor je
organizovan stranino sa stranicom veliine 32KB. Fiziki adresni prostor je veliine 2GB. Tabele
preslikavanja stranica su organizovane u dva nivoa, s tim da tabela prvog nivoa ima 2K ulaza. Prikazati logiku
strukturu virtuelne adrese i oznaiti irinu svakog polja. Oznaiti i podelu polja za broj stranice na polja za
indeksiranje PMT prvog i drugog nivoa.
Odgovor:
Veliina virtuelnog adresnog prostora je:
VAS = 8 GB = 2^33 B
Veliina fizikog adresnog prostora je:
PAS = 2 GB = 2^31 B
Veliina adresibilne jedinice je:
AU =16bit =2 B = 2^1 B
Veliina stranice (okvira) je:
PAGE = 32 KB = 2^15 B
irina virtuelne adrese je:
VA_S = log 2 (VAS / AU) = 32 bita
irina fizike adrese je:
PA_S = log 2 (PAS / AU) = 30 bita
irina pomeraja (Offset) unutar stranice/okvira:
OFFSET_S = log 2 (PAGE / AU) = 14 bita
Virtuelna adresa se sastoji od odreenog broja bita koji odreuju broj stranice u virtuelnom
adresnom prostoru i odreenog broja bita koji odreuju pomeraj unutar te stranice. Ve smo
utvrdili da je za predstavljanje pomeraja potrebno odvojiti 14 bita, pa je za predstavljanje broja
stranice potrebno:
VA_S - OFFSET_S = 32 bita - 14 bita = 18 bita
Jedan deo od tih 18 bita se koristi za indeksiranje PMT-a prvog nivoa, a preostali za indeksiranje
PMT-a drugog nivoa. Tabela prvog nivoa ima 2K = 2^11 ulaza, pa je za indeksiranje PMT-a prvog
nivoa potrebno:
VA_L1_S = log 2 (2K) = 11 bita
Za indeksiranje PMT-a drugog nivoa je onda potrebno:
VA_L1_S = VA_S - OFFSET_S - VA_L1_S = 7 bita
Dakle, logika struktura virtuelne adrese je:
VA(32) = Page_L1(11):Page_L2(7):Offset(14)

31/48

7.(3) Neki sistem sa straninom organizacijom memorije koristi tehniku copy on write. Jedan proces je tek
kreirao drugi proces pozivom fork(). Ako novokreirani proces odmah po pokretanju izvri operaciju upisa u
memoriju, koji izuzetak e generisati procesor, page fault ili neki drugi i koji? Precizno objasniti zato i kako.
Odgovor:
Pri pozivu fork(), proces-dete deli sve stranice sa roditeljem, nema kopiranja adresnog prostora i sve
stranice dozvoljene za upis se inicijalno oznae kao copy on write i sve dok proces pristupa stranici samo za
itanje, ona moe da ostane deljena. Kada proces prvi put upisuje u neku stranicu oznaenu kao copy on
write, stranica se kopira i prestaje da bude deljena, posebno se mapira i oznaava kao privatna. Generie
page fault unapred, pre nego to instrukcija promeni neku vrednost u memoriji. Upotrebljavaju se posebni
registri za smetanje starih vrednosti lokacija koje se menjaju. Ukoliko nastane page fault, CPU vraa stare
vrednosti u promenjene lokacije.

8.(3) Na asembleru nekog zamiljenog RISC procesora sa LOAD/STORE arhitekturom napisati program koji
prenosi blok podataka zadate duine sa zadate adrese na izlazni ureaj korienjem programiranog ulaza/izlaza
sa prozivanjem (polling).
Reenje:

Wait:

LOAD R1, #BlockAddr


LOAD R2, #Count
STORE [CTRL], #00..1b

// Uitavamo adresu bloka


// Uitavamo broj blokova
// Start bit

LOAD
AND
JZ
LOAD
STORE
INC
DEC
JNZ
STORE

//
//
//
//
//
//
//
//
//

R0, #Status
R0, R0, #100..0b
Wait
R0,[R1]
[DATA],R0
R1
R2
Wait
[CTRL],#0;

Uitavamo vrednost statusnog registra


Sa AND proveravamo da li je prvi bit 1
Wait ako je nije
Uitavamo adresu na registar R0
i onda je sauvamo u DATA
Prelazimo na sledei blok
Smanjimo broj blokova za 1
proveravamo da li jednak nuli, ako nije vraamo se
End Bit

9.(3) ta je osnovna svrha (motiv) postojanja operacije otvaranja fajla?


Odgovor:
Obezbedjuje pristup fajlu bez pretrage direktorijuma za ulazom za fajl sa datim imenom i dobijanje
lokacije i ostalih atributa fajla.
10.(3) Navesti i objasniti neku tehniku organizacije strukture podataka za rukovanje slobodnim prostorom fajl
sistema na disku, osim bit-vektora.
Odgovor:
Grupisanje, prvi slobodni blok sadri spisak narednih n slobodnih blokova, n-ti iz tog spiska sadri
spisak sledeih n slobodnih blokova itd.

32/48

Ispitni rok: februar 2013 (10.2.2013)


1.(3) Neki interaktivni vieprocesni i viekorisniki sistem ne podrava raspodelu vremena (time sharing). ta
je njegov osnovni problem?
Odgovor:
Osnovni problem je neujednaenost (mogua velika razlika) u vremenu odziva na korisniku akciju.
Ukoliko je vie procesa spremno (aktivirano na korisniku akciju) i treba da obradi korisniku akciju, oni
procesi koji ranije dobiju procesor imae krae vreme odziva, dok oni koji kasnije dobiju imaju due vreme
odziva. Jo gore, vreme odziva istog procesa na sukcesivne korisnike akcije potpuno je nedeterminisano i
zavisi samo od toga kako se u svakom sluaju rasporede procesi, pa moe da varira od veoma kratkog do
veoma dugakog, u sluaju veeg optereenja sistema. Kod sistema sa raspodelom vremena nema takvih
varijacija i vreme odziva se priblino ravnomerno produava pod veim optereenjem (vie procesa), ali ne
varira toliko od sluaja do sluaja.
2.(3) Ako se nad sledeim programom kreira jedan proces, koliko e ukupno biti elemenata sa vrednou 0 u
nizovima pid svih kreiranih procesa (ukljuujui i taj jedan poetni) kada svi ti procesi izau iz petlje, pod
pretpostavkom da su svi sistemski pozivi uspeli?
const int N=2;
int pid[N];
void main (){
for (int i=0; i<N; i++) pid[i] = fork();
}

Odgovor:

Prilikom prvog fork-a imamo proces-roditelj i proces-dete koji dele isti ID (pid[0]) jer fork() vraa
nulu kao vrednost proces-deta. Sledeim pozivom fork-a i proces-roditelj i proces-dete se dele i onda ukupno
imamo 4 procesa.
3.(3) ta je problem sledee implementacije kritine sekcije uposlenim ekanjem?
process P1
loop
while flag2 = true do null end; (* Busy wait *)
flag1 := true;
<critical section>
(* Critical section *)
flag1 := false;
(* Exit protocol *)
<non-critical section>
end
end P1;
process P2
loop
while flag1 = true do null end; (* Busy wait *)
flag2 := true;
<critical section>
(* Critical section *)
flag2 := false;
(* Exit protocol *)
<non-critical section>
end
end P2;

Odgovor:
Ne obezbeuje meusobno iskljuivanje zbog utrkivanja (race condition).

33/48

4.(3) Dva procesa X i Y "proizvode" cele brojeve uporedo, nezavisnim i promenljivim brzinama. Proces Z treba
da uzima po dva proizvedena broja, i to uvek tano jedan koji je proizveo X i jedan koji je proizveo Y, i njihov
zbir ispisuje na standardni izlaz. Vano je obezbediti da proces Z uvek uzima samo "svee" proizvedene
brojeve, tj. nikada ne uzme vie puta isti proizvedeni broj. Korienjem deljenih promenljivih i klasinih
brojakih semafora, napisati sve potrebne deklaracije i kod procesa X i Z.
var
i : 0..1 := 0;
a : array [0..1] of integer;
mutex : semaphore := 1;
readyToWriteX : semaphore := 1;
readyToWriteY : semaphore := 1;
readyToRead : semaphore := 0;
process X begin
loop
readyToWriteX.wait;
mutex.wait;
a[i]:=...;
i:=(i+1) mod 2;
mutex.signal;
readyToRead.signal;
end loop
end;

process Y similar

process Z begin
loop
readyToRead.wait;
readyToRead.wait;
writeln(a[0]+a[1]);
readyToWriteX.signal;
readyToWriteY.signal;
end loop
end;

5.(3) U prvom prolazu kroz ulazne .obj fajlove, linker nailazi na izvezeni simbol koji se ve nalazi u njegovoj
tabeli simbola. Da li e to prijaviti kao greku?
Odgovor:
Ukoliko linker ve ima napravljenu tabelu simbola on e prijaviti greku u prvom prolazu.
6.(3) Da li kod stranine organizacije virtuelne memorije ima smisla hardverski vriti proveru prekoraenja
granice opsega dozvoljenih adresa unutar stranice radi zatite od nedozvoljenog pristupa fizikim adresama
koje koriste drugi procesi? Kratko obrazloiti.
Odgovor:
Ima smilsla, prilikom preslikavanja adrese, hardver (memory management unit) dovlai deskriptor
stranice i najpre proverava pravo pristupa do te stranice. Ako pristup nije dozvoljen, generie se interni prekid
(trap).
7.(3) U nekom sistemu postoje sledei sistemski pozivi:
int async_write (char* buffer);
void wait (int request_id);
Operacija async_write asinhrono zadaje operaciju

izlaza datog niza znakova na neki izlazni ureaj i vraa


interni sistemski identifikator tog zahteva (vei od 0), odnosno kod greke (manji od nula). Operacija wait
suspenduje pozivajui proces sve dok operacija sa datim identifikatorom nije zavrena. Korienjem ovih
sistemskih poziva, realizovati sinhroni izlaz:
int sync_write (char* buffer);

Reenje:
int sync_write (char* buffer) { wait (async_write(buffer) ); }

34/48

8.(3) Ukratko objasniti ta je spooling.


Odgovor:
Kad vie procesa zadaje operacije nedeljivom ureaju uporedo npr. vie procesa alje blokove podataka
na tampa, operacije se prepliu. Pomou spoolinga operacije zadate ureaju od strane procesa smetaju se u
poseban fajl, kada zavri, proces zatvara fajl i predaje ga OS-u. Poseban proces ili nit OS-a "spooler", uzima
jedan po jedan fajl iz reda i prenosi njegov sadraj na ureaj.
9.(3) Neki fajl sistem podrava implicitno zakljuavanje fajla prilikom njegovog otvaranja. Postoje dve vrste
kljua: deljeni (shared), koji se trai prilikom otvaranja fajla samo za itanje (proces koji je tako otvorio fajl
ima pravo samo da ita iz fajla) i ekskluzivni (exclusive), koji se trai prilikom otvaranja fajla i za upis (proces
koji je otvorio fajl ima pravo upisa). Popuniti sledeu tabelu upisivanjem oznaka onih procesa iji e zahtev za
otvaranjem istog fajla biti ispunjen, za svaki od dva data sluaja. Procesi postavljaju zahteve redom navedenim
u drugoj koloni, pri emu oznaka npr. A-Rd oznaava da proces A postavlja zahtev za otvaranjem fajla za
itanje, a B-Wr da proces B postavlja zahtev za otvaranjem fajla za upis.
Sluaj Zahtevi za otvaranje fajla
Procesi koji su uspeli da otvore fajl
1
A-Rd, B-Wr, C-Rd, D-Rd, E-Wr
A,C,D
2
A-Wr, B-Rd, C-Wr, D-Rd, E-Rd
A

10.(3) Neki fajl sistem koristi indeksirani pristup alokaciji blokova za fajlove sa indeksima u dva nivoa. Prvi
nivo indeksa smeten je u sam FCB (file control block) i ima 256 ulaza koji direktno referenciraju blokove sa
podacima, a jo jedan ulaz u FCB ukazuje na jedan blok sa indeksom drugog nivoa iji ulazi takoe ukazuju na
blokove sa podacima. Veliina ulaza u indeksnom bloku (reference na blok diska) je 8 bajtova, a veliina bloka
na disku je 512KB. Kolika je maksimalna
veliina fajla u ovom fajl sistemu?
Odgovor:
32.125 GB
.
Raun:
Maksimalan broj blokova koje fajl moe da zauzima je:
256 + 512K/8 = 28 + 219/23 = 28 + 216 = 28(28+1).
Maksimalna veliina fajla je:
28(28+1)29KB = 27(28+1)MB = 32GB + 128MB = 32.125GB

35/48

Ispitni rok: Jun 2013 (14.6.2013)


1.(3) ta su multiprocesorski, a ta distribuirani sistemi?
Odgovor:
Multiprocesorski sistem ima vie procesora sa delejnom memorijom, tj. veu propusnu mo (vea
koliina uraenog posla u jednici vremena).
Distriburani sistem ima skup procesora bez zajednike memorije povezanih komunikacionom mreom
(npr. LAN, WAN, ...)
2.(3) Ako se nad sledeim programom kreira jedan proces, koliko e ukupno biti elemenata sa vrednou
razliitom od 0 u nizovima pid svih kreiranih procesa (ukljuujui i taj jedan poetni) kada svi ti procesi izau
iz petlje, pod pretpostavkom da su svi sistemski pozivi uspeli?
const int N=2;
int pid[N];
void main (){
for (int i=0; i<N; i++) pid[i] = fork();
}

Odgovor:

Prilikom prvog fork-a imamo proces-roditelj i proces-dete koji dele isti ID (pid[0]) jer fork() vraa
nulu kao vrednost proces-deta. Sledeim pozivom fork-a i proces-roditelj i proces-dete se dele i onda ukupno
imamo 4 procesa.
3.(3) Dokazati da Petersonov algoritam za meusobno iskljuenje kritinih sekcija dva uporedna procesa
uposlenim ekanjem zaista obezbeuje meusobno iskljuenje, odnosno ne poseduje problem utrkivanja (race
condition). Odgovor:
loop sa utrkivanjem:

loop bez utrkivanja:

while flag2 = true do null end;


flag1 := true;
<critical section>
flag1 := false;
<non-critical section>

// Busy wait
// Exit protocol

flag1:=true; turn:=2;
// Announce intent to entry
while flag2 and turn=2 do null end; // Busy wait
<critical section>
flag1 := false;
// Exit protocol
<non-critical section>

Uvoenjem promenjljive turn pored promenljive flag u while petlju eliminisemo problem utrkivanja.
Pored toga sto nit mora da bude spremna ona takoe mora da bude sledeca na redu, i time ne trosi bespotrebno
procesor.
4.(3) Korienjem klasinih brojakih semafora, napisati kod za kritinu sekciju u koju moe uporedo ui
najvie N procesa.
Reenje:
var mutex : Semaphore = N;
process P;
loop
wait(mutex);
<critical section>
signal(mutex);
<non-critical section>
end
end P;

// Initially equal to N

36/48

5.(3) Koju uslugu operativni sistem treba da obezbedi procesima da bi oni koristili preklope (overlays)?
Odgovor:
OS ne obezbuje nista to je potrebno za rad, sve radi prevodilac i generisani kod. OS samo obezbeuje
bibliotene rutine za dinamiko uitavanje.
6.(3) Data je definicija strukture FreeSegment koja predstavlja jedan segment slobodne memorije. Ove
strukture uvezane su u dvostruko ulananu, neureenu listu ija je glava freeSegHead. Implementirati funkciju
getBestFit(size_t) koja treba da pronae i vrati (ali ne menja ni njega ni listu) segment slobodne memorije
u koji se moe smestiti blok date veliine, po best fit algoritmu.
struct FreeSegment {
size_t size;
FreeSegment *prev, *next;
};

Reenje:
void* getBestFit (size_t sz) {
FreeSegment* bestFit = 0;
size_t smallestSegment = MAXSIZE;
for (FreeSegment* cur = freeSegHead; cur!=0; cur=cur->next) {
if (cur->size<sz) continue;
if (cur->size<smallestSegment) {
smallestSegment = cur->size;
bestFit = cur;
}
}
if (bestFit==0) return 0;
FreeSegment* newsgm =(FreeSegment*)((char*)bestFit+sz);
if (bestFit->prev) bestFit->prev->next = newsgm;
if (bestFit->next) bestFit->next->prev = newsgm;
FreeSegment* p = bestFit->prev;
FreeSegment* n = bestFit->next;
size_t s = bestFit->size-sz;
newsgm->prev = p;
newsgm->next = n;
newsgm->size = s;
return bestFit;
}

37/48

7.(3) Memorija nekog raunara organizovana je stranino, sa stranicom veliine 4KB. Adresibilna jedinica je
bajt, a virtuelna adresa je 32-bitna. Fizika adresa je veliine 32 bita. Ako je PMT organizovana u dva nivoa, s
tim da su veliine polja za broj ulaza u tabele oba nivoa isti, kolika je veliina (u bajtovima) PMT prvog nivoa?
Reenje:
Veliina stranice je:
PAGE = 4kB = 212B
Veliina adresibilne jedinice je:
AU = 1B = 20B
irina stranice je:
OFFSET_S = log2(PAGE/AU) = 12B
Fizika adresa je:
PA_S = 32B
Virtuelna adresa je:
VA_S = 32B
Virtuelna adresa izgleda ovako:
VA(32) = PAGE_L1 + PAGE_L2 + OFFSET(12)
Vidimo da oba polja dele 20 bita u virtuelnoj adresi:
PAGE_L1 + PAGE_L2 = VA(32) - OFFSET(12) = 20B
Poto je veliina polja ista, svako polje ima po 10 bita:
PAGE_L1 = PAGE_L2 => PAGE_L1(10) / PAGE_L2(10)
Konaan izgled virtuelne adrese je:
VA(32) = PAGE_L1(10) : PAGE_L2(10) : OFFSET(12)
Broj ulaza dobijamo iz veliine polja tj. za 10 bita je 210 ulaza (1024).
Veliina jednog ulaza je:
PMT1_ENTRY = log2(PA_S/AU) = 4B
Veliinu PMT prvog nivoa dobijamo kada pomnoimo broj ulaza sa veliinom jednog ulaza:
PMT1_S = 210 * PMT1_ENTRY = 1024 * 4B = 4kB

8.(3) Ukratko objasniti tehniku dvostrukog baferisanja (double buffering) kod ulaza/izlaza.
Odgovor:
Proizvodjac upisuje u bafer A, dok potrosac cita iz bafera B. Kada su oba zavrsila baferi zamenjuju
uloge.

38/48

9.(3) Neki proces izvrava redom sledee sistemske pozive. Pod pretpostavkom da korisnik u ije ime se
izvrava ovaj proces ima pravo pristupa do oba fajla i na itanje i na upis, i da oba poziva za otvaranje fajlova
uspevaju, navesti koji od preostalih poziva e biti uspean, a koji neuspean (upisati na liniji pored poziva).
FHANDLE f1 = fopen(x.doc,read);
FHANDLE f2 = fopen(y.doc,read|write);
fread(f1,buffer1,n1);
fwrite(f1,buffer2,n2);
fread(f2,buffer1,n1);
fwrite(f2,buffer2,n2);

_____________
______x_______
_____________
_____________

10.(3) Neki fajl sistem koristi bit vektor za evidenciju slobodnih blokova na disku. Kolika je veliina ovog
vektora u bajtovima, za disk veliine 256 GB sa blokom veliine 512B.
Raun:
256 GB / 512B = 238 B / 29 B = 229 B=512MB
Odgovor:

512MB

39/48

Ispitni rok: Jul 2013 (5.7.2013)


1.(3) Objasniti pojam raspodele vremena (time sharing) kod multiprocesnih sistema.
Odgovor:
OS dodeljuje CPU vreme svakom poslu i relativno esto preuzima procesor. Osnovna ideja je da posao
(task) moe da izgubi procesor kada mu istekne dodeljeno CPU vreme i kada sam zatrai I/O operaciju.
Rezultat je svaki korisnik ima utisak da raunar radi samo za njega sa dovoljno dobrim vremenom odziva, a
raunar opsluuje vie korisnika. Program koji je uitan u memoriju i izvrava se uporedo sa drugim
programima naziva se proces (process).
2.(3) Data je pogrena implementacija operacije yield() za neki troadresni procesor. Ova operacija bi trebalo
da izvri preuzimanje procesora od niti na iji vrh steka ukazuje vrednost sauvana na lokaciji na koju ukazuje
argument cur , i predaju procesora niti na iji vrh steka ukazuje vrednost sauvana na lokaciji na koju ukazuje
argument next . Objasniti zato ova implementacija nije ispravna i korigovati je.
void yield (void* cur, void* next) {
asm
{
push r0
push r1
...
push rn
----------------------------Ovako treba tacno da izgleda ovaj deo
add r0,sp,#cur
mov r0,#cur[sp]
mov [r0],sp
mov [r0],sp
add r0,sp,#next
mov r0,#next[sp]
mov sp,[r0]
mov sp,[r0]
pop rn
---------------------------...
pop r1
pop r0
pop pc ; return
}
}

Odgovor:
Na registar R0 ne treba da se dodaju pokazivai i stek pointer, ve da se na njega stave vrednosti stek
pointera sa pokazivaa.
3.(3) Korienjem sistemskog poziva fork() , napisati program koji, kada se pokrene kao proces, kreira
onoliko procesa-dece, koliko je dato argumentom tog programa. Ni taj proces, ni njegova deca ne treba da rade
nita vie.
void program(int N){
int pid[N];
for (int i=0; i<N; i++) {
pid[i] = fork();
}
}

40/48

4.(3) Data dva procesa meusobno se ikljuuju pri ulazu u dve kritine sekcije pomou semafora ija je
inicijalna vrednost 1. Objasniti ta je problem ove implementacije.
process P1; process P2:
wait(S1);
wait(S2);
wait(S2);
wait(S1);
... ...
signal(S2);
signal(S1);
signal(S1);
signal(S2);
end P1;
end P2;

Odgovor:
Ne obezbedjuje medjusobno iskljucenje zbog utrkivanja (Race condition)
5.(3) Koju uslugu operativni sistem treba da obezbedi procesima da bi oni koristili dinamiko uitavanje
modula (dynamic loading)?
Odgovor:
OS ne obezbedjuje nista sto je potrebno za rad. Dinamiko uitavanje ne zahteva nikakvu podrku OS-a,
sve radi prevodilac i generisani kod. OS samo obezbeuje bibliotene rutine za dinamiko uitavanje.

6.(3) Data je definicija strukture FreeSegment koja predstavlja jedan segment slobodne memorije. Ove
strukture uvezane su u dvostruko ulananu, neureenu listu ija je glava freeSegHead. Implementirati funkciju
getWorstFit(size_t) koja treba da pronae i vrati (ali nemenja ni njega ni listu) segment slobodne memorije
u koji se moe smestiti blok date veliine, po worst fit algoritmu.
struct FreeSegment {
size_t size;
FreeSegment *prev, *next;
};

Reenje:
void* getWorstFit (size_t sz) {
FreeSegment* worstFit = 0;
size_t biggestSegment = 0;
for (FreeSegment* cur = freeSegHead; cur!=0; cur=cur->next) {
if (cur->size>sz) continue;
if (cur->size>biggestSegment) {
smallestSegment = cur->size;
worstFit = cur;
}
}
if (worstFit==MAXSIZE) return 0;
FreeSegment* newsgm =
(FreeSegment*)((char*)worstFit+sz);
if (worstFit->prev) worstFit->prev->next = newsgm;
if (worstFit->next) worstFit->next->prev = newsgm;
FreeSegment* p = worstFit->prev;
FreeSegment* n = worstFit->next;
size_t s = worstFit->size-sz;
newsgm->prev = p;
newsgm->next = n;
newsgm->size = s;
return worstFit;
}

41/48

7.(3) Neki raunar podrava segmentno-straninu organizaciju virtuelne memorije, pri emu je virtuelna adresa
16-bitna, fiziki adresni prostor je veliine 8GB, a adresibilna jedinica je 16-bitna re. Stranica je veliine
512B. Maksimalan broj segmenata u virtuelnom adresnom prostoru je 4. Prikazati logiku strukturu virtuelne i
fizike adrese i navesti irinu svakog polja.
Reenje:
VA(16): Segment(2), Page(6), Offset(8)
PA(32): Block(24), Offset(8)
8.(3) Kojom tehnikom se fiziki nedeljiv izlazni ureaj moe uiniti logiki (virtuelno) deljivim
izmeu procesa koji ga uporedo koriste?
Odgovor:
spooling
.

9.(3) Napisati punu stazu (path) do fajla resenja.doc koji se nalazi u direktorijumu
d:/nastava/os/ispiti/jul2013 na ureaju d: posle sledee operacije montiranja (prvi argument
je fajl sistem koji montira, drugi je odredite montae):
mount d: /etf/rti
Odgovor: etf/rti/nastava/os/ispiti/jul2013
.

10.(3) Neki fajl sistem koristi indeksiranu alokaciju fajlova na disku sa jednostrukim indeksom. Ako se
pretpostavlja da je prostor za smetanje fajlova (ukljuujui i njihove indekse) na disku veliine 32 GB, veliina
klastera (jedine jedinice alokacije) 2 KB, i ceo prostor potpuno ispunjen fajlovima, gde je svaki fajl maksimalne
veliine i ima samo jedan indeksni klaster, koliki procenat ukupnog prostora za smetanje fajlova na ovom
disku zauzimaju indeksi?
Odgovor: 100/
683
% (odgovor izraziti kao razlomak sa brojiocem 100)
Raun:
Ukupan broj klastera:
32GB/2KB = 25B*230B/21B*210B = 224 = 16M
Jedan ulaz u indeksnom klasteru mora da adresira 16M klastera, pa zauzima 24 bita, tj. 3B. Zato jedan
indeksni klaster moe da sadri 2kB/3B = 2048B/3B = 682 ulaza, tj. da adresira 682 klastera sa podacima.
Drugim reima, na jedan indeksni klaster dolazi 682 klastera sa podacima, odnosno indeksni klasteri zauzimaju
1/683 deo prostora za fajlove, ili 100/683 procenata (~0.15%). Odgovor: 100/683 procenata.

42/48

Ispitni rok: Septembar 2013 (30.8.2013)


1.(3) ta je bio osnovni motiv uvoenja multiprogramiranja u do tada paketne raunarske sisteme?
Odgovor:
Izvravati vie poslova istovremeno. Vie procesa moze biti u memoriji uz efikasno korienje
memorije. Osim kad sam zatrai I/O operaciju task moze da izgubi procesor i kada mu istekne dodeljeno CPU
vreme. OS dodeli CPU vreme svakom tasku i relativno cesto preuzima procesor. Sad svaki korisnik ima utisak
da racunar samo za njega radi, a racunar opsluzuje vise korisnika.
2.(3) Korienjem standardnih bibliotenih funkcija setjmp() i longjmp(), realizovati operaciju
void yield(jmp_buf old, jmp_buf new) koja uva kontekst niti iji je jmp_buf dat kao prvi argument,
oduzima joj procesor i restaurira kontekst niti iji je jmp_buf dat kao drugi argument, kojoj predaje procesor.
Reenje:
void yield (jmp_buf old, jmp_buf new) {
if (setjmp(old)==0)
longjmp(new,1);
}

3.(3) Korienjem sistemskih poziva fork() i execlp() napisati program run koji, kada se pokrene kao proces,
kreira procese-decu nad svim programima koji se nalaze u fajlovima ija su imena data argumentima programa
run (npr. run p1.exe p2.exe p3.exe).

Reenje:
void run(int n)
{
stringstream p;
int pid = fork();
if (pid==0) {
for(i=1;i<=n;i++) {
p<<"p"<<i;
execlp(p.str());
}
}
else {wait(null); exit(0);}
}

4.(3) Korienjem standardnih brojakih semafora, napisati kod za inicijalizaciju i potrebnu sinhronizaciju
izmeu dva procesa koji u svoje kritine sekcije treba da ulaze strogo naizmenino.
Reenje:
shared var
sa : Semaphore:=1,
sb : Semaphore:=0;
process A;
begin
loop

process B;
begin
loop
wait(sa);
<critical-section>
signal(sb);
<non-critical-section>

wait(sb);
<critical-section>
signal(sa);
<non-critical-section>

end;
end;

end;
end;

5.(3) Koju uslugu operativni sistem treba da obezbedi procesima da bi oni koristili preklope (overlays)?
Odgovor:
OS ne obezbeuje nista sto je potrebno za rad, samo obezbeuje biblioteke rutine za dinamiko
uitavanje.
43/48

6.(3) Ako je uestanost pogotka u TLB 90%, a vreme pristupa TLB iznosi 20% od vremena pristupa fizikoj
memoriji, koliko (procentualno) je due efektivno vreme pristupa virtuelnoj memoriji u odnosu na pristup
fizikoj memoriji kod stranienja u dva nivoa?
Odgovor:
14%
.
Raun:
Efektivnost pristupa se rauna:
Uestanost pogotka*(TLB+Operativna mem) + Ostatak * (TLB+((nivo+1)*Operativna mem))
90% * (2 + 10) + 10%*(2 + 3*10) = 0,9*12 + 0,1*32 = 14%
7.(3) ta je svrha tehnike copy-on-write kod stranine organizacije virtuelne memorije?
Odgovor:
Dete deli sve stranice sa procesom-roditeljom, nema kopiranja adresnog prostora pa je samim tim uteda
memorije vea.
8.(3) Koja je razlika izmeu sinhronog i asinhronog slanja podataka na izlazni ureaj?
Odgovor:
Sinhronim slanjem podataka proces zadaje operaciju i ona mu odmah vraa kontrolu sa vraenom
informacijom o tome koliki deo operacije je uspeno zavren (nita, delimino ili sve).
Ainhronim slanjem podataka proces samo zadaje operaciju i nastavlja izvravanje. Ako je potrebno,
zavretak operacije se procesu dojavljuje asinhronim signalom (npr. postavljanje nekog indikatora ili call-back
rutinom).
9.(3) U nekom fajl sistemu u sistemskom pozivu za otvaranje fajla proces navodi da li e fajl samo itati ili ga i
na bilo koji nain menjati. U zavisnosti od toga, taj sistemski poziv zakljuava fajl sa jednim od dve vrste
kljua. Ako se fajl otvara samo za itanje, fajl se zakljuava deljenim kljuem; ako se fajl otvara za izmenu,
zakljuava se ekskluzivnim kljuem. Ukoliko poziv ne moe da se izvri zbog toga to klju ne moe da se
dobije, poziv se otkazuje bez izmena u fajl sistemu i vraa se greka. Procesi A, B, C i D izvravaju sistemske
pozive otvaranja i zatvaranja istog fajla u sledeem redosledu (neki proces izvrava poziv zatvaranja fajla samo
ako ga je uspeno otvorio):
1) A: open(READ)
2) B: open(WRITE)
3) C: open(READ)
4) A: close
5) C: close
6) D: open(WRITE)
Koje od ovih operacija e se izvriti uspeno, a koje neuspeno?
Odgovor:
Neuspena je operacija 2), ostale su uspene
.
10.(3) ta je najvei nedostatak organizacije fajl sistema pomou FAT?
Odgovor:
Osetljiv na otkaze. Ako FAT nije keiran, uzrokuje setanje glave diska za pristup susednim blokovima.

44/48

Ispitni rok: Oktobar 2013 (13.9.2013)


1.(3) Koja je razlika izmeu multiprocesorskih i distribuiranih raunarskih sistema?
Odgovor:
Kod multiprocesorskih sistema skup procesora ima deljenu memoriju, dok kod distribuiranih sistema
nema zajednike memorije ali zato postoji komunikaciona mreza izmedju procesora.
2.(3) Korienjem operacije yield(jmp_buf old, jmp_buf new) koja uva kontekst niti iji je jmp_buf dat
kao prvi argument, oduzima joj procesor i restaurira kontekst niti iji je jmp_buf dat kao drugi argument, kojoj
predaje procesor, realizovati operaciju Semaphore::wait() u kolskom jezgru.
Reenje:
void Semaphore::wait () {
lock();
jmp_buf old = Thread::running->context;
blocked->put(Thread::runningThread);
Thread::running = Scheduler::get();
jmp_buf new = Thread::running->context;
yield(old,new);
unlock();
}

3.(3) Koja je razlika izmeu (tekog) procesa i niti (thread)?


Odgovor:
Teki proces je izvravanje jednog programa sa spostvenim adresnim prostorm. Nit je jedno izvravanje dela
koda programa unutar adresnog prostora okruujueg procesa.
4.(3) Korienjem standardnih brojakih semafora, napisati kod za inicijalizaciju i potrebnu sinhronizaciju
kritine sekcije u koju moe ui najvie N uporednih procesa.
Reenje:
var mutex : Semaphore = N;
process P:
loop
wait(mutex);
<critical section>
signal(mutex);
<non-critical section>
end
end P;

5.(3) Ako tokom svog prvog prolaza linker u svojoj tabeli ne pronae simbol koji je definisan u tekuem fajlu
(izvozi se), da li e prijaviti greku? Obrazloiti.
Odgovor:
Ukoliko linker ve ima napravljenu tabelu simbola on e prijaviti greku u prvom prolazu.
6.(3) Koja je razlika izmeu best fit i worst fit algoritma kontinualne alokacije memorije?
Odgovor:
Best fit gleda da smesti blok podataka u segment tako da ostane sto manje neiskoriscene memorije, ali
na tetu brzine pristupa. Worst fit stavlja podatke tako da im se to bre pristupa, ali na tetu iskorienosti
memorije.

45/48

7.(3) U nekom sistemu sa virtuelnom memorijom broj stranice u virtuelnoj adresi je veliine 48 bita. Da bi
uvanje PMT uinio izvodljivim, sistem koristi hash tabelu sa 64K ulaza za smeanje PMT svakog procesa.
Hash funkcija je prosta modulo funkcija: ulaz u tabelu odreuje se pomou 16 najniih bita broja stranice. U
svakom ulazu hash tabele nalazi se 64-bitna glava ulanane liste zapisa za alocirane stranice koje se
preslikavaju u taj ulaz. Svaki zapis sadri viih 32 bita broja stranice, broj okvira u koji je ta stranica preslikana
(32 bita, vrednost 0 oznaava da stranica ne moe da se preslika) i pokaziva na sledei zapis (64 bita, vrednost
0 oznaava kraj liste). Neki proces je alocirao 256 najniih i 256 najviih stranica svog virtuelnog adresnog
prostora. Koliko prostora (u bajtovima) ukupno zauzima PMT ovog procesa?
Odgovor:
520kB
.
Sama hash tabela zauzima uvek 64K=216 64-bitnih ulaza, to je 64K8B=512KB.
Dati proces je alocirao po 256 najniih i 256 najviih stranica, pri emu se po dve (jedna iz grupe najniih i
odgovarajua iz grupe najviih) preslikavaju u isti ulaz (ukupno 256 najniih ulaza) hash tabele. Dakle, svaki od
256 najniih ulaza hash tabele predstavlja glavu liste sa po dva zapisa. Veliina svakog zapisa je 128 bita,
odnosno 16B. Prema tome, svaka od 256 lista zauzima po 32B, to znai da liste zauzimaju 25632B=8KB.
Dakle, PMT ovog procesa zauzima ukupno 512KB+8KB=520KB.
8.(3) U nekom sistemu podran je samo asinhroni izlaz na izlazni ureaj pomou sledee funkcije
IOReqID output (IODevID deviceID, IOReq* request); koja zadaje (asinhrono) izlaznu operaciju
specifikovanu drugim argumentom na ureaju identifikovanom prvim argumentom. Ova funkcija odmah vraa
kontrolu pozivaocu, uz identifikaciju zadate operacije (rezultat tipa IOReqID je vei od 0 u sluaju ispravno
zadatog zahteva). Funkcija void ioWait (IOReqID); blokira pozivajui proces sve dok operacija
identifikovana argumentom nije zavrena u potpunosti. Pomou ovih funkcija realizovati funkciju koja, u
odnosu na jedan argument, moe zadati operaciju sinhrono ili asinhrono, prema elji pozivaoca.
Reenje:
IDReqID output (IODevID deviceID, IOReq* request, int sync) {
IOReqID ioReqID = output(deviceID,request);
if (sync && ioReqID>0) ioWait(ioReqID);
return ioReqID;
}

9.(3) ta oznaava skraenica FTP? Ukratko objasniti emu slui ovaj protokol.
Odgovor:
File Transfer Protocol (FTP) je protokol koji obezbeuje operacije za prenos fajlova izmeu udaljenih
fajl sistema. Moe imati anonimni (anonymous) ili autorizovani pristup fajlovima.
10.(3) Koja metoda alokacije fajlova je efikasnija za direktni pristup, ulanana ili indeksirana i zato?
Odgovor:
Indeksirana zato to nas indeks fajla direktno vodi ka fajlu, dok kod ulanane liste bi smo morali da
prolazimo kroz celu listu preko pokazivaa dok ne doemo do traenog fajla.

46/48

Ispitni rok: Januar 2014 (19.1.2013)


1.(3) ta oznaava termin multiprogramiranje, a ta termin multiprocesiranje?
Odgovor:
Multiprogramiranje (multiprogramming): izvravati vie poslova upredo; dok jedan eka na zavretak
I/O operacije, CPU izvrava drugi posao.
Multiprocesiranje: raditi sa vise korisnika u jednom trenutku, vise procesora radi sa deljenom
memorijom.
2.(3) Korienjem funkcija setjmp() i longjmp() iz standardne C biblioteke, realizovati operaciju
yield(jmp_buf old, jmp_buf new) koja uva kontekst niti iji je jmp_buf dat kao prvi argument, oduzima
joj procesor i restaurira kontekst niti iji je jmp_buf dat kao drugi argument, kojoj predaje procesor.
Reenje:
void yield (jmp_buf old, jmp_buf new) {
if (setjmp(old)==0)
longjmp(new,1);
}

3.(3) Na programskom jeziku Java implementirati nit (thread) koja izvrava praznu petlju sve dok joj se
pozivom operacije ne kae da stane. Napisati i kod koji pravi i pokree N takvih uporednih niti.
Reenje:
public class Thread{
public static void main(String[] args){
int n = Citaj.Int();
for(int i=0; i<n; i++){
new Thread("" + i){
public void run() {
try{
while(Interrupted()!){};
}
catch(InterruptedException g);
}
}
thread.start();
}
}
}
//napomena: itanje podatak sa glavnog ulaza nije standardno.

4.(3) Korienjem standardnih brojakih semafora napisati kod za uslovnu sinhronizaciju dva uporedna procesa
od kojih jedan ispunjava neki logiki uslov, a drugi ne sme da proe odreenu taku ako taj uslov nije ispunjen.
Reenje:
Semaphore semA(1), semB(0)
boolean uslov;
Process A:
while(1) {
semA.wait();
uslov=true;
semB.signal();
}

Process B:
while(1) {
semB.wait();
if (uslov)
semA.signal();
}

47/48

5.(3) Ako tokom svog prvog prolaza linker u svojoj tabeli pronae prethodno definisan simbol koji je definisan
u tekuem fajlu (izvozi se), da li e prijaviti greku? Obrazloiti.
Odgovor:
Ukoliko linker ve ima napravljenu tabelu simbola on e prijaviti greku u prvom prolazu.
6.(3) ta je interna fragmentacija kod alokacije memorije? Da li je ona mogua kod kontinualne alokacije
memorije?
Odgovor:
Interna fragmentacija je neiskorien ostatak memorije unutar alociranih blokova memorije zbog
ogranienja u dozvoljenoj veliini alociranog bloka. Ona nije mogua kod kontinualne alokacije memorije jer
kod nje se ostatak bloka ostavlja namerno prazan i upisuje podatke na pocetak sledeeg bloka, ali ovo dovodi
do eksterne fragmentacije.
7.(3) U nekom sistemu sa straninom organizacijom virtuelne memorije virtuelna adresa je 64-bitna.Posmatraju
se dva (teorijska) granina sluaja: a) neki proces koristi ceo svoj virtuelni prostor; b) neki proces koristi samo
nekoliko susednih stranica svog virtuelnog prostora. Koji pristup organizacije PMT zauzima manje memorije za
PMT za svaki od ova dva sluaja: PMT organizovana u jednom nivou (linearno) ili PMT organizovana u vie
nivoa? Kratko obrazloiti.
Odgovor:
PMT organizovan u jednom nivou (linearno) je bolji za sluaj gde neki proces koristi ceo svoj virtuelni
prostor. Poto znamo veliinu prostora nema potrebe da koristimo vie nivoa PMT i time nepotrebno
zauzimamo dodatni prostor. PMT organizovan u vie nivoa je bolji za slucaj gde neki proces koristi samo
nekoliko susednih stranica svog virtuelnog prostora. Malo ima stranica pa je bolje organizovati PMT u vie
nivoa radi utede prostora.
8.(3) Kojom tehnikom se moe blokovski orijentisani ulazni ureaj koristiti kao znakovno orijentisani ulazni
tok? Kratko objasniti kako.
Odgovor:
Koristi se dvostruki bafer zato to sluzi za prilagodjavanje razliitih veliina i tipova prenosa.
Blokovski orijentisani ulazni ureaj kopira originalne podatke u bafer blok po blok. Odatle se kopiraju u drugi
bafer gde itaju kao znak po znak na znakovno orijentisani ulazni tok.
9.(3) Neki proces izvrava redom sledee sistemske pozive. Pod pretpostavkom da korisnik u ije ime se
izvrava ovaj proces ima pravo pristupa do oba fajla i na itanje i na upis, i da oba poziva za otvaranje fajlova
uspevaju, navesti koji od preostalih poziva e biti uspean, a koji neuspean (upisati na liniji pored poziva).
FHANDLE f1 = fopen(x.doc,read);
FHANDLE f2 = fopen(y.doc,read|write);
fread(f1,buffer1,n1);
fwrite(f1,buffer2,n2);
fread(f2,buffer1,n1);
fwrite(f2,buffer2,n2);

_____________
______x_______
_____________
_____________

10.(3) Predloiti i ukratko objasniti neki nain voenja evidencije slobodnih blokova na disku koji ne koristi
nikakav dodatni prostor za tu evidenciju (osim tih slobodnih blokova).
Odgovor:
Ulancana lista, slobodni blokovi se ulanavaju u listu pokazivaa koji se nalaze u svakom bloku.
Alokacija jednog bloka je jednostavna i efikasna tj. uzima se prvi blok iz liste.

48/48

Вам также может понравиться