ОС1/Јун 2017

Извор: SI Wiki
< ОС1
Датум измене: 20. септембар 2021. у 13:29; аутор: Ivan Pešić (разговор | доприноси) (средити 7. задатак (<math>))
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

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);
	part *= k;
	for(int i = 0; i < k; i++)
		a[part + i] *= a[part + i];
}

void main() {
	for(int i = 0; i < n; i++)
		create_thread(square, &i);
}

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 zadatak iz oktobarskog roka 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 tipa simbol main nije definisan. 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

Precizno objasniti zašto klasičan linker svoj posao obavlja u dva prolaza (a ne može samo u jednom). Obrazloženje ilustrovati primerom.

Rešenje

U prvom prolazu linker pravi globalnu mapu .obj fajlova i globalno definisanih izvezenih simbola i njihovih adresa relativno u odnosu na početak .obj fajla. U drugom prolazu razrešava nerazrešena adresna polja koristeći definisane simbole u tabeli simbola.

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

VA: 2^30B, segment 4KB = 2^12B, AU = 1B

limit: 2KB

VA(30) : segment(18) : offset(12)

VA = 2564h -> segment = 2, offset = 564

PA = 11564

8. zadatak

Postavka

bjasniti 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.