Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_модуль1.doc
Скачиваний:
10
Добавлен:
25.08.2019
Размер:
276.48 Кб
Скачать

Взаимодействие процессов и потоков

В многозадачных ОС возникает необходимость взаимодействия процессов между собой.

Цели взаимодействия процессов (Interprocess communication):

  1. передача информации от одного процесса другому.

  2. контроль над деятельностью процессов (исключение состязаний, когда два процесса стремятся завладеть одним ресурсом, например памятью).

  3. синхронизация процессов (например, один поставляет данные, другой печатает. Тогда печатающий процесс должен подождать, пока не поступят данные от первого процесса).

Последние две проблемы касаются и потоков.

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

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

Состояние состязания

В некоторых ОС процессы, работающие совместно, могут сообща использовать некое общее хранилище данных. Каждый из процессов может читать оттуда данные и писать их. Это может быть общий участок ОЗУ или файл общего доступа. Пример: спулер печати. Если процессу пользователя нужно распечатать файл, он помещает его в каталог спулера. Другой процесс, демон печати, периодически проверяет наличие файлов в каталоге, печатает их и удаляет имя из каталога.

Пусть каталог спулера использует две переменные: in, указывающую на следующий свободный фрагмент каталога, и out, указывающую на следующий файл для печати. Пусть два процесса почти одновременно решили послать файл на печать. Пусть очередной свободный фрагмент каталога – 7. Процесс А считал состояние переменной in и сохранил его в локальной переменной. В это время происходит прерывание по таймеру, и ЦП передает управление процессу Б. Процесс Б считал состояние переменной in, заменил его на 8, поместил свой файл в каталог и продолжает заниматься своими делами. Процесс А продолжает с того места, на котором он остановился. Он заменяет in тоже на 8 и записывает в 7-ой сегмент имя своего файла, затирая имя из процесса Б. Внешне все благополучно, но файл процесса Б никогда не будет напечатан.

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

Критические области

НЕразделяемые данные – данные, которые используются процессами в монопольном режиме. Это значит, что ими разрешено пользоваться только одному процессу.

Взаимоисключение – механизм монопольного обращения к данным.

Критическая область - состояние процесса, обратившегося к НЕразделяемым данным.

Если завершение процесса происходит в этой области, то ОС снимает режим взаимоисключения чтобы другие процессы могли входить в свои критические области.

Условия, необходимые для совместной работы процессов:

  1. Процессы не должны одновременно находиться в критических областях.

  2. В программах не должно быть предположений о скорости и количестве процессоров.

  3. Процесс, находящийся вне критической области, не может блокировать другие процессы.

  4. Недопустима ситуация, когда процесс вечно ждет попадания в критическую область.