ОС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) u funkciji N, pod pretpostavkom da su svi sistemski pozivi uspeli?
const unsigned N = ...;
void f (unsigned n) {
if (n==0) return;
if (n%2) f(n-1);
else if (!fork()) f(n-1);
}
void main { f(N); }
Rešenje
Ova funkcija zove samu sebe ukoliko je argument neparan broj, a pravi novi proces (a trenutni se završava) ako je paran. Ovaj proces se nastavlja sve dok argument ne dostigne 0, a argument se smanjuje svakog poziva za 1. To znači da će svakog, osim prvog, neparnog poziva biti napravljen novi proces, pa se ukupan broj napravljenih procesa može izračunati kao .
2. zadatak
Postavka
Šta je problem sledeće implementacije kritične sekcije uposlenim čekanjem (obratiti pažnju na to da procesi nisu sasvim simetrični)?
shared var flag1, flag2 : boolean = false;
process P1
begin
loop
while flag2 = true do null end;
flag1 := true;
<critical section>
flag1 := false;
<non-critical section>
end
end P1;
process P2
begin
loop
flag2 := true;
while flag1 = true do null end;
<critical section>
flag2 := false;
<non-critical section>
end
end P2;
Rešenje
Može da se desi sledeća situacija:
- P1 uradi proveru za
flag2
, vidi da jefalse
, prođe proveru i promeni se kontekst - P2 postavi
flag2
natrue
očekujući kako je zaključao sekciju od P1, uradi proveru zaflag1
, vidi da jefalse
, prođe proveru, uđe u kritičnu sekciju i promeni se kontekst dok je u kritičnoj sekciji - P1 postavi
flag1
natrue
(ali sa zakašnjenjem, jer je P2 već ušao u kritičnu sekciju) i uđe u kritičnu sekciju - Sada su oba procesa u kritičnoj sekciji
3. zadatak
Postavka
Šta je osnovna razlika između tehnike dinamičkog učitavanja i tehnike preklopa (overlays)?
Rešenje
Dinamičko učitavanje nam samo kaže da neki deo učitavamo kasnije kada je potreban, preklopi zahtevaju da se jedan isti segment memorije koristi za više različitih strukture u različitim vremenima (vremensko multipleksiranje).
4. zadatak
Postavka
Virtuelni adresni prostor je veličine 1MB i organizovan je stranično, adresibilna jedinica je bajt, a veličina stranice je 256B. Neki proces je alocirao dva logička segmenta, oba su veličine po 16 stranica, jedan zauzima najniže, a drugi najviše adrese u adresnom prosturu. Stranice se učitavaju na zahtev, a trenutno nije učitana nijedna stranica ovog procesa. Posmatraju se tri date virtuelne adrese nezavisno (svaka za sebe kao da se izvrši sama u opisanom stranju); hardver je prilikom preslikavanja adrese generisao izuzetak zbog nemogućnosti preslikavanja (page fault). Navesti kako će operativni sistem obraditi svaki od ovih izuzetaka.
Virtuelna adresa (hex) | Način obrade |
---|---|
004CA |
|
FF745 |
|
F0745 |
Rešenje
Virtuelna adresa ima 20 bita, od kojih je viših 12 za adresiranje stranice a nižih 8 za offset. Zauzete stranice su onda od 000
do 00F
i od FF0
do FFF
.
Virtuelna adresa (hex) | Način obrade |
---|---|
004CA |
Učitaće stranicu 004 nižeg logičkog segmenta.
|
FF745 |
Učitaće stranicu FF7 višeg logičkog segmenta.
|
F0745 |
Generisaće grešku u pristupu memoriji jer stranica F07 nije alocirana.
|
5. zadatak
Videti isti ovaj zadatak iz avgusta 2020.
6. zadatak
Postavka
Dat je rezultat komande ls za neki direktorijum na nekom sistemu nalik sistemu Unix. Korisnik Jane
koji pripada grupi staff
izvršava proces koji otvara fajl WideTable.pdf
za upis. Da li će taj proces moći da otvori ovaj fajl?
$ ls -l -rw-r--rw- 1 JohnDoe staff 549387 Jul 8 2019 WideTable.pdf
Rešenje
Neće, jer grupa korisnika Jane
nema pristup fajlu.
7. zadatak
Postavka
Navesti razlog zašto bi neki fajl sistem koristio klastere na disku različite veličine.
Rešenje
Za manji fajl se upotrebljava manji klaster a za veći fajl veći klaster pa je manja interna fragmentacija.