ОС1/Јун 2018

Извор: SI Wiki
< ОС1
Датум измене: 9. јул 2021. у 11:54; аутор: Duke (разговор | доприноси) (jos jedan rok)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

Zadaci na stranici predmeta.

1. zadatak

Postavka

Objasniti razliku između pojmova proces i nit (engl. thread)

Rešenje

Proces je jedno izvršavanje programa sa jednim adresnim prostorom. Niti (thread) ili laki procesi: tok kontrole koji teče uporedo sa drugim tokovima kontrole, ali koji deli virtuelni adresni prostor sa nekim drugim tokom ili tokovima kontrole.

2. zadatak

Postavka

Korišćenjem standardnih bibliotečnih operacija setjmp i longjmp, implementirati operaciju wait na binarnom semaforu koji je realizovan klasom Event poput one u školskom jezgru.

3. zadatak

Postavka

Korišćenjem sistemskih poziva fork i exec, napisati funkciju run koja kreira proces nad programom u fajlu sa zadatom putanjom i vraća negativnu vrednost u slučaju greške, a pid kreiranog procesa u slučaju uspeha pri fork. Ukoliko ne uspe exec, kreirani proces-dete treba ugasiti.

Rešenje

int main(int argc, int argv[]){
    if (argc < 2) return -1;
    pid_t pid = fork();
    if (pid < 0){
        return -2;
    }
    if (pid == 0){
        int t = exec(argv[1]);
        if (t < 0){
            exit(-3);
        }
    }
    return 0;
}

4. zadatak

Postavka

Dva procesa pristupaju kritičnoj sekciji. Dat je presudokod jednog od njih, koji bi trebalo da obezbedi međusobno isključenje uposlenim čekanjem (kod drugog procesa izgleda analogno). Da li ovo rešenje obezbeđuje međusobno isključenje? Da li ima neki problem (ako ima, koji)?

process P1
begin
    loop
        flag1 := true;
        while flag2 = true do null end;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;

Rešenje

Ovo rešenje ne valja jer se dešava livelock odnosno oba procesa se međusobno zaključaju i ni jedan ni drugi se neće dalje izvršavati. To se desi kada proces P1 postavi flag1 na true a zatim P2 postavi flag2 na true.

5. zadatak

Postavka

Za koju od ove dve tehnike, dinamičko učitavanje (dynamic loading) ili preklopi (overlays), se može očekivati duže izvršavanje istog programa u najgorem slučaju? Precizno obrazložiti.

Rešenje

Duže vreme izvršavanja u najgorem slučaju se može očekivati kod preklopa jer će program stalno učitavati iz memorije. Dok će dinamičko učitavanje zauzeti više memorije, svaki potreban modul će učitati po jednom dok preklopi će se stalno učitavati iznova i iznova.

6. zadatak

Postavka

U nekom sistemu primenjuje se worst-fit algoritam kontinualne alokacije memorije. Inicijalno je prostor veličine 256KB potpuno slobodan za alokaciju korisničkih procesa. Potom su različiti procesi zadavali sledeće zahteve (slovna oznaka označava proces koji je postavio zahtev, brojna oznaka označava veličinu alociranog prostora u KB, a minus označava gašenje procesa i oslobađanje njegove memorije): A64, B16, C128, D32, A-, E8, F32, B- Odgovoriti na sledeća pitanja koja se odnose na stanje memorije nakon ove sekvence zahteva:

  • Koliko je ukupno slobodnih fragmenata?
  • Kolika je veličina najmanjeg slobodnog fragmenta?
  • Kolika je veličina najvećeg slobodnog fragmenta?

Rešenje

  1. A64 -> A(64), Free(192)
  2. B16 -> A(64), B(16), Free(176)
  3. C128 -> A(64), B(16), C(128), Free(48)
  4. D32 -> A(64), B(16), C(128), D(32), Free(16)
  5. A- -> Free(64), B(16), C(128), D(32), Free(16)
  6. E8 -> E(8), Free(56), B(16), C(128), D(32), Free(16)
  7. F32 -> E(8), F(32), Free(24), B(16), C(128), D(32), Free(16)
  8. B- -> E(8), F(32), Free(42), C(128), D(32), Free(16)
  • Koliko je ukupno slobodnih fragmenata? 2
  • Kolika je veličina najmanjeg slobodnog fragmenta? 16KB
  • Kolika je veličina najvećeg slobodnog fragmenta? 42KB

7. zadatak

Postavka

Prilikom preslikavanja virtuelne adrese, procesor je generisao izuzetak zbog pokušaja upisa na tu adresu koji je u deskriptoru stranice označen kao zabranjen. Operativni sistem ipak neće ugasiti taj proces. Precizno objasniti zašto.

Rešenje

Neće ugasiti program jer se zapravo radi o tehnici copy-on-write odnosno kopiranja na upis. U ovoj tehnici, MMU vidi tu memoriju kao zabranjenu za upis. Prilikom generisanja greške, OS proverava da li je zabranjena, i kako kod njega nije, to znači da se radi o tehnici kopiranja na upis.

8. zadatak

Postavka

Navesti tri usluge vezane za realno vreme koje operativni sistem može da nudi i predložiti i kratko objasniti funkcije – sistemske pozive za te usluge.

Rešenje

  1. Informacija o tekućem realnom vremenu:
    time_t time (time_t* tloc);
    Vraća broj sekundi koje su protekle od 1. 1. 1970. u 0 časova postoje i bibliotečne funkcije u <time.h> koje vraćaju “kalendarsko” vreme, rastavljeno na datum i sat itd, a oslanjaju se na ovaj sistemski poziv: asctime, ctime, gmtime, localtime
  2. Suspenzija pozivajućeg procesa (“uspavljivanje”) za zadato vreme
    unsigned int sleep (unsigned int seconds);
  3. Čekanje na događaje, uslove ili na sinhronizacione primitive, ali vremenski ograničeno (tzv. tajmaout kontrole, timeout); ako se proces ne deblokira u zadatom vremenu, biće deblokiran zbog isteka vremenske kontrole; npr. za semafore:
    int sem_timedwait (sem_t *sem, const struct timespec *abs_timeout);


9. zadatak

Postavka

Ako je tekući direktorijum nekog procesa /a/b/c, koja je apsolutna putanja do fajla koji taj proces otvara davanjem putanje d/../../e/f.txt?

Rešenje

Rešenje je a/b/e/f.txt.

10. zadatak

Postavka

Fajl sistem primenjuje ulančanu alokaciju, s tim da se i slobodni blokovi ulančavaju u listu. U strukturi FCB polje head sadrži broj prvog bloka sa sadržajem fajla, a polje size veličinu sadržaja. Funkcija jezgra free prima kao argument broj prvog bloka u lancu blokova koje treba proglasiti slobodnim. Napisati funkciju jezgra truncate koja briše sadržaj fajla na čiji FCB ukazuje argument.