Стратегии за справување со застој

Во компјутерските науки, постојат повеќе **стратегии за справување со [[застој]]** (). Тие може да се групираат во 4 категории.
# Занемарување на проблемот целосно *(Игнорирање)*
# Откривање *(детекција)* и опоравување 
# Динамично избегнување
# Спречување

## Игнорирање
Во овој приод, се претпоставува дека ќор-сокакот никогаш нема да се случи. Ова исто така се нарекува алгоритамски ној. Овој пристап првично се користеше од страна на MINIX и UNIX. Ова се користи кога временски интервали помеѓу појавите на deadlock се големи и загубата на податоци која настанала секој пат е поднослива. Тоа се избегнува во многу критичните системи.
## Откривање
Под откривање на ќор-сокак, застоите се дозволени да се случат. Тогаш состојбата на системот се испитува да открие дека настанал застој, а потоа се коригира. Алгоритам е вработен што ја следи алокацијата на ресурси и состојбата на процесите, се враќа назад и ги рестартира еден или повеќе од процесите со цел да се отстранат откриените застои. Откривање на застој што веќе се има појавено е можно, бидејќи ресурсите секој процес ги има заклучено или  моментално тоа што се бара е познато на распоредувачот на ресурси на оперативниот систем. 
Овој пристап е поедноставен од избегнување на застојот или првенцијата на застојот. Тоа е така затоа што предвидувањето на застој пред да се случи е тешко, што е генерално претставува нерешителен проблем, кој сам по себе резултира со запирање на проблемот.
Сепак, во одредени средини, користењето на специфични средства на заклучување ресурси, откривање на застој може да биде decidable. Во општ случај, не е можно да се направи разлика помеѓу алгоритми кои само чекаат за поставување на околностите да се извршат и алгоритмите кои никогаш не би биле извршени, поради застојот.
Откривање на застој техники вклучува, но не се ограничени на проверката на модели. Овој пристап конструира конечена состојба на моделот на кој таа врши напредна анализа и ги наоѓа сите можни терминали поставени во моделот. Секоја од нив претставува застој.
Откако застојот ќе биде решен, може да се коригира со користење на еден од следниве методи:
1. **Процесот Прекинување**: Еден или повеќе процеси кои се вклучени во застојот можат да бидат прекинати. Ние може да избереме да се прекинат сите процеси кои се вклучени во застојот. Ова гарантира дека застојот ќе се реши брзо и со сигурност. Или пак, ние може да избереме, да се откажеме од еден процес во периодот додека застојот не биде решен. Овој пристап има големи трошоци бидејќи по секој прекин алгоритамот мора да открие дали системот сè уште е во застој. На неколку фактори мора да се смета, додека не се избере кандидат за прекин, како што се приоритет и возраста на процесот.
2. **Ресурсот купувањето пред друг**: Ресурсот наменет за различни процеси може сукцесивно да се повика и распредели на други процеси дедека застојот не е решен.
## Превенција
Застојот превенција работи со спречување на еден од четирите Кофманови услови што се случуваат.
• Отстранување на условот взаемното исклучување значи дека ниту еден процес нема да има ексклузивен пристап до ресурсот. Ова се покажува невозможно за ресурси кои не може да се spooled. Но, дури и со spooled ресурси, застојот  може да продолжи. Алгоритми кои го избегнуваат взаемно исклучување се нарекуваат неблокирачки синхронизирани алгоритми.
• Условите застани и чекај или држење ресурси може да бидат отстранети од страна на бараните процеси со цел да побара сите ресурси кои ќе требаат пред стартувањето(или пред да се одлучите на одредена група на операции). Ова претходно знаење често е тешко да се задоволи и, во секој случај, е неефикасно користење на ресурсите. Друг начин е да се бара процесите да побараат средства само кога нема ниедно. Така, прво тие мора да го ослободат сите свои моментални ресурси, пред барањето на сите други ресурси. Тоа исто така е често непрактично. Тоа е така затоа што ресурси може да се изнајдат и остануваат неискористени за долги периоди. Исто така, процесот бара популарен ресурс кој мора да чека на неодредено време, како што еден процес може секогаш да биде наменет за некој процес, што резултира со изгладнување на ресурси. (Овие алгоритми, како што се сериските жетони, се познати како сите-или-никој алгоритми.)
• Условот повикување, исто така, може да биде тешко или невозможно да се избегне како процес мора да биде во можност да има извор на одреден износ на времето, или обработка на исходот може да биде непостојана. Сепак, неспособноста да се спроведе повикување може да пречи на приоритетниот алгоритам. Повикувањето на "заклучениот" ресурс генерално подразбира враќање, и избегнување, сè додека тоа кошта премногу. Алгоритми кои овозможуваат повикување вклучуваат алгоритми  што не се заклучуваат и што не чекаат и оптимисттичката конкурентска контрола.

• Последниот услов е состојбата на кружно чекање. Пристапите кои го избегнуваат кружното чекање вклучуваат оневозможување на прекини за време на критичните секции и со користење на хиерархија за да определи непотполното подредување на ресурсите. Ако очигледна хиерархија не постои, дури и на мемориската адреса на ресурси се користи за да се утврди подредувањето и ресурсите кои  се бараат за зголемување на редот на пребројувањето.  Решението Dijkstra, може исто така да се користи.
## Избегнување
Застојот може да се избегне ако одредени информации за процесите се на располагање на оперативниот систем пред алокацијата на ресурсите, како што се: кои ресурси процесот ќе ги консумира во неговото живеење. За секое барање на ресурс, системот гледа дали доделувањето на барање ќе значи дека системот ќе влезе во небезбедна состојба, што значи состојба која може да резултира со застој. Системот тогаш дава само барања кои ќе доведат до безбедна состојба. Со цел за системот за да може да се утврди дали следната состојба ќе биде безбедна или небезбедна, мора да знае однапред во секое време:
• ресурси кои моментално се на располагање
• ресурси кои моментално се доделени на некој процес
• ресурси кои ќе бидат потребни и објавен од страна на овие процеси во иднина
Можно е за еден процес да биде во небезбедна состојба, но за тоа да не резултира со застој. Поимот безбедна/небезбедна состојба само се однесува на способноста на системот да влезе во ситуација на застој или пак да не влезе. На пример, ако едно барање на процес А што би резултирало со небезбедна состојба, но го издава процесот Б, којшто ќе се спречи кружното чекање, тогаш состојбата не е безбедна но системот не е во застој.
Еден познат алгоритам кој се користи за избегнување на ќор-сокак е Банкарскиот алгоритам, кој бара границата за употреба на ресурси да биде позната однапред.  Сепак, за многу системи невозможно да се знае однапред секој процес што ќе побара. Ова значи дека избегнувањето на застојот често е невозможно.
Два други алгоритми се Wait/Die и Wound/Wait, од кои секој користи техника на симетрично кршење. И во двата овие алгоритми постои еден постар процес (О) и помлад процес (Y). Возраста на процесот може да се утврди со временската ознака на процесот во времето на неговото создавање. Процесите со помал временски формат се постари процеси, додека процесите со поголем временски формат се помлади процеси.

## Поврзано
*Застој

Категорија:Сметачи