ОС1/Август 2020 — разлика између измена
< ОС1
Пређи на навигацију
Пређи на претрагу
(Ваљда сви одговори сем петог задатка.) |
мНема описа измене |
||
Ред 16: | Ред 16: | ||
#*P1 завршава свој ''for'' циклус јер је ''i'' постало 3. | #*P1 завршава свој ''for'' циклус јер је ''i'' постало 3. | ||
#['''3'''] Шта је проблем следеће имплементације критичне секције упосленим чекањем? | #['''3'''] Шта је проблем следеће имплементације критичне секције упосленим чекањем? | ||
#:<syntaxhighlight> | #:<syntaxhighlight lang="milo"> | ||
process P1 | process P1 | ||
begin | begin |
Верзија на датум 29. јун 2021. у 13:55
- [3] Ако се над следећим програмом креира један процес, колико ће укупно процеса бити креирано (укључујући и тај један почетни), под претпоставком да су сви системски позиви успели?
void main { for (int i=0; (i<3) && fork(); i++); }
- Одговор: 4
- Поступак:
- P1 прави дете P2 и инкрементира своје i.
- P2 је дете, те fork() враћа 0 у контексту дете, како услов није испуњен, завршава се for циклус.
- P1 прави дете P3 и инкрементира своје i.
- P1 прави дете P4 и инкрементира своје i.
- P3 и P4 се исто завршавају као процес P2.
- P1 завршава свој for циклус јер је i постало 3.
- [3] Шта је проблем следеће имплементације критичне секције упосленим чекањем?
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с)?
- Одговор: Динамичко учитавање алоцира меморију за неки процес тек када му је она потребна. Преклопи функционишу на исти начин али користе се чињеницом да се неки део никад не користи у исто време када и неки други део, већ наизменично, па се они динамички учитавају на истом месту. Такорећи се преклапају.
- [3] Укратко објаснити зашто је код сегментне организације виртуелне меморије обавезна провера прекорачења границе сегмента приликом сваког адресирања, а код станичне организације та провера не постоји.
- Одговор: Сегментна организација функционише тако што се нађе одређени сегмент, односно базна адреса тог сегмента, затим се дода померај (offset). Могуће је да померај прелази величину сегмента те је обавезна провера за овакву грешку. Странична организација с друге стране, заправо и не познаје концепт сегмента. Пресликавање је реализовано тражењем физичке адресе оквира у односу на виртуелну адресу страницец која је увек исте величине. Померај такође не може бити већи од странице и он се не сабира са адресом већ се додаје на крају саме адресе.
- [3]У неком систему постоје следећи системски позиви:
int async_write (const char* buffer); void wait (int request_id);
- Операција async_write асинхроно задаје операцију излаза датог низа знакова на неки излазни уређај и враћа интерни системски идентификатор тог захтева (већи од 0), односно код грешке (мањи од нула). Операција wait суспендује позивајући процес све док операција са датим идентификатором није завршена. Коришћењем ових системских позива, реализовати синхрони излаз (функција треба да враћа 0 у случају успеха, а код грешке у супротном):
int sync_write (char* buffer);
- Решење:
- [3] Какав проблем може настати код уланчане алокације фајла ако се грешком промени садржај блока у ком је смештен део садржаја неког фајла?
- Одговор: У случају када се деси грешка на садршај неког фајла, та грешка може оштетити сам показивач на следећи елемент у листи те или прекинути уланчану листу или грешка буде таква да сада то показује на неки део неког другог фајла. Па када буде читао фајл може наставити на тамо.
- [3] Укратко објаснити шта је инкрементални, а шта тотални бекап (backup) фајл система и навести пример оперативног система који има уграђену подршку за инкрементални бекап.
- Одговор: Тотални бекап копира све фајлове из једног фајл система или његовог дела независно од тога да ли су били измењени од прошлог бекапа или нису. Неки фајлови се беспотребно копирају. Инкрементални бекап копира само измењене фајлове. Mac OS X има подршку инкременталног бекапа, тако што или експлицитно или аутоматски покрене бекап када се повеже хард диск уређај који је за то намењен.