Операционные системы. Курс лекций

       

Барьеры


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

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

Задачи на межпроцессное взаимодействие.

Читатель- писатель. Варианты решения:

1.         Решение с помощью передачи сообщений. Предположим, что вес сообщения имеют одинаковый размер и все сообщения которые посланы, но еще не получены автоматически помещаются ОС в буфер. При решении этой задачи используются N сообщений. Читатель начинает с того, что посылает писателю N пустых сообщений. Как только у писателя оказывается элемент данных, который он может предоставить читателю, он берет пустое сообщение и отправляет полное. Т.о. общее число сообщений в системе постоянно и их можно хранить в заданном участке памяти. Если писатель работает быстрее читателя, то все сообщение будут ожидать читатель в заполненном виде, при этом писатель блокируется в ожидании пустого сообщения.  Если читатель работает быстрее писателя, то все сообщение будут ожидать писателя в пустом виде, при этом читатель блокируется в ожидании заполненного сообщения.

2.         При использовании почтовых ящиков в задаче читатель- писатель оба они создадут почтовые ящики достаточно большие, что бы хранить N сообщений. Писатель будет посылать сообщения с данными в почтовый ящик читателя, а читатель  будет посылать пустые сообщения в почтовый ящик писателя. При использовании почтовых ящиков необходимо использовать метод буферизации, что бы хранить сообщения посланные читателю, но еще не получены.

3.         Использование семафоров.
Введем два семафора:

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


  • f- количество заполненных буферов.


  • N- общее количество буферов

    p- SemSignal

    v- SemWait

    В исходном состоянии e= N; f=0



    4.         Неправильное решение. Поток писатель. Выполняется p(e), потом проверяется, доступен p(f) ли критический ресурс, если все нормально, то выполняется запись и v(e),v(f). Поток читатель. p(f)
    p
    (e)
    v
    (e),v(e).

     


    Содержание раздела