OS Kol1 - Merged PDF
OS Kol1 - Merged PDF
OutputStream or Writer
Abstract classes which have basic methods called write(), used for
writing a single byte / char, or an array of bytes / chars;
OutputStream is used for writing output stream of bytes;
FilterOutputStream
BufferedInputStream
BufferedOutputStream
DataInputString
PrintStream
LineNumberInputStream
StreamTokenizer
PushbackInputStream
Process A 4
Process B
Thread 1 – Producer
empty.acquire();
putItems(buffer);
Thread 2 – Consumer
if(noMoreItems()) {
empty.release();
}
Item = getItem(buffer);
Thread 1: Thread 2:
If(5<=5) // pause
// pause If(5<=5)
// pause val=5+1
val=6+1 // done
proc_O() {
o.acquire(); // Only two atoms can interact simultaneously
siHere.acquire(); // wait for the Si atom to arrive
oHere.release(); // Notify that an O atom is here
ready.acquire(); // Wait for the ready signal
bond();
o.release(); // The process is done
}
proc_O() {
o.acquire(); // Only two atoms can interact simultaneously
oHere.release(); // Notify that an O atom is here
ready.acquire(); // Wait for the ready signal
bond();
o.release(); // The process is done
}
maz_vleguva() {
synchronized (mLock) {
if (maziVnatre == 0) {
toalet.acquire(); // тоалетот се поставува на зафатен
}
maziVnatre++;
wc.vlezi();
}
}
komisijaUpis() {
slobodnoUpisnoMesto.acquire(); //cekame da se oslobodi mesto za komisijata
while(i>0){
studentEnter.release(); //Kazuvame deka moze da vleze student
studentHere.acquire(); //Cekame studentot da gi ostavi dokumentite
//i da ni signalizira deka e ovde
zapishi(); //Go zapisuvame studentot
studentDone.release(); //Kazuvame deka e upisan i moze da zamine
i--; //Go namaluvame brojot na preostanati
studenti
}
slobodnoUpisnoMesto.release(); //stom sme upisale 10 studenti, zaminuvame
}
5
Настани кои доведуваат до креирање на процеси
1. Иницијализација на системот
2. Креирање на процес од некој друг процес
3. Креирање на процес по барање на корисник
4. Иницирање на (batch) пакетни задачи
6
Услови за запирање на процес
1. Нормален излез (своеволно)
2. Излез поради грешка (своеволно)
3. Фатална грешка (насилно)
4. “Убивање” од друг процес (насилно)
7
Родителите креираат деца процеси, децата
може да креираат свoи процеси
Во UNIX се формира хиерархија и таа се
нарекува група од процеси
Windows нема концепт на хиерархиско
формирање. Сите процеси се еднакви
8
Ги дефинира моменталната активност на
процесот
◦ Нов: процесот е креиран;
◦ Активен: инструкциите се извршуваат;
◦ Чека (блокиран): процесот чека да се случи
нешто (В/И или прием на сигнал);
◦ Спремен: процесот чека да му биде назначен
CPU – останатите ресурси му се доделени;
◦ Терминиран: процесот завршил;
Транзиции:
◦ Програмски акции
(системски повици)
◦ OС акции
(распределување)
◦ Надворешни
настани (прекини,
interrupts)
Најниското ниво ги обработува прекините и
врши распределба на извршувањето на
процесите - распоредувач
Повисокото ниво се процеси за кои може да
се смета дека се извршуваат секвенцијално
12
ОС одржува табела на процеси
◦ Еден влез по процес
◦ Претставува низа на структури
Скапа операција
◦ Кернелот го снима контекстот на стариот процес во
неговиот PCB
◦ Кернелот го вчитува контекстот на новиот процес кој
треба да се извршува;
◦ Таа е битен фактор на ефикасноста на ОС и нејзината
цена продолжува да расте со забрзувањето на CPU
◦ Покомплексен ОС – повеќе работа при промена на
контекстот
Прекин од истечено време (clock interrupt)
◦ процесот го потрошил доделеното време
I/O прекин
Мемориска грешка (Memory fault)
◦ мемориската адреса е во виртуелната меморија, па мора
прво да се доведе до работната
Замка (Trap)
◦ се случила грешка
◦ може да доведе процесите да преминат во Exit состојба
Системски повик
◦ отворање на датотека
◦ Крај на процес
Нов процес се креира со fork()
Завршување – exit()
Креира дете - процес
◦ два различни процеса извршуваат копија од еден
ист програм
Детето - процес наследува од родителот:
◦ идентични копии на променливите и меморијата
(адресен простор)
◦ идентични копии на сите CPU регистри (освен
еден)
Двата процеса (родителот и детето) се
извршуваат од истата точка по враќањето од
повикот fork():
◦ за детето - процес fork() враќа 0 (PID за детето)
◦ за родителот - процес, fork() го враќа
идентификациониот број на процесот – дете
Податочен сегмент
Сегмент за код
49
Паралелизам во рамките на даден процес
(Multithreading)
Паралелно извршување во ист адресен
простор
Кооперативност меѓу нишките (не постојат
системски механизми за заштита)
addrX: A(int tmp) {
.
. if (tmp<2)
. B();
addrY: printf(tmp);
. }
.
. B() {
C();
addrU: }
.
. C() {
. A(2); Се чуваат привремени
addrV: } резултати
.
. A(1); Овозможува рекурзија
.
addrZ: exit; Значајно за модерните
јазици
A: tmp=1
addrX: A(int tmp) { ret=addrZ
. Stack
. if (tmp<2) Pointer
. B();
Stack Growth
addrY: printf(tmp);
. }
.
. B() {
C();
addrU: }
.
. C() {
. A(2);
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
. Stack
. if (tmp<2) Pointer
. B();
Stack Growth
addrY: printf(tmp);
. }
.
. B() {
C();
addrU: }
.
. C() {
. A(2);
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B(); Stack
Pointer
addrY: printf(tmp);
. } Stack Growth
.
. B() {
C();
addrU: }
.
. C() {
. A(2);
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B();
addrY: printf(tmp); C: ret=addrU
Stack
. } Pointer
.
. B() {
Stack Growth
C();
addrU: }
.
. C() {
. A(2);
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B();
addrY: printf(tmp); C: ret=addrU
. } A: tmp=2
. ret=addrV
B() { Stack
.
Pointer
C();
addrU: } Stack Growth
.
. C() {
. A(2);
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B();
addrY: printf(tmp); C: ret=addrU
. } A: tmp=2
. ret=addrV
B() { Stack
.
Pointer
C();
addrU: } Stack Growth
.
. C() {
Output:
. A(2);
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B();
addrY: printf(tmp); C: ret=addrU
. } A: tmp=2
. ret=addrV
B() { Stack
.
Pointer
C();
addrU: } Stack Growth
.
. C() {
Output:
. A(2); 2
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B();
addrY: printf(tmp); C: ret=addrU
Stack
. } Pointer
.
. B() {
Stack Growth
C();
addrU: }
.
. C() {
Output:
. A(2); 2
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
.
. if (tmp<2)
B: ret=addrY
. B(); Stack
Pointer
addrY: printf(tmp);
. } Stack Growth
.
. B() {
C();
addrU: }
.
. C() {
Output:
. A(2); 2
addrV: }
.
. A(1);
.
addrZ: exit;
A: tmp=1
addrX: A(int tmp) { ret=addrZ
. Stack
. if (tmp<2) Pointer
. B();
Stack Growth
addrY: printf(tmp);
. }
.
. B() {
C();
addrU: }
.
. C() {
Output:
. A(2); 2
addrV: } 1
.
. A(1);
.
addrZ: exit;
addrX: A(int tmp) {
.
. if (tmp<2)
. B();
addrY: printf(tmp);
. }
.
. B() {
C();
addrU: }
.
. C() {
Output:
. A(2); 2
addrV: } 1
.
. A(1);
.
addrZ: exit;
Извршувачки
контекст
◦ Program counter (PC)
◦ Stack pointer (SP)
◦ Data registers
Процесите ги групираат ресурсите
Код за p1 Код за p2
. . . . . .
balance = balance + amount; balance = balance - amount;
. . . . . .
shared double balance;
Код за p1 Код за p2
... ...
balance = balance + amount; balance = balance - amount;
... ...
Код за p1 Код за p2
load R1, balance load R1, balance
load R2, amount load R2, amount
add R1, R2 sub R1, R2
store R1, balance store R1, balance
Постои натпревар на процеси; кој да ја
изврши својата критична секција
Правило:
Кога еден процес работи во својата критична
секција, ниту еден друг процес нема дозвола да
извршува во својата критична секција
do {
entry_section
critical_section _
exit_section
reminder_section
}
Оневозможи прекини
…
Секоја имплементација мора да биде:
◦ коректна: само еден процес може да ја
извршува критичната секција во еден момент
1
Решението овозможува само еден процес да биде во едно време
во критичната секција.
Процес 0 Процес 1
turn = 0
wait for turn = 0 noncritical_region (enter)
critical_region (enter)
critical_region (finish)
turn = 1
noncritical_region (enter)
noncritical_region (finish)
wait for turn = 0 (правило 2 е прекршено)
Алгоритам 1 не содржи доволно информации за
состојбите на секој процес, туку само на кој процес му е
дозволено да влезе во критичен сегмент
2
Взаемно исклучување со работно чекање
Проблем:
deadlock: (Flag[P1]=true , Flag[P2]=true), бесконечен циклус
Правилото 3 е прекршено.
Со комбинација на претходните два алгоритма
се добива алгоритам што ги исполнува 3те
барања за коректност
Едноставно решение:
◦ Исклучи ги прекините пред почетокот на критичниот сегмент
◦ Вклучи ги прекините по критичниот сегмент
со исклучени прекини, нема временско ограничување за
процесот
Код за p1 Код за p2
disableInterrupts(); disableInterrupts();
balance = balance + amount; balance = balance - amount;
enableInterrupts(); enableInterrupts();
// critical section
lock = FALSE;
// remainder section
}
Exchange инструкција
замена меѓу регистар и мемориска локација
атомична операција, во една инструкција
void exchange(int register, int memory) {
int temp;
temp = memory;
memory = register;
register = temp;
}
Предности
◦ можат да се искористат за било кој број
процесори кои може да делат работна
меморија
На пример:
◦ sleep() да го суспендира процесот додека некој друг не
го разбуди со wakeup()
◦ wakeup() има еден параметар, процесот кој треба да се
разбуди
count=0, read_count
insert_item()
count++
wakeup(consumer) Problem: consumer is
not sleeping (signal is
lost)
wait for next item
insert_item()
…
count =N => sleep Both processes sleep
forever! 39
Решенијата со работно чекање тешко се генерализираат за
покомплексни проблеми
Се користат семафори
S1; wait(sync);
signal(sync); //vo P1 S2; //vo P2
// P1 resumes
// P1 finishes // P2 resumes
1. Проблем на произведувач/потрошувач
(producer/consumer) (проблем на
ограничен бафер дефиниран претходно)
Важно за:
◦ трансакции (пример продавање билети, банки, итн.)
◦ Датотечни системи
Деливо: за читање
Ексклузивно: за пишување
Правила:
◦ Кога се прави ексклузивно заклучување, ниеден друг процес не
смее да има пристап
◦ Кога се прави деливо заклучување, други можат да читаат, но
никој не може да добие ексклузивно заклучување (да запишува)
Тип на работа
◦ Се преферира читање
Ако дојде нов процес за читање тој влегува ако нема тековно
запишување, т.е. влегува иако други веќе чекаат за запишување
◦ Се преферира запишување
Ако дојде нов процес за запишување, тој се опслужува колку што е
можно побргу
Пристигнуваат: r1 r2 r3 w4 r5 w6 r7
се преферира читање се преферира запишување
mutex – контролира промена на променливата rc
db – контролира влез во база податоци
rc – број на процеси за читање
Се користи за моделирање
на ситуации со редови на
чекање каде треба да се
донесе одлука дали
корисникот да чека и да му
се соопшти дека редот е
полн и да се обиде
повторно после некое
време
68
Може да настане проблем бидејќи не се знае
времетраењето на акциите на берберот и
муштеријата.
◦ Муштеријата доаѓа и гледа дека берберот шиша, па затоа
оди во чекалната.
◦ Додека оди накај чекалната, берберот завршува со шишање,
па затоа оди кон чекалната за да провери дали има
муштерии
◦ Бидејќи нема никој во чекалната (муштеријата сеуште не
стигнал во чекалната), берберот оди кон својата столица и
заспива на неа
◦ Сега берберот чека да дојде муштерија, а муштеријата чека
да стане берберот
69
70
Распоредување на процеси
Проф. Д-р Димитар Трајанов
Вон. проф. Д-р Невена Ацковска
Вон. проф. Д-р Боро Јакимовски
Вон. проф. Д-р Весна Димитрова
Доц. Д-р Игор Мишковски
Доц. Д-р Сашо Граматиков
Распоредување на процеси
Мерки за перформанси
Разлики во начините за распоредување
◦ Пакетни системи
◦ Интерактивни системи
◦ Системи кои работат во реално време
Кога повеќе од еден процес се во ready
состојба треба да се одлучи кој од нив ќе
го добие CPU
Делот од оперативниот систем кој ги прави
овие одлуки се нарекува распоредувач
(scheduler)
Распоредувачот работи врз основа на некој
алгоритам за распоредување
3
извршувањето се состои
од циклуси на CPU
извршување и I/O чекање
а) CPU доминантен процес
б) I/O доминантен процес
5
1. Кога процес од извршување доаѓа во
состојба на чекање (I/0 барање или
повикување wait до завршување на процес
дете)
2. Процес оди од состојба на извршување во
состојба спремен (се случил прекин)
3. Процес се менува од состојба на чекање
во спремна состојба (завршил I/0)
4. Кога терминира процесот
Ресурсите можат да бидат поделени во една од двете групи
Типот на ресурси одредува како ОС го управува
1) Non-preemptible ресурси (кои не се одземаат)
◦ Откако е доделен ресурсот, не може да се користи се’ додека
не биде ослободен
◦ Потребни се повеќе инстанци од ресурсот
◦ Пример: Блок на диск
◦ ОС менаџмент: алокација
Одлучува кој процес го добива кој ресурс
2) Preemptible ресурси (кои се одземаат)
◦ Може да е одземен ресурсот, потоа се враќа
◦ Може да има само еден од овој тип ресурс
◦ Пример: CPU
◦ ОС менаџмент: распоредување
Одлучува по кој редослед се опслужуваат барањата
Одлучува колку долго процесот го држи ресурсот
Во дадени периодични временски
моменти (прекини од системскиот
часовник)
8
Проток (throughput) –број на процеси завршени
во единица време
Време до завршување, време во систем
(turnaround time) – времето поминато од
доставувањето до комплетирањето на процесот
CPU искористеност - процент од времето во кое
процесорот е зафатен
Време на чекање – време на чекање (за CPU)
поминато во редицата на спремни процеси
Време на одзив – во интерактивни системи
времето на завршување не е добра мерка. Време
од поднесување барање до прв добиен резултат
Во зависност од типот на системот постојат
различни алгоритми
◦ Пакетни (Batch)
Пресметка на камати, процесирање на случаи кај
осигурителна компанија
Нема корисници
Non preemptive или preemptive со долги временски
периоди
◦ Интерактивни
Preemptive
◦ Во реално време (Real-Time)
треба да бидат исполнети роковите
Понекогаш нема потреба од preemptive
11
За сите системи
◦ Фер – секој процес да добие соодветно време на
CPU
◦ Спроведување на политиката за распоредување
◦ Баланс – сите делови на системот да работат
За пакетни системи
◦ Максимизирај проток
◦ Минимизирај време на завршување (од влегување
во системот до терминирање)
◦ CPU искористеност – CPU да работи цело време
Интерактивни системи
◦ Време на одзив – одговори на барања брзо
◦ Пропорционалност – потребно е да се исполнети
корисничките барања
13
Delay & User Reaction
15
Наједноставен алгоритам
Лесно се програмира. Се користи поврзана листа
Проблеми:
◦ Ако има CPU-bound процес со 1 I/O пристап во секунда,
и многу I/O-bound процеси кои треба да завршат по
1000 I/O операции, а им треба сосема малку CPU.
◦ I/O-bound процесите ќе завршат за 1000 сек затоа што
треба да чека 1000 прекини на секоја секунда кога би се
прекинал CPU-bound процесот поради негово читање од
диск.
◦ Ако насилно се прекинува CPU-bound процесот секои
10ms тогаш I/O-bound процесите ќе завршат за 10 сек.
16
Секој процес кој што ќе премине во состојба на
спремен процес се придружува на крајот на
редицата на спремни процеси за извршување.
Прв започнува да се извршува оној процес кој
што прв влегол во оваа редица на спремни
процеси, втор започнува процесот кој влегол во
редицата по него, итн.
Средното време на чекање со овој алгоритам е
често доста долго.
17
Со овој алгоритам CPU се доделува на оној
процес кој што има најмало очекувано време на
извршување.
Овој алгоритам им дава предност на извршување
на малите процеси.
Доколку процесите се со иста должина, тогаш се
користи FCFS за да се разреши дилемата.
18
Потреба од познавање на времето на
извршување на зададените работи
Пример за извршување
20
Се избира процесот чие што преостанато
време за извршување е помало.
Кога ќе пристигне нов процес во редицата на
спремни процеси, неговото вкупно време се
споредува со преостанатото време на
извршување на процесот кој веќе е во состојба
на извршување.
Ако на новиот процес му е потребно помало
време за да заврши отколку на тековниот
процес, тогаш тековниот процес се прекинува
и новиот процес преминува во состојба на
активен.
21
Round-Robin
Priority Scheduling
Multiple Queues
Shortest Process Next
Guaranteed Scheduling
Lottery Scheduling
Fair-Share Scheduling
23
За секој процес се одделува мала количина CPU
време (временски квантум)
◦ Откако ќе истече времето процесот се вади од редица на спремни
(preempted) и се додава на крајот на редицата на спремни
Ако има n процеси во редица на спремни и
квантумот е q, тогаш секој процес добива 1/n од
CPU времето во порции од најмногу q временски
единици наеднаш. Ниту еден процес не чека повеќе
од (n-1)q временски единици.
Перформанси
◦ q големо FIFO
◦ q мало q мора да е доволно големо во однос на времето
за промена на контекст
а) Листа на процеси спремни за извршување
б) Листа на процеси спремни за извршување откако
процесот B го искористил своето процесорско време
(quantum)
25
Дефинирање на различни приоритети на
процесите според нивната важност
На секој процес му се придружува цел број кој го
означува неговиот приоритет
CPU се доделува на процесот со најголем
приоритет (најмал број највисок приоритет)
◦ SJF е распоредување со приоритети каде приоритетот е
одлучен според предвиденото следно време на
извршување
Проблем Изгладнување – процеси со помал
приоритет може никојпат да не се извршат
Решение како поминува времето му се
зголемува приоритетот на процесот
Намалување на бројот на промени на процеси
Се дефинираат приоритетни класи и секоја
задача добива различно време за извршување
Приоритет Периоди на извршување
највисок 1
највисок-1 2
највисок-2 4
највисок-3 8
30
Процесот може да има променлив приоритет
Распоредувачот на повеќекратни редови со
повратна информација работи според
следните параметри:
◦ број на редови
◦ распоредувачки алгоритам за секој ред
◦ метод кој кажува кога еден процес добива повисок
приоритет
◦ метод кој кажува кога му се намалува приоритетот
на процес
◦ метод кој одлучува во кој ред се сместува процесот
кога му треба опслужување
3 редови:
◦ Q0 – RR со квантум 8 ms
◦ Q1 – RR со квантум 16 ms
◦ Q2 – FCFS
Распоредување
◦ Нов процес влегува во редот Q0. Кога ќе добие
CPU, задачата добива 8 ms. Ако не заврши за 8
ms, се преместува во Q1.
◦ Во Q1 задачата се распоредува и добива
дополнителни 16 ms. Ако не се заврши, се
преместува во Q2.
Верзија на SJF за интерактивни системи
Проблем: кој од процесите кои тековно
работат е најкус?!?
34
Следното време на опслужување со CPU на еден процес
може да се предвиди според времето на опслужување на
истиот процес во минатото
Нека
Tn е должина на n-то опслужување на тој процес
(најсвежа информација, скорешна историја - recent
history),
37
За едноставна реализација на распоредување во
кое ќе се доделат некои предефинирани
проценти на процесорско време се користи
распоредување со Лотарија
Секој процес/корисник добива одреден број на
тикети кои му овозможуваат користење на даден
ресурс
Кога ќе дојде време за распоредување на нов
процес да го користи ресурсот се генерира
случаен број во опсегот од 1 до бројот на
тикети. Процесот кој го има бараниот број на
тикет го добива ресурсот
Процесите имаат по повеќе тикети. Бројот на
тикети е право пропорционален со веројатноста
дека тие ќе бидат избрано, односно ќе го
добијат ресурсот
38
Се користи за решавање на проблемот кога
даден корисник за да добие повеќе процесорско
време може да стартува повеќе процеси
Идејата е да се извршува по еден процес од
секој корисник
Ако еден корисник има 4 процеси А,Б,В,Г а друг
има еден процес Д тогаш процесите ќе се
извршуваат по следниов редослед
◦ АДБДВДГДАД...
Ако првиот корисник треба да добие двапати
повеќе време тогаш извршувањето би било
◦ АБДВГДАБДВГД...
39
Главна цел е работата да се заврши во
дадениот рок
Мора да се пресмета дали перформансите
на компјутерскиот систем задоволуваат
◦ Ако има m периодични настани
◦ Настанот i се случува со периода Pi и за да се
опслужи бара Ci секунди
Тогаш оптоварувањето може да е поднесе
ако
m
Ci
i 1 Pi
1
40
Нека се дадени 5 процеси: A, B, C, D и E и
соодветно нивните времиња на
извршување: 25, 22, 33, 35 и 28. Процесите
пристигнуваат (скоро) истовремено.
Да се нацрта соодветниот Гантограм
(временски дијаграм) за секој од
распределувачките алгоритми дадени во
табелата и да се пополнат соодветните
полиња во неа.
Алгоритми за распределување
Round Robin
FCFS SJF
време на пристигнување
со квантум 10 ms
време на извршување
процес
A 25 0
B 22 0
C 33 0
D 35 0
E 28 0
Гантограм за FCFS е:
Round Robin со
FCFS SJF
време на пристигнување
квантум 10 ms
време на извршување
процес
A 25 0 0 25 22 47 80 105
B 22 0 25 47 0 22 85 107
F1=T0,
F2= α·T1 + (1- α)· F1,
Fk = α·Tk-1 + (1- α)· Fk-1, k=3, 4, ...
Ако α=1/2 се добиваат следните
последователни предвидувања:
T0
T0/2 + T1/2,
T0/4 + T1/4 + T2/2,
T0/8 + T1/8 + T2/4 + T3/2,
◦ Пример:
◦ Процесот A го има печатачот, а бара датотека или нејзин слог
◦ Процесот B ја има датотеката или слогот, а го бара печатачот
Proces B
Proces A
lock(r1);
lock(r2);
…
…
lock(r2); / се обидува
lock(r1); / се обидува
Бидејќи:
Таа го спречува процесот да „напредува“
Блокадата бара интервенција за да биде прекината
Таа ја намалува искористеноста на ресурсите
Сите процеси чекаат
◦ Ниту еден нема да направи настан кој би разбудил некој друг
процес
◦ Обично се чека на ослободување на ресурс, зафатен од друг
блокиран процес
Ресурс од 4 инстанци
Pi држи инстанца на Rj
Pi
Rj
ако графот нема циклуси ⇒ нема блокада
Користено во јадрата на ОС
Мора да се гарантира дека кога
процесите бараат ресурс, тие веќе не
држат друг ресурс.
◦ Мора процесите да бараат и да им се доделат
сите ресурси пред да започне извршувањето,
◦ или да му се доделат ресурси на процесот кога
истиот не држи ниту еден ресурс.
ДА...
... Но зa да се реализира, потребно е да се знаат
некои работи однапред (кои и колку ресурси се
потребни по процес!)
Потребно е системот да има некое
претходно знаење
◦ Наједноставен и најкорисен модел е секој
процес да декларира максимален број на
ресурси од секој тип што може да ги побара.
2
5
4 7
Систем со еден тип ресурси
Вкупно 10 инстанци
◦ Втората ситуација е сигурна,
◦ Третата не е сигурна
ако системот е во сигурна состојба ⇒ нема
блокада
ако системот е во несигурна состојба ⇒ можност
за блокада
одбегнување ⇒ осигурај дека системот нема
никојпат да влезе во несигурна состојба
Ако имаме по една инстанца од секој
ресурс може да користиме граф за
алокација на ресурси
Need Available
ABC ABC
P0 7 4 3 332
P1 1 2 2
P2 6 0 0
P3 0 1 1
P4 4 3 1
Прашања:
◦ Како да препознаеме дека се случува блокада?
◦ Потребен е формален алгоритам (детектирање циклуси
во ориентиран граф, матричен алгоритам)
Како да ја одбереме жртвата?
◦ Да се препознае кој од процесите се блокира...
Направи wait-for граф на чекање
◦ Јазлите се процеси.
◦ Pi → Pj ако Pi го чека Pj.
Состојба на системот?
◦ Може да се добијат ресурсите кои ги држи P0, но нема доволно
ресурси да се исполнат барањата на другите процеси.
◦ Блокада, која се состои од процесите P1, P2, P3, и P4.
Кога и колку често се вклучува зависи од:
◦ Колку често се случува блокада?
◦ Колку процеси треба да се вратат назад (roll
back)?
по еден за секој откачен циклус