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

28. Взаимодействие процессов/потоков, взаимное исключение, синхронизация (базовые сведения)

Важнейшими задачами при разработке многозадачных и многопоточных систем, а также организации их функционирования являются:

– общее управление задачами и потоками;

– обмен данными между ними;

– обеспечение их бесконфликтного согласованного взаимодействия.

Возникающие сложности вытекают из таких отличий многозадачных систем, в частности, Win 32, как:

– асинхронное выполнение отдельных задач (процессов) и потоков, причем механизм управления им скрыт, как правило, от прикладной программы;

– разделенные и изолированные адресные пространства отдельных задач (процессов), что исключает простой совместный доступ к элементам данных.

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

Для того, чтобы система сохраняла управляемость, контроль за поведением задач и их взаимодействие осуществляется ее ядром, точнее, переключение задач выполняет планировщик, а за синхронизацию и обмен отвечают соответствующие модули межпроцессных интерфейсов. Прикладные программы могут лишь обращаться к системе с запросом того или иного управляющего действия. Напомним также, что в Win 32 "единицей" владения ресурсами является процесс, а единицей распределения процессорного времени – поток; упоминавшиеся выше нити (см. тему процессов и потоков) не вносят в данном случае существенной новизны.

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

Примечание. Под объектом в данном случае имеется в виду любое образование, над которым программа ("субъект") выполняет какие-либо действия: элементы данных, структуры, файлы и т.д. К понятию объекта как концепции в объектном и объектно-ориентированном программировании это отношения не имеет.

Т.о., могут быть выделены следующие "проблемные" ситуации:

– один и тот же объект должен использоваться несколькими программами, для чего необходим доступ к нему со стороны всех их;

– один и тот же объект используется несколькими программами, но требуется устранить возможные "накладки" и некорректности одновременного (и заранее не предсказуемого) доступа.

В первом случае приходится говорить об обмене данными (объектами), во втором – об организации совместного использования этих данных. Более строго, выделяются следующие 3 основных задачи.

1. Межпроцессный обмен – передача информации (объектов данных) между процессами.

2. Задача синхронизации – определение моментов активизации отдельных задач, имея в виду обеспечение эффективного по ряду критериев функционирования как отдельных задач, так и системы в целом.

3. Задача исключения – предотвращение одновременного и, как следствие, некорректного использования ресурсов, для которых такое использование недопустимо.

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

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

Ниже рассматриваются в основном механизмы взаимодействия, предлагаемые Win 32 API.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]