Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_лекция.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.49 Mб
Скачать

Средства взаимодействия и синхронизации процессов

Категории обмена информации:

  1. Сигнальный - передается минимальное количество данных, используется для извещения о наступлении события. Степень воздействия на поведение процессов получателя – минимальна.

  2. Канальные средства – взаимодействие происходит через линии связи, предоставленные ОС. Объем данных зависит от пропускной способности линий связи. Степень воздействия на получателя прямо пропорционально количеству получаемой информации.

  3. Разделяемая память – это область АП, выделенная ОС для совместного использования. Наиболее быстрый способ

При установлении связи различают разные способы адресации:

  1. Прямая адресация – взаимодействующие процессы непосредственно обращаются друг к другу, явно указывая имя или номер процесса, устанавливается автоматически. Может быть симметричной (если оба указывают имена или номера) и асимметричной (когда один процесс явно указывает имя партнера, а другой рассматривает в этом качестве любой процесс системы).

  2. Непрямая адресация – данные помещаются в промежуточный объект хранения, имеющий свой адрес. Здесь необходимо знать только объекты хранения, файлы.

Количество процессов, которое может быть одновременно ассоциировано с конкретным средством связи, называется валентностью этого средства связи. При прямой адресации – в основном валентность 1-2, а при непрямой – больше.

Связь может быть однонаправленной (симплексной) и двунаправленной (дуплексной), а так же полудуплексной. Адресация не имеет отношения к типу связи.

Синхронизация процессов

Часть программы, в которой осуществляется доступ к разделяемому ресурсу, называется критической секцией. Для исключения «эффекта гонок» по отношению к ресурсу, необходимо, что бы в каждый момент времени к критической секции, связанной с этим ресурсом, находился только один процесс (взаимное исключение).

С каждым ресурсом связывается двоичная переменная, принимающая значения 1 – если ресурс свободен, и 0 – если занят.

Алгоритм работы секции

К высоко уровненным средствам синхронизации относятся семафоры.

Семафор (S) - это неотрицательная целая переменная, над которой возможны два вида операций.

  • P(S) – уменьшает S на единицу, если это возможно. Если нет – то процесс, вызвавший P-операцию ждёт пока не сможет уменьшить S.

  • V(S) – увеличивает S на единицу одним неделимым действием.

Когда семафор S принимает значение только 0 или 1, он превращается в блокирующую переменную.

Пример:

Буферный пул состоит из N буферов, по одной записи в каждом. Используется процесс-писатель и процесс-читатель.

Семафора:

e – число пустых буферов

f – число заполненных буферов

b – организация взаимного исключения

int N =256;

int e=N, f=0, b=1;

void Writer() //процесс-писатель

{

while(1)

{

PrepareNextRecord();

P(e); //уменьшить число свободных

P(b); //войти в секцию

AddToBuffer();

V(b); //выйти из секции

V(f); //увеличить число заполненных

}

}

void Read()//процесс-читатель

{

while(1)

{

P(f); //уменьшить число занятых

P(b); //войти в секцию

GetFromBuffer();

V(b); //выйти из секции

V(e); //увеличить число свободных

ProcessRecord();

}

}

Типовые ситуации в использовании семафоров:

  1. Взаимное исключение на семафоре – используется двоичный семафор с начальным значением 1. Критические секции кодов всех процессов-участников начинаются с операцией P(S), заканчиваются V(S).

  2. Синхронизация на семафоре – используется двоичный семафор с начальным значением 0 (событие ещё не наступило). Процесс, анализирующий наступление события, выполняет операцию V(S), процесс ожидающий наступление события – P(S). Если наступление события ожидают несколько процессов, то каждый из них, выполнив операцию P(S), должен так же выполнить операцию V(S).

  3. Семафор как счётчик ресурсов. Для контроля N единиц ресурсов используется семафор S с начальным значением N. Выделение ресурсов сопровождается операцией P(S), освобождение – V(S).