ОС1/Јун 2018
1. задатак
Поставка
Објаснити разлику између појмова процес и нит (енгл. тхреад).
Решење
Процес је једно извршавање програма са једним адресним простором. Нит (тхреад) или лаки процес је ток контроле који тече упоредо са другим токовима контроле, али који дели виртуелни адресни простор са неким другим током или токовима контроле.
2. задатак
Поставка
Коришћењем стандардних библиотечних операција setjmp и longjmp, имплементирати операцију wаит на бинарном семафору који је реализован класом Event попут оне у школском језгру.
Решење
Event::wait() {
if(val == 1) {
val = 0;
}
else {
if(setjmp(Thread::running->context) == 0) {
blocked.put(running);
Thread::running = Scheduler::get();
longjmp(Thread::running->context, 1);
}
}
}
3. задатак
Поставка
Коришћењем системских позива fork и exec, написати функцију run која креира процес над програмом у фајлу са задатом путањом и враћа негативну вредност у случају грешке, а pid креираног процеса у случају успеха при fork. Уколико не успе exec, креирани процес-дете треба угасити.
Решење
int run(char* path) {
pid_t pid = fork();
if (pid < 0) {
return -1;
}
if (pid == 0) {
int t = exec(path);
if (t < 0) {
exit(-2);
}
}
return pid;
}
4. задатак
Поставка
Два процеса приступају критичној секцији. Дат је пресудокод једног од њих, који би требало да обезбеди међусобно искључење упосленим чекањем (код другог процеса изгледа аналогно). Да ли ово решење обезбеђује међусобно искључење? Да ли има неки проблем (ако има, који)?
process P1
begin
loop
flag1 := true;
while flag2 = true do null end;
<critical section>
flag1 := false;
<non-critical section>
end
end P1;Решење
Ово решење не ваља јер се дешава ливелоцк односно оба процеса се међусобно закључају и ни један ни други се неће даље извршавати. То се деси када процес П1 постави flag1 на true а затим се деси промена контекста и П2 постави flag2 на true.
5. задатак
Поставка
За коју од ове две технике, динамичко учитавање (дyнамиц лоадинг) или преклопи (оверлаyс), се може очекивати дуже извршавање истог програма у најгорем случају? Прецизно образложити.
Решење
Дуже време извршавања у најгорем случају се може очекивати код преклопа јер ће програм стално учитавати из меморије изнова и изнова, док ће динамичко учитавање заузети више меморије, сваки потребан модул ће учитати по једном.
6. задатак
Поставка
У неком систему примењује се wорст-фит алгоритам континуалне алокације меморије. Иницијално је простор величине 256КБ потпуно слободан за алокацију корисничких процеса. Потом су различити процеси задавали следеће захтеве (словна ознака означава процес који је поставио захтев, бројна ознака означава величину алоцираног простора у КБ, а минус означава гашење процеса и ослобађање његове меморије): А64, Б16, Ц128, Д32, А-, Е8, Ф32, Б-
Одговорити на следећа питања која се односе на стање меморије након ове секвенце захтева:
- Колико је укупно слободних фрагмената?
- Колика је величина најмањег слободног фрагмента?
- Колика је величина највећег слободног фрагмента?
Решење
Једно слово означава 8КБ простора.
AAAAAAAA------------------------ AAAAAAAABB---------------------- AAAAAAAABBCCCCCCCCCCCCCCCC------ AAAAAAAABBCCCCCCCCCCCCCCCCDDDD-- --------BBCCCCCCCCCCCCCCCCDDDD-- E-------BBCCCCCCCCCCCCCCCCDDDD-- EFFFF---BBCCCCCCCCCCCCCCCCDDDD-- EFFFF-----CCCCCCCCCCCCCCCCDDDD--
- Слободних фрагмената: 2
- Најмањи слободан фрагмент: 16КБ
- Највећи слободан фрагмент: 40КБ
7. задатак
Поставка
Приликом пресликавања виртуелне адресе, процесор је генерисао изузетак због покушаја уписа на ту адресу који је у дескриптору странице означен као забрањен. Оперативни систем ипак неће угасити тај процес. Прецизно објаснити зашто.
Решење
Неће угасити програм јер се заправо ради о техници цопy-он-wрите односно копирања на упис. У овој техници, ММУ види ту меморију као забрањену за упис. Приликом генерисања грешке, ОС проверава да ли је забрањена, и како види да заправо није није, то значи да се ради о техници копирања на упис па ће оперативни систем копирати страницу и рећи ММУ да је дозвољена за упис.
8. задатак
Поставка
Навести три услуге везане за реално време које оперативни систем може да нуди и предложити и кратко објаснити функције – системске позиве за те услуге.
Решење
- Информација о текућем реалном времену:
тиме_т тиме (тиме_т* тлоц);- Враћа број секунди које су протекле од 1. 1. 1970. у 0 часова. Постоје и библиотечке функције у
time.hкоје враћају “календарско” време, растављено на датум и сат итд, а ослањају се на овај системски позив:asctime,ctime,gmtime,localtime.
- Суспензија позивајућег процеса (“успављивање”) за задато време
унсигнед инт слееп (унсигнед инт сецондс);
- Чекање на догађаје, услове или на синхронизационе примитиве, али временски ограничено (тзв. тимеоут контроле); ако се процес не деблокира у задатом времену, биће деблокиран због истека временске контроле; нпр. за семафоре:
инт сем_тимедwаит (сем_т *сем, цонст струцт тимеспец *абс_тимеоут);
9. задатак
Поставка
Ако је текући директоријум неког процеса /a/b/c, која је апсолутна путања до фајла који тај процес отвара давањем путање d/../../e/f.txt?
Решење
Рашчланимо релативну путању на делове:
d: идемо у директоријумd, сада је путања/a/b/c/d..идемо један директоријум изнад, сада је путања/a/b/c..идемо један директоријум изнад, сада је путања/a/beидемо у директоријумe, сада је путања/a/b/ef.txtпосећујемо фајлf.txt, крајња путања је/a/b/e/f.txt
10. задатак
- Овај задатак није решен. Помозите СИ Wики тако што ћете га решити.
Поставка
Фајл систем примењује уланчану алокацију, с тим да се и слободни блокови уланчавају у листу. У структури ФЦБ поље head садржи број првог блока са садржајем фајла, а поље size величину садржаја. Функција језгра free прима као аргумент број првог блока у ланцу блокова које треба прогласити слободним. Написати функцију језгра truncate која брише садржај фајла на чији FCB указује аргумент.