Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
все билеты.doc
Скачиваний:
34
Добавлен:
20.04.2019
Размер:
2.05 Mб
Скачать

6 Билет.

1)Средства синхронизации потоков на примере Windows nt & rtx (Критическая секция,mutex, семафор, shared memory, приоритеты, ...).

Синхронизация потоков системы PCNC с помощью объектов ядра Windows NT. Использование многопоточности требует решения таких проблем, как работа с разделяемой памятью, синхронизация потоков, работа с разделяемыми ресурсами (например, портами ввода-вывода). Решения строятся на использовании стандартных объектов ОС (критические секции, мютексы, таймеры, семафоры, события), большая часть из которых является объектами ядра. Формально потоки делятся на основные и порожденные от основных.

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

Использование критической секции в разделяемой памяти рассмотрим на примере интерпретатора и интерполятора. Интерпретатор интерпретирует кадр и записывает его в формате IPD (Interpolator Data) в кольцевой буфер. Интерполятор считывает кадр из буфера и интерполирует его. На этапе записи и считывания кольцевой буфер должен быть заблокирован, чтобы избежать чтения неполного кадра или перезаписи неполностью прочитанного. Для этой цели создается критическая секция и инициализируется, например, в главном потоке процесса. В обоих потоках защищаемый код обрамлен вызовом функций EnterCriticalSectionO и LeaveCriticalSectionO в начале и конце. Если передача управления осуществлена в критической секции, второй поток не сможет войти в нее и передаст управление первому потоку для выхода из критической секции.

Другим объектом синхронизации потоков служит мютекс(mutex), который позволяет синхронизировать потоки разных процессов. Рассмотрим пример синхронизации данных коммуникационной среды между процессами реального и машинного времени, передаваемых через разделяемую память. Мютекс-объект создается в коммуникационном потоке процесса реального времени с помощью функции CreateMutex(), которая сразу же возвращает описатель (handler) объекта. Win32-поток получает описатель мютекс-объекта с помощью функции CreateMutex() или OpenMutex(). Код в синхронизируемых потоках обрамлен функциями WaitForSingleObject() и ReleaseMutex() в начале и конце. Таким образом, блокируются попытки записи и считывания из разделяемой памяти соответственно коммуникационных потоков реального и машинного времени.

Семафор используют для управления ресурсами, например портами ввода-вывода в системе PCNC. Когда запрашивается ресурс, то ОС уменьшает содержимое счетчика ресурсов. Семафор создается с помощью функции CreateSemaphor(), в которой указано количество ресурсов, подлежащих мониторингу. Описатель семафора из другого потока создается с помощью той же функции или функции OpenSemaphor(). Синхронизация осуществляется в блоке, обрамленном функциями WaitForSingIeObject() и

ReleaseSemaphor(). В отличие от мютекса, освобождение которого возможно только занявшим его потоком, семафор может быть освобожден любым потоком.

Существует и другой объект ядра для синхронизации потоков - событие. В системах PCNC событие можно использовать, когда код инициализации системы или код выхода из ошибки выводится в отдельном потоке. Инициализирующий поток переводит объект-событие в состояние «занято» и приступает к своим операциям. В этот момент рабочий поток приостанавливает свое исполнение и ждет. По окончании инициализации поток инициализации возвращает объект-событие в состояние «свободно». Рабочий поток активизируется и продолжает свою работу. Использование события-объекта позволяет упростить диспетчеризацию процессов реального времени. Диспетчер построен на базе таймера. По сути, это отдельный поток с наивысшим приоритетом. При каждом срабатывании таймера вызывается его call-back функция, в которой реализована схема диспетчеризации. Согласно этой схеме управление потоками осуществляется путем изменения их приоритетов. На этом работа call-back функции таймера завершается. Останов и запуск процессов осуществляет сама ОС.

(СТРАНИЦА 207 Учебника Мартинова и Сосонкина Системы ЧПУ)

Пример – Лекция №8 Средства синхронизации потоков на прмере Windows NT.

Соседние файлы в предмете Системы управления