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

Процессам часто нужно взаимодействовать друг с другом, например, один процесс может передавать данные другому процессу, или несколько процессов могут обрабатывать данные из общего файла. Во всех этих случаях возникает проблема синхронизации процессов, которая может решаться приостановкой и активизацией процессов, организацией очередей, блокированием и освобождением ресурсов. Пренебрежение вопросами синхронизации процессов может привести к их неправильной работе. Ситуации, когда два или более процессов обрабатывают разделяемые данные, и конечный результат зависит от соотношения скоростей процессов, называются гонками. Критическая секция – это часть программы, в которой осуществляется доступ к разделяемым данным. Чтобы исключить эффект гонок по отношению к некоторому ресурсу, необходимо обеспечить, чтобы в каждый момент в критической секции, связанной с этим ресурсом, находился максимум один процесс. Этот прием называют взаимным исключением. Способ обеспечить взаимное исключение-использование блокирующих переменных. С каждым разделяемым ресурсом связывается двоичная переменная, которая принимает значение 1, если ресурс свободен, и значение 0, если ресурс занят. Недостат: в течение времени, когда один процесс находится в критической секции, другой процесс, которому требуется тот же ресурс, будет выполнять рутинные действия по опросу блокирующей переменной, бесполезно тратя процессорное время. Для устранения таких ситуаций может быть использован так называемый аппарат событий. С помощью этого средства могут решаться не только проблемы взаимного исключения, но и более общие задачи синхронизации процессов. В разных ОС аппарат событий реализуется по-своему, но в любом случае используются системные функции аналогичного назначения. Правильная кооперация процессов в вычислительной системе является важным фактором надежности ее работы и предотвращения тупиковых ситуаций.

Приоритеты в вычислит. сист.

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

Диспетчеризация процессов

Для управления процессами в многозадачной системе необходима их диспетчеризация. Методы диспетчеризации: FIFO; карусель; адаптивный. Каждый процесс в системе может выполняться, используя любой из этих методов. Они действуют применительно к каждому отдельному процессу, а не ко всем процессам на узле. Они применимы, только когда два или более процесса с одинаковым приоритетом находятся в состоянии READY. Если процесс с более высоким приоритетом переходит в состояние READY, то он немедленно вытесняет все процессы с более низким приоритетом. При FIFO процесс продолжает выполнение, пока не наступит момент, когда он: добровольно уступает управление; вытесняется процессом с более высоким приоритетом. Два процесса, которые выполняются с одним и тем же приоритетом, могут использовать метод FIFO для организации взаимоисключающего доступа к разделяемому (т.е. совместно используемому) ресурсу. Ни один из них не будет вытеснен другим во время своего выполнения. При карусельной диспетчеризации процесс продолжает выполнение, пока не наступит момент, когда он: добровольно уступает управление (т.е. блокируется); вытесняется процессом с более высоким приоритетом; использовал свой квант времени. Квант времени – это интервал времени, выделяемый каждому процессу. После того, как процесс использовал свой квант времени, управление передается следующему процессу, который находится в состоянии READY и имеет такой же уровень приоритета. При адаптивной диспетчеризации процесс ведет себя следующим образом: 1.Если процесс использовал свой квант времени, то его приоритет уменьшается на 1(снижение приоритета). 2.Если процесс блокируется, то ему возвращается первоначальное значение приоритета.