ОС1/Јул 2019

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

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

1. задатак

Поставка

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

Решење

Мултипроцесорски систем је систем са више процесора који имају заједничку меморију. Симетричан мултипроцесорски систем значи да су сви процесори опште намене, једнаки и имају исто време приступа оперативној меморији. Асиметрични мултипроцесорски систем има и специјализоване процесоре или процесоре са различитим временом приступа меморији.

2. задатак

Поставка

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

Решење

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

3. задатак

Поставка

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

int sum (int array[], size_t size, long* result);

Решење

class SumThread: public Thread {
    public:
        SumThread(int* arr, size_t _size, long* res): array(arr), size(_size), result(res) {}
    protected:
        void run() {
            long res = 0;
            for (size_t i = 0; i < size; i++) {
                res += array[i];
            }
            *result = res;
        }
    private:
        int* array;
        size_t size;
        long* result;
};

int sum (int array[], size_t size, long* result) {
    if (result == nullptr) return -1;
    SumThread* st = new SumThread(array, size, result);
    st->start();
    delete st;
    return 0;
}

4. задатак

Поставка

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

Решење

shared var turn : integer := 1, flag1, flag2 : boolean := false;
process P1
begin
    loop
        flag1 := true;
        turn := 2;
        while flag2 and turn = 2 do null;
        <critical section>
        flag1 := false;
        <non-critical section>
    end
end P1;
process P2
begin
    loop
        flag2 := true;
        turn := 1;
        while flag1 and turn = 1 do null;
        <critical section>
        flag2 := false;
        <non-critical section>
    end
end P2;

5. задатак

Поставка

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

Решење

Зато што је приступ хард диску врло спор те ће таква имплементација знатно утицати на перформансе. Ово се примењивало на Wиндоwс 3.1, и било је врло споро. Данас, сwаппинг се користи када нема довољно места у оперативној меморији.

6. задатак

Поставка

Шта је компакција код континуалне алокације меморије?

Решење

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

7. задатак

Поставка

Виртуелни адресни простор је величне 8ГБ, а адресибилна јединица је 16-битна реч. Страница је величине 4КБ, а пресликавање је у два нивоа, с тим да ПМТ првог нивоа има два пута мање улаза него ПМТ другог нивоа. Приказати структуру виртуелне адресе и означити ширину сваког поља.

Решење

ВА(32): Паге1(10), Паге2(11), Оффсет(11)

8. задатак

Поставка

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

Решење

Основне услуге јесу писање и читање.

int readBlock(int fd, BlockNo block, void* buffer);
int writeBlock(int fd, BlockNo block, void* buffer);

9. задатак

Поставка

Објаснити концепт АЦЛ (аццесс цонтрол лист).

Решење

Да би се фајлови заштитили, један начин је да се ограниче права приступа корисника. Потребно је дефинисати који корисник (или група корисника) може да извршава коју операцију. Један приступ је сваком фајлу придружити листу ових парова (корисник и операција). Таква листа је листа контроле приступа (АЦЛ).

10. задатак

Поставка

Фајл систем примењује ФАТ алокацију, с тим да се и слободни блокови уланчавају у листу. У структури ФЦБ поље head садржи број првог блока са садржајем фајла, а поље size величину садржаја. Глобална променљива fat_free_head садржи број првог блока (главу листе), а fat_free_tail последњег блока (реп листе) у ланцу слободних. ФАТ је у меморију учитана као низ. Написати функцију језгра truncate која брише садржај фајла на чији ФЦБ указује аргумент.

Решење

const unsigned long FAT_SIZE = ...;
unsigned long FAT[FAT_SIZE];

void truncate(FCB* file) {
    unsigned long b = file->head;
    for (unsigned long i = 0; i < file->size; ++i) {
        unsigned long next = FAT[b];
        FAT[b] = 0;
        // Ovde se smatra da fat_free_tail pokazuje na blok 0 kada nema slobodnih blokova.
        if (fat_free_tail) {
            FAT[fat_free_tail] = b;
            fat_free_tail = b;
        } else {
            fat_free_head = b;
            fat_free_tail = b;
        }
        b = next;
    }
    file->size = 0;
    file->head = 0;
}