ОС1/Август 2020
1. zadatak
Postavka
Ako se nad sledećim programom kreira jedan proces, koliko će ukupno procesa biti kreirano (uključujući i taj jedan početni), pod pretpostavkom da su svi sistemski pozivi uspeli?
void main {
for (int i=0; (i<3) && fork(); i++);
}
Rešenje
Odgovor: 4
- P1 pravi dete P2 i inkrementira svoje
i
. - P2 je dete, te
fork()
vraća 0 u kontekstu deteta, kako uslov nije ispunjen, završava sefor
petlja. - P1 pravi dete P3 i inkrementira svoje
i
. - P1 pravi dete P4 i inkrementira svoje
i
. - P3 i P4 se isto završavaju kao proces P2.
- P1 završava svoj
for
ciklus jer jei
postalo 3.
2. zadatak
Postavka
Šta je problem sledeće implementacije kritične 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;
Rešenje
Ova dva procesa ne obezbeđuju međusobno isključenje jer oba procesa mogu pročitati odgovarajući flag
i ući u kritičnu sekciju. Da bi ovo popravili možemo koristiti Petersnov algoritam.
3. zadatak
Postavka
Šta je osnovna razlika između tehnike dinamičkog učitavanja i tehnike preklopa (overlays)?
Rešenje
Dinamičko učitavanje alocira memoriju za neki proces tek kada mu je ona potrebna. Preklopi funkcionišu na isti način ali koriste se činjenicom da se neki deo nikad ne koristi u isto vreme kada i neki drugi deo, već naizmenično, pa se oni dinamički učitavaju na istom mestu (takoreći, preklapaju).
4. zadatak
Postavka
Ukratko objasniti zašto je kod segmentne organizacije virtuelne memorije obavezna provera prekoračenja granice segmenta prilikom svakog adresiranja, a kod stanične organizacije ta provera ne postoji.
Rešenje
Segmentna organizacija funkcioniše tako što se nađe određeni segment, odnosno bazna adresa tog segmenta, u mapi segmenata (SMT) a zatim se doda pomeraj (offset). Moguće je da pomeraj prelazi veličinu segmenta te je obavezna provera za ovakvu grešku. Stranična organizacija s druge strane, zapravo i ne poznaje koncept segmenta. Preslikavanje je realizovano traženjem fizičke adrese okvira u odnosu na virtuelnu adresu stranice koja je uvek iste veličine. Pomeraj takođe ne može biti veći od stranice i on se ne sabira sa adresom već se dodaje na kraju same adrese.
5. zadatak
Postavka
U nekom sistemu postoje sledeći sistemski pozivi:
int async_write (const char* buffer);
void wait (int request_id);
Operacija async_write
asinhrono zadaje operaciju izlaza datog niza znakova na neki izlazni uređaj i vraća interni sistemski identifikator tog zahteva (veći od 0), odnosno kod greške (manji od nula). Operacija wait
suspenduje pozivajući proces sve dok operacija sa datim identifikatorom nije završena. Korišćenjem ovih sistemskih poziva, realizovati sinhroni izlaz (funkcija treba da vraća 0 u slučaju uspeha, a kod greške u suprotnom):
int sync_write (char* buffer);
Rešenje
int sync_write(char* buffer) {
int request = async_write(buffer);
if (request < 0) {
return request;
}
wait(request);
return 0;
}
6. zadatak
Postavka
Kakav problem može nastati kod ulančane alokacije fajla ako se greškom promeni sadržaj bloka u kom je smešten deo sadržaja nekog fajla?
Rešenje
U slučaju da se desi greška u sadržaju nekog fajla, ta greška može oštetiti sam pokazivač na sledeći element u listi blokova tog fajla. U najgorem slučaju pokazivač može biti promenjen tako da pokazuje na blok nekog drugog fajla, pa se onda i blokovi tog fajla mogu korumpirati.
7. zadatak
Postavka
Ukratko objasniti šta je inkrementalni, a šta totalni bekap (backup) fajl sistema i navesti primer operativnog sistema koji ima ugrađenu podršku za inkrementalni bekap.
Rešenje
Totalni bekap kopira sve fajlove iz jednog fajl sistema ili njegovog dela nezavisno od toga da li su bili izmenjeni od prošlog bekapa ili nisu, pa se neki fajlovi bespotrebno kopiraju. Inkrementalni bekap kopira samo izmenjene fajlove. Operativni sistem macOS ima podršku za inkrementalni bekap, tako što ili eksplicitno ili automatski pokrene bekap kada se poveže hard disk uređaj koji je za to namenjen.