ОС1/Јун 2017 — разлика између измена
(средити 7. задатак (<math>)) |
мНема описа измене |
||
| Ред 18: | Ред 18: | ||
== 3. zadatak == | == 3. zadatak == | ||
=== Postavka === | === Postavka === | ||
Korišćenjem sistemskog poziva <code>create_thread(void(*f)(void*),void* p)</code> koji kreira nit koja izvršava datu funkciju <code>f</code> sa datim argumentom <code>p</code>, na jeziku C napisati program koji u ''n'' uporednih niti izračunava kvadrat svakog elementa nekog celobrojnog niza (<code>a[i]*=a[i]</code>) veličine <code>n*k<code>, tako što svaka nit obrađuje ''k'' elemanata (jednu particiju niza). | Korišćenjem sistemskog poziva <code>create_thread(void(*f)(void*),void* p)</code> koji kreira nit koja izvršava datu funkciju <code>f</code> sa datim argumentom <code>p</code>, na jeziku C napisati program koji u ''n'' uporednih niti izračunava kvadrat svakog elementa nekog celobrojnog niza (<code>a[i]*=a[i]</code>) veličine <code>n*k</code>, tako što svaka nit obrađuje ''k'' elemanata (jednu particiju niza). | ||
=== Rešenje === | === Rešenje === | ||
Верзија на датум 20. септембар 2021. у 13:30
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.