ОС1/Јун 2017

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

Задаци на страници предмета.

1. задатак

Поставка

Шта је мултипрограмирање, а шта мултипроцесирање?

Решење

Видети задатак из јануарског рока 2014.

2. задатак

Поставка

Објаснити како се обезбеђује међусобно искључење приступа критичним секцијама језгра оперативног система од стране упоредних токова контроле (нити) који се извршавају на истом, односно на различитим процесорима.

Решење

Видети задатак из фебруарског рока 2014.

3. задатак

Поставка

Коришћењем системског позива create_thread(void(*f)(void*),void* p) који креира нит која извршава дату функцију f са датим аргументом p, на језику C написати програм који у н упоредних нити израчунава квадрат сваког елемента неког целобројног низа (a[i]*=a[i]) величине 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(), ко ће пријавити грешку и ког типа, преводилац или линкер? Прецизно образложити на основу чега се та грешка пријављује.

Решење

Линкер пријављује грешку типа симбол маин није дефинисан. Када се повезује C/Ц++ програм, листа обј фајлова мора да садржи и обавезно генерише модул који позива функцију маин, па је зато и реферише као спољни симбол ког увози, што доводи до грешке ако га нема.

6. задатак

Поставка

Прецизно објаснити зашто класичан линкер свој посао обавља у два пролаза (а не може само у једном). Образложење илустровати примером.

Решење

У првом пролазу линкер прави глобалну мапу .обј фајлова и глобално дефинисаних извезених симбола и њихових адреса релативно у односу на почетак .обј фајла. У другом пролазу разрешава неразрешена адресна поља користећи дефинисане симболе у табели симбола.

7. задатак

Поставка

Виртуелни адресни простор је величине 1ГБ, организован је сегментно, са максималном величином сегмента од 4КБ, адресибилна јединица је бајт. Сви сегменти неког процеса су стварне величине од по 2КБ и у физичку меморију смештени су одмах један иза другог, при чему сегмент број 0 почиње од физичке адресе Ф000х. Приказати логичку структуру виртуелне адресе и израчунати у коју физичку адресу се пресликава виртуелна адреса 2564х.

Решење

ВА: 2^30Б, сегмент 4КБ = 2^12Б, АУ = 1Б

лимит: 2КБ

ВА(30) : сегмент(18) : оффсет(12)

ВА = 2564х -> сегмент = 2, оффсет = 564

ПА = 11564

8. задатак

Поставка

бјаснити како се знаковно оријентисани секвенцијални улазни уређај може учинити (виртуелно) истим таквим, али са директним приступом?

Решење

Овај задатак није решен. Помозите СИ Wики тако што ћете га решити.

9. задатак

Поставка

Ако је текући директоријум неког процеса /a/b/c, која је апсолутна стаза до фајла кога овај процес отвара задајући следећу стазу: ../../d/e/../f.txt?

Решење

/a/d/f.txt

10. задатак

Поставка

Неки фајл систем користи комбиновани индексирани приступ алокацији фајлова са индексима од једног до три нивоа. Објаснити зашто тај фајл систем покушава да алоцира блокове за садржај фајла што ближе један другоме на диску, кад год је то могуће?

Решење

Да би време приступа блоковима било што краће.