ОС1/Јун 2017

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

Zadaci na stranici predmeta.

1. zadatak

Postavka

Šta je multiprogramiranje, a šta multiprocesiranje?

Rešenje

Videti zadatak iz januarskog roka 2014.

2. zadatak

Postavka

Objasniti kako se obezbeđuje međusobno isključenje pristupa kritičnim sekcijama jezgra operativnog sistema od strane uporednih tokova kontrole (niti) koji se izvršavaju na istom, odnosno na različitim procesorima.

Rešenje

Videti zadatak iz februarskog roka 2014.

3. zadatak

Postavka

Korišćenjem sistemskog poziva create_thread(void(*f)(void*),void* p) koji kreira nit koja izvršava datu funkciju f sa datim argumentom p, na jeziku C napisati program koji u n uporednih niti izračunava kvadrat svakog elementa nekog celobrojnog niza (a[i]*=a[i]) veličine n*k, tako što svaka nit obrađuje k elemanata (jednu particiju niza).

Rešenje

int n = ...;
int k = ...;
int a[n * k];

void square(void* p) {
    int part = *(int*)(p);
    free(p);
    part *= k;
    for (int i = 0; i < k; i++) {
        a[part + i] *= a[part + i];
    }
}

void main() {
    for (int i = 0; i < n; i++) {
        int* context = malloc(sizeof(int));
        *context = i;
        create_thread(square, context);
    }
}

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ napisati implementaciju ograničenog bafera (bounded buffer).

Rešenje

Videti sedmi zadatak zadatak iz jula 2011.

5. zadatak

Postavka

Ako u svom C programu ni u jednom fajlu ne definišete funkciju main(), ko će prijaviti grešku i kog tipa, prevodilac ili linker? Precizno obrazložiti na osnovu čega se ta greška prijavljuje.

Rešenje

Linker prijavljuje grešku o nedefinisanom simbolu main. Kada se povezuje C/C++ program, lista obj fajlova mora da sadrži i obavezno generiše modul koji poziva funkciju main, pa je zato i referiše kao spoljni simbol kog uvozi, što dovodi do greške ako ga nema.

6. zadatak

Postavka

Da li se količina memorije koju program zahteva u najgorem slučaju njegovog izvršavanja smanjuje primenom tehnike dinamičkog učitavanja (u odnosu na količinu koju zahteva kada se ta tehnika ne koristi)? Kratko obrazložiti.

Rešenje

Ne smanjuje se, jer u najgorem slučaju on zahteva sve svoje potprograme i strukture, a tehnika dinamičkog učitavanja obezbeđuje da delovi ne moraju da se učitavaju samo dok se prvi put ne javi potreba za njima.

7. zadatak

Postavka

Virtuelni adresni prostor je veličine 1GB, organizovan je segmentno, sa maksimalnom veličinom segmenta od 4KB, adresibilna jedinica je bajt. Svi segmenti nekog procesa su stvarne veličine od po 2KB i u fizičku memoriju smešteni su odmah jedan iza drugog, pri čemu segment broj 0 počinje od fizičke adrese F000h. Prikazati logičku strukturu virtuelne adrese i izračunati u koju fizičku adresu se preslikava virtuelna adresa 2564h.

Rešenje

  • Virtuelni adresni prostor je .
  • Segment od 4KB, odnosno , znači da će deo za pomeraj zauzeti 12 bita, tako da struktura izgleda VA(30): segment(18) offset(12).
  • Virtuelna adresa 2564h označava adresu sa segmentom 2 i pomerajem 564h. Ako na F000h dodamo još 2 puta veličinu fizičkog segmenta, što je 2KB, dobijamo fizičku adresu 10564h.

8. zadatak

Postavka

Objasniti kako se znakovno orijentisani sekvencijalni ulazni uređaj može učiniti (virtuelno) istim takvim, ali sa direktnim pristupom?

Rešenje

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

9. zadatak

Postavka

Ako je tekući direktorijum nekog procesa /a/b/c, koja je apsolutna staza do fajla koga ovaj proces otvara zadajući sledeću stazu: ../../d/e/../f.txt?

Rešenje

/a/d/f.txt

10. zadatak

Postavka

Neki fajl sistem koristi kombinovani indeksirani pristup alokaciji fajlova sa indeksima od jednog do tri nivoa. Objasniti zašto taj fajl sistem pokušava da alocira blokove za sadržaj fajla što bliže jedan drugome na disku, kad god je to moguće?

Rešenje

Da bi vreme pristupa blokovima bilo što kraće.