Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на экзаменационные вопросы.doc
Скачиваний:
45
Добавлен:
01.05.2014
Размер:
888.32 Кб
Скачать

30. Понятие синхропримитива. Синхропримитивы низкого уровня

Синхропримитив – механизм реализации конкретного протокола взаимодействующих асинхронных процессов. Низкого уровня: семафор, сигналы, буфер фифо. Семафоры традиционно использовались для синхронизации процессов, обращающихся к разделяемым данным. Каждый процесс должен исключать для всех других процессов возможность одновременно с ним обращаться к этим данным (взаимоисключение). Когда процесс обращается к разделяемым данным, говорят, что он находится в своем критическом участке. Для решения задачи синхронизации необходимо, в случае если один процесс находится в критическом участке, исключить возможность вхождения для других процессов в их критические участки. Хотя бы для тех, которые обращаются к тем же самым разделяемым данным. Когда процесс выходит из своего критического участка, то одному из остальных процессов, ожидающих входа в свои критические участки, должно быть разрешено продолжить работу. Процессы должны как можно быстрее проходить свои критические участки и не должны в этот период блокироваться. Если процесс, находящийся в своем критическом участке, завершается (возможно, аварийно), то необходимо, чтобы некоторый другой процесс мог отменить режим взаимоисключения, предоставляя другим процессам возможность продолжить выполнение и войти в свои критические участки. Семафор- это защищенная переменная, значение которой можно опрашивать и менять только при помощи специальных операцийwaitиsignalи операции инициализацииinit. Двоичные семафоры могут принимать только значения 0 и 1. Семафоры со счетчиками могут принимать неотрицательные целые значения. Операцияwait(s)над семафоромsсостоит в следующем: еслиs > 0тоs:=s-1иначе (ожидать наs) а операцияsignal(s)заключается в том, что: если (имеются процессы, которые ожидают наs) то (разрешить одному из них продолжить работу) иначеs:=s+1Операции являются неделимыми. Критические участки процессов обрамляются операциямиwait(s)иsignal(s).Сигналы асинхронно меняют ход выполнения задачи. Любая задача или процедура обслуживания прерываний может "выставить" (или послать) сигнал определенной задаче. Задача, получившая сигнал, немедленно изменяет ход выполнения: вызывается специальный "обработчик сигналов", связанный с данной задачей. Обработчик сигнала - это пользовательская процедура, связанная с конкретным сигналом и выполняющая некоторые действия всякий раз, когда поступает этот сигнал. Механизм сигналов лучше всего применять для обработки ошибок и исключительных ситуаций, нежели как общее средство коммуникации между задачами.Именованному программному каналу (FIFO)обязательно соответствует элемент некоторого каталога и даже собственный i-узел. Другими словами, именованный программный канал выглядит как обычный файл, но не содержащий никаких данных до тех пор, пока некоторый процесс не выполнит в него запись. После того, как некоторый другой процесс прочитает записанные в канал байты, этот файл снова становится пустым. В отличие от неименованных программных каналов, именованные программные каналы могут использоваться для связи любых процессов (т.е. не обязательно процессов, входящих в одну иерархию родства). Интерфейс именованного программного канала практически полностью совпадает с интерфейсом обычного файла (включая системные вызовыopenиclose), хотя, конечно, необходимо учитывать, что поведение канала отличается от поведения файла.