OS1/Avgust 2020
< ОС1
Pređi na navigaciju
Pređi na pretragu
- [3] 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++); }
- Odgovor: 4
- Postupak:
- P1 pravi dete P2 i inkrementira svoje i.
- P2 je dete, te fork() vraća 0 u kontekstu dete, kako uslov nije ispunjen, završava se for ciklus.
- 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 je i postalo 3.
- [3] Š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;- Odgovor: 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] Šta je osnovna razlika između tehnike dinamičkog učitavanja i tehnike preklopa (overlays)?
- Odgovor: 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 se preklapaju.
- [3] 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.
- Odgovor: Segmentna organizacija funkcioniše tako što se nađe određeni segment, odnosno bazna adresa tog segmenta, 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 stranicec 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.
- [3]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:
- [3] 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?
- Odgovor: U slučaju kada se desi greška na sadršaj nekog fajla, ta greška može oštetiti sam pokazivač na sledeći element u listi te ili prekinuti ulančanu listu ili greška bude takva da sada to pokazuje na neki deo nekog drugog fajla. Pa kada bude čitao fajl može nastaviti na tamo.
- [3] 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.
- Odgovor: 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. Neki fajlovi se bespotrebno kopiraju. Inkrementalni bekap kopira samo izmenjene fajlove. Mac OS X ima podršku inkrementalnog bekapa, tako što ili eksplicitno ili automatski pokrene bekap kada se poveže hard disk uređaj koji je za to namenjen.