ОС1/Август 2020

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

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

1. задатак

Поставка

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

void main {
    for (int i=0; (i<3) && fork(); i++);
}

Решење

Одговор: 4

  • П1 прави дете П2 и инкрементира своје i.
  • П2 је дете, те fork() враћа 0 у контексту детета, како услов није испуњен, завршава се for петља.
  • П1 прави дете П3 и инкрементира своје i.
  • П1 прави дете П4 и инкрементира своје i.
  • П3 и П4 се исто завршавају као процес П2.
  • П1 завршава свој for циклус јер је i постало 3.

2. задатак

Поставка

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

process P1
begin
    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
begin
    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;

Решење

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

3. задатак

Поставка

Шта је основна разлика између технике динамичког учитавања и технике преклопа (оверлаyс)?

Решење

Динамичко учитавање алоцира меморију за неки процес тек када му је она потребна. Преклопи функционишу на исти начин али користе се чињеницом да се неки део никад не користи у исто време када и неки други део, већ наизменично, па се они динамички учитавају на истом месту (такорећи, преклапају).

4. задатак

Поставка

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

Решење

Сегментна организација функционише тако што се нађе одређени сегмент, односно базна адреса тог сегмента, у мапи сегмената (СМТ) а затим се дода померај (оффсет). Могуће је да померај прелази величину сегмента те је обавезна провера за овакву грешку. Странична организација с друге стране, заправо и не познаје концепт сегмента. Пресликавање је реализовано тражењем физичке адресе оквира у односу на виртуелну адресу странице која је увек исте величине. Померај такође не може бити већи од странице и он се не сабира са адресом већ се додаје на крају саме адресе.

5. задатак

Поставка

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

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

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

int sync_write (char* buffer);

Решење

int sync_write(char* buffer) {
    int request = async_write(buffer);
    if (request < 0) {
        return request;
    }
    wait(request);
    return 0;
}

6. задатак

Поставка

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

Решење

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

7. задатак

Поставка

Укратко објаснити шта је инкрементални, а шта тотални бекап (бацкуп) фајл система и навести пример оперативног система који има уграђену подршку за инкрементални бекап.

Решење

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