ОС1/Јун 2019

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

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

1. задатак

Поставка

Шта се сматра дистрибуираним рачунарским системом? Навести два примера оваквог система.

Решење

Дистрибуираним рачунарским системом се сматра рачунарски систем у ком учествују више процесора који комуницирају преко мреже и сваки од њих има своју оперативну меморију. Примери оваквог система би били ЛАН и WАН мреже.

2. задатак

Поставка

Коришћењем стандардних библиотечних операција setjmp и longjmp, имплементирати операцију сигнал на бинарном семафору који је реализован класом Event попут оне у школском језгру.

Решење

У функцији dispatch() могу да се користе поменуте функције за промену контекста:

void dispatch() {
    if (setjmp(running->context) == 0) {
        Scheduler::put(running);
        running = Scheduler::get();
        longjmp(running->context, 1);
    }
}

Event::signal() имплементација са променом контекста би онда изгледала:

void Event::signal() {
    Thread* currBlocked = blocked.get();
    if (currBlocked) {
        Scheduler::put(currBlocked);
        dispatch();
    } else {
        value = 1;
    }
}

3. задатак

Поставка

Коришћењем системског позива thread_create који креира нову нит над задатом функцијом, достављајући јој дати аргумент (потпис дат доле), написати функцију sum која креира нит која ће сабрати све елементе задатог низа задате дужине и резултат уписати на тражено место; у случају грешке ове функције враћају негативну вредност.

int thread_create (void(*fun)(void*), void* arg);
int sum (int array[], size_t size, long* result);

Решење

struct SumContext {
    int* array;
    size_t size;
    long* result;
};

void wrapper(void* context) {
    SumContext* ctx = (SumContext*) context;
    long result = 0;
    for (size_t i = 0; i < ctx->size; ++i) {
        result += ctx->array[i];
    }
    *ctx->result = result;
    delete context;
}

int sum(int array[], size_t size, long* result) {
    SumContext* context = new SumContext;
    if (context == NULL) {
        return -1;
    }
    context->array = array;
    context->size = size;
    context->result = result;
    return thread_create(wrapper, context);
}

4. задатак

Поставка

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

process P1
begin
    loop
        while flag2 = true do null end;
        flag1 := true;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;

Решење

Може да се деси да оба процеса прво провере туђи и прођу проверу па онда оба поставе свој flag, чиме ће оба завршити у критичној секцији.

5. задатак

Поставка

Шта је ДЛЛ? Шта је основни мотив за његово коришћење?

Решење

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

  1. Може да се ажурира ДЛЛ одвојено од самих програма који га користе, у случају багова при имплементацији (у супротном би сваки програм морао одвојено да се ажурира)
  2. Оперативни систем може чува једну копију овог кода у оперативној меморији и да механизмом виртуелне меморије користи ту копију у свим процесима у којима је потребна
  3. Смањује се заузеће извршних програма на диску

6. задатак

Поставка

Навести и укратко објаснити проблеме континуалне алокације меморије.

Решење

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

7. задатак

Поставка

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

Решење

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

8. задатак

Поставка

Објаснити шта је синхрони (блокирајући), а шта асинхрони (неблокирајући) позив услуге везане за улазно-излазну операцију.

Решење

Синхрони позив услуге је онај који блокира процес од даљег извршавања док се улазно/излазна операција не заврши у потпуности, и не дозвољава кориснику да ради нешто друго у свом програму том приликом. Асинхрони позив услуге је онај који одмах враћа контролу позиваоцу, па он може да одлучи када да реагује на резултат тог позива.

9. задатак

Поставка

Детаљан приказ садржаја неког директоријума на систему Линуx (команда ls -l) је следећи:

$ ls -l
drwxr--r-- 1 fred editors 4096  drafts
-rw-r--r-- 1 fred editors 30405 edition
-r-xr-xr-x 1 fred editors 8460  edit

У овом приказу, у с линији излаза, власник је fred, а група којој фајл припада је editors.

  1. Да ли ће корисник који је члан групе editors смети да обрише фајл edition?
  2. Да ли ће корисник који није члан групе editors смети да изврши фајл edit?

Решење

  1. Неће, јер он има само дозволе за читање тог фајла.
  2. Хоће, јер је свима дозвољено извршавање тог фајла.

10. задатак

Поставка

Навести и објаснити два начина на које се може повећати максимална величина садржаја фајла код индексиране алокације у односу на варијанту у којој је индекс у само једном блоку на диску.

Решење

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