Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Необходимость и принципы организации синхронизации в вычислительных системах
Синхронизация часто необходима в мультизадачных системах. В операционных системах существует два понятия, имеющие отношения к мультизадачности. Это процессы и задачи (потоки). Процесс создается (операционной системой) когда программа загружается в память для выполнения. Сразу после запуска процесса создается одна задача (поток, thread). Поток или задача – это фрагмент кода процесса (приложения), который может выполняться автономно и независимо от других потоков в рамках одного процесса. Значит, в операционной системе с одной стороны могут работать одновременно несколько процессов и с другой – в рамках каждого процесса могут параллельно работать несколько потоков (задач). Пользователь запускает процесс, загрузив программу в оперативную память, но не может запустить поток, запуск потоков выполняется только внутри процессов. Организация программных комплексов, состоящих из нескольких процессов или потоков, неминуемо приводит к синхронизации автономно выполняющихся фрагментов программ. Какие же вопросы рассматривает синхронизации, в чем заключается синхронизация задач? Если отвечать кратко, то синхронизация задач заключается в том, что некоторые задачи должны приостанавливать свое выполнение до тех пор, пока не произойдут те или иные события, связанные с другими задачами. Например, могут быть следующие ситуации: - сообщение одному потоку о завершении работы другого; - блокировка потока при обращении его к данным, если с этими данными работает другой поток; - наложение ограничений на количество потоков, работающих с одним ресурсом. Синхронизация процессов и связанных с ними потоков основана на двух моментах. 1. В операционной системе существуют так называемые объекты синхронизации, к которым относятся как сами процессы и потоки, так и программные средства, специально созданные для целей синхронизации: - критические секции; - мьютексы; - события; - семафоры. Объекты синхронизации имеют два состояния – свободное, сигнальное, отмеченное или занятое, несигнальное, неотмеченное. Причем, занятое состояние используется для запрета некоторых программных действий, свободное же состояние снимает запрет и разрешает эти действия. Существуют специальные функции для работы с объектами синхронизации, которые могут изменять состояние синхронизирующего объекта. 2. Анализ состояния объекта осуществляется в операционных системах с помощью функций: - Wait() для операционной системы Unix - WaitForSingleObject() и WaitForMultipleObject() для Windows Результат работы этих функций одинаков. Они останавливают работу потока (блокируют, переводят в состояние ожидания) из которого они были вызваны, если анализируемый объект синхронизации находился в занятом состоянии, и разрешают потоку дальнейшее выполнение, как только объект освобождается. Функция WaitForSingleObject() анализирует состояние одного объекта синхронизации, а функция WaitForMultipleObject() анализирует состояние группы объектов. Перевод потока в состояние ожидания («усыпление» потока) является высокоэффективной системной операцией, почти не требующей процессорного времени. Пока один или несколько потоков «спят» в ожидании наступления некоторого события остальные активные потоки забирают себе все процессорное время. В принципе, ожидание другого потока в рамках одного процесса можно осуществить, не прибегая к средствам синхронизации, например, с помощью глобальной переменной. В этом случае, поток, окончание работы которого ожидают, в конце работы должен изменить содержимое этой переменной. Поток, ожидающий окончания работы другого потока, должен в цикле опрашивать содержимое глобальной переменной. Очевидный недостаток – ожидающий поток тратит кванты процессорного времени и, как следствие, происходит снижение производительности системы. |
Последнее изменение этой страницы: 2019-03-22; Просмотров: 400; Нарушение авторского права страницы