Ядро ОС – это та часть ОС, под управлением которой выполняются все операции, связанные с процессами. Одна из самых важных функций, реализованных в ядре – обработка прерываний, кроме того основные функции ядра: создание и удаление процессов, их переключение, синхронизация, поддержка операций ввода/вывода, работы файловой системы, поддержка механизма возврата при обращении к процедурам.
Процессы называются параллельными, если они существуют одновременно. Параллельные процессы могут работать совершенно независимо друг от друга или они могут быть асинхронными – т.е. им необходимо периодически синхронизироваться.
При выполнении параллельных процессов возможна ситуация, когда несколько процессов обращаются к разделяемым (общим) ресурсам. Когда процесс производит обращение к разделяемым данным, то говорят, что он находится в своем критическом участке. Тогда возникает ситуация, называемая взаимоисключением. Она предполагает следующие положения:
1.Процесс, который обращается к разделяемым данным находится в своем критическом участке.
2.Для всех остальных процессов не существует возможности вхождения в критические участки.
3.Процесс должен проходить критический участок как можно более быстро. ОС должна обеспечить исключение блокировки процесса, если он находится в своём критическом участке.
4.Критические участки должны быть запрограммированы и отлажены наиболее тщательно, чтобы не было зацикливания в критическом участке.
Для реализации механизма взаимоисключения существуют как программные, так и аппаратные средства.
К программным средствам относится алгоритм Деккера.
Для того, чтобы легче понять алгоритм Деккера, рассмотрим сначала два приближения к алгоритму, каждое из которых имеет свои недостатки.
Первая версия.
Program N1;
Procedure процесс1;
Begin
While истина do
Begin
While номерпроцесса=2 do;
Критическийучастокодин;
Номерпроцесса:=2;
Прочиеоператорыодин
End;
End;
Procedure процесс2;
Begin
While истина do
Begin
While номерпроцесса=1 do;
Критическийучастокодва;
Номерпроцесса:=1;
Прочиеоператорыдва
End;
End;
Begin
Номерпроцесса:=1;
Parbegin
Процесс1;
Процесс2;
Parend
End.
Parbegin и parend позволяют организовать параллельную работу процессов.
Недостатки первой версии.
1. Процессдва должен ждать, т.к. процессодин должен выполняться первым
2. Процессы должны входить и выходить из своих критических участков строго поочередно.
Вторая версия
Program N2;
Procedure процесс1;
Begin
While истина do
Begin
While П2внутри do;
П1внутри:=истина;
Критическийучастокодин;
П1внутри:=ложь;
Прочиеоператорыодин
End;
End;
Procedure процесс2;
Begin
While истина do
Begin
While П1внутри do;
П2внутри:=истина;
Критическийучастокодва;
П2внутри:=ложь;
Прочиеоператорыдва
End;
End;
Begin
П1внутри:=ложь;
П2внутри:=ложь;
Parbegin
Процесс1;
Процесс2;
Parend
End.
Недостаток второй версии.
Т.к. процесс1 и процесс2 – параллельные процессы, то они могут одновременно войти в критические участки.