Необходимость синхронизации при работе с общими ресурсами. Способы синхронизации.



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

Подсистема управления процессами и потоками обеспечивает процессы необходимыми ресурсами. ОС поддерживает в памяти специальные информационные структуры, в которые записывает, какие ресурсы выделены каждому процессу. Она может назначить процессу ресурсы в единоличное пользование или в совместное пользование с другими процессами. Некоторые из ресурсов выделяются процессу при его создании, а некоторые — динамически по запросам во время выполнения. Ресурсы могут быть приписаны процессу на все время его жизни или только на определенный период. Подсистема управления процессами взаимодействует с другими подсистемами ОС, ответственными за управление ресурсами, такими как подсистема управления памятью, подсистема ввода-вывода, файловая система.

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

Каждый раз, когда процесс завершается, ОС предпринимает шаги, чтобы «зачистить следы» его пребывания в системе. Подсистема управления процессами закрывает все файлы, с которыми работал процесс, освобождает области оперативной памяти, отведенные под коды, данные и системные информационные структуры процесса. Выполняется коррекция всевозможных очередей ОС и списков ресурсов, в которых имелись ссылки на завершаемый процесс.

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

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

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

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

Способы синхронизации:

Ø Синхронизация. Семафор

       Семафор, как универсальный механизм синхронизации, был предложен Дейкстрой в 1965 году.

       Семафор – это объект операционной системы, состояние которого описывается целой неотрицательной величиной. Над семафором определены две операции:

ü Inc(S) (у Дейкстры – P(S)) – увеличить значение семафора S. v++;

ü Dec(S) (у Дейкстры – V(S)) – уменьшить значение семафора S.v--.

       Так как значение семафора не может быть отрицательным, операции Dec(S) может быть невозможна, если текущее значение равно нулю. В этом случае процесс, выдавший эту операцию, приостанавливается (переходит в состояние ожидания) до появления возможности сделать эту операцию. Эта возможность появится, если другой процесс сделает операцию Inc(S).

Семантика операций:

       Inc(S)

1. Если текущее значение больше нуля - S.v++

2. Если текущее значение равно нулю и очередь пуста - S.v++

3. Если текущее значение равно нулю и очередь не пуста – разблокируется первый процесс из очереди, значение остается нулевым.

       Dec(S)

1. Если текущее значение больше нуля - S.v--

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

Очень важное замечание:все операции с семафором –АТОМАРНЫЕ, т.е. всегда выполняются неразрывно.

Ø Мьютекс

Мьютекс (от английского термина Mutex: Mutual Exclusion) – это другой стандартный механизм синхронизации.

Основное назначение мьютекса – экранирование критического участка общего кода. Иногда его сравнивают с двоичным семафором, но механизм работы совершенно другой.

Над мьютексом определены две операции:

1.Lock() – захватить мьютекс;

2.Unlock() – освободить мьютекс.

Однако состояние мьютекса не сводится к занят/свободен, он помнит своего владельца. Т.е. состояние мьютекса:

ü Флаг занят/свободен (1/0);

ü Идентификатор процесса/потока владельца.

Lock():

1. Если мьютекс свободен – захватывается,

2. Если мьютекс занят – процесс переводится в состояние ожидания и ставиться в очередь.

Unlock():

1. Если запрос от текущего владельца и очередь пуста – мьютекс освобождается.

2. Если запрос от текущего владельца и очередь не пуста – мьютекс передается первому в очереди ожидающих

3. Если запрос не от текущего владельца – ошибка, запрос игнорируется.

Ø Рекурсивный мьютекс

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

Состояние рекурсивного мьютекса:

Ø Кратность занятости;

Ø Идентификатор процесса/потока владельца.

       Событие

       Событие(Event) – это средство синхронизации ОС (в Unix оно называется условной переменной). Его не следует путать с событиями в графическом пользовательском интерфейсе (MouseClick, KeyPressed и т.п.).

       Состояние процесса – on/off, true/false, up/down и т.п., то есть имеет два возможных состояния: включено или выключено.

Операции:

ü Set – установить в включено;

ü Reset – установить в выключено;

ü Wait – ожидать, когда событие будет включено.

Различают два вида событий:

Ручное – все операции делаются явно, включенное событие остается включенным, пока его не выключат. Все, ожидающие включения события процессы немедленно освобождаются при его включении.

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

Ø Критическая секция

Критическая секция – самое простое средство синхронизации. Она создается внутри процесса, однако контролируется операционной системой.

Для контрольной секции определены две операции:

ü Enter – войти в критическую секцию,

ü Leave – покинуть критическую секцию.

Так как критическая секция находится внутри процесса, она непригодна для синхронизации различных процессов, зато удобна для синхронизации ниток внутри процесса.

Механизмы синхронизации

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

Синхронизация процессов — приведение двух или нескольких процессов к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно.

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

Механизм синхронизации:

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

Ø Осуществляет координацию совместного функционирования речевых и переводческих механизмов во времени. Он включает в себя ряд уровней регулирования, различающихся степенью осознанности, а также объектами регулирования. Уровни: актуального опознавания, сознательного контроля, бессознательного контроля.

Основные механизмы синхронизации:

ü Семафоры;

ü Мониторы;

ü События,

ü Критическая секция.


Дата добавления: 2018-08-06; просмотров: 1752; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!