ОС1/Јун 2017
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.