Паралелни процеси - взаимодействие

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

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

Коментари: