Развитие на ос. Основни типове


Езикова конструкция”критична секция”(КС)



страница3/8
Дата17.10.2018
Размер2.7 Mb.
#90651
1   2   3   4   5   6   7   8

Езикова конструкция”критична секция”(КС)- Използването на средства от високо ниво помага да се избегнат грешките, зависещи от времето. Тя работи с обща променлива, която трябва да е защитена. Променлива, достъпна в КС на няколко процеса, трябва да се декларира като делим ресурс: Var име на променлива: shared тип. Всяка КС, в която тази променлива е достъпна се описва: region име на променлива do оператор. Предимството е,че за всяка консрукция region се генерират необходимите семафори: P(c_sem); оператор;V(c_sem). Освен това се прави проверка дали достъпът до общите променливи се прави в КС. КС могат да се влагат, но в този случай може да възникне мъртва хватка: Ако и двата процеса влизат едновременно в КС, те ще изпаднат в мъртва хватка.Тази конструкция не може да се използва за по-общи схеми за сихронизация, затова се разширява с условие: Условна КС-При взаимодействието на процесите може да възникне следният случай: процес изменя стойноста на променлива, друг процес чете новата стойност. Но, вторият процес не трябва да чете докато първият не даде нова стойност и обратното първият процес не трябва да дава нова стойност, докато вторият процес не прочете старата стойност. В този случай се прилага конструкцията-условна КС, която позволява на процеса да чака до изпълнението на произволно синхронизиращото условие- булев израз, чиято стойност се проверява при влизане в КС. Тя има вида: region име на променлива when условие do оператор. Ако тя е true, операторът се изпълнява. Ако не- се задържа, за да могат групи процеси да влязат в своите КС, да изменят общата променлива, оттук и някое условие. Затова когато процес напусне КС, всички блокирани процеси проверят отново условията си и в КС влиза този, чието условие е изпълнено. Иначе процесите отново се блокират. Най-просто е решението с два семафора и FIFO-опашка-то позволява блокиране на процесите в началото на КС, но тя губи време и трудно се реализира. Когато процес влезе в критичната си секция, той може да бъде задържан от await, докато не се изпълни условието и няма друг процес в КС. Тя действа като горепосочената и има вида: region име на променливата do begin … await(условие); …; end;

За да се избегне мъртвата хватка, която може да настапи при “пбядващите философи”, се приема , че всеки от тях взима двете вилици едновременно. В масив се съхранява броя на свободноте вилици около всяка чиния. Когато двамата съседи на философ ядат, тои е нула, когато само единият яде е 1, и когато и двамата мислят – 2.

Var vilitsi: shared array {0..4} of 0...2;

Procedure filsof ( i : 0..4)

Begin

Otlqvo := (i – 1) mod5



Otdqsno := (i+1) mod 5;

Repeat


Misli

Region vilitsi do

Begin await vilitsi[i] = 2;

Vilitsi[otlqvo] := vilitsi [otlqvo] -1;

Vitsi[otdqso] := vilitsi[otdqsno] -1; end;

Region vilitsi do

Begin

Vilitsi[otlqvo] := vilitsi [otlqvo] +1;



Vitsi[otdqso] := vilitsi[otdqsno] +1; end;

Until false



End.

Монитори- обобщение на класове. Имат 3 части: декларации на константи, типове и локални процедури. Предполага се, че при пускане на програмата се изпълнява инициализиращата част на всички монитори. Всички променливи, декларирани в монитора, са локални, освен процедурите, означени с entry (мониторни процедури). Всяка процедура представлява операция над общите данни и може да се извиква извън монитора чрез идентификатор с форма: име на монитора.име на процедура. Не могат да работят няколко процедури- само една процедура може да се извика, затова има опашка от чакащи. Затова само един процес може да има в даден момент достъп до общите променливи. Обобщено:1Мониторните процедури са единствените операции, които процесите могат да изпълняват над общите променливи. 2. Операциите, дефинирани в мониторите, са взаимно изключени, така че процес, извиквайки мониторна процедура, влиза в КС. КС са обединени в тялото на монитора. Допълнителният механизъм за синхронизация въвежда променливи тип условие (condition). При декларирането на тези променливи се организира опашка, в която се поместват блокираните процеси. Над тези променливи могат да се изпълняват две операции: wait-(име на условието)-записва процеса в опашката и и се блокира, като дава възможност на други процеси да извикват мониторните процедури; signal(име на условието)-възобновява изпълнението на един блокиран процес, а в случай, че опашката е празна-няма никакъв ефект. Мониторът работи, ката двоичен семафор-при заемане на ресурси се изпълнява функцията Р, а при освобождаване функция V. Има две условия за установяване коректността на системата.1)извикванията на монитора да са в коректна последователност 2) некоопериран процес няма да игнорира взаимното изключване, организирано от монитора и да се отпита да вземе общия ресурс, без да използва протокола за достъп. Проблем: вложеното викане на монитори-ако монитор М1 вика монитор М2, взаимното изключване в М1 продължава, докато трае изпълнението в М2. Две следствия: 1)всеки процес, извикващ М1, ще бъде блокиран пред М1 през това време. 2)ако процес влезе в опашката на условие в М2, може да настъпи мъртва хватка. Реда на възобновяване на процесите може да бъде подобрен като се приложи условно чакане от вида wait(х,с), където с е цял израз, който се изчислява при изпълнението на wait. Стойността на с ще представлява приоритетът, който се запомня заедно с името на блокираният процес. При изпълнението на signal(x) ще се възобнови процес с най-малка стойност на с. Недостатъкът на мониторите, че при използването им се централизира управлението, което стеснява класа от задачи,където може да се прилагат. Освен това използването им в разпределени системи и големи общи ресурси е сложно и трудно.

Пример:читатели и писатели-Във всеки момент, когато писател пише никой читател не може да чете. Когато читател иска да чете, той извиква процедурата “начало на четене”, а след като завърши работа процердурата “край на четене”.След влизане в “начало на четене” читател може да продължи, ако няма писател, извършващ в този момент запис или чакащ в опашка за запис.Второто изискване е необходимо, за да се избегне безкрайното отлагане на чакащи писатели. Процедурата завършва със сигнализиране четене-разрешено, за да може друг чакащ процес да започне четене. Следващият читател се активизира и също сигнализира на намиращият след него в опашката процес за възможността да продължи(когато се изпълни signal, мониторът не се освобождава за влизане на нови процеси, а в мониторът се активизира процес, блокиран при условието).

Type 4itateli_i_pisateli =monitor ;

Var 4itateli: integer;

Nqkoi_pi6e : Boolean;

4etene_razre6eno, pisane_razre6eno: condition;

Procedure entry na4alo_na_4etene;

Begin

If nqkoi_pi6e or not empty(opa6ka pisane_razre6eno) then wait(4etene_razre6eno); 4itateli:= 4itateli +1; Signal(4etene_razre6eno); end;



Procedure entry krai_na_4etene;

Begin


4itateli:= 4itateli -1;

if 4itateli = 0 then signal(pisane_razre6eno); end;

procedure entry na4alo_na_zapis;

Begin


If 4itateli > 0 or nqkoi_pi6e then wait(pisane_razre6eno);

Nqkoi_pi6e := true; end;

Procedure entry krai_na_zapis;

Begin


Nqkoi_pi6e := false;

If not empty(opa6ka 4etene_razre6eno) then signal(4etene_razre6eno)

Else signal (pisane_razre6eno); end;

Begin


4itateli:= 0; nqloi_pi6e:= false; end.

Подобна верижна реакция продължава, докато не се активизират всички читатели. По време на изпълнението на веригата нови идващи процеси се включват в опашката на за чакане пред монитора. По време на на изпълнение на веригата на активизация дори новоприходящите читатели не могат да влязат в монитора-съгласно правилот, че процесите, получили вече сигнал за активизиране, се обслужват по-рано от новите процеси.След завършване на четенето(което не е безкрайно) се влиза в процедура “край на четене”-при което читатели=читатели-1.След многократно изпълнение –читатели=0 и тогава се сигнализира “писане разрешено”.Когато получи възможност за работа, писателя прави “някой пише”=true , с което блокира останалите активирани писатели и читатели.Когато завърши работа, той извиква процедура “край на запис”,където се прави “някой пише”=folse и мониторът се открива за други процес.



Задачи и рандеву в АДА. Задачата task в Ада е програмен модул, който може да се изпълнява асихронно и да взаимодейства с други задачи(последователен процес). Има извикваща и обслужваща задача, за да се осигури взаимодействието е вграден механизъм наречен рандеву(взаимно изчакване). Извикващата програма се обръща към определен вход(entry) на обслужващата задача подобно на процедура с или без параметри. Опростено обръщение-име на задача.име на вход .Обслужващата задача за да приеме извикването, изпълнява специален оператор accept s форма accept имена вход[формални параметри][ do оператори {КС} end ] [име на вход]; Ако при изпращането на заявка към обслужващата задача, последната още не e издала команда accept,извикващата задача трябва да чака. Обратно ако при изпълнението на accept няма постъпила заявка за съответният вход,обслужващата чака до постъпването на такава. “Рандеву”настъпва в момента, когато извикването се приеме. Извикващата задача чака, докато обслужващата задача изпълни действията, включени в accept. Ако има резултати, те се връщат чрез параметрите и двете зададчи продължават независимата си работа. По този начин се осъществява синхронизацията и комуникацията между два процеса.Всяко описание на задача включва спецификация(задава името на задача и имена на входовете) и тяло(описва действията изпълнявани при всяко извикване).

Спецификация:

task mailbox is

entry send(inmail: in message);

entry receive(otmail: out message);

end;


Тяло

Task body mailbox is

buffer:message;

begin


loop

accept send(inmail: in message) do

buffer := inmail; end;

accept receive( outmail: out message) do outmail:= buffer; end;

end loop;

end mailbox;



Съществуват и по-сложни варианти на accept- условен(защитен) –форма:when булев израз accept … и селктивен оператор-форма: select [ when булев израз] accept [ оператори ] {or [ when булев израз ] accept } [ оператори ] [ else оператори ] end select; . Всички булеви изрази се изчисляват и ако има стойност true, съответният accept се бележи като открит. Когато могат да се избират няколко оператори се определя един случайно.Ако не може да бъде избран никой се изпълнява частта след else .Ако няма открити оператори и няма else настъпва изключителна ситуация. Като алтернатива в select вместо accept може да се използва delay (задържане) или terminate (завършване). Първата алтернатива се прилага, когато след указано в секунди закъснение не е избрана никаква друга. Втората алтернатива се избира, когато всички извикващи задачи завършват-тогава и обслужващата задача завършва. Ада има и много други допълнителни възможности- например задачите могат да имат приоритет, задача може принудително да прекрати друга задача(abort).

CSP процеси. Програмата на CSP съдържа фиксиран брой процеси и комуникация настъпва, когато при изход един процес именува друг като получател, а втория процес именува първият като източник за вход. Прехвърлянето на съобщение настъпва само, когато и двата процеса изпълняват съответните команди за вход и изход. Съобщенията имат типове. Този механизъм реализира синхронизацията и комуникацията между процесите.Команда за изход: потребител !х (изпрати х към потребителя). Команда за вход: производител ?у (получи от производител). Последователното управление се извършва от защитени конструкции, включващи защита (декларации, булеви изрази, команди за вход-всичките на задължителни) и последователност от команди след знака . Ако някой от булевите изрази има стойност folse (защитата пропада) или именуваният процес в командата за вход е завършил, тогава процесът, в кйойто е дефинтрана защитената команда, се изхвърля. В противен случай се изпълнява списъкът от команди (след изпълнението на командата за вход- ако има такава).

Процеси и канали в ОКАМбазиращ се на концепция за паралелност и комуникация и твърде близък до принципите в CSP. Основните еденици в програмите на ОКАМ са три примитивни процеса: присвояване, вход и изход. Присвояващия процес има вида: v:=e; като v получава стоиността на e . Процесите за вход и изход работят с така наречените канали, чрез които комуникират процесите. Те имат съответно вида: име на канала !променлива {процес за вход} , име на канала?израз {процес за вход} . Тяхното действие се състои в запис на стойност от канала в променливата (при вход) или изпращане на стойността на израза в канала (при изход). Каналите се декларират локално чрез служебна дума CHAN във всеки процес и съществуват, докато той се изпълнява.Каналите позволяват еднопосочна комуникация. За двупосочна комуникация са необходими два канала. Всеки канал е свързан само с два процеса поради, което не възникват конфликти при използването им. Конструкторът seg предизвиква последователно изпълнение на неговите компоненти, а par –паралелно. Те терминират, когато или посладният компонент се изпълни (seg),иливсички (par). Има също конструктори if, while, alt(алтернативен подобно на CSP и ada). Възможно е да се приписват приоритети на процесите (вместо par се използва pri_par), като приоритетът се определя от мястото в списъка (в началото е този с най-голям приоритет).

Съпрограми. Съпрограмите не са подчинени модули и позволяват симетрично предаване на управлението. Превключването на процесора от една съпрограма към друга става явно с оператор resume х. Възобновяването на изпълнението на съпрограмата става от точка, където тя е била преустановена споследния resume (трябва да се запази достатъчно информация за връщане), пак с помоща на resume Така съпрограмите се изпълняват квазипаралелно (сихронизацията им става явно с resume, за разлика от средствата, използвани за сихронизация на процеси). Съпрограмите осигуряват ефективно моделиране на процеси и именно затова се използват в програмните езици.

4.МЪРТВА ХВАТКА(МХ) -Безизходна ситуация, при която два или повече процеси чакат за условия, които никога няма да настъпят, и взаимно се блокират. Тя може да настъпи когато ресурсите се разпределят между много потребители, всеки от които има право за управление на отделния му ресурс. Ресурсите биват: постоянни (многократно използваеми)- устройствата, и временни(потребими)- съобщенията ресурси. Постоянните ресурси са физически (процесор, памет, устройства) или логически(файлове от данни, програми, таблици). Често възниква МХ при ресурси, които се “закрепват” към индивидуален процес за монополно използване за определено време(магнитна лента). Причините за възникване на МХ при работа с ресурсите ще бъдат изложени със следния пример.Предполага се, че процес заявява ресурс преди да го използва.Ако ресурсът не е свободен, процесът се блокира. т.е.заяви ресурс, използвай ресурс, освободи ресурс.Нека два процеса А и Б да споделят два ресурса p1 и p2.Всеки един от тях е заявил и е получил по един ресурс, след което е заявил и чака за следващ ресурс, но не освобождава своя и възниква мъртва хватка.
УСЛОВИЯ ЗА ВЪЗНИКВАНЕ НА МХ–те трябва да се изпълняват едновременно

1.Взаимно изключване- в даден момент само за един процес може да използва даден ресурс.

2.Очакване на ресурс- процесите държат вече отделените им ресурси и в същото време очакват да получат допълнителни ресурси.

3.Непреразпределение- ресурси не могат да бъдат отнети – те се освобождават само от процеса, който ги притежава, след като той изпълни задачата си.

4.Кръгово (циклично очакване)- процесътдържи ресурс и чака за ресурс (ресурси), държащ се от предшестващия го.

ГРАФ ЗА РАЗПРЕДЕЛЕНИЕ НА РЕСУРСИТЕ

Мъртвите хватки могат да бъдат описани в ориентиран граф- граф на разпределение на системните ресурси. Множеството върхове съдържа всички процеси и всички ресурси в системата. Всеки процес се представя в квадрат, а всеки тип ресурс с кръг. Броят на единиците на всеки тип ресурс се отбелязва с точки в кръга. Всяко ребро може да бъде ориентирано от процес към ресурс, означаващо че процес е заявил елемент на ресурс и чака да го получи. Обратно ако реброто е насочено от ресурс към процес,то ресурсът е разпределен на процеса. Ребрата се наричат съответно заявяващо и присвояващо.Заявяващо ребро се включва в графа, когато процес заяви елемент на ресурс.Когато заявката се изпълни, по незабавно се трансформира в присвояващо ребро.Когато процеса освободи ресурс(елемент на ресурс), присвояващото ребро се унищожава. Безизходна ситуация, тъй като съществува цикъл:

Ако пък типът ресурси съдържа няколко идентични единици, тогава цикълът не води непременно до МХ. Той е необходимо, но не достатъчно условие за съществуване на МХ. (графът е същия, но от р1 излиза стрелка и към В)

Когато в графа няма цикъл, системата не е в състояние на МХ.Ако има, системата може да бъде или да не бъде в състояние на МХ.



СРАТЕГИИ ЗА БОРБА С МЪРТВАТА ХВАТКА-3 групи:

-Стратегията на предпазване от МХ -изключва възникването на МХно се изразходват допълнителни ресурси

-Стратегията на избягване- гарантира,че макар да е възможна МХ тя не възниква за конкретна група процеси и заявки, изпълнявани в даден момент

-Стратегията на разпознаването на МХ- следва възстановяване на системата. Извод: МХ възникват рядко и по- скъпо е да се предотвратява или да се избягва възможността за появяването им, отколкото да се разпознаят и да се извърши възстановяване.



ПРEДПАЗВАНЕ-ако се наруши някое от условията- няма да настъпи МХ.

1то не може да се наруши, тъй като в системата трябва да се работи и със закрепени ресурси(магнитни ленти и др.) или с общи променливи в критични секции. За да се наруши 2то за дадения процес трябва да се заявят всичките му необходими ресурси. Алтернативно процесът може да заявява ресурси само тогава когато няма никакви ресурси.Недостатъци:неефективно използване на ресурсите,и възможно безкрайно отлагане(неопределено дълго чакане).За да се наруши 3тото условие-процесът, притежаващ ресурс и получил отказ от допълнителен, е длъжен да освободи своите ресурси и при необходимост да ги заяви всичките. Недостатък: възможно е с освобождаването на ресурс да се загуби работата извършена до този момент.Възможен е и модифициран:когато процес заяви допълнителни ресурси и те не са на разположение проверява се те дали не се държат от друг процес чакащ за ресурси.Ако да, те се отнемат от чакащия процес и се дават на заявяващия процес.Ако ресурсите не са свободни или не се държат от чакащ процес, заявяващия процес трябва да чака.При това той освобождава ресурси само, ако друг процес ги заяви.Изключване на 4то условие- на всички типове ресурси се предписват уникални номера. Процесите са длъжни да заявяват ресурси в реда на нарастване на номерата, т.е. ресурсите се разпределят йерархично.Процес получил ресурс на едно ниво, може да заяви ресурс само от по - високо ниво.Той може да освободи ресурс на дадено ниво, само след освобождаване на ресурсите от по – горните нива.Недостатъци:загуба на ефективност може да има, ако на процес са необходими ресурси в ред отличаващ се от този в йерархията.Тогава той ще получава и държи ресурси, дълго преди да ги използва.



ИЗБЯГВАНЕ НА МХ

А
ко системата е в безопасно(сигурно) състояние, могат да се обходят всички опасни състояния. Проверяват се последователно необходимите ресури- ако водят към опасно с-е, заявката се отклонява, ако не- тя се изпълнява. Класическото решение е известно като алгоритъм на банкера. Банкерът иска да раздели определен капитал (в една валута) от абстрактни парични(р-) единици между определен брой клиенти. Всеки клиент указва максималната сума. Обикновено капитала на банкера е по малък от колкото сумарните нужди на клиентите, тъй като банкерът предполага, че всички няма да вземат максималният заем. По време на транзакцията клиентът може да получава(или да връща) последователно по една p-единица капитал и няма гаранция,че ще върне част от заема, докато получи целия заем.Понякога клиента може да чака за следваща единица, при което банкера гарантира, че времето за чакане е крайно.Текущия заем не може да превишава максималната нужда на клиента.Ако банкера е способен да осигури максималният заем на клиента, клиента гарантира, че ще завърши транзакцията си и ще върне заема в краен интервал от време. Състоянието е безопасно ако банкерът може да осигури на своите клиенти довършването на всички техни транзакции в крайно време.В противен случай състоянието е опасно.



Алгоритъмът на банкера: алг. за единични ресурси

Procedure Банкер(капитал:integer; заявен заем, получен заем:array[1..N] of integer;

var състояние:boolean )

var I:integer;

може да завърши:array[1..N] of boolean;

продължи:boolean;

begin

{ оценка на текущото състояние на банкера и клиентите}



наличност:=капитал;{начален капитал на банкера}

for I:=1 to N do{за всички N клиенти }

begin

наличност:=наличност – получен заем[I];



може да завърши[I]:=false;{не е известно дали ще завърши транзакцията}

остатък[I]:=заявен заем[I] – получен заем[I];

end;

продължи:=true;



while продължи do{симулация на довършването на транзакциите}

begin


продължи:=false;

for I:=1 to N do

begin{проверка на възможност за завършване на транзакциите на всеки клиент}

if (not) може да завърши[I](and (остатък[I]<=наличност))

then{може да завърши ако получи остатъка}

begin


може да завърши[I]:=true;

{симулира се връщането на заема}

наличност:=наличност+получен заем[I];

продължи:=true;

e
nd;

end;


end;

{всички транзакции са довършени или повече транзакции не могат да бъдат завършени}

if наличност:=капитал then състояние:=true{безопастно}

else състояние:=false;{опасно}

end.
ОТКРИВАНЕ НА МХ- състои се в установяване на факта и определяне на процесите и ресурсите въвлечени в ситуацията. Тези алгоритми се използват в системи, изпълняващи първите 3 условия.След това те определят не съществува ли кръгово очакване.Алгоритмите могат да се изпълняват с различна честота.Ако безизходни ситуации настъпват много рядко, тяхното разпознаване се възлага на оператора управляващите програми за предпазване, избягване или откриване на МХ стават излишни. Възможно е оператора да не забележи веднага настъпилата ситуация, особено ако някой процеси работят. МЕТОДИ-редукция на графите-позволява да се определят процесите, който могат да завършат,и които остават в безизходна ситуация; когато се използват единични ресурси(всеки тип има един елемент)тново се използва вариант на графа за разпределение на ресурси, наречен wait-for.Той се получава от началният граф чрез отстраняване на възлите на ресурсите и прекарване на съответните ребра.По точно, ако ребро е насочено от процес А към Б това означава в резултатният граф, че А чака Б да освободи ресурсите, които му трябват.Такова ребро съществува в графа само, ако началният граф съдържа две ребра към един и същ ресурс – заявяващо от А и присвояващо към Б.
За да открие МХ системата трябва да поддържа такъв граф и периодично да стартира алгоритъма за търсене на цикъл, означаващ,че в системата съществува МХ.Алгоритъма изисква N*N операции при N възела в графа.

ВЪЗСТАНОВЯВАНЕ СЛЕД МХ

След като някой от алгоритмите определи,че съществува МХ най-просто е операторът ръчно да се заеме с МХ или системата да извърши възстановяването автоматично. Унищожават се един или повече процеси, за да прекъсне цикъла, или се отнемат ресурси от един или повече взаимно блокирани процеси.

За да се отстрани МХ чрез унищожаване на процеса:

1.Принудително завършване на всички процеси и стартиране на ОС.

2.Принудително завършване на всички процеси, намиращи се в МХ.

3.Принудително завършване на намиращите се в МХ процеси,но по един

Трябва да се отговори на следните 3 въпроса:

1.Кои ресурси и кои процеси трябва да бъдат избрани за преразпределение т.е. коя е жертвата?

Изборът зависи от стойността на усилието.Могат да се вземат предвид броят на ресурсите и времето за изпълнение, което е консумирал блокирания процес.

2.Какво трябва да се направи с процес, след като се отнемат ресурсите му?Тъй като няма ресурси той не може да продължи.Затова трябва да бъде върнат в някакво безопасно състояние и да се рестартира от там.Но как да се определи състоянието?Най-просто е процеса да се изхвърли и да се рестартира.Но много по ефективно е да се върне само толкова колкото е необходимо за да се излезе от мъртвата хватка.Това означава,че системата трябва да пази повече информация за състоянието на процесите.

3.Какво трябва да се направи, за да не възникне безкрайно отлагане, т.е. как да се гарантира,че ресурси няма да се отнемат от един и същ процес.

ПРОБЛЕМА НА БЕЗКРАЙНОТО ОТЛАГАНЕ-когато процесите чакат ОС да взема решение по разпределението на ресурсите, може да настъпи ситуация, при която изпълнението на процес се отлага неопределено дълго време-т.н.безкрайно отлагане. То може да доведе до неприятни последици=> в ОС трябва да се има в предвид не само ефективно , но и справедливо управление на ресурсите.

МХ ПРИ КОМУНИКАЦИЯ

Съобщенията могат да бъдат разглеждани като потребими ресурси. При комуникацията чрез съобщения също може да настъпи МХ.Примера показва как процесите си разменят съобщения чрез пощенски кутии.

Процесът А изпраща съобщение към процеса Б и чака отговор. Б използва от В за организиране на отговори му изпраща съобщение. В обаче иска да използва А за отговор в резултат на което са получава затворен цикъл и се появява МХ. За да се избегне мъртвата хватка комуникацията трябва да отговаря на определени правила. Един от подходите е йерархичната комуникация, при която процесите се разделят на класове.
В тази йерархия процесите от ниските нива (главните процеси) могат да изпращат съобщения на по-високите (подчинените процеси), които трябва в крайно време да изпратят отговор. Съобщенията се изпращат само в една посока, а отговорите в обратната посока. За да бъда предпазена йерархичната система от МХ: не трябва да се прави опит за изпращане на съобщения ( или отговор) без някой да го приеме в крайно време, както и за приемане на съобщение или отговор без някой наистина да го е изпратил.
5.Структура на ОС

 различни типове ОС. Работа на ОС: процеси се създават, променят състоянието си и се унищожават. По време на съществуването си имат нужда от общуване. Ресурсите непрекъснато се разпределят и освобождават. Интензивно се използват входно- изходните устройства и файловете с данни. Съществуват вътрешни процеси, изпълнявани от процесора и външни процеси, свързани с каналите за данни, периферните устройства и външната памет. Функциите на ОС са няколко групи:1)управление на процесите- създаване, унищожение, преминаване м/у с-ята, взаимодействие, планиране. 2)С-мата за управление на ресурсите се грижи за другите ресурси, като пространство на основна и вторична памети. 3) управлението на входа/изхода и файловете от данни.



Компонентите на ОС се извикват чрез прекъсвания, тъй че тя трябва да включва и стандартни програми за обработка на прекъсвания. Обръщенията към функциите на ОС могат да бъдат явни(чрез викане на тип прекъсване, например на супервайзор-SVC) или неявни(прекъсвания от таймер). Елементите на ОС могат да бъдат транзитни (временно се преместват в паметта и могат да се пазят в абсолютна или преместваема форма) и резидентни (постоянно намиращи се в оперативната памет-т.нар. ядро).

5.1 Ядро на ОС - включва базовия функционален набор, въз основа на който се строи останалата част на ОС и се осигурява работата на всички програми в системата. Не съществуват твърди правила за определянето на функциите. Едно общо правило може да е следното: Определя се кои функции могат да бъдат изпълнявани паралелно и независимо, и кои- последователно. Първите могат да се реализират подобно на потребителските процеси, а вторите да бъдат части на ядрото.

5.1.1 Примитиви и процеси Примитиви. Обикновено функциите на ядрото са примитиви. Те се извикват от процесите чрез подпрограма. Извикващата и извикваната програма се изпълняват строго последователно. Изпълнението на примитивите може да се разглежда като изпълнение на “сложни” команди в рамките на процеса. Примитивите не изискват дескриптор, и запис в опашката на готовите процеси, тъй като извикващите ги процеси могат да продължат работата си тогава, когато работата на извикания ги примитив е вече завършена. При този начин на извикване на примитивите лесно могат да се направят грешки и да се наруши целостта на системата. За това той е ефикасен в малките системи- в големите многопотребителски системи се прилага по рядко. При тях се вземат специални мерки за защита с използване на апаратни програмни средства. Типичен пример е системата VAX/VMS. Процесорът може да работи в четири режима на работа (ядро, организатор, супервайзор и потребител), които ОС използва, за да дефинира нива на защита, чрез ограничаване на възможностите на процесите за достъп до страниците на виртуалната памет. Най защитено и привилигировано е ниво ‘ядро’- в него се изпълняват драйверите на устройството, планиращата програма, управлението на страниците, като и привилигированите инструкции. Най малко защитени са потребителските процеси, изпълнявани в ниво ‘потребител’. Използването на специални команди от вида SVC е по- разпространен начин за извикване на примитиви. Изпълнението на тези команди предизвиква специално прекъсване означаващо заявка за обслужване. След анализа на причината за прекъсване, управлението се предава на съответния примитив, които изпълнява необходимите действия. Всяко прекъсване от вида SVC предизвиква преминаване на процесора в суперваизорен режим(режим на ядрото), в който са достъпни всички команди и средства. В потребителски режим са недостъпни привилегированите команди и затова потребителят трябва да се обръща за услуга към ОС. Командата SVC дава възможност на процеса да прави скок извън адресното пространство на потребителската програма, но този скок се контролира от ОС. В системи с преобразуване на адресите, това е и единствения начин за извикване на ОС, тъй като извикването по адрес в паметта, резервирана за ОС, се фиксира като нарушение на защитата. Командите от вида SVC, заедно с режима супервайзор/ потребител, практически са необходими за всички многопотребителски ОС. Тъи като примитивите са общи подпрограми, те трябва да бъдат оформени като повторновходими (реентрантни). В случаите когато се използват само общи данни, примитивите трябва да се реализират като критични секции- с програмни или технически средства. По време на изпълнение на примитивите се забраняват прекъсванията, за да се осигури непрекъснат интервал на работа. Използват се и команди TS. Когато се използват само локални данни, достатъчно е тези структури само да се превключват според това кой процес е извикал примитива. Описания начин на извикване на подпрограмите на ядрото позволява те да се разглеждат като подпрограми разширяващи функциите на процесор(разширена, абстрактна ,машина).

Процеси. Процес може да се обърне за услуга към системен процес на ОС, като изпрати съобщение, след което може да продължи или да се блокира. Обслужващия процес е зациклен и блокиран, докато не получи заявка. Ако такъв процес няма изходна точка и не може да се зацикля, тогава процесът, който иска да го използва, трябва най- напред да го създаде, а на края да го унищожи, чрез примитиви на ядрото. По време на изпълнението си процесите могат многократно да бъдат прекъсвани и активизирани, преминавайки през различни състояния и опашки, за разлика от примитива, който по принцип, веднъж извикан, винаги се изпълнява до край. Възможно е да има в опашката на готовите процеси няколко записа за един и същи системен процес, докато примитивите винаги са в едно копие. Извикването на процеси напомня извикването на примитиви. Основното различие е, че извикването на процес е по- сложно и се прилага за реализация на функции, които изискват много време за изпълнение и могат да се изпълняват паралелно с други процеси. От друга страна, възможно е от някои функции на ядрото да се образуват служебни процеси. Достатъчно е в ядрото да се реализиират служебни примитви и преобразуване на сигналите на прекъсване в синхронизиращи операции. Това е начин за намаляване на ядрото,при което неговите функции се трансформират в комуникиращи процеси.

Изпълнение на системни функции: някои функции на ОС се включват направо в процесите, които ги извикват. Но се дублира информация. В много ОС едновременно използваните функции се поместват на фиксирано място в паметта и се предоставя възможност за достъп до тези области. Важна е реентрантността на системните програми и на критичните секции в тях.

5.1.2Управление на процесите.

Блок за управление на процеса. Всеки процес се представя в ОС със своя блок за управление на процеса (дескриптор-пази се в ядрото). Блокът представлява структура от данни: -идентификация на процеса (име и вътрешен индентификатор); - сътояние на процеса (готов, изпълняван, блокиран); - регистри на процесора (брояч на командите, общи регистри, статус и др.); - възможности на процеса (режим на работа на процесора); - информация за връзките му с други процеси; - информация за планирането на процесора (например приоритет); - информация за ресурсите, които процесора владее или има право да получи - памет, устройства, отворени файлове и тн.; - статистическа информация (използвано време на процесора, време на престой, отчетен номер и тн.)

Примитиви за управление на процесите. В ОС непрекъснато се създават и унищожават процеси, затова трябва да има примитиви за създаване и унищожаване на процеси. Създаването включва индентификация, определяне на начален приоритет, отделяне на началните ресурси, формиране на блок за управление. Създадения процес се привежда в състояние на готовност, а ако е предвидено състояние на преустановяване – състояние “преустановен – готов”.Процес може да създаде един или няколко процеса чрез съответния примитив. Създаващия процес се нарича родител, а създадените процеси- потомци (деца). Когато един процес създава друг, е възможно: 1) родителят продължава изпълнението си паралелно с децата си, и 2) родителят чака завършването на всички свои деца. При това ресурсите могат да бъдат разпределени по следните начини: 1). Децата получават част от ресурсите, принадлежащи на родителя, 2) родител и деца съвместно използват всички ресурси (памет, файлове), и 3) родител и деца не делят ресурси (всеки получава ресурси директно от ОС). Процесът се унищожава, когато завърши, т.е. когато се изпълни и последният оператор. Освен това, процес (обикновенно родител) може да унищожи друг процес, когато той вече не е необходим или е привършил отделените му ресурси. Проблеми настъпват когато унищожените процеси са родители- тогава не се разрешава съществуването на децата. В такъв случай ОС ‘каскадно’ унищожава всичките му деца. В други системи не е така. При унищожаването на процес трябва да бъдат предвидени примитиви за блокиране, събуждане, преустановяване, възобновяване, получаване на атрибути на процес, изменение на атрибути на процес и примитиви за организиране на взаимодействието между процесите. Друга група са примитивите за организиране на взаимодействието между процесите.

Организация на процесите. Процесите могат да съществуват свързани или несвързани в някаква структура. 1)Ака няма структурна организация, компонент на ОС е отговорен за създаването или унищожаване на процеси. Когато се появи заявка за извършване на някаква работа, той създава процес за нейното изпълнение, а след като работата бъде свършена той го унищожава. Така всички процеси са “равни” в рамките на системата. Необходимите ресурси се отделят или за цялото задание наведнъж, или на стъпки, а след изпълнението на процеса те се освобождават. Подобно централизирано управление е доста услойнено, тъй като трябва да следи състоянието на всички процеси в системата. От друга страна, това допуска по-голяма свобода при разделението на работата в сравнение със структурната организация. 2)В повечето ОС процесите образуват някаква структура, при която не всички процеси са равни. Например процесите могат да образуват дървовидна структура. Процес може да създаде няколко нови процеса чрез съответния примитив. Всеки от новосъздадените процеси може на свой ред да създаде други и т.н. В система с дървовидна структура правилата за разпределение на ресурсите и управление могат да са повече или по- малко строги. Когато правилата са строги, при създаването си даден процес може да получи само ресурси принадлежащи на родителя. Само родителя може да контролира действията на децата си. Така винаги е ясно кой ресурс на кого принадлежи и кому принадлежи управлението.Почти всяка ОС има някаква структурност. 3)Някой системи са изградени на йерархични нива, при което по ниското ниво има по- малко права от пораждащотого. Накрая възможна е реализация на ОС, при която процеси не се създават и унищожават. Системата притежава определен брой процеси съществуващи постоянно. Те се създават при генерирането на системата.

Планиране на процесите. Избира се алгоритъм съгласно, който от много процеси, конкуриращи се за достъп до процесора, се избира един готов за изпълнение процес. За разпределение на процесора, м/у намиращите се в състояние на готовност процеси отговаря програмата за планиране на ниско ниво. Прието е планиращата програма да се разглейда като елемент на ядрото. Необходимост от планиране възниква, когато: процесът доброволно се откаже от процесора, системен механизъм блокира изпълнявания процес, блокиран процес става готов, настъпило е прекъсване от интервален таймер. Ако планиращата програма се извиква само в първия случай, това означава, че управлението в значителна степен е възложено на приложните процеси. Ако програмата се извиква във всички случай, управлението се извършва от системата.

5.1.3.Управление на ресурсите. Ресурсът е многократно използваем обект, който се заема и освобождава от процесите. Ресурсът се използва както за описание на компонентите на апаратната част, така и за съставните части на програмното осигуряване. Съобщенията, изпращани до процесите също могат да се разглеждат като клас ресурси. Процесите се блокират при неудовлетворена заявка за ресурс и могат да се опишат с едни и същи средства. С всеки клас ресурси са свързани процедури за разпределение и освобождаване на един или повече елементи на класа. Памет може да се разпредели и освободи с операциите: 1) Request (размер, начален адрес); 2) Release (размер, начален адрес). Когато процес изпрати заявка за разпределение на ресурс, той се блокира, докато не получи ресурса, без който не може да продължи развитието си. При освобождаването на ресурс, процес, очакващ този ресурс, става готов. Т.е. в стандартните програми за управление на ресурсите могат да включват примитиви за управление на процесите. Един механизъм за управление на ресурсите може да се изгради въз основа на семафорите на Дейкстра като се предвидят четири примитива: създай семафор на ресурс, унищожи семафор на ресурс, разпредели ресурс и освободи ресурс. Всеки клас ресурси се представя със семафор. Блокът за управление на семафора включва: индентификация на семафора и родителя му по време на определянето (създаването) на ресурса; описание на ресурса (брой и индентификация на достъпните единици ресурс); опашка от блокирани процеси, очакващи да получат ресурса; адрес на програмата за разпределение на ресурса; допълнително поле (за съхранение на допълнителни данни, текущо разпределение на ресурса и др.). Методите за управление на различните класове ресурси рязко се различават. Някои от ресурсите (процесор, диск) могат да бъдат съвместно използвани от процесите, а други- индивидуално (лента, данни, печатащо устройство), трети- и по двата начина (памет, кодови сегменти).

5.1.4Поддръжка на входа и изхода. Устройствата се заемат и се освобойдават за индидуално или за съвмстно използване. Основните операции над устройствата са: четене, запис и управление. За изпълнението на тези три операции ядрото трябва да извърши действията: 1) иницииране на входно изходните операции, и 2) обработка на прекъсванията по вход/ изход, постъпили от канала при завършване на операцията или при възникване на грешка. Заявката към ядрото за изпълнение на входно- изходната операция може да има формата: изпълни вход/изход(канал, канал на програма). Нейното провеждане в ядрото може да се опише със семафори по следният начин: Р (разпредели [канал]); Старт на входа/изхода (канал, канална програма); Р (край_на_операция [канал]); V (разпредели [канал]). Първата Р- операция включва извикване на програмата за разпределение на канала, а втората- очакване на прекъсване при завършване на входно- изходната операция. Това означава, че обработката на прекъсване включва операцията V (край_на_операция [канал]). Друг начин за реализация е заявката да се запише пред разпределителя на канала, след което управлението се връща в извикващата програма. Към всеки канал има включени няколко устройства и параметърът канал включва номер на канал и номер на устройството. Описаните по-горе функции се реализират чрез процеси за вход- изход. За всяко входно-изходно устройство се определя процес, който управлява работата на устройството. Входно-изходния процес напимер анализира заявката, извиква съответните разпределители на канали и контролери, определя каналната програма стартира входно-изходната операция, анализира прекъсванията по вход/изход. Има и други подходи. След като се организира вторичната памет, може да се реализира и управлението на файловете. Файловете трябва да могат да се създават и унищожават. За да се използва създаден файл, необходимо е той да се отвори. С файла могат да се извършват операциите четене, запис, управление. Файлът се освобождава, когато се затвори. Когато се организира справочник на файловете, също е необходимо някакво множество от операции.

5.1.5Поддържане на информацията. В ОС могат да бъдат предвидени специални операции за прехвърляне на информация м/у ОС и потребителски програми. Може да има примитиви за получаване (респ. установяване) на дата, текущо време, брой на потребителите в системата,версия на ОС, свободна памет или дисково устройство и т.н. Също така, ОС пази информация относно всички задания или процеси и има примитиви за нейното получаване или изменение. Такива са примитивите за получаване(установяване) на атрибутите на процесите, фаиловете и у-вата.

5.1.6.Обработка на прекъсванията. Прекъсванията са събития, при които се променя редът на изпълнение на командите от процесора. Биват: Външните прекъсвания се предизвикват от събития, които произхождат извън прекъсвания процес и са асинхронни спрямо него - могат да се причинят от таймера, от пулта за управление, от друг процесор. Основна функция на прекъсванията е синхронизацията на процесора с входа/изхода чрез сигнали за прекъсване, съобщава на процесора, че е настъпило изменение в състоянието на канал или у-во.

Вътрешните прекъсвания се предизвикват от събития, които са свързани с работата на процесора и са синхронни спрямо изпълняваните от него операции.. Такива са: изключителните ситуации (препълване, делене на 0 и др.), програмни грешки (изпълнение на забранени или несъществуващи команди, нарушаване на защитата на паметта и др.), апаратни грешки (например контрол по четност), команди за програмни прекъсвания от вида SVC. Обработката се извършва апаратно и програмно. Действия свързани с прекъсването: 1) запомняне характеристиката на прекъсването, 2) запомня се състоянието на прекъснатия процес, 3) определя се източникът на прекъсване- апаратно или програмно, 4) управлението се предава на съответната програма 5)след изпълнение на програмата се възобновява нормалната работа. Апаратните средства за определяне на източника на прекъсване често изработват вектор на прекъсването и го изпращат към процесора по специални шини. Векторът представлява указател към програма за обслужване. Обслужващата програма извършва необходимите действия или само изпраща съобщения към блокиран процес. Преходът от изпълнение на една програма към друга се нарича превключване на контекста. Проблем настъпва, когато са разрешени едновременни заявки за прекъсване от няколко източника. Тогава трябва да се въедат приоритети или приоритетн класове. Обслужването на приоритетите може да е програмно или апаратно. Следващия проблем е ако по време на обработка на прекъсване възникне нова заявка за прекъсване. Тогава трябва: 1) заявките се игнорират и никога не се обслужват, 2) заявките се запомнят и се изпълняват след завършване на текущото прекъсване, 3) ако заявката е с по- висок приоритет, програмата за обработка на прекъсване се прекъсва, започва се обработка на новото прекъсване, и след завършването и се продължава със старото прекъсване. Във всяка машина има различни възможности за забрана и разрешение на прекъсвания. Те могат да са няколко нива: забрана на всички прекъсвания, забрана чрез маска на някои прекъсвания и забрана на устройство да изпраща прекъсване. И накрая програмата за обработка на прекъсване трябва да възобнови нормалната работа- управлението може да бъде върнато: 1) на прекъснатия процес, 2) този процес може да е блокиран или записан в опашката на готовите процеси, а планиращата програма да избере процес за изпълнение от опашката. Когато размерите на обработващата програма са големи, тя може например да бъде разделена на две части: резидентна програма за обработка на първо ниво и нерезидентна от второ ниво.

5.2Потребителски интерфейс.

5.2.1Системни извиквания- предоставят интерфейса между изпълняваните програми и ОС. Когато обръщенията към ОС се викат с подпрограма, в документацията на ОС се дава описание на областите от данни и входни точки, заедно с реалните адреси. По- често обръщенията се извършват чрез инструкции от вида SVC, които водят до прекъсване и преминаване на процесора в привилигирован режим. Кодът, съпровождащ командата, определя функцията, която трябва да се изпълни. Използват се главно два метода за изпращане на параметрите към ОС- чрез регистри и чрез извикване съответната функция на ОС. След нейното изпълнение съществуват две възможности:- ОС да върне управлението на извикващия процес като осигури незабавен отговор след заявка за обслужване, но не се гарантира еднакво обслужване;-процесът да се нареди на опашката на готовите процеси и да извика планиращата програма. Възможно е средствата на ОС да се заявяват явно чрез непосредствено кодиране на инструкциите на асемблерен език. Някои системи позволяват да се правят системни извиквания директно от програми, написани на език от високо ниво. Системните извиквания могат да бъдат директно включени в програмата или индиректно чрез извикване на специални библиотечни процедури, които по време на изпълнение правят системните извиквания.

5.2.2Команден език на ОС. осъществява потребителския интерфейс на по- високо ниво и всеки потребител трябва да започне с него, за да установи връзка с ОС.  3 типа езици, които са обединени: 1)Потребителите- използват тези езици за предаване на ОС на всички спецификации и заявки, отнасящи се до техните работи, необходимите им ресурси и файлове. Най- простата и резпространена форма на командите е <име на команда><списък от параметри>. Потребителят трябва да има максимални възможности за управление на хода на изпълнението на необходимата му работа, а също така за указване на необходимите му ресурси. 2)При интерактивен режим потребителите водят диалог със системата и в интерес на потребителя е да се минимизира задаваната в командите информация. Много системи искат от потребителя само индентификация на командите. На потребителя не се дава да указва необходимите му ресурси. Вместо това се определя група от правила по използването на фиксирана среда. На командния език се съставя процедура- последователност от команди, която може да се разглежда като макроопределение. Процедурата се записва като файл с определено разширение. При извикването на процедурата се извършва заамяна на формалните параметри с действителни аргументи от макроизвикването. 3)Изпълнението на командите става с помощта на програма интерпретатор. Той следи терминала на потребителя, докато не бъде въведена поредната команда. В зависимост от начина на реализация командите могат да са два типа: вътрешни (интерпретатора съдържа кода за изпълнение на командата) и вънщшни (реализират команди чрез специални системни програми. За да се изпълни командата, интерпретаторът зарежда съответния файл в паметта, изпраща параметрите на командата и предава управлението.

5.3. СИСТЕМНИ ПРОГРАМИ

Всяка ОС се допълва с набор от системни програми, които създават удобна среда за разработката и изпълнението на програми, и решават някои общи проблеми. Тези програми могат да се разделят в следните групи:

-Езикови процесори (компилатори, интерпретатори, асемблери).

- Свързващи и зареждащи програми.

- Средства за настройка на програми.

- Редактори на текстови файлове.

- Помощни програми за манипулиране на файлове (копиране, преименуване, печат, извеждане на съдържание и др.).

- Приложни програми (система за управление бази от данни, генератор на Компилатори, пакет за статистически анализ, текстообработващи системи).



Представата за ОС за много потребители се определя от колекцията системни програми, които представляват за него средство за решаване на, конкретните проблеми. Тези потребители не се интересуват от системни извиквания или странична организация. Проблемът за създаване на такъв удобен

5.4.Структурна организация на ОС- системни подходи за проектиране на ОС.

5.4.1.Монолитни системи - Потребителските програми заявяват обслужване от ОС чрез системните извиквания -те се изпълняват и управлението се връща към потребителската програма. Тази организация предлага следната структура на ОС: 1) главна програма, която стартира съответната обслужваща процедура; 2) множество от обслужващи процедури, изпълняващи системните извиквания; 3) множество от помощни процедури, които са общи за обслужващите процедури.

5.4.2.Йерархична структура - разпределение на функциите на ОС по нива разположени едно над друго. Най- ниското ниво е свързано с апаратурата, а най- високото- с потребителя. Ниво 4: управление на заданията 1) приложни процеси; 2) интерпретатор на езика за управление. Ниво 3: управление на устройствата 1) установяване на състояние между логочески и физически устройства; 2) буферизация. Ниво2: връзка с оператора 1) диалог с оператора; 2) управление на конзолата. Ниво 1: страничен супервайзор 1) управление на паметта; 2) потдържане на виртуална памет. Ниво 0: ядро 1) управление на процесите; 2) синхронизация. Така за работа с устройствата се използва интерфейсът, поддържан от ниво 3. Аналогично, нива 3 и 4 за връзка с конзолата използват интерфейс 2. Освен това, всички процеси се нуждаят от услугите на управлението на паметта от ниво 1, което от своя страна се нуждае от семафорните примитиви и диспечера от ниво 0. Прекъсванията от таймера се свързват с ниво 0, а отнасящите се до вторичната памет- с ниво 1. Първата е, че на програмите отнасящи се към по високите нива, трябва да бъде предоставена възможност да ползват услугите на програмите, отнасящи се само към по- ниските нива. Другата е, че при прехода към по- ниските нива, съответстващите им функции трябва да се изпълняват все по- бързо. Всяко типично ниво включва структури от данни и процедури, които могат да се викат от по- горните нива, а то от своя страна може да вика тези от по- долните нива. В строгата иерархична структура е допустимо използването на функции само от по долните нива, като заявката трябва последователно да премине през всичките нива до достигане на желаното. Съществува и понятието прозрачна йерархия, при която от кое да е горно ниво е достъпно произволно по ниско ниво. По нататъшно обобщение на йерархичния подход е представено от системата MULTICS- тя е начин за изпълнение на ОС. MULTICS е изградена от концентрични пръстени, като вътрешните са по- привилегировани от външните. Когато процедура от външен пръстен иска да извика процедура от по- вътрешен пръстен, трябва да се изпълни прекъсване с проверка на валидност на параметрите, за да се разреши извикването.

5.4.3.Виртуални машини- разширено приложение на йерархичната структура. Възможна е работата едновременно на различни ОС на една реална машина.

На фигурата е показана общата структура на ОС. Всички четири ОС работят на една реална машина, благодарение на монитора на виртуалната машина. Програмите на най- ниско ниво на ОС работят с монитора на виртуалната машина. Всеки процесор има поне два режима: супервайзорен и потребителски. Монитор маже да работи в супервайзорен режим, защото тук той всъщност е ОС. Потребителите на отделните виртуални машини трябва да работят в потребителски режим. Следователно, трябва да се организира виртуален супервайзорен и виртуален потребителски режим. Когато ОС се опита да изпълни привилегирована команда, настъпва прекъсване, тъй като тя работи при потребителски режим на процесора. В следствие на това управлението се предава на монитора на виртуалната машина, който симулира изпълнението на командата и на края връща управлението на ОС. Мониторът се активизира и при прекъсване на процесора. Фактически мониторът трябва да извърши всички съществени функции на ОС. Той разпределя процесора между отделните виртуални машини и пази информация за състоянието им. Предимства: комплектна защита (виртуалните машини са изолирани една от друга) Ако някой потребител разруши системата, това се отразява само на собствената му машина.



5.4.4.Системно ядро-създаването на ядро, достатъчно универсално за създаването и модификацията на множество ОС. Този подход “От долу- нагоре” е приложен в ОС RC4000. Ядрото на RC4000 включва функции за динамично съсдаване и управление на процесите и тяхната комуникация. Изпълнението на програмите и входа/ изхода се управляват единно като коопериращи се процеси. Ядрото е единствената програма, която използва привилегировани команди и процесор в непрекъсваемо състояние.

На фигурата е показана структурата на системата. След инициализация паметта съдържа ядрото и вътрешен процес S, който е основната ОС. При заявка от терминалите S може да създава процеси A,B,C,… те от своя страна също могат да образуват процеси и т.н. Всички процедури, които се извършват в привилегировано състояние, са реализирани в ядрото, там е и диспечерът. Тъй като главната разлика между ОС и потребителските процеси е в правата, проблемът е решен с йерархията на процесите. Процесът – родител напълно управлява своите потомци, като може да модифицира, преустановява, възобновява, унищожава процеси, но само свойте потомци. Всеки процес обаче може да комуникира с всички останали и да получава квант процесорно време без оглед на йерархията. Структурата на известната система UNIX също се базира на принципа на ядрото. Тя се състои от две части: ядро и системни програми. Ядрото е постоянно резидентно в паметта и работи в привилегирован режим. То съдържа програми и управляващи структури от данни, реализиращи функциите на ОС по управлението на процесите и ресурсите. Системните програми определят потребителския интерфейс, оформени са като процеси и работят в потребителски режим. От своя страна, ядрото е изградено йерархично - отдолу лежат машинно – зависимите модули, а отгоре – машинно – независимите.



5.4.5.Модел “клиент – сървър”- премества част от системния код в по високите нива, оставяйки минимално по размер ядро. Обикновенно по голяма част от функциите на ОС се реализират като потребителски процеси. Когато му е необходимо обслужване от ОС, потребителският процес (наричан процес – клиент) изпраща заявка към процес – сървър, които изпълнява заявката и връща отговор. В този модел ядрото осигурява само комуникацията между процесите.

ОС е разделена на части, всяка изпълняваща някаква нейна функция. Отделните части са малки, лесно се управляват и се изпълняват като процеси в потребителски режим, т.е. нямат директен достъп до апаратурата и при повреда на отделен сървър не пропада цялата ОС. Описаният модел, в които ядрото само разменя съобщения, не е много реален, но си има своите предимства.



5.5.Реализация на ОС. Първите ОС са проектирани без някакъв систематичен подход, и са програмирани на асемблерен език. Конструкторите на ОС проявяват интерес към езиците от високо ниво. Предимството от използването им е: програмирането е по бързо и компактно, програмите са по - лесни за разбиране и настройка. Недостатък - скоростта и обемът на паметта. От друга страна, твърде малка част от кода на ОС е чувствителна към скоростта на изпълнение – такива са процедурите диспечер, планиращите програми на процесора и на паметта. След като бъде написана и настроена ОС, тесните места могат да бъдат заменени.

5.6.Генерация на системата.При проектиране на ОС обикновено се предполага, че те ще работят на машини, които могат да се разполагат на различни места с различна конфигурация на устройствата. Системата трябва да бъде конфигурирана или генерирана за всяко специфично място. Процесът е известен като генерация на системата. За да се генерира система е необходима специална програма. Програмата чете от файл или изисква от оператора информация за специфичната конфигурация на машината: -Какъв централен процесор е използван и какви допълнителни възможности са инсталирани. – Какъв обем памет е на разположение – някои системи сами установяват този параметър. – Какви устройства са на разположение. Системата трябва да знае как да адресира всяко устройство, кой е векторъ му на прекъсване, тип, модел и др. специфични характеристики. – Кой опции на ОС се желаят или какви стойности на параметрите да се използват. Тази информация може да бъде използвана по различни начини. 1) за модификация на първичния текст на ОС, след което ОС се компилира. 2)за създаване на таблици и избор на модули от библиотека. Тези модули трябва да се свържат, за да формират ОС. Генерацията е по – бърза, но може да доведе до по- обща система, отколкото в дейстителност е необходима. 3) за създ. на система , изцяло се управлявана от таблици. Генерацията на системата се свежда до създаване на таблици за описание на системата.

5.7.Начално зареждане на ОС. При включването на компютъра в паметта няма нито една програма, респективно тя съдържа само ROM- резидентни програми на ОС. Поставя се въпроса как да се пусне машината да заработи. Началното зареждане може да се извърши по няколко начина. Възможно е да се възложи на оператора да въведе в паметта кода на малка абсолютно зареждаща програма с помоща на ключове от пулта. Тази процедура е деудобна и незащитена от грешки. Друго решение е програмата за начално зареждане да бъде записана в постоянна паметт и при натискане на бутон за старт на системата, управлението на процесора се предава в нейната входна точка. Неудобството на този подход се състой в трудното модифициране на програмата. Междинно решение е машината да има вградени апаратни средства, които позволяват да се прочете запис с фиксирана дължина от фиксирана област на диск във фиксирано място на паметта. Конкртетното усройство може да се въведе от пулта. След като записът, предстаавляващ програмата за начално зареждане,се прочете в паметта, управлението се предава към началото му.
6. Управление на процесора.

Мултипрограмирането и времеделението позволяват компютърната система да се използва съвместно от множество потребители. Това води до недостатъчност на ресурсите като процесор, канал, оперативна памет, за протичането на всички процеси. Затова те трябва да бъдат разпределяни за съвместното им ползване то съществуващите процеси в системата. Процесорът е най-важния ресурс във всяка система, подлежащ на разпределение. Процесите или го заемат последователно до окончателното си завършване, или редувайки се на кратки интервали от време. Планирането на използването на процесора от различните процеси в ОС се извършва на две или три нива. Затова разглеждаме най-известните подходи.



6.1. Планиране на високо ниво- Планирането на високо ниво е свързано предимно с пакетния режим на работа. Изпълнява се от системен механизъм, който избира задание от множество постъпили в системата задания, създава процес за неговото изпълнение и го записва в опашката за обслужване от процесора.

6.1.1. Планиране в пакетните системи:
Програмата за системен вход чете пакета задания от системното устройство и формира вътрешна системна опашка от
задания. Едновременно с четенето се интерпретират операторите на езика за управление и се създават съответни управляващи блокове и таблици. Те служат за изходна информация при планирането.

Програмата за планиране на високо ниво преглежда опашката и избира задание за изпълнение, отчитащо текущото състояние и свойствата на различните процеси в с-мата. Планиращата програма управлява нивото на мултипрограмиране(броя на процесите в паметта). Когато то е стабилно, средните скорости на пристигане и завършване на заданията са еднакви. Необходимо е също да се направи максимално добър подбор на заданията, за да бъде мултипрограмната смес балансирана(да бъдат натоварени всички компоненти на системата).

Избор на задание: Решението за избор се взима в зависимост от възприетата от ОС дисциплина на обслужване, което се определя чрез отчитане на относителен приоритет или заданията се обслужват по реда на постъпване. Възможно е създаването на клас от високоприоритетни задания, които получават необходимите им ресурси преди останалите. Тук е важно да се определи кои задания да бъдат включени в класа. В много системи е възприето преимуществено обслужване на кратките задания, в други- приоритетните класове се определят въз основа на интензитета на използване на системните ресурси. Недостатъка на второто е, че отчита важността на заданието на потребителя. Често се дава и възможност за параметрично регулиране на дисциплината за обслужване.

Отделяне на ресурси на етапа на планиране: Обикновено планиращата програма не се занимава с разпределението на процесорното време и каналите за данни, а разпределя входно-изходните устройства, файловете от данни, областите на паметта. Функциите за планиране и разпределение на ресурси са обединени и разпределението на ресурси се извършва на етапа на предварителната обработка на заданията. Предимството му е, че осигурява нормално обслужване на заданията, докато недостатъка, че заданията чакат за получаването на необходимите им ресурси.

Затова се използва етапното разпределение на ресурси. Всички ресурси се разделят на класове и пред всеки клас се образува опашка. По този начин ресурсите се получават постепенно, тъй като не е нужно всички ресурси да бъдат достъпни едновременно. На заданията се дават ресурси от даден клас и след като ги получат, те се записват в опашката на следващия клас. Недостатъка на този метод е че заданията могат да задържат ресурси, намирайки се в състояние на очакване в някоя от опашките.



Може да се приложи друг начин за разпределение на ресурсите- динамично изменение на приоритета на заданията. При него приоритетът на заданието се увеличава постепенно при всеки неуспешен опит да получи ресурс(т.е.когато заданието се разглежда, но не се избира). Може да се установи гранична стойност на приоритета и, когато дадено задание я достигне, разпределението на ресурси се прекратява, докато не се обслужи заданието. Този метод предпазва от предаване на освобождаващите се ресусрси на кратките задания и позволява да се натрупват ресурси. Подобен на този подход е когато приоритета се увеличава с времето.

Отделяне на ресурси по време на изпълнение: избраното задание получава ресурси едва след като се пусне за изпълнение. Това дава възможност на заданието да участва в спора за ресурси. Така системата може да преразпределя освобождаващите се ресурси динамично.

Комбинирани методи: ресурсите да могат да се разпределят на класове и едновременно с това на различни етапи.

Единица програмна работа: В някои ОС стъпката отговаря на изпълнението на една програма и разпределението на ресурсите може да се осъществи, като на ниво задание, така и на ниво стъпка.

Завършване на задание: Обикновено планиращата програма изпълнява и функциите, свързани със завършването на заданието. Когато пакетен процес завърши, ресурсите му се освобождават, той се унищожава и управлението се предава на планиращата програма. Тя унищожава блоковете за управление на заданието, изважда го от опашката на заданията и формира изходна опашка с данните за печат. Заданието се привежда в състояние привършване, където преди да напусне системата, чака печат на резултатите. Програмата определя дали са се натрупали достатъчно ресурси, за да бъде избрано следващо задание. В много от ОС функциите на системния вход/изход и планирането са обединени в един компонент.



Сподели с приятели:
1   2   3   4   5   6   7   8




©obuch.info 2024
отнасят до администрацията

    Начална страница