ОС1/Август 2020

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Zadaci na stranici predmeta.

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 se for 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 je i 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.