ОС1/Фебруар 2013

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

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

1. задатак

Поставка

Неки интерактивни вишепроцесни и вишекориснички систем не подржава расподелу времена (тиме схаринг). Шта је његов основни проблем?

Решење

Основни проблем је неједнакост у времену одзива на корисничку акцију. Уколико је више процеса спремно и треба да обради корисничку акцију, они процеси који раније добију процесор имаће краће време одзива, док они који касније добију процесор имају дуже време одзива. Још горе, време одзива истог процеса на сукцесивне корисничке акције потпуно је недетерминистичко и зависи од тога како се распореде процеси чинећи да се коринсици осећају као да "сметају" једни другима.

2. задатак

Поставка

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

const int N = 2; 
int pid[N];
void main() {
    for (int i = 0; i < N; i++)
        pid[i] = fork();
}

Решење

Видети решење 2. задатка из јунског рока 2013. године. (Питање је обрнуто, али је решење исто.)

3. задатак

Поставка

Шта је проблем следеће имплементације критичне секције упосленим чекањем?

process P1
  loop
    while flag2 = true do null end; (* Busy wait *)
    flag1 := true;
    <critical section>          (* Critical section *)
    flag1 := false;             (* Exit protocol *)
    <non-critical section>
  end
end P1;

process P2
  loop
    while flag1 = true do null end; (* Busy wait *)
    flag2 := true;
    <critical section>          (* Critical section *)
    flag2 := false;             (* Exit protocol *)
    <non-critical section>
  end
end P2;

Решење

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

4. задатак

Поставка

Два процеса X и Y "производе" целе бројеве упоредо, независним и променљивим брзинама. Процес З треба да узима по два произведена броја, и то увек тачно један који је произвео X и један који је произвео Y, и њихов збир исписује на стандардни излаз. Важно је обезбедити да процес З увек узима само "свеже" произведене бројеве, тј. никада не узме више пута исти произведени број. Коришћењем дељених променљивих и класичних бројачких семафора, написати све потребне декларације и код процеса X и З.

Решење

Потребно је X и Y имплементирати као боундед буффер јер могу производити целе бројеве различитим брзинама. Процес З ће једноставно позивати операцију take() над тим двама баферима.

5. задатак

Поставка

У првом пролазу кроз улазне .обј фајлове, линкер наилази на извезени симбол који се већ налази у његовој табели симбола. Да ли ће то пријавити као грешку?

Решење

Да, јер ако се налази у табели симбола значи да је већ дефинисан и долази до сукоба имена.

6. задатак

Поставка

Да ли код страничне организације виртуелне меморије има смисла хардверски вршити проверу прекорачења границе опсега дозвољених адреса унутар странице ради заштите од недозвољеног приступа физичким адресама које користе други процеси? Кратко образложити.

Решење

Нема потребе, код страничне организације величина странице у виртуелној меморији је иста као величина оквира у физичкој меморији тако да се не може десити да исти оквир деле 2 различита процеса, нити да је једна страница пресликана у 2+ оквира.

7. задатак

Поставка

У неком систему постоје следећи системски позиви:

int async_write (char* buffer);
void wait (int request_id);

Операција async_write асинхроно задаје операцију излаза датог низа знакова на неки излазни уређај и враћа интерни системски идентификатор тог захтева (већи од 0), односно код грешке (мањи од нула). Операција wаит суспендује позивајући процес све док операција са датим идентификатором није завршена. Коришћењем ових системских позива, реализовати синхрони излаз:

int sync_write (char* buffer);

Решење

Видети решење 5. задатка из августа 2020. године.

8. задатак

Поставка

Укратко објаснити шта је споолинг.

Решење

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

9. задатак

Поставка

Неки фајл систем подржава имплицитно закључавање фајла приликом његовог отварања. Постоје две врсте кључа: дељени (схаред), који се тражи приликом отварања фајла само за читање (процес који је тако отворио фајл има право само да чита из фајла) и ексклузивни (еxцлусиве), који се тражи приликом отварања фајла и за упис (процес који је отворио фајл има право уписа). Попунити следећу табелу уписивањем ознака оних процеса чији ће захтев за отварањем истог фајла бити испуњен, за сваки од два дата случаја. Процеси постављају захтеве редом наведеним у другој колони, при чему ознака нпр. А-Рд означава да процес А поставља захтев за отварањем фајла за читање, а Б-Wр да процес Б поставља захтев за отварањем фајла за упис

  1. А-Рд, Б-Wр, C-Рд, D-Рд, Е-Wр
  2. А-Wр, Б-Рд, C-Wр, D-Рд, Е-Рд

Решење

  1. А, C и D су успели да отворе фајл.
  2. Само А је успео да отвори фајл.

10. задатак

Поставка

Неки фајл систем користи индексирани приступ алокацији блокова за фајлове са индексима у два нивоа. Први ниво индекса смештен је у сам ФЦБ (филе цонтрол блоцк) и има 256 улаза који директно референцирају блокове са подацима, а још један улаз у ФЦБ указује на један блок са индексом другог нивоа чији улази такође указују на блокове са подацима. Величина улаза у индексном блоку (референце на блок диска) је 8 бајтова, а величина блока на диску је 512КБ. Колика је максимална величина фајла у овом фајл систему?

Решење

  • Број улаза:
  • Максимална величина фајла: